UN lisp que trabaje o actúe en varios dwg
3 participantes
Página 1 de 1.
UN lisp que trabaje o actúe en varios dwg
Hace poco se trató el tema de cómo aplicar un lisp , a varios dwg abiertos .
Recuerdo que se aplicaba la función VL-LOAD-ALL , pero no tuve la precaución de guardarlo.
Si alguien puede ayudar , quedaré agradecido.
Gabriel (Gabo)
Recuerdo que se aplicaba la función VL-LOAD-ALL , pero no tuve la precaución de guardarlo.
Si alguien puede ayudar , quedaré agradecido.
Gabriel (Gabo)
Re: UN lisp que trabaje o actúe en varios dwg
Hola hermano como estas.
De la pagina de hispacad encontré este link, pero son solo programas que los ejecutan.
La función que comentas solo carga los lisp, estuve probando para que se ejecutara de una vez pero no pude.
De la pagina de hispacad encontré este link, pero son solo programas que los ejecutan.
La función que comentas solo carga los lisp, estuve probando para que se ejecutara de una vez pero no pude.
- Código:
http://webcache.googleusercontent.com/search?q=cache:rn2MIOFPbqwJ:www.hispacad.com/foro/viewtopic.php%3Ft%3D21127+&cd=1&hl=es-419&ct=clnk&gl=ve
carlosmgilp- Mensajes : 149
Fecha de inscripción : 17/03/2016
Edad : 42
Localización : Venezuela
Re: UN lisp que trabaje o actúe en varios dwg
A ver Gabriel, creo que se trataba del siguiente ejemplo:
El post iba sobre como correr una rutina y guardar los achivos abiertos y yo proponía guardar en un archivo llamado prueba.lsp en una rúta del soporte de Autocad la siguiente rutina:
y luego desde el dibujo actual hacer:
Bueno, pues si lo haces con solo dos archivos, parece que funciona porque al abrilos se ejecuta la función dd, pero si en vez de eso intentas cargar algo así en el prueba.lsp:
pues eso no funciona como se puede apreciar y menos si lo intentas con mas de dos archivos abiertos.
A ver, falla el (vla-SendCommand ar "dd ") que no se ejecuta automáticamente y solo se ejecuta según vas abriendo y cerrando archivos para su comprobación ...
Bueno, la idea que yo he utilizado en alguna ocasión es utilizar el (vl-load-all "rutina.lsp") como una especie de acad.lsp
para que al cargar el lsp se autoejecute, es decir el archivo prueba debe contener algo así
y utilizarlos sobre archivos que aún no este cargado, mas o menos así
Al comprobar el (vla-SendCommand ar "dd ") con solo dos archivos y un lisp que solo operaba imprimiendo en la línea de comandos, me engañó el resultado ..
Este otro modo de operar funciona como si se cargara el acad.lsp, y ademas funciona para cualquier lisp con toda la lógica del mundo, lo que pasa es que a partir terminar de ejecutarse sobre la lista de archivos, se debería reiniciar autocad o borrar prueba.lsp para evitar que se siga ejecutando al abrir archivos nuevos.
Lo siento si he creado confusión, aunque también expuse que no estaba seguro que funcionara con todos los lisp.
Un saludo
El post iba sobre como correr una rutina y guardar los achivos abiertos y yo proponía guardar en un archivo llamado prueba.lsp en una rúta del soporte de Autocad la siguiente rutina:
- Código:
(defun c:dd()(print (getvar 'viewctr))(princ))
y luego desde el dibujo actual hacer:
- Código:
(progn
(vl-load-com)
(setq *acad* (vlax-get-acad-object)
acad_doc (vla-get-documents *acad*)
)
(vl-load-all "prueba.lsp")
(vlax-for ar acad_doc
(vla-activate ar)
(vla-SendCommand ar "dd ");; con espacio al final
;;(vla-save ar) ;; una vez comprobado
;;(vla-close ar) ;; una vez comprobado
)
); fin progn
Bueno, pues si lo haces con solo dos archivos, parece que funciona porque al abrilos se ejecuta la función dd, pero si en vez de eso intentas cargar algo así en el prueba.lsp:
- Código:
(defun c:dd()
(command "_zoom" "_w" (getvar 'vsmax)(getvar 'vsmin)
"_circle"(getvar 'viewctr)"_d"(apply '- (mapcar 'cadr (list (getvar 'vsmax)(getvar 'vsmin))))
"_zoom" "_e"
)
(print "demo ejecutada")(princ)
)
pues eso no funciona como se puede apreciar y menos si lo intentas con mas de dos archivos abiertos.
A ver, falla el (vla-SendCommand ar "dd ") que no se ejecuta automáticamente y solo se ejecuta según vas abriendo y cerrando archivos para su comprobación ...
Bueno, la idea que yo he utilizado en alguna ocasión es utilizar el (vl-load-all "rutina.lsp") como una especie de acad.lsp
para que al cargar el lsp se autoejecute, es decir el archivo prueba debe contener algo así
- Código:
;;; prueba para vl-load-all, guadar en archivo prueba.lsp
(defun c:demo()
(command "_zoom" "_w" (getvar 'vsmax)(getvar 'vsmin)
"_circle"(getvar 'viewctr)"_d"(apply '- (mapcar 'cadr (list (getvar 'vsmax)(getvar 'vsmin))))
"_zoom" "_e"
)
(print "demo ejecutada")(princ)
)
(c:demo)
y utilizarlos sobre archivos que aún no este cargado, mas o menos así
- Código:
(defun c:test_vl_load_all ( / carpeta archivos )
(setq acad_doc (vla-get-documents (vlax-get-acad-object))
acad_org (vla-get-activedocument (vlax-get-acad-object))
carpeta "c:\\sitio\\
archivos '("dibujo1.dwg""dibujo2.dwg""dibujo2.dwg""etc.dwg")
)
;;; comprobar si hay abiertos mas documentos
(if (> (VLAX-GET acad_doc 'count) 1)
(alert "¡Demasiados documentos abiertos!\n\n Para ejecutar la rutina necsita\n cerrar todos excepto el actual")
(progn
(alert "\nEl archivo lisp se cargará en todos los\narchivos nuevos o que puedan abrirse\n hasta cerrar la sesión de Autocad")
(vl-load-all lisp)
(foreach ar archivos
(setq arobj (vla-open acad_doc (strcat carpeta ar)))
(vla-activate acad_org)
(vla-save arobj)
(vla-close arobj)
)
(princ "\n<Lista concluida>")
;;;(command "_quit""_y")
(command "_qsave" "_quit")
)
)
(vlax-release-object acad_org)
(vlax-release-object acad_doc)
)
Al comprobar el (vla-SendCommand ar "dd ") con solo dos archivos y un lisp que solo operaba imprimiendo en la línea de comandos, me engañó el resultado ..
Este otro modo de operar funciona como si se cargara el acad.lsp, y ademas funciona para cualquier lisp con toda la lógica del mundo, lo que pasa es que a partir terminar de ejecutarse sobre la lista de archivos, se debería reiniciar autocad o borrar prueba.lsp para evitar que se siga ejecutando al abrir archivos nuevos.
Lo siento si he creado confusión, aunque también expuse que no estaba seguro que funcionara con todos los lisp.
Un saludo
nolo- Mensajes : 182
Fecha de inscripción : 17/03/2016
Temas similares
» EDITAR VARIOS TEXTOS DE UNA SOLA VEZ
» Pasar de varios vports a uno solo en model
» LISP (SELECCIÓNAR TODO Y CONVERTIR TODO COLOR PORCAPA), LISP (BLOQUES COLOR PORCAPA Y CAPA 0)
» Lisp de selección
» Ayuda con un lisp
» Pasar de varios vports a uno solo en model
» LISP (SELECCIÓNAR TODO Y CONVERTIR TODO COLOR PORCAPA), LISP (BLOQUES COLOR PORCAPA Y CAPA 0)
» Lisp de selección
» Ayuda con un lisp
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|