UN lisp que trabaje o actúe en varios dwg

Ver el tema anterior Ver el tema siguiente Ir abajo

UN lisp que trabaje o actúe en varios dwg

Mensaje por Admin el Miér Abr 06, 2016 9:20 pm

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)




Admin
Admin

Mensajes : 157
Fecha de inscripción : 16/03/2016
Edad : 69
Localización : CORDOBA ARGENTINA

Ver perfil de usuario http://acadhispano.foroargentina.net

Volver arriba Ir abajo

Re: UN lisp que trabaje o actúe en varios dwg

Mensaje por carlosmgilp el Jue Abr 07, 2016 6:17 pm

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.

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 : 96
Fecha de inscripción : 17/03/2016
Edad : 35
Localización : Venezuela

Ver perfil de usuario

Volver arriba Ir abajo

Re: UN lisp que trabaje o actúe en varios dwg

Mensaje por Admin el Jue Abr 07, 2016 6:29 pm

Hola Carlos ,gracias .
Voy a probar .


Admin
Admin

Mensajes : 157
Fecha de inscripción : 16/03/2016
Edad : 69
Localización : CORDOBA ARGENTINA

Ver perfil de usuario http://acadhispano.foroargentina.net

Volver arriba Ir abajo

Re: UN lisp que trabaje o actúe en varios dwg

Mensaje por nolo el Lun Abr 11, 2016 10:40 pm

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:

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 : 123
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: UN lisp que trabaje o actúe en varios dwg

Mensaje por Admin el Lun Abr 11, 2016 10:52 pm

Voy a probarlo .

Gracias




Admin
Admin

Mensajes : 157
Fecha de inscripción : 16/03/2016
Edad : 69
Localización : CORDOBA ARGENTINA

Ver perfil de usuario http://acadhispano.foroargentina.net

Volver arriba Ir abajo

Re: UN lisp que trabaje o actúe en varios dwg

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.