Comunidad
AutoCAD - Todos los productos - Español
Bienvenido/a al foro de los productos de la familia AutoCAD de Autodesk! Comparte tu conocimiento, haz preguntas y explora los temas populares de AutoCAD.
cancelar
Mostrando los resultados de 
Mostrar  solo  | Buscar en lugar de 
Quiere decir: 

Problemas con rutina Lisp Superficiar en AutoCAD 2009

8 RESPUESTAS 8
RESUELTAS
Responder
Mensaje 1 de 9
Anonymous
2502 Vistas, 8 Respuestas

Problemas con rutina Lisp Superficiar en AutoCAD 2009

Anonymous
No aplicable

Hola!

Tengo un lisp para superficiar automaticamente. Con solo un click crea una polilinea por inundación, y escribe un texto con la superfície de la misma. Este lisp funcionaba perfectamente en autocad 2007 pero en 2009 no funciona y no sé porqué... alguien me puede ayudar??

GR!

Fr.

aquí está el código:

(defun c:s (/ punto contorno objeto Id estancia superficie perimetro inicial)

;;;; Establece la variable de sistema fieldeval en 23, para que los campos
;;;; se actualicen al abrir (1) cerrar (2) trazar (4) y regenerar (16)
;;;; 1+2+4+16=23

(setvar "fieldeval" 23)



;;;; Introducir un punto interior de la habitación para hacer el contorno.
;;;; Este mismo punto servirá para insertar el bloque superficie

(setq punto (getpoint "\nPunto Interior - Situación del Area "))

;;;; Se crea una polilinea mediante la orden contorno

(command "-contorno" "a" "i" "n" "" "" punto "")



;;;; Se convierte la última entidad creada (la polilinea) en un objeto VLA
;;;; del cual se le extrae el numero de identificación Id

(setq contorno (entlast))
(setq objeto (vlax-ename->vla-object contorno)
Id (vla-get-objectID objeto)

;;;; Se crea un campo con el area de la polilinea

superficie (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
(itoa Id)
">%).Area \\f \"%lu2%pr2%ps[, m²]%ds44\">%"
)

)

;;;; Lee la variable de sistema attdia que controla si se utiliza la linea
;;;; de comando (0) o ventana de dialogo (1) al utilizar la orden insert

(setq inicial (getvar "attdia"))

;;;; Establece la variable de sistema attdia en 0 (linea de comando)

(setvar "attdia" 0)

;;;; Se inserta el texto

(command "texto" "U" "C" punto "" superficie )

;;;; Reestablece la variable de sistema attdia inicial

(setvar "attdia" inicial)

(princ)
)



____________________- Y AQUÍ EL ERROR QUE ME DA::

Comando: s

Punto Interior - Situación del Area -contorno
Precise punto interno o [Avanzadas]: a
Indique una opción [Conjunto de contornos/Identificar islas/Tipo de objeto]: i
¿Desea detectar islas? [Sí/No] : n
Indique tipo de proyección de rayos [Cercano/+X/-X/+Y/-Y/ángUlo] <+X>:
Indique una opción [Conjunto de contornos/Identificar islas/Tipo de objeto]:
Precise punto interno o [Avanzadas]: Seleccionándolo todo...
Designando todo lo visible...
Analizando los datos designados...

Precise punto interno o [Avanzadas]:
CONTORNO creado 1 polilínea
Comando: ; error: no function definition: VLAX-ENAME->VLA-OBJECT

 

@Anonymous para una mayor claridad  @joaquim.moral ha editado el título original: Problemas Lisp Superficiar Autocad 2009

Recuerda consultar cómo escoger el mejor título para tu post. ¡Gracias por participar!

0 Me gusta

Problemas con rutina Lisp Superficiar en AutoCAD 2009

Hola!

Tengo un lisp para superficiar automaticamente. Con solo un click crea una polilinea por inundación, y escribe un texto con la superfície de la misma. Este lisp funcionaba perfectamente en autocad 2007 pero en 2009 no funciona y no sé porqué... alguien me puede ayudar??

GR!

Fr.

aquí está el código:

(defun c:s (/ punto contorno objeto Id estancia superficie perimetro inicial)

;;;; Establece la variable de sistema fieldeval en 23, para que los campos
;;;; se actualicen al abrir (1) cerrar (2) trazar (4) y regenerar (16)
;;;; 1+2+4+16=23

(setvar "fieldeval" 23)



;;;; Introducir un punto interior de la habitación para hacer el contorno.
;;;; Este mismo punto servirá para insertar el bloque superficie

(setq punto (getpoint "\nPunto Interior - Situación del Area "))

;;;; Se crea una polilinea mediante la orden contorno

(command "-contorno" "a" "i" "n" "" "" punto "")



;;;; Se convierte la última entidad creada (la polilinea) en un objeto VLA
;;;; del cual se le extrae el numero de identificación Id

(setq contorno (entlast))
(setq objeto (vlax-ename->vla-object contorno)
Id (vla-get-objectID objeto)

;;;; Se crea un campo con el area de la polilinea

superficie (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
(itoa Id)
">%).Area \\f \"%lu2%pr2%ps[, m²]%ds44\">%"
)

)

;;;; Lee la variable de sistema attdia que controla si se utiliza la linea
;;;; de comando (0) o ventana de dialogo (1) al utilizar la orden insert

(setq inicial (getvar "attdia"))

;;;; Establece la variable de sistema attdia en 0 (linea de comando)

(setvar "attdia" 0)

;;;; Se inserta el texto

(command "texto" "U" "C" punto "" superficie )

;;;; Reestablece la variable de sistema attdia inicial

(setvar "attdia" inicial)

(princ)
)



____________________- Y AQUÍ EL ERROR QUE ME DA::

Comando: s

Punto Interior - Situación del Area -contorno
Precise punto interno o [Avanzadas]: a
Indique una opción [Conjunto de contornos/Identificar islas/Tipo de objeto]: i
¿Desea detectar islas? [Sí/No] : n
Indique tipo de proyección de rayos [Cercano/+X/-X/+Y/-Y/ángUlo] <+X>:
Indique una opción [Conjunto de contornos/Identificar islas/Tipo de objeto]:
Precise punto interno o [Avanzadas]: Seleccionándolo todo...
Designando todo lo visible...
Analizando los datos designados...

Precise punto interno o [Avanzadas]:
CONTORNO creado 1 polilínea
Comando: ; error: no function definition: VLAX-ENAME->VLA-OBJECT

 

@Anonymous para una mayor claridad  @joaquim.moral ha editado el título original: Problemas Lisp Superficiar Autocad 2009

Recuerda consultar cómo escoger el mejor título para tu post. ¡Gracias por participar!

8 RESPUESTAS 8
Mensaje 2 de 9
Anonymous
en respuesta a: Anonymous

Anonymous
No aplicable
Solución aceptada
Saludos,

La rutina esta ok, lo único que faltaba era llamar la función que carga el módulo con las funciones de VisualLISP (vl-load-com), por esto el error de función desconocida en la funcion VLAX...
Puedes quitar las funciones que cambian el valor de attdia, ya que no estás insertando bloques.
Sugerencia: cuando la rutina crea el texto (campo) con la valor del área, asume que debe haber un estilo con altura definida, te aconsejo que la modifiques para funcione con cualquier estilo de texto, pidiendo una altura o la escala.

Aquí te adjunto la rutina que ya probé en 2009.

Me cuentas como te va.

PD: No conocía TU nuevo verbo "SUPERFICIAR".
0 Me gusta

Saludos,

La rutina esta ok, lo único que faltaba era llamar la función que carga el módulo con las funciones de VisualLISP (vl-load-com), por esto el error de función desconocida en la funcion VLAX...
Puedes quitar las funciones que cambian el valor de attdia, ya que no estás insertando bloques.
Sugerencia: cuando la rutina crea el texto (campo) con la valor del área, asume que debe haber un estilo con altura definida, te aconsejo que la modifiques para funcione con cualquier estilo de texto, pidiendo una altura o la escala.

Aquí te adjunto la rutina que ya probé en 2009.

Me cuentas como te va.

PD: No conocía TU nuevo verbo "SUPERFICIAR".
Mensaje 3 de 9
Anonymous
en respuesta a: Anonymous

Anonymous
No aplicable
Hola JJ!!

Fantastico!! Eres un crack!! Ya me funciona a la perfección!!

Eso sí, de tu mensaje no entiendo de la misa la mitad, la verdad es que me desenvuelvo muy mal con lenguajes de programación y lisp... lo mio se limita a cortar y pegar y chapuzear cosas que hace la gente y que creo pueden resultarme utiles.

Lo que me comentas en tu sugerencia lo entiendo, pero tiene un sentido que no lo tenga así: cuando tengo que superficiar (yo superficio, tu superficias, él superficia) un edificio prefiero definir una altura de texto determinada y tirar con ella para todo, sin tener que definir la altura de texto para cada una de las estancias..., y en todo caso modificar al final los tipos de texto de todas las superficies con un brochazo (eso del brochazo también es una palabra MIA, pero creo que se entiende. ... no?? es lo de igualar propiedades).

Bueno, nada, solo eso, que me va de perlas tu aportación!!

Hasta otra!! GR!!

Fr.
0 Me gusta

Hola JJ!!

Fantastico!! Eres un crack!! Ya me funciona a la perfección!!

Eso sí, de tu mensaje no entiendo de la misa la mitad, la verdad es que me desenvuelvo muy mal con lenguajes de programación y lisp... lo mio se limita a cortar y pegar y chapuzear cosas que hace la gente y que creo pueden resultarme utiles.

Lo que me comentas en tu sugerencia lo entiendo, pero tiene un sentido que no lo tenga así: cuando tengo que superficiar (yo superficio, tu superficias, él superficia) un edificio prefiero definir una altura de texto determinada y tirar con ella para todo, sin tener que definir la altura de texto para cada una de las estancias..., y en todo caso modificar al final los tipos de texto de todas las superficies con un brochazo (eso del brochazo también es una palabra MIA, pero creo que se entiende. ... no?? es lo de igualar propiedades).

Bueno, nada, solo eso, que me va de perlas tu aportación!!

Hasta otra!! GR!!

Fr.
Mensaje 4 de 9
Anonymous
en respuesta a: Anonymous

Anonymous
No aplicable
Ok, Entiendo.

Bueno, me alegra mucho que te haya funcionado!

Un saludo.
0 Me gusta

Ok, Entiendo.

Bueno, me alegra mucho que te haya funcionado!

Un saludo.
Mensaje 5 de 9
Anonymous
en respuesta a: Anonymous

Anonymous
No aplicable

Buenas tardes,

 

me interesó mucho este post puesto que tengo la misma necesidad, seguí todos los pasos, e incluso introduje alguna variación en el código para que además me introdujera el perímetro del contorno creado.

Dichas modificaciones no he podido comprobarlas puesto que, aun con el comando (vl-load-com) cargado, las funciones (vlax-vla-object->ename) y (vlax-ename->vla-object) siguen sin ser reconocidas (no así la función (vla-get-objectID), que sí funciona/aparece en azul en el panel de visuallisp).

Buscando en foros si este problema también le ocurría a alguien, no he encontrado nada concreto. Alguna sugerencia de reinstalar autocad, pero no estoy seguro de necesitarlo.

 

Me gustaría saber si me podéis ayudar.

 

Muchas gracias de antemano.

0 Me gusta

Buenas tardes,

 

me interesó mucho este post puesto que tengo la misma necesidad, seguí todos los pasos, e incluso introduje alguna variación en el código para que además me introdujera el perímetro del contorno creado.

Dichas modificaciones no he podido comprobarlas puesto que, aun con el comando (vl-load-com) cargado, las funciones (vlax-vla-object->ename) y (vlax-ename->vla-object) siguen sin ser reconocidas (no así la función (vla-get-objectID), que sí funciona/aparece en azul en el panel de visuallisp).

Buscando en foros si este problema también le ocurría a alguien, no he encontrado nada concreto. Alguna sugerencia de reinstalar autocad, pero no estoy seguro de necesitarlo.

 

Me gustaría saber si me podéis ayudar.

 

Muchas gracias de antemano.

Mensaje 6 de 9
Anonymous
en respuesta a: Anonymous

Anonymous
No aplicable

Mi versión, varios años después de vuestro post, es AutoCAD 2017.

0 Me gusta

Mi versión, varios años después de vuestro post, es AutoCAD 2017.

Mensaje 7 de 9
calderg1000
en respuesta a: Anonymous

calderg1000
Mentor
Mentor

Estimado @Anonymous

Respecto a la Rutina en Visual Lisp, a mi también me da errores, te adjunto otra rutina que calcula lo mismo (area y perimetro en unidades metricas o Inglesas), usando comandos Autolisp, deberia funcionar en cualquier Versión.

La adjunto en su código fuente para las ediciones que creas conveniente.

Saludos.


Carlos Calderon G
EESignature
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.

0 Me gusta

Estimado @Anonymous

Respecto a la Rutina en Visual Lisp, a mi también me da errores, te adjunto otra rutina que calcula lo mismo (area y perimetro en unidades metricas o Inglesas), usando comandos Autolisp, deberia funcionar en cualquier Versión.

La adjunto en su código fuente para las ediciones que creas conveniente.

Saludos.


Carlos Calderon G
EESignature
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.

Mensaje 8 de 9
calderg1000
en respuesta a: Anonymous

calderg1000
Mentor
Mentor

Estimado @Anonymous

Bueno, despues de probar la rutina "S" en Visual Lisp, tal como indica el compañero @Anonymous, aparte de insertar la linea (VL-LOAD-COM); para que funcione se debe crear previamente un estilo de texto con una altura definida, así la rutina tomara este estilo de texto para el resultado en pantalla.

Con la creación del nuevo estilo de texto, la rutina corre perfectamente.

Saludos.


Carlos Calderon G
EESignature
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.

0 Me gusta

Estimado @Anonymous

Bueno, despues de probar la rutina "S" en Visual Lisp, tal como indica el compañero @Anonymous, aparte de insertar la linea (VL-LOAD-COM); para que funcione se debe crear previamente un estilo de texto con una altura definida, así la rutina tomara este estilo de texto para el resultado en pantalla.

Con la creación del nuevo estilo de texto, la rutina corre perfectamente.

Saludos.


Carlos Calderon G
EESignature
>Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.

Mensaje 9 de 9
Anonymous
en respuesta a: Anonymous

Anonymous
No aplicable

Hola,

Vengo utilizando una rutina para superficiar y perimetrar contornos pero antes debo crearlos con la orden CN.

Me parece buenísima la rutina que crea directamente los contornos y calcula superficies. Intenté modificarla para que calcule también los perímetros, pero sin éxito. Si alguien tiene manera de corregirla sería estupendo!

 

Os adjunto la rutina modificada. Los fallos que da es no llega a calcular los perímetros ofreciendo un texto tipo ### y lo superpone con el de superficie.

 

Por último, sería ideal si podemos introducir una línea que pregunte nombre de estancia (que también pueda dejarse en blanco).

 

Saludos y mil gracias por compartir conocimiento!

 

 

 

0 Me gusta

Hola,

Vengo utilizando una rutina para superficiar y perimetrar contornos pero antes debo crearlos con la orden CN.

Me parece buenísima la rutina que crea directamente los contornos y calcula superficies. Intenté modificarla para que calcule también los perímetros, pero sin éxito. Si alguien tiene manera de corregirla sería estupendo!

 

Os adjunto la rutina modificada. Los fallos que da es no llega a calcular los perímetros ofreciendo un texto tipo ### y lo superpone con el de superficie.

 

Por último, sería ideal si podemos introducir una línea que pregunte nombre de estancia (que también pueda dejarse en blanco).

 

Saludos y mil gracias por compartir conocimiento!

 

 

 

¿No encontraste lo que buscabas? Pregúntale a la comunidad o comparte tus conocimientos.

Publicar en los foros  

Autodesk Design & Make Report

New events in the Spanish Community