AutoCad - problemas al llamar al comando explode en una función dentro de un lisp

 
Vista:
sin imagen de perfil
Val: 21
Ha disminuido su posición en 2 puestos en AutoCad (en relación al último mes)
Gráfica de AutoCad

problemas al llamar al comando explode en una función dentro de un lisp

Publicado por cjcristian (6 intervenciones) el 13/06/2020 17:55:50
Hola, estoy iniciando ne la programación y acabo de tener un problema , resulta que al cargar mi lips el autocad no me reconoce y me envía el mensaje : []error: AutoCAD command rejected: "*.EXPLODE"

la parte del código que presenta esa dificultad es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(SETQ LIPOLIS (SSGET "X" '((-4 . "<OR")
                   (-4 . "<AND")(0 . "LWPOLYLINE")(-4 . "AND>")
                   (-4 . "<AND")(0 . "LINE")(-4 . "AND>")
                   (-4 . "OR>")
                           )
                   )
) ;; eleccionamos todas las lineas o polilineas DEL DIBUJO
(SETQ NUMELEM (SSLENGTH LIPOLIS))
(SETQ POLIN (- NUMELEM 1))
 (COND ((= (CDR (ASSOC 0 (ENTGET (SSNAME LIPOLIS POLIN)))) "LWPOLYLINE")
        (WHILE (> POLIN -1)
        (COMMAND "EXPLODE" (SSNAME LIPOLIS POLIN))
        (SETQ POLIN (- POLIN 1))
        )
	(SETQ NUMELEM (SSLENGTH (SETQ LIPOLIS (SSGET "X" (LIST (CONS 0 "LINE"))))))
       )
       ((= (CDR (ASSOC 0 (ENTGET (SSNAME LIPOLIS POLIN)))) "LINE")
        (SETQ NUMELEM (SSLENGTH (SETQ LIPOLIS (SSGET "X" (LIST (CONS 0 "LINE"))))))
       )
)

ahh el error sucede cuando cargo el código por medio de un botón creado en un cuadro de dialogo, pero si lo cargo directo al autocad no sucede ese error. estaría muy agradecido de recibir ayuda con esto.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

problemas al llamar al comando explode en una función dentro de un lisp

Publicado por Gerardo (987 intervenciones) el 13/06/2020 18:11:56
Hola
No puedes invocar comandos nativos dentro de un cuadro de dialogo. Si es eso lo que estás haciendo, entonces debes cambiar a alguno de estos dos posibles métodos:

1-Que el botón del diálogo primero cierre el mismo diálogo, luego invoque tu función y luego si lo ocupas vuelva a abrir el mismo diálogo donde lo tenías.

2-Generar tu propia función "explotar" que no use el comando de autocad.

Si piensas explotar bloques o mtextos te recomiendo usar la primera solución, pero si como se deduce de tu código, son solo polilíneas te recomiendo la segunda solución. Eso porque es mucho más sencillo hacerlo con una polilinea que con un bloque o un texto, porque estos tienen transformaciones (escala, rotación, inserción), en cambio una funcion para explotar polilineas seria solo leer los puntos y curvaturas, si la curvatura es cero dibujar una linea hacia el siguiente punto y si es curva dibujar un arco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 21
Ha disminuido su posición en 2 puestos en AutoCad (en relación al último mes)
Gráfica de AutoCad

problemas al llamar al comando explode en una función dentro de un lisp

Publicado por cjcristian (6 intervenciones) el 13/06/2020 21:00:10
Muchas gracias Gerardo, me ayudaste a solucionarlo, ahora voy a generar una función para explotar las polilineas, gracias por tu apoyo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.285
Oro
Ha mantenido su posición en AutoCad (en relación al último mes)
Gráfica de AutoCad

problemas al llamar al comando explode en una función dentro de un lisp

Publicado por Gerardo (987 intervenciones) el 14/06/2020 16:13:23
Con gusto
Otra cosa, es más simple hacer el filtro de la seleccion así:

1
(setq lipolis (ssget "X" '((0 . "LINE,LWPOLYLINE")) ) )

Los and y or son para selecciones más complejas, como que quieras solo líneas verdes y polilineas cerradas en capa 0, pero si el filtro es solo por tipo de objeto se puede separar por comas y listo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar