Ayuda con rutina autolisp de resta de regiones
Publicado por Antonio (17 intervenciones) el 20/05/2023 23:49:45
Buenas noches:
El otro día pedí ayuda por aquí y me respondió Gerardo, ayudándome con una pequeña rutina.
Pensé que a partir de esa ayuda, me seria muy fácil hacer la rutina siguiente:
Rutina que:
-en la primera entrada pida en contorno de la pieza.. (ese contorno ó panel siempre tiene que ser una
polilinea cerrada, y solo será una entidad ya que después se convierte en region y finalmente, cuando
se complete con la resta de las regiones hueco se acabara extruyendo....)
-En la segunda peticion de seleccion nos pide los huecos a restar de la primera region, y nos los pide
seleccionar mediante SSGET, (para poder seleccionarlo uno a
uno... mediante una ventana o como queramos (pero siempre va a ser un conjunto de selección, ya que serán varias entidades (Huecos). Estas entidades solo pueden ser Polilineas o Circulos, ya que luego las tiene que convertir también a Regiones (Para luego poder restarlas de la polilinea primera, convertida a region).
Hasta aquí esta conseguido, con la ayuda de Gerardo. Lo complicado para mi viene después y es que soy muy torpe y no se programar....
Necesito que los huecos de la segunda selección se resten de la primera
Y que me devuelva una sola region... en la que estén restados los huecos...
Con la ayuda de Gerardo ya he consigo que me pida los objetos...
Pienso que necesito un bucle en el que se vayan restando una por una las entidades de la segunda selección (los llamados huecos)....
Pero no se implementarlo. Alguien me puede ayudar?
Adjunto lo que tengo escrito de programa hasta ahora y un dibujo DWG de ejemplo...
Muchas gracias por vuestra ayuda
(defun c:RestaRegiones2 ( / i contorno L nhuecos contorno1)
(princ "\nSeleccione el contorno del panel:")
(setq
;selección con filtro para incluir solo polilíneas cerradas
contorno (ssget "_:S" '((0 . "LWPOLYLINE")(-4 . "&") (70 . 1)))
) ;parentesis fin del primer setq
(command "_Region" contorno "")
(setq contorno1 (entlast))
(princ "\nSeleccione los huecos a restar:")
(setq
;contador para luego iterar por el selection set
i 0
;selección con filtro para incluir solo polilíneas cerradas y circulos
nhuecos (ssget '((-4 . "<OR")
(-4 . "<AND")(0 . "LWPOLYLINE")(-4 . "&") (70 . 1) (-4 . "AND>")
(-4 . "<AND")(0 . "CIRCLE")(-4 . "AND>")
(-4 . "OR>")
))
) ;parentesis fin del primer setq
;bucle que itera por el selection set agregando las entidades a la lista L
(repeat (sslength nhuecos)
(setq L (cons (vlax-ename->vla-object (ssname nhuecos i))
L
))
i (1+ i)
)
(command "_Region" nhuecos "")
(command "_.subtract" contorno1 "" huecos "")
) ; fin del DEFUN
El otro día pedí ayuda por aquí y me respondió Gerardo, ayudándome con una pequeña rutina.
Pensé que a partir de esa ayuda, me seria muy fácil hacer la rutina siguiente:
Rutina que:
-en la primera entrada pida en contorno de la pieza.. (ese contorno ó panel siempre tiene que ser una
polilinea cerrada, y solo será una entidad ya que después se convierte en region y finalmente, cuando
se complete con la resta de las regiones hueco se acabara extruyendo....)
-En la segunda peticion de seleccion nos pide los huecos a restar de la primera region, y nos los pide
seleccionar mediante SSGET, (para poder seleccionarlo uno a
uno... mediante una ventana o como queramos (pero siempre va a ser un conjunto de selección, ya que serán varias entidades (Huecos). Estas entidades solo pueden ser Polilineas o Circulos, ya que luego las tiene que convertir también a Regiones (Para luego poder restarlas de la polilinea primera, convertida a region).
Hasta aquí esta conseguido, con la ayuda de Gerardo. Lo complicado para mi viene después y es que soy muy torpe y no se programar....
Necesito que los huecos de la segunda selección se resten de la primera
Y que me devuelva una sola region... en la que estén restados los huecos...
Con la ayuda de Gerardo ya he consigo que me pida los objetos...
Pienso que necesito un bucle en el que se vayan restando una por una las entidades de la segunda selección (los llamados huecos)....
Pero no se implementarlo. Alguien me puede ayudar?
Adjunto lo que tengo escrito de programa hasta ahora y un dibujo DWG de ejemplo...
Muchas gracias por vuestra ayuda
(defun c:RestaRegiones2 ( / i contorno L nhuecos contorno1)
(princ "\nSeleccione el contorno del panel:")
(setq
;selección con filtro para incluir solo polilíneas cerradas
contorno (ssget "_:S" '((0 . "LWPOLYLINE")(-4 . "&") (70 . 1)))
) ;parentesis fin del primer setq
(command "_Region" contorno "")
(setq contorno1 (entlast))
(princ "\nSeleccione los huecos a restar:")
(setq
;contador para luego iterar por el selection set
i 0
;selección con filtro para incluir solo polilíneas cerradas y circulos
nhuecos (ssget '((-4 . "<OR")
(-4 . "<AND")(0 . "LWPOLYLINE")(-4 . "&") (70 . 1) (-4 . "AND>")
(-4 . "<AND")(0 . "CIRCLE")(-4 . "AND>")
(-4 . "OR>")
))
) ;parentesis fin del primer setq
;bucle que itera por el selection set agregando las entidades a la lista L
(repeat (sslength nhuecos)
(setq L (cons (vlax-ename->vla-object (ssname nhuecos i))
L
))
i (1+ i)
)
(command "_Region" nhuecos "")
(command "_.subtract" contorno1 "" huecos "")
) ; fin del DEFUN
Valora esta pregunta


0