- Marcar como nuevo
- Favorito
- Suscribir
- Silenciar
- Suscribirse a un feed RSS
- Resaltar
- Imprimir
- Denunciar
Buenas a todos,
Estoy intentando modificar el siguiente rutina para adaptarla a mi flujo de trabajo. Esta rutina encuentra bloques en el Model y los pasa al Layout de manera de hacer las presentaciones de forma automática.
Dejo el enlace original:
Esta rutina se creó para para una presentación que requería 2 viewports, uno del bloque en cuestión y otro con una vista mas alejada donde permitía ajustar el factor de escala.
Lo que necesito hacer es quitar la función del segundo viewport que no me interesa y cambiar la función de NO_OF_SHEETS por NEXT_SHEET es decir que en lugar de colocar el total de páginas coloque el nombre de la página siguiente que la toma del atributo MAPSHTNUM
Mis bloques van a estar siempre alineados en el eje X y espaciados una distancia fija por lo que el orden no depende del número de las páginas, que a veces pueden tener sufijos, sino que depende de la posición en el eje X.
(defun GridsToLayouts ( UseUndoMarks / GridLayer GridAttribute SourceLayout TitleBlockHeight KeyZoomFactor TitleBlockName TitleBlockSheetNumberAttribute TitleBlockTotalSheetsAttribute vl-GetAttributeValue ss i enam edata grids grid id previd ssvp1 vp1 vpno1 ssvp2 vp2 vbno2 ptmin ptmax) (vl-load-com) ;;;*SOME SETTINGS THAT CAN BE CUSTOMIZED (setq GridLayer "GRID") ;; Nombre de la capa de los bloques de la ventana gráfica (necesario) (setq GridAttribute "MAPSHTNUM") ;; Nombre del atributo de los bloques anteriores que indican el numero de pagina (necesario) (setq SourceLayout "REF") ;; nombre de la presentacion que se usa de plantilla (necesario) (setq TitleBlockHeight 86) ;; Altura del cajetin (setq KeyZoomFactor 0.5) ;(setq TitleBlockName "XXX_2") ;; nombre del bloque del cajetin ;(setq TitleBlockSheetNumberAttribute "SHEET_NO") ;; nombre del identificador del numero de paginas ;(setq TitleBlockTotalSheetsAttribute "NO_OF_SHEETS") ;; nombre del identificador del numero total de paginas (defun vl-GetAttributeValue ( blk tag ) (setq tag (strcase tag)) (vl-some '(lambda ( att ) (if (= tag (strcase (vla-get-tagstring att))) (vla-get-textstring att))) (vlax-invoke blk 'getattributes) ) ) (cond ((not (setq ss (ssget "x" (list (cons 0 "INSERT") (cons 8 GridLayer))))) (princ (strcat "\nNo grid blocks on layer '" GridLayer "' found.")) ) ((not (member SourceLayout (layoutlist))) (princ (strcat "\nSource layout '" SourceLayout "' not found.")) ) ((> (length (layoutlist)) 1) (princ (strcat "\nOnly layouts 'Model' and '" SourceLayout "' should exist.")) ) (T (setq i 0) (while (< i (sslength ss)) (setq edata (entget (setq enam (ssname ss i)))) (if (and (= (cdr (assoc 0 edata)) "INSERT") (setq attval (vl-GetAttributeValue (vlax-ename->vla-object (cdr (assoc -1 edata))) GridAttribute)) ) (setq grids (cons (cons attval enam) grids)) ) (setq i (1+ i)) ) (setq grids (vl-sort grids (function (lambda (e1 e2) (< (car e1) (car e2)))))) (if UseUndoMarks (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))) (if grids (princ "\nCreating layouts...") (princ "\nNo grids found...") ) (foreach grid grids (if grids (progn (setq id (car grid) enam (cdr grid)) (princ (strcat "\nCreating layout '" id "'... ")) (if (not (member id (layoutlist))) (command "._layout" "c" previd id) ) (command "._layout" "d" id "._pspace") (if (and (setq ssvp1 (ssget "x" (list (cons 0 "VIEWPORT") (cons -4 "*,>,*") (list 10 0 TitleBlockHeight 0)))) (setq ssvp2 (ssget "x" (list (cons 0 "VIEWPORT") (cons -4 "*,<,*") (list 10 0 TitleBlockHeight 0)))) ) (progn (vla-getboundingbox (vlax-ename->vla-object enam) 'ptmin 'ptmax) (setq vpno1 (cdr (assoc 69 (entget (setq vp1 (ssname ssvp1 0)))))) (setq vpno2 (cdr (assoc 69 (entget (setq vp2 (ssname ssvp2 0)))))) (command "._mspace") (setvar "CVPORT" vpno1) (vla-zoomwindow (vlax-get-acad-object) ptmin ptmax) (setvar "CVPORT" vpno2) (vla-zoomwindow (vlax-get-acad-object) ptmin ptmax) (vla-zoomscaled (vlax-get-acad-object) KeyZoomFactor acZoomScaledRelative) (command "._pspace") (vla-zoomextents (vlax-get-acad-object)) ) (princ (strcat "\nUnable to find the two vieports needed for layout " id)) ) (setq previd id) (if (= (length (layoutlist)) 255) (progn (princ "\nMaximum number of layouts met.") (setq grids nil) ) ) (vla-eval (vlax-get-acad-object) "DoEvents") ) ) ) (princ "\... GridsToLayouts finished.") (if UseUndoMarks (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)))) ) ) ) (defun C:GridsToLayouts nil (GridsToLayouts T) (princ))
Adjunto el ejemplo que necesito adaptar
Gracias,
Saludos.
@roherad916 para una mayor claridad @joaquim.moral ha editado el título original:
¡Resuelto! Ir a solución.