Seleccion Bloques Intersectados

Página 1 de 2. 1, 2  Siguiente

Ir abajo

Seleccion Bloques Intersectados

Mensaje por SushyM el Vie Sep 22, 2017 1:31 am

Consulta
Tengo unos bloques, algunos estan intersectado por algunas lineas y otros no, hay alguna forma de seleccionar solo los bloques intersectados. o en caso contrario los no intersectado por las lineas.
O tal vez darme una idea de como hacerlo.

https://drive.google.com/open?id=0B3HBbf2wcY4nZjlaeVUxMTZUeU0

;-) Saludos.

SushyM

Mensajes : 27
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por nolo el Vie Sep 22, 2017 8:10 pm

Mi Maestro Devitg dice que una imagen no se puede editar en autocad, y esta en lo cierto.
Pero como en este caso parece que el nombre de los bloques da igual, prueba con esto que debe funcionar siempre que tanto línea como bloques sean bien visibles en la pantalla del espacio modelo
Los bloques que cortan la línea
Código:
(defun c:setb( / ss)
(setq ss (ssget "_f"
 (mapcar 'cdr (vl-remove-if-not
 '(lambda(a)(member (car a) '(10 11)) )
 (entget (car(entsel "Seleccionar línea : ")))
 ))
 '((0 . "INSERT"))
))
(sssetfirst ss ss)
(princ)
)
Los bloques que no la cortan
Código:
(defun c:nsetb( / ss sb)
(setq sb (ssget "_a"'((0 . "INSERT")) )
 ss (ssget "_f"
 (mapcar 'cdr (vl-remove-if-not
 '(lambda(a)(member (car a) '(10 11)) )
 (entget (car(entsel "Seleccionar línea : ")))
 ))
 '((0 . "INSERT")))
 ss (mapcar 'cadr (ssnamex ss))
)
(foreach a ss (ssdel a sb))
(sssetfirst sb sb)
(princ)
)

Un saludo

nolo

Mensajes : 172
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por SushyM el Vie Sep 22, 2017 10:26 pm

Hola, si puse esa imagen era para capturar la idea de seleccion, hasta donde he visto esta rutina cumple lo que menciona, pero si tuviera una muchas lineas en el espacion como podria hacer para que la rutina tenga la opcion de seleccionar masivamente y de toda esa seleccion solo me deje los intersectados o lo no intersectados.

https://drive.google.com/open?id=0B3HBbf2wcY4nUmJzdUtHT2dfYnc Bloques a seleccionar
https://drive.google.com/open?id=0B3HBbf2wcY4ndVp1N0IySDlpQ0k Forma de seleccion

Ojala se pueda lograr esto
;-)

SushyM

Mensajes : 27
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

sin persona, difícil hacer el traje

Mensaje por Admin el Lun Sep 25, 2017 4:53 pm

Sube el DWG o lo envías a mi correo devitg@gmail.com

Admin
Admin

Mensajes : 194
Fecha de inscripción : 16/03/2016
Edad : 70
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por SushyM el Lun Sep 25, 2017 5:57 pm

Saludos amigos,
Devit ya lo envio, pero igual lo cuelgo al drive
https://drive.google.com/open?id=0B3HBbf2wcY4nUlNJUkZJWk1xYlk
;-)

SushyM

Mensajes : 27
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

bloque si , bloques no

Mensaje por Admin el Mar Sep 26, 2017 7:44 pm

SushyM escribió:Consulta
Tengo unos bloques, algunos estan intersectado por algunas lineas y otros no, hay alguna forma de seleccionar solo los bloques intersectados. o en caso contrario los no intersectado por las lineas.
O tal vez darme una idea de como hacerlo.

https://drive.google.com/open?id=0B3HBbf2wcY4nZjlaeVUxMTZUeU0

;-) Saludos.

Bien te comento hay

261 interceptados
79 no interceptados

Ahora ¿QUE quieres hacer ?






Admin
Admin

Mensajes : 194
Fecha de inscripción : 16/03/2016
Edad : 70
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por SushyM el Mar Sep 26, 2017 9:09 pm

Hola que tal amigo Devitg
Como comente al inicio poder seleccionarlo, con la ayuda que tuve de nolo se podia hacer pero no de la forma masiva, solo de linea por linea.
Una vez que los tenga seleccionado voy a poder agruparlos.

;-)


SushyM

Mensajes : 27
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por Admin el Mar Sep 26, 2017 9:25 pm

Y luego qué?

Admin
Admin

Mensajes : 194
Fecha de inscripción : 16/03/2016
Edad : 70
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por SushyM el Mar Sep 26, 2017 9:37 pm

En mi trabajo me han dado muchos accesorios en redes de agua y tengo que agruparlos por tipo de red sea existente o proyectada, por diametro, material y como todo los tengo en capas es la necesitada de dejar una capa de linea y seleccionarlo los bloques que estan en esas lineas para poder llenar en los campos de atributo los tipos que mencione lineas arriba

;-)

SushyM

Mensajes : 27
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por SushyM el Sáb Sep 30, 2017 5:47 pm

Hola que tal amigo, Devitg, al final pudistes dar mejoria al lips que coloco nolo, ojala me puedas ayudar.
;-)

SushyM

Mensajes : 27
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por nolo el Mar Oct 03, 2017 11:10 pm

A ver ...
Se me ocurre la siguiente rutina que se basa en seleccionar con una ventana los bloques e ir rastreando uno a uno si hay alguna polilinea que los corte.
Se selecciona si vas a editar los bloques que cortan <c + intro> o los que no cortan <n + intro> y finalmente, uno a uno, se van identificando con un circulito para conocer donde están y se editan en el editor de atributos para que les pongas lo que proceda.
Código:
(defun c:ELOS(/ bbi p1 p2 ss corta no_corta r )
(vl-load-com)
; lista con los puntos del boundingbox de un objeto
(defun bbi(obj / lp);; by nolo octubre 2017
(if (=(type obj) 'ENAME) (setq obj (vlax-ename->vla-object obj)))
(if (vlax-method-applicable-p obj 'GetBoundingBox)
(progn
 (vla-GetBoundingBox obj 'minimo 'maximo )
 (setq lp(list
 (vlax-safearray->list minimo)
 (vlax-safearray->list maximo)
 ))
))
)
(setq p2
 (getcorner (setq p1 (getpoint(strcat(chr 10)"Seleccionar zona : "))) )
 ss (ssget "_c" p1 p2 '((0 . "INSERT")(66 . 1)))
 ss (mapcar 'cadr (ssnamex ss))
 ss (vl-remove-if '(lambda(x) (listp x)) ss)
 corta '()
 no_corta '()
 r (/ (getvar 'viewsize) 20)

)
(foreach ent ss
 (setq a (bbi ent) ent (list ent))
 (if (ssget "_c" (car a)(cadr a) '((0 . "*LINE")) )
 (setq corta (cons(append a ent) corta))
 (setq no_corta (cons (append a ent) no_corta))
 )
)
(princ(strcat(chr 10)
"hay "(itoa (length corta) )" bloques que cortan a polilinea"
" y " (itoa (length no_corta)) " que no"
))
(initget "c C N n")
(if (= (strcase(getkword (strcat(chr 10)"Elige <C>orta o <N>o_corta :"))) "C")
 (setq ss corta)
 (setq ss no_corta)
)

(foreach a ss
(entmake(list'(0 . "CIRCLE")
 (cons 10 (mapcar '/(mapcar '+ (car a)(cadr a))'(2 2) ))(cons 40 r))
)
(entupd (entlast))
(command "_delay" 500)
(command "_eattedit" (last a) )
(entdel (entlast))
)
(princ)
)

Puedes jugar con el valor de r (radio de los circulitos) que es una proporción del alto de la pantalla y con el valor del comando "_delay" pero, este último, tiene que tener un valor lo suficientemente alto como para que le de tiempo al cad de dibujar el circulo antes de entrar en el editor. Si quitas el delay, el circulo sale después de cerrar el editor de atributos (me volvió loco esa tontería).

A ver si te sirve

Un saludo

nolo

Mensajes : 172
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por SushyM el Miér Oct 04, 2017 2:15 am

Hola amigo nolo que tal, he revisado la rutina, y veo que va complica la selecion, ya que entra al editor bloque a bloque, y mi necesidad inicial solo es poder selecionarlo nada mas.

Agradezco bastante tu apoyo, si por ahy tienes alguna otra asi como la primera que publicastes, pero que seleccione por ventana me serviria mucho.

Saludos
;-)

SushyM

Mensajes : 27
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por nolo el Miér Oct 04, 2017 6:23 pm

No entiendo como lo vas a usar, pero aquí lo tienes

Código:
(defun c:SELOS(/); bbi p1 p2 ss corta no_corta r )
(vl-load-com)
; lista con los puntos del boundingbox de un objeto
(defun bbi(obj / lp);; by nolo octubre 2017
(if (=(type obj) 'ENAME) (setq obj (vlax-ename->vla-object obj)))
(if (vlax-method-applicable-p obj 'GetBoundingBox)
(progn
 (vla-GetBoundingBox obj 'minimo 'maximo )
 (setq lp(list
 (vlax-safearray->list minimo)
 (vlax-safearray->list maximo)
 ))
))
)
(sssetfirst) ;; limpiar anterior selección
(setq p2
 (getcorner (setq p1 (getpoint(strcat(chr 10)"Seleccionar zona : "))) )
 ss (ssget "_c" p1 p2 '((0 . "INSERT"))) ;; añadir si solo con atributos (66 . 1)
 ss (mapcar 'cadr (ssnamex ss))
 ss (vl-remove-if '(lambda(x) (listp x)) ss)
 corta (ssadd)
 no_corta (ssadd)
)
(foreach ent ss
 (setq a (bbi ent) )
 (if (ssget "_c" (car a)(cadr a) '((0 . "*LINE")) )
 (setq corta (ssadd ent corta))
 (setq no_corta (ssadd ent no_corta))
 )
)
(princ(strcat(chr 10)
"hay "(itoa (sslength corta) )" bloques que cortan a polilinea"
" y " (itoa (sslength no_corta)) " que no"
))
(initget "c C N n")
(if (= (strcase(getkword (strcat(chr 10)"Elige <C>orta o <N>o_corta :"))) "C")
 (sssetfirst corta corta)
 (sssetfirst no_corta no_corta)
)
(princ)
)

Un saludo


Última edición por nolo el Dom Dic 17, 2017 1:13 pm, editado 1 vez (Razón : Añadir (sssetfirst) para limpiar anterior selección)

nolo

Mensajes : 172
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por SushyM el Jue Oct 05, 2017 1:23 pm

SushyM escribió:Saludos amigos,
Devit ya lo envio, pero igual lo cuelgo al drive
https://drive.google.com/open?id=0B3HBbf2wcY4nUlNJUkZJWk1xYlk
;-)

Gracias amigo nolo, es lo que necesito para mi trabajo.
Una consulta, si corro la rutina en ese ejemplo que colgue me identifica cuantos hay pero al finalizarla no lo seleeciona, pero si mi area de seleccion es menor si funciona.
No se si es por el tamaño de area de seleccion afecta la rutina, cuando mi area de seleccion es pequeña si corre muy bien.

Igual muchas gracias
Amigo nolo

;-)

SushyM

Mensajes : 27
Fecha de inscripción : 13/09/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por nolo el Jue Oct 05, 2017 4:50 pm

Encantado que diría el último termineitor.

A ver SushyM, imagino que lo que te pasa es como a mi, que cuando el zoom es muy grande, no se ve la selección en pantalla.
Aprieta la tecla suprimir o utiliza el icono de mover para que veas que si están seleccionado.

Precisamente por ese motivo redacté el lisp anterior dibujando unos circulitos provisionales y por eso te decía yo que no se como puede  servirte la rutina sin el editor o cualquier operador posterior a la selección ...

Un saludo

nolo

Mensajes : 172
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por Zicaryd el Lun Dic 11, 2017 7:01 pm

Saludos:
Consulta si el caso cambiara, y ahora fueran lineas intersectadas con otras lineas, y solo se necesite seleccionar los que están intersectados.

https://drive.google.com/open?id=1vJWqlrYTnbSyPoZ18r2KEKtBWUc-pkF9

Espero me puedan ayudar.

Zicaryd

Mensajes : 31
Fecha de inscripción : 23/10/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por nolo el Mar Dic 12, 2017 11:59 pm

Por favor, Zicaryd, sube otro dwg poniendo en rojo o como mejor sirva de explicación el resultado de la selección que pretendes (supongo que por ventana)
¿Grandes y pequeñas que se cortan? ¿pequeñas cortadas por grandes? o ....
¿intersección en el espacio o solo en el plano?

Un saludo

nolo

Mensajes : 172
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por Zicaryd el Miér Dic 13, 2017 8:41 pm

Que tal amigo nolo, digamos que las lineas largas están en una capa y las lineas cortas están en una segunda capa, en primera instancia solo las lineas cortas rojas que se intercepten con las largas (seleccion de ambas o solo las rojas). (Toda linea insertectada con otra)

Zicaryd

Mensajes : 31
Fecha de inscripción : 23/10/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por nolo el Miér Dic 13, 2017 11:36 pm

Zicarvd, si pones dibujos con trampa solo consigues que los que colaboramos desinteresadamente nos cansemos
Estas son las únicas intersecciones que hay en el dibujo, el resto no los son.
Fíjate que con el comando trim no recorta la línea grande.



Con esto seleccionas las rojas que se cortan en proyección horizontal, de la capa "una capa" con las líneas de la capa "una segunda", en el UCS universal
Código:
(defun c:interc(/ cp ss ss1 ss2)
(defun cp (p) (list (car p)(cadr p)))
;; asignar debajo el nombre de las capas
(setq capa1 "una capa" capa2 "una segunda")

(if (progn
 (princ (strcat (chr 10)"Seleccionar lineas en capas -"capa1"- -"capa2"- : "))
 (setq ss (ssget (list'(0 . "LINE") (cons 8 (strcat capa1","capa2) ))))
 )
(progn
(setq ss (vl-remove-if-not '(lambda(a)(=(type a)'ename)) (apply 'append (ssnamex ss)))
 ss (mapcar '(lambda(a)(mapcar 'cdr
 (vl-remove-if-not '(lambda(b) (member (car b) '(-1 8 10 11))) (entget a))))
 ss)
 ss1 (mapcar 'reverse(vl-remove-if '(lambda(a) (= (cadr a)capa2))ss))
 ss2 (mapcar 'reverse(vl-remove-if '(lambda(a) (= (cadr a)capa1))ss))
 ss (ssadd)
)
;;; busqueda de intersecciones
(foreach a ss1
(if (vl-remove nil (mapcar '(lambda(b)(inters (cp(car a))(cp(cadr a))(cp(car b))(cp(cadr b)))) ss2))
 (ssadd (last a) ss )
))
(sssetfirst ss ss)
)
(princ (strcat (chr 10)"No hay selección de líneas en las capas..."))
)

)

Un saludo

nolo

Mensajes : 172
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por Zicaryd el Jue Dic 14, 2017 2:50 pm

Que tal estimado nolo, no ha sido mi intención que sientas que los dibujos tienen trampa pero te aclaro que no es asi, en la version 2018 que manejo cuando uso el comando trim si cortalas lineas.




Zicaryd

Mensajes : 31
Fecha de inscripción : 23/10/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por Zicaryd el Jue Dic 14, 2017 2:54 pm

Estimado he tratado de correr el la rutina pero no he tenido suerte, exactamente no se a que se deba, no me opcion de ingresar la primer capa ni la segunda, y cuando selecciono todo no me da ningún resultado.





saludos

Zicaryd

Mensajes : 31
Fecha de inscripción : 23/10/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por nolo el Jue Dic 14, 2017 9:04 pm

Estamos siempre con el ejemplo que no es el definitivo y no vale ....
Una vez creadas las capas de nombres "una capa" y "una segunda", explotadas las entidades para que sean líneas, no polilíneas, pasadas las líneas cortas a la capa de nombre "una capa" con color rojo y las largas a la capa de nombre "una segunda" en color azul, intento hacer trim de una línea azul entre dos líneas rojas que de las que la rutina no encuentra la intersección  y no me sale. Versión acad 2014 castellano.
Igual he perdido algo en la conversión?¿?¿?¿?¿
HOY LO HE VUELTO A HACER PASO A PASO Y SI SALE- BUENO, MIS DISCULPAS

Si nombras las capas con otro nombre por ejemplo "pepe" y "juan" tendrás que cambiar el lisp donde pone:
Código:
;; poner debajo el nombre de las capas
(setq capa1 "una capa" capa2 "una segunda")

deberas poner
Código:
;; poner debajo el nombre de las capas
(setq capa1 "pepe" capa2 "juan")

Un saludo

Para evitar que se repita el mensaje "No hay selección de líneas en las capas..." convenía poner un princ delante del último parétesis, así

Código:
(princ)
); ultimo parentesis

nolo

Mensajes : 172
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por Zicaryd el Vie Dic 15, 2017 7:40 pm

Amigo nolo, muchas gracias por tu tiempo, una consulta y disculpa que pida de nuevo tu apoyo. Es muy complicado hacer que esa rutina me pida que seleccione una linea y de eso extraiga el nombre de la primera capa, y luego selección otra linea de otra capa y extraiga el nombre de la capa segunda linea, ya que en el archivo que quiero aplicar tiene muchas capas y se me hiciera tedioso esta re-nombrando para cada seleecion.

https://drive.google.com/open?id=1L89DpfP9WA7wCCl18DpJSy-OXkiR1kF5

saludos

Zicaryd

Mensajes : 31
Fecha de inscripción : 23/10/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por nolo el Sáb Dic 16, 2017 4:51 pm

No, no es complicado y aquí lo tienes
Código:
(defun c:interc(/ scapa cp ss ss1 ss2)
;; diciem 2017 by Nolo para V2
;; http://acadhispano.foroargentina.net/t149-seleccion-bloques-intersectados
(defun cp (p) (list (car p)(cadr p)))
(defun scapa ( pregunta /)
(if (setq ent (entsel(strcat (chr 10) pregunta)))
(setq capa (cdr(assoc 8 (entget (car ent)))))
))
(princ "Seleccionar capa por entidad")
(while (not (and
 (setq capa1 (scapa "Capa donde seleccionar : "))
 (setq capa2 (scapa "Capa para buscar intersecciones :"))
 ))
(princ(strcat" Error"(chr 10) "Intentelo de nuevo ..."))
)

(if (progn
 (princ (strcat (chr 10)"Seleccionar lineas en capas -"capa1"- y -"capa2"- : "))
 (setq ss (ssget (list'(0 . "LINE") (cons 8 (strcat capa1","capa2) ))))
 )
(progn
(setq ss (vl-remove-if-not '(lambda(a)(=(type a)'ename)) (apply 'append (ssnamex ss)))
 ss (mapcar '(lambda(a)(mapcar 'cdr
 (vl-remove-if-not '(lambda(b) (member (car b) '(-1 8 10 11))) (entget a))))
 ss)
 ss1 (mapcar 'reverse(vl-remove-if '(lambda(a) (= (cadr a)capa2))ss))
 ss2 (mapcar 'reverse(vl-remove-if '(lambda(a) (= (cadr a)capa1))ss))
 ss (ssadd)
)
;;; busqueda de intersecciones
(foreach a ss1
(if (vl-remove nil
 (mapcar '(lambda(b)(inters (cp(car a))(cp(cadr a))(cp(car b))(cp(cadr b)))) ss2))
 (ssadd (last a) ss )
))
(sssetfirst ss ss)
(princ (strcat(chr 10)(itoa (sslength ss)) " intersecciones"))
)
(princ (strcat (chr 10)"No hay selección de líneas en las capas..."))
)
(princ)
)
Sobre tu dibujo, a mi e da resultados muy raros. Sigo encontrando muchos casos que parece se van a intersceptar y luego resulta que no es así.
Como no se de que va el tema, no si se merecería rehacer la rutina con concepto de proximidad en vez de intersección.
Tampoco veo claro como vas a usarla ya que sobre un conjunto del tamaño de las cosas de tu dibujo, no se ve visualmente el resultado. Solo sirve para aplicar un instrucción después sobre el conjunto previo.

En fin, tu veras ..
Un saludo

nolo

Mensajes : 172
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por Zicaryd el Sáb Dic 16, 2017 5:14 pm

Estimado gracias por tu tiempo, tienes razón al tratar de usarlo se consigue datos inconcluso por el mismo tema de que aparentemente parece intersección pero cuando doy un super zoom veo que no lo intersecta y eso genere a que lo selecione.

Como tu dices como se puede aplicar ese tema de concepto de proximidad en vez de intersección, ya que podría darle una aproximidad como maximo de 0.10 y si con eso se intersecta también se podría añadir a la seleccion.

Bueno igual estimado muchas gracias por todo el tiempo, veo que tu nivel de manejo en Lips es alto y por ahora para mi se me hace complicado solucionarlo.

Saludos

Zicaryd

Mensajes : 31
Fecha de inscripción : 23/10/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Seleccion Bloques Intersectados

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Página 1 de 2. 1, 2  Siguiente

Volver arriba

- Temas similares

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