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!
¡Resuelto! Ir a solución.
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!
¡Resuelto! Ir a solución.
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.
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.
Mi versión, varios años después de vuestro post, es AutoCAD 2017.
Mi versión, varios años después de vuestro post, es AutoCAD 2017.
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
>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.
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
>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.
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
>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.
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
>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.
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!
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.