http://docs.autodesk.com/ACD/2011/EN http://docs.autodesk.com/ACD/2011/ENU/filesALR/WS U/filesALR/WSfacf1429558a55de1a7524c1004e616f8bfacf1429558a55de1a7524c1004e616f8b5913.htm http://www.hispacad.com/foro/viewtopic.php?t=29660
Seleccionar Objeto(s). Funcion SSGET Se puede usar sin parametros. (setq setq Conjunto Conjunto (ssget (ssget)) )) (setq setq Conjunto Conjunto (ssget (ssget "X" "X")) )) Selecciona todos los objetos en el archivo. (setq setq Conjunto Conjunto (ssget (ssget "P")) "P")) Selecciona todos los objetos de la seleccion anterior. (setq setq Conjunto Conjunto (ssget (ssget "L")) "L")) Selecciona el ultimo objeto creado en el dibujo. (setq setq Conjunto Conjunto (ssget (ssget "W" p1 p2)) Selecciona los objetos que se encuentren dentro de la ventana conformada por los vertices p1 y p2. (setq setq Conjunto Conjunto (ssget (ssget "C" "C" p1 p2)) Selecciona los objetos que se encuentren dentro o atraviesen la ventana conformada por los vertices p1 y p2. (setq setq Conjunto Conjunto (ssget (ssget "WP" "WP" lista_puntos)) Selecciona los objetos que se encuentren dentro de la ventana conformada por los vertices de la lista de puntos. (setq setq Conjunto Conjunto (ssget (ssget "CP" "CP" lista_puntos)) Selecciona los objetos que se encuentren dentro o atraviesen la ventana conformada por los vertices de la lista de puntos. (setq setq Conjunto Conjunto (ssget (ssget "F" "F" lista_puntos)) Selecciona todos los objetos que se cruzen con el borde formado por una lista de puntos. Selecciona todos los elementos que cumplan los parametros de filtro. (ssget ssget "X"( "X"(list list;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;Creamos ;;Creamos una lista (cons 0 "CIRCLE");;;;;;Construimos el par punteado nombre del Objeto "CIRCLE" (cons 8 "Construido");;Construimos el par punteado nombre del Layer ""Construido"
(cons 62 1);;;;;;;;;;;;Construimos el par punteado nombre del Color Rojo );;;;;;;;;;;;;;;;;;;;;;Cerramos la lista );;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Cerramos la seleccion. Esta se ejecuta de manera automatica debido al argumento "X". Otra forma de expresion del ejemplo anterior. (ssget "X" '((0 . "CIRCLE") (8 . "Construido") (62 . 1) ) ) Operadores relacionales y booleanos. (ssget "x" (list;;;;;;;;;;;;;Creamos una lista (cons 0 "TEXT");;;Construimos el par punteado nombre del Objeto "TEXT" (cons -4 "<=");;;;Construimos el par punteado del operador "Menor que o igual" (cons 40 2.5);;;;;;;Construimos el par punteado Altura igual a 2.5 ) ) El operador relacional, que ha de ser una cadena, se aplica a la condición que le siga en la lista. En este ejemplo, SSGET selecciona entidades de texto de altura (asociativo 40) sea menor o igual ("<=") a 2.5. Operador relacional Descripción ____________________________________________________________ "*" Cualquier valor (siempre verdadero) "=" Igual que "!=" Distinto de "+/=" Distinto de "<>" Distinto de "<" Menor que "<=" Menor o igual que ">" Mayor que ">=" Mayor o igual que "&" AND binario (sólo grupos de números enteros) "&=" Igual a enmascarado binario (sólo grupos de números enteros) (ssget "X" (list;;;;;;;;;;;;;Creamos una lista (cons 0 "LINE");;;:Construimos el par punteado nombre del Objeto "LINE" (CONS -4 "<,>,*");;Construimos el par punteado de los operadores "Menor que","Mayor que","Cualqueir valor" '(11 10 100);;;;;;Creamos una lista que se relaciona con los aoperadores en el mismo orden )
) Seleccionar todas las líneas con coordenadas de punto final (asociativo 11): X menores que 10, Y mayores que 100, Z cualesquiera. Operadores booleanos Estos operadores se especifican con el código –4: Operador booleano inicial Encierra... Operador booleano final "
" "" "" "" Ejemplo: (ssget "X" '((-4 . "");;;;;;;;;;;;;;Cerramos la lista del segundo Operador (-4 . "");;;;;;;;;;;;;;Cerramos la lista del tercer Operador (-4 . "OR>");;;;;;;;;;;;;;Cerramos la lista del primer Operador ) ) Esto nos permite Seleccionar todos los objetos y filtrarlos de la siguiente manera: Líneas que se encuentren en el Layer "Construido" y Arcos que tenga radio igual a 10. Los demás objetos no serán seleccionados.
(ssget "_:e") Selecciona todo lo que esta dentro de la caja del cursor (pickbox) (ssget "_:n") llama a ssnamex para obtener información adicional sobre bloques contenedores y matrices de transformación para cualquier entidad seleccionada durante la operación. (ssget "_:r") (ssget "_:s") Permite una sola seleccion. (ssget "_:u") permite seleccionar subentidades. (ssget "_:d") permite duplicados. (ssget "_:v")fuerza la seleccion de subentidades. Esta es la que me gusta para polilineas :DN;;Manejo de selecciones (selection sets) (ssname ss #) ;;Obtiene el nombre de entidad (Entity name) de un elemento específico de la selección donde el 0 es el primer elemento ;; devuelve nombre de la entidad o nil si no hay entidad en índice especifico
(ssnamex ss #) ;;Obtiene el nombre de entidad además de información del método por el cual fue seleccionado, incluyendo las coordenadas ;;devuelve lista con el método de selección, nombre de entidad y coordenadas (según el caso) ;; IDs de Metodo de selección ;;0 nonspecific (i.e., Last All etc.) ;;1 Pick ;;2 Window or WPolygon ;;3 Crossing or CPolygon ;;4 Fence (sslength ss);;Obtiene la cantidad de elementos que contiene la selección ;;Regresa un valor entero o nil si la selección no contiene ningún objeto (ssmemb ename ss) ;;Prueba si una entidad pertenece a una selección, si pertenece regresa el nombre de la entidad y si no regresa NIL (ssadd ename ss) ;;Agrega una entidad a una selección ;;devuelve la selección con la entidad añadida (ssdel ename ss) ;;Elimina una entidad de una selección ;;devuelve la selección con la entidad eliminada (sssetfirst gripset pickset) ;;Fija que objetos son seleccionados y con grips activos ;;pickset es la selección que estará seleccionada ;;gripset es la selección que se le activaran los pinzamientos (ssgetfirst) ;;Determina que objetos están seleccionados y con pinzamientos activos ;; Devuelve una lista de dos selecciones la primera es la selección de objetos que están con los grips activos pero no seleccionados ;; y al segunda la selección de objetos seleccionados y con pinzamientos activos (SSNAME conjunto índice) devuelve el nombre de la entidad (código -1), el conjunto de selección especificado, situado en el lugar indicado por el índice. Entidades dentro de un conjunto numeradas comienzan en 0. Así, en un conjunto con cinco entidades, que se numeran de 0 a 5. Por ejemplo: Seleccionamos varias entidades pero la única a evaluar será la primera con índice (ssname 0), y se guardaría en la variable Entidad. (SETQ Entidad (SSNAME (SSGET) 0))
Para acceder a las demás entidades necesitamos ejecutar un bucle ( while o repeat). Ej.(SETQ Entidad (SSGET));;;;;;;;;;;;;;;;Seleccionamos un conjunto (SETQ Longentidad (SSLENGTH Entidad));Longitud de elementos en el conjunto (SETQ Cont 0);;;;;;;;;;;;;;;;;;;;;;;;;Indice con valor Cero (REPEAT Longentidad;;;;;;;;;;;;;;;;;;;Repetimos el no. de veces de la longitud del conjunto (SETQ Nombreentidad (SSNAME Entidad Cont));;;;Obtenemos el nombre de la entidad Cero del Conjunto ;;;;;;;APLICAMOS UNA FUNCION PARA EL NOMBRE;;;;;;;;;;;;;;;
(SETQ Cont (+ 1 Cont));;;Sumamos una unidad al valor del índice para que cuando repita la acción tome la ;;;;;;;;;;;;;;;;;;;;;;;;;siguiente entidad del conjunto );;;;;;;;;;;;;;;;;;;;;;;;Terminamos el REPEAT
EJ.(SETQ Entidad (SSGET));;;;;;;;;;;;;;;;Seleccionamos un conjunto (SETQ Longentidad (SSLENGTH Entidad));Longitud de elementos en el conjunto (SETQ Cont 0);;;;;;;;;;;;;;;;;;;;;;;;;Indice con valor Cero (while (<= Cont Longentidad);;;;;;;;;;Mientras el valor del Índice sea menor o igual a la longitud del conjunto (SETQ Nombreentidad (SSNAME Entidad Cont));;;;Obtenemos el nombre de la entidad Cero del Conjunto (SETQ Cont (+ 1 Cont));;;Sumamos una unidad al valor del índice para que cuando repita la acción tome la ;;;;;;;;;;;;;;;;;;;;;;;;;siguiente entidad del conjunto );;;;;;;;;;;;;;;;;;;;;;;;Terminamos el WHILE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Para gerardo ayuda con el lisp xD Notapor Gilberth » Vie 01 Ago, 2008 16:58 Tengo un lisp que me borra capas y a otras les asigna otros valores para dibujar una planta del nivel interior pero tengo un problema quiero hacer un filtro de selección que sea algo asi (ssget "all" '((8 . "*capa"))) el problema es que no solo quiero filtrar la capa si no también todos aquellos textos que tengan escrito lo mismo "VE2" algo asi para sustituirlas por otro texto solo que el usuario no tenga la necesidad de seleccionarlos que por el filtro las seleccione solas pero no se como hacerle gracias:-) :cry: Última edición por Gilberth el Sab 02 Ago, 2008 00:22, editado 1 vez en total Gilberth Mensajes: 180 Registrado: Jue 08 May, 2008 19:19 Arriba
Re: Otra ayuda para terminar un lisp Notapor gerardogqa » Vie 01 Ago, 2008 17:44 (ssget "_X" '((0 . "text")(8 . "*capa")(1 . "VE2"))) Esto selecciona de todo el dibujo actual, los textos que digan "VE2" y que esten en la capa indicada. Ojo con el "*" que pusiste, este hara que la seleccion tome todas las capas que que terminen con la particula capa ejemplo: "algunacapa" "_capa" "capa" "columnas-capa" Lo mismo si quieres seleccionar tanto textos como multitextos pones (0 . "*text") gerardogqa Mensajes: 2312 Registrado: Mar 06 Mar, 2007 21:47 Arriba Notapor Gilberth » Sab 02 Ago, 2008 00:26 Aca te dejo el lisp aun le falta un poco de arreglo pero en si funciona Código: Seleccionar todo (defun c:hola (/ ss1 ss2 ss3 ss4 ss5 tx v w x y z) (command "undo" "be") (if (setq ss1 (ssget "_x" '((0 . "*text")(8 . "*SROT4")(1 . "VF1")))) (progn (setq tx "VE/") (setq v 0) (repeat (sslength ss1) (setq nent (ssname ss1 v) lent (entget nent) v (1+ v) ) (entmod (subst (cons 1 tx) (assoc 1 lent) lent)) ))) (if (setq ss2 (ssget "_x" '((0 . "*text")(8 . "*SROT4")(1 . "VF2")))) (progn (setq tx "VE/") (setq w 0) (repeat (sslength ss2) (setq nent (ssname ss2 w)
lent (entget nent) w (1+ w) ) (entmod (subst (cons 1 tx) (assoc 1 lent) lent)) ))) (if (setq ss3 (ssget "_x" '((0 . "*text")(8 . "*SROT4")(1 . "VF3")))) (progn (setq tx "VE/") (setq x 0) (repeat (sslength ss3) (setq nent (ssname ss3 x) lent (entget nent) x (1+ x) ) (entmod (subst (cons 1 tx) (assoc 1 lent) lent)) ))) (if (setq ss4 (ssget "_x" '((0 . "*text")(8 . "*SROT4")(1 . "VF4")))) (progn (setq tx "VE/") (setq y 0) (repeat (sslength ss4) (setq nent (ssname ss4 y) lent (entget nent) y (1+ y) ) (entmod (subst (cons 1 tx) (assoc 1 lent) lent)) ))) (if (setq ss5 (ssget "_x" '((0 . "*text")(8 . "*SROT4")(1 . "VF5")))) (progn (setq tx "VE/") (setq z 0) (repeat (sslength ss5) (setq nent (ssname ss5 z) lent (entget nent) z (1+ z) ) (entmod (subst (cons 1 tx) (assoc 1 lent) lent)) ))) (if (tblsearch "layer" "Hs1") (command "-laydel" "n" "Hs1" "" "y")) (if (tblsearch "layer" "Hs4") (command "-laydel" "n" "Hs4" "" "y"))
(if (tblsearch "layer" "Hs3") (command "-laydel" "n" "Hs3" "" "y")) (if (tblsearch "layer" "2H") (command "-laydel" "n" "2H" "" "y")) (if (tblsearch "layer" "0-PLAC") (command "-laydel" "n" "0-PLAC" "" "y")) (if (tblsearch "layer" "0-BUQ-V") (progn (command "-LAYER" "m" "0-VE" "C" 144 "" "") (setq ss1 (ssget "all" '((8 . "*0-BUQ-V")))) (command "change" ss1 "" "p" "la" "0-VE" ""))) (if (tblsearch "layer" "0-BUQ-P") (progn (command "-LAYER" "m" "0-VE" "C" 144 "" "") (setq ss2 (ssget "all" '((8 . "*0-BUQ-P")))) (command "change" ss1 "" "p" "la" "0-VE" ""))) (if (tblsearch "layer" "0-VF") (progn (command "-LAYER" "m" "0-VE" "C" 144 "" "") (setq ss2 (ssget "all" '((8 . "*0-VF")))) (command "change" ss2 "" "p" "la" "0-VE" ""))) (command "undo" "end") )
Y te dejo el dwg para que lo compares gracias Adjuntos I-1143APLF01-G.dwg nueva version (106.56 KiB) 7 veces Última edición por Gilberth el Sab 02 Ago, 2008 23:45, editado 1 vez en total Gilberth Mensajes: 180 Registrado: Jue 08 May, 2008 19:19 Arriba Re: Para gerardo ayuda con el lisp xD Notapor gerardogqa » Sab 02 Ago, 2008 06:31 Si funciona esta bien. La practica te va enseñando a aplicar las formas y funciones mas adecuadas para comodidad tuya y rendimiento de la maquina. Por ejemplo mira esta version de tu rutina. Comparalas para que notes donde se redujo
Código: Seleccionar todo (defun c:hola (/ ss lent v caso) (command "undo" "be") (setq v 0) (if (setq ss (ssget "_X" '((0 . "*text")(8 . "SROT4")(1 . "VF*")) )) (repeat (sslength ss) (setq lent (entget (ssname ss v)) v (1+ v)) (entmod (subst '(1 . "VE/") (assoc 1 lent)lent)) ) ) (foreach caso '("Hs1" "Hs4" "Hs3" "2H" "0-PLAC") (if (tblsearch "layer" caso) (command "-laydel" "n" caso "" "y")) ) (if (setq ss (ssget "_X" '((8 . "0-BUQ-V,0-BUQ-P,0-VF")))) (command "-layer" "m" "0-VE" "C" 144 "" "" "change" ss "" "p" "la" "0-VE" "")) (command "undo" "end") ) gerardogqa Mensajes: 2312 Registrado: Mar 06 Mar, 2007 21:47 Arriba Re: Para gerardo ayuda con el lisp xD Notapor devitg » Sab 02 Ago, 2008 13:43 Mas claro imposible . Uso acad 2008 en W7. [email protected] Si tuviera ocho horas , para voltear un arbol , me pasaria seis horas afilando mi hacha. Abraham Lincoln Mi nombre es Gabriel (Gabo) devitg Mensajes: 5770 Registrado: Lun 15 Mar, 2004 00:46 Ubicación: CORDOBA ARGENTINA Arriba
Re: Para gerardo ayuda con el lisp xD Notapor Gilberth » Sab 02 Ago, 2008 15:20 Ok veo que aun era mas simple de lo q pensaba por dicha hay cosas que aprendi con esta ayuda... Pero tengo otra se podria hacer un filtro por geometria y por un valor alfabetico lo que quiero es q si miras el dibujo que te di hay una etiqueta con un cuadrado verde con una sola letra pero con diferentes valores alfabéticos lo que quiero seria borrarlos espero no pasarme gracias :) Última edición por Gilberth el Sab 02 Ago, 2008 17:01, editado 1 vez en total Gilberth Mensajes: 180 Registrado: Jue 08 May, 2008 19:19 Arriba confirmar los elementos a borrar Notapor devitg » Sab 02 Ago, 2008 16:13 Me imagino , que son los cuadrados que tienen una sola letra. O mejor márcalos en el DWG La clarividencia o adivinación no son mis especialidades. Uso acad 2008 en W7. [email protected] Si tuviera ocho horas , para voltear un arbol , me pasaria seis horas afilando mi hacha. Abraham Lincoln Mi nombre es Gabriel (Gabo) devitg Mensajes: 5770 Registrado: Lun 15 Mar, 2004 00:46 Ubicación: CORDOBA ARGENTINA Arriba Re: Para gerardo ayuda con el lisp xD Notapor Gilberth » Sab 02 Ago, 2008 16:57 Devitg exacto son las que dices si me das un par de horas te las marco :-) Gracias un saludo de su amigo Gilberth :)
Gilberth Mensajes: 180 Registrado: Jue 08 May, 2008 19:19 Arriba Re: Para gerardo ayuda con el lisp xD Notapor gerardogqa » Sab 02 Ago, 2008 19:16 Esto podria servir. Selecciona las polilineas de 4 puntos en capa "srot3", luego filtra las que parecen cuadrados y crea un nuevo conjunto de seleccion con esas polilineas y los textos que hayan dentro de ellas en capa SROT4, siempre y cuando se encuentre un texto con dichas caracteristicas Código: Seleccionar todo (defun filtro ( / ss cont ssdef nent lent puntos caso ss2 ) (setq ss (ssget "_X" '((0 . "LWPOLYLINE")(8 . "SROT3")(90 . 4))) cont 0 ssdef (ssadd) ) (if ss (repeat (sslength ss) (setq nent (ssname ss cont) cont (1+ cont) lent (entget nent) puntos nil ) ;;Listar puntos de la polilinea (foreach caso lent (if (= (car caso)10) (setq puntos (cons (cdr caso) puntos)))) ;;Si parece cuadrado (polilinea cerrada, con deltax=deltay entre el primer y el tercer punto) (if (and (equal (abs (- (caar puntos)(caaddr puntos))) (abs (- (cadar puntos)(cadr (nth 2 puntos))))0.000001) (= (logand 1 (cdr (assoc 70 lent))) 1) ) (progn ;;Seleccionar textos en capa srot4 que se encuentren dentro del cuadrado (if (setq ss2 (ssget "_W" (car puntos)(caddr puntos)'((0 . "*TEXT")(8 . "SROT4")))) (progn ;;Agregar el texto y el cuadrado a la seleccion definitiva (si existe el texto) (ssadd (ssname ss2 0) ssdef) (ssadd nent ssdef)
) ) ) ) ) ) (eval 'ssdef) ) gerardogqa Mensajes: 2312 Registrado: Mar 06 Mar, 2007 21:47 Arriba Re: Para gerardo ayuda con el lisp xD Notapor Gilberth » Sab 02 Ago, 2008 19:55 Ok capte algunas cosas las que no utilizare la ayuda del auto cad gracias :-) Gracias un saludo de su amigo Gilberth :) Gilberth Mensajes: 180 Registrado: Jue 08 May, 2008 19:19 Arriba Notapor Gilberth » Sab 02 Ago, 2008 23:49 Gilberth escribió: Devitg exacto son las que dices si me das un par de horas te las marco : -)
Esta acutualizado muchas gracias por el interes Gilberth Mensajes: 180 Registrado: Jue 08 May, 2008 19:19 Arriba
Re: Para gerardo ayuda con el lisp xD Notapor Gilberth » Dom 03 Ago, 2008 00:22 gerardo con respecto al filtro que me acabas de dar por lo que veo hace selecciones del cuadrado y del texto pero no se como aplicarla a la funcion si me pudieras explicar como emplearla perdon por la ignorancia y gracias otra vez Gracias un saludo de su amigo Gilberth :) Gilberth Mensajes: 180 Registrado: Jue 08 May, 2008 19:19 Arriba Re: Para gerardo ayuda con el lisp xD Notapor gerardogqa » Dom 03 Ago, 2008 00:43 Aqui un ejemplo de entre las muchas formas de usarlo Código: Seleccionar todo (defun c:hola ( / ....) (defun filtro ( / ) .... cuerpo de la funcion "filtro" ) ... funcion "c:hola"... (setq ss (filtro)) .... aqui haces lo que quieras hacer con ss ... resto posible de la funcion "c:hola" ) gerardogqa Mensajes: 2312 Registrado: Mar 06 Mar, 2007 21:47 Arriba Re: Para gerardo ayuda con el lisp xD
Notapor Gilberth » Dom 03 Ago, 2008 01:10 men exelente ya entendi y funciono muchisimas gracias Gracias un saludo de su amigo Gilberth :) Gilberth Mensajes: 180 Registrado: Jue 08 May, 2008 19:19 Arriba Notapor Gilberth » Lun 04 Ago, 2008 03:52 Hola solo necesito otra pequeña ayuda me podrias ayudar con un poco de explicacion de este codigo que me proporcionastes e estado leyendo pero la funcionalidad gloval no la capto gracias :oops: Código: Seleccionar todo (foreach caso lent (if (= (car caso)10) (setq puntos (cons (cdr caso) puntos)))) (if (and (equal (abs (- (caar puntos)(caaddr puntos))) (abs (- (cadar puntos)(cadr (nth 2 puntos))))0.000001) (= (logand 1 (cdr (assoc 70 lent))) 1) )
Cambiar entidades a una capa nueva Notapor leo » Mar 29 Mar, 2005 08:27 Compañeros todos. Tengo unos planos en los que las entidades dentro de una capa tienen distintas propiedades (De tipo de linea y de color sobre). Alguien sabe de alguna rutina que me seleccione las entidades que hay dentro de una misma capa, seleccionandomelas por capa, por tipo de linea y/o por color, para poder cambiar dichas entidades a una nueva capa que yo cree. Se que es complicado, pero me solucionaria muchos problemas, y sobre todo tiempo de ir seleccionando una a una con el filter. De madrid al cielo. Hasta pronto compañeros. leo
Mensajes: 251 Registrado: Jue 23 Oct, 2003 14:23 Ubicación: Madrid Arriba Re: Cambiar entidades a una capa nueva Notapor LM2Arq » Mar 29 Mar, 2005 08:58 Hola leo. No hace falta hacer ninguna rutina para lo que pides, ya que AutoCAD viene "de fábrica" bien surtido respecto de lo que buscas. Se trata del comando FILTER, que lo puedes usar tanto sólo a fin de obtener la selección de objetos que deseas, como en modo transparente dentro de otro comando de AutoCAD (precediéndolo del apóstrofo: 'FILTER). Con él puedes crear un filtro de selección de objetos que se acomode a tus necesidades (objetos que cumplan unas determinadas propiedades, o que sean de determinados tipos de entidades, etc, e incluso con funciones Booleanas AND, OR, X OR, etc.) y pudiendo aplicar dicho filtro a todo el dibujo o sólo a una parte del mismo o al grupo de objetos que globalmente selecciones. En fin, una delicia de utilidad no del todo bien conocida ni aprovechada que, como ves, ya está incorporada a AutoCAD desde hace algunas versiones atrás. Hay otra orden, SELECR (o _QSELECT en inglés), que aunque aparenta ser distinta de la anterior, en realidad internamente usa de aquella efectuando una selección de entidades semejante y lo que tiene de distinto, digamos en forma "más elaborada y amigable", es la interfaz gráfica de usuario en su cuadro de diálogo pero que paradójicamente y en contra de lo que nos pudiera sugerir su nombre de orden ("selección rápida" o "quick selection"), no sólo no realiza un t rabajo de búsqueda más rápido sino que, con un filtro complicado y en un dibujo grande, hay mejoras ostensibles de tiempo en la búsqueda y selección de entidades a favor de la orden FILTER. Un saludo. LM2Ark. MIGUEL A. LAZARO, desarrollador de LM2Ark (aplicación para arquitectura y construcción) http://perso.wanadoo.es/lm2ark/index.htm LM2Arq Mensajes: 221 Registrado: Dom 16 Nov, 2003 03:01 Ubicación: Córdoba (ESPAÑA) Arriba
Re: Cambiar entidades a una capa nueva Notapor leo » Mar 29 Mar, 2005 11:04 El problema es que tengo muchos archivos y muchas capas con entidades que necesito separar. Lo estaba intentando con un scr, ya que casi todos los archivos tienen las mismas capas, pero no consigo utilizar la orden filter en un archivo de este estilo, por eso preguntaba por una rutina de seleccion de este tipo. De todas maneras, ¿como puedo usar el filter en un archivo scr? De madrid al cielo. Hasta pronto compañeros. leo Mensajes: 251 Registrado: Jue 23 Oct, 2003 14:23 Ubicación: Madrid Arriba Re: Cambiar entidades a una capa nueva Notapor oaleman64 » Mar 29 Mar, 2005 12:34 Leo con una rutina en visuallisp, se podria solucionar tu problema pero necesitaria la siguiente informacion........... Capas que se buscarian, el color y tipo de lineas , y la capa hacia donde irian cada una de estas selecciones....... bye oaleman64 Con la Frente en alto Leal a nosotros Leal a nuestros principios Leal a nuestro FSLN Leal a nuestro grito de combate PATRIA LIBRE O MORIR Comandante Tomas Borge (En su memoria) oaleman64
Mensajes: 1888 Registrado: Vie 21 May, 2004 19:34 Ubicación: Managua, Nicaragua Arriba Re: Cambiar entidades a una capa nueva Notapor LM2Arq » Mar 29 Mar, 2005 16:52 Hola de nuevo leo. Usando la orden FILTER para, por ejemplo, seleccionar aquellas entidades gráficas de un dibujo que cumplan con las condiciones de ser o bien Línea o bien Polilínea, y que además se encuentren bien en la capa llamada "MUROS" o bien en la capa "SANEAMIENTO", y que además tengan un tipo de línea que sea o bien "LÏNEAS_OCULTAS" o bien "MORSE_G, y que además todas las entidades que deseo seleccionar deben tener cualquier color menos el Rojo, entonces deberemos fabricar con la referida orden un filtro en el que se aprecie lo siguiente en la ventana de edición del filtro del correspondiente cuadro de diálogo de la orden: Código: Seleccionar todo **Inicio AND **Inicio OR Objeto = Línea Objeto = Polilínea ** Fin OR ** Inicio OR Capa = MUROS Capa = SANEAMIENTO ** Fin OR ** Inicio OR Tipo de línea = LÍNEAS_OCULTAS Tipo de línea = MORSE_G ** Fin OR ** Inicio NOT Color = 1 - Rojo ** Fin NOT ** Fin AND
El uso de la orden FILTER, por su facilidad de uso, ya que el cuadro de diálogo mediante la lista desplegable que contiene todos los elementos necesarios para la creación de filtros complejos con facilidad, es la herramienta que creo necesitas para el problema que planteas en tu caso.
No obstante si de lo que se tratase es de programar alguna utilidad de propósito general en donde hiciera falta en algún momento seleccionar un conjunto de entidades que reunen características y propiedades diversas que hacen de ello una selección compleja similar a la expresada antes, ello también se puede hacer desde la rutina LISP con la función SSGET del modo siguiente (para el mismo ejemplo anterior): Código: Seleccionar todo (SSGET "X" '((-4 . "") (-4 . "") (-4 . "") (-4 . "!=") (62 . 1) ;;o lo siguiente en lugar de la línea anterior: ;;(-4 . "") (-4 . "AND>") ) )
En tu caso te sigo recomendando el uso de la orden FILTER, ya que para cada caso distinto de selección que necesitases te verías obligado a reprogramar la r utina, método siempre más tedioso y expuesto a errores (por lo "artesanal"), mientras que la orden FILTER te permite guardar cada filtro que generes para su uso posterior y en el peor de los casos en que tuvieras que fabricar otro filtro diferente siempre es más fácil y exento de errores mediante el manejo interactivo de la interfaz de usuario que te proporciona el cuadro de diálogo de la orden. Un saludo. LM2Ark.