Professional Documents
Culture Documents
com/ACD/2011/ENU/filesALR/WSfacf1429558a55de1a7524c1004e616f8b-
5913.htm
http://www.hispacad.com/foro/viewtopic.php?t=29660
Seleccionar Objeto(s).
Funcion SSGET
El operador relacional, que ha de ser una cadena, se aplica a la condicin 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.
Operadores booleanos
Estos operadores se especifican con el cdigo 4:
Operador booleano inicial Encierra... Operador booleano final
"<AND" uno o ms operandos "AND>"
"<OR" uno o ms operandos "OR>"
"<XOR" dos operandos "XOR>"
"<NOT" un operando "NOT>"
Ejemplo:
(ssget "X" '((-4 . "<OR");;Creamos la lista del primer Operador
(-4 . "<AND");;;;;;;;;;;;;;Creamos la lista del segundo Operador
(0 . "LINE");;;;;;;Construimos el par punteado nombre del Objeto "LINE"
(8 . "Construido");Construimos el par punteado nombre del Layer "Construido"
(-4 . "AND>");;;;;;;;;;;;;;Cerramos la lista del segundo Operador
(-4 . "<AND");;;;;;;;;;;;;;Creamos la lista del tercer Operador
(0 . "ARC");;;;;;;;Construimos el par punteado nombre del Objeto "ARC"
(40 . 10);;;;;;;;;;Construimos el par punteado DEL radio 10
(-4 . "AND>");;;;;;;;;;;;;;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:
Lneas que se encuentren en el Layer "Construido" y Arcos que tenga radio igual a 10.
Los dems objetos no sern seleccionados.
(ssget "_:e") Selecciona todo lo que esta dentro de la caja del cursor (pickbox)
(ssget "_:n") llama a ssnamex para obtener informacin adicional sobre bloques contenedores y
matrices de transformacin para cualquier entidad seleccionada durante la operacin.
(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 especfico de la
seleccin 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 adems de informacin del mtodo por el cual fue
seleccionado, incluyendo las coordenadas
;;devuelve lista con el mtodo de seleccin, nombre de entidad y coordenadas (segn el caso)
Para acceder a las dems 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 accin
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 accin
tome la
;;;;;;;;;;;;;;;;;;;;;;;;;siguiente entidad del conjunto
);;;;;;;;;;;;;;;;;;;;;;;;Terminamos el WHILE
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Gilberth
Mensajes: 180
Registrado: Jue 08 May, 2008 19:19
Arriba
Re: Otra ayuda para terminar un lisp
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"
gerardogqa
Mensajes: 2312
Registrado: Mar 06 Mar, 2007 21:47
Arriba
Adjuntos
I-1143APLF01-G.dwg
nueva version
(106.56 KiB) 7 veces
ltima edicin 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
Por ejemplo mira esta version de tu rutina. Comparalas para que notes donde se redujo
Cdigo: 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
devitg
Mensajes: 5770
Registrado: Lun 15 Mar, 2004 00:46
Ubicacin: CORDOBA ARGENTINA
Arriba
Re: Para gerardo ayuda con el lisp xD
Gilberth
Mensajes: 180
Registrado: Jue 08 May, 2008 19:19
Arriba
devitg
Mensajes: 5770
Registrado: Lun 15 Mar, 2004 00:46
Ubicacin: CORDOBA ARGENTINA
Arriba
Mensajes: 180
Registrado: Jue 08 May, 2008 19:19
Arriba
gerardogqa
Mensajes: 2312
Registrado: Mar 06 Mar, 2007 21:47
Arriba
Gilberth
Mensajes: 180
Registrado: Jue 08 May, 2008 19:19
Arriba
Gilberth escribi:
Devitg exacto son las que dices si me das un par de horas te las marco :-)
Gilberth
Mensajes: 180
Registrado: Jue 08 May, 2008 19:19
Arriba
Re: Para gerardo ayuda con el lisp xD
Gilberth
Mensajes: 180
Registrado: Jue 08 May, 2008 19:19
Arriba
(setq ss (filtro))
.... aqui haces lo que quieras hacer con ss
gerardogqa
Mensajes: 2312
Registrado: Mar 06 Mar, 2007 21:47
Arriba
Gilberth
Mensajes: 180
Registrado: Jue 08 May, 2008 19:19
Arriba
leo
Mensajes: 251
Registrado: Jue 23 Oct, 2003 14:23
Ubicacin: Madrid
Arriba
No hace falta hacer ninguna rutina para lo que pides, ya que AutoCAD viene "de fbrica" bien
surtido respecto de lo que buscas.
Se trata del comando FILTER, que lo puedes usar tanto slo a fin de obtener la seleccin de
objetos que deseas, como en modo transparente dentro de otro comando de AutoCAD
(precedindolo del apstrofo: 'FILTER). Con l puedes crear un filtro de seleccin 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, XOR, etc.) y
pudiendo aplicar dicho filtro a todo el dibujo o slo 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 atrs.
Hay otra orden, SELECR (o _QSELECT en ingls), que aunque aparenta ser distinta de la anterior, en
realidad internamente usa de aquella efectuando una seleccin de entidades semejante y lo que
tiene de distinto, digamos en forma "ms elaborada y amigable", es la interfaz grfica de usuario
en su cuadro de dilogo pero que paradjicamente y en contra de lo que nos pudiera sugerir su
nombre de orden ("seleccin rpida" o "quick selection"), no slo no realiza un trabajo de
bsqueda ms rpido sino que, con un filtro complicado y en un dibujo grande, hay mejoras
ostensibles de tiempo en la bsqueda y seleccin de entidades a favor de la orden FILTER.
Un saludo.
LM2Ark.
MIGUEL A. LAZARO, desarrollador de LM2Ark
(aplicacin para arquitectura y construccin)
http://perso.wanadoo.es/lm2ark/index.htm
LM2Arq
Mensajes: 221
Registrado: Dom 16 Nov, 2003 03:01
Ubicacin: Crdoba (ESPAA)
Arriba
Re: Cambiar entidades a una capa nueva
leo
Mensajes: 251
Registrado: Jue 23 Oct, 2003 14:23
Ubicacin: Madrid
Arriba
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
oaleman64
Mensajes: 1888
Registrado: Vie 21 May, 2004 19:34
Ubicacin: Managua, Nicaragua
Arriba
Usando la orden FILTER para, por ejemplo, seleccionar aquellas entidades grficas de un dibujo
que cumplan con las condiciones de ser o bien Lnea o bien Polilnea, y que adems se encuentren
bien en la capa llamada "MUROS" o bien en la capa "SANEAMIENTO", y que adems tengan un
tipo de lnea que sea o bien "LNEAS_OCULTAS" o bien "MORSE_G, y que adems 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 edicin
del filtro del correspondiente cuadro de dilogo de la orden:
El uso de la orden FILTER, por su facilidad de uso, ya que el cuadro de dilogo mediante la lista
desplegable que contiene todos los elementos necesarios para la creacin 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 propsito general en donde
hiciera falta en algn momento seleccionar un conjunto de entidades que reunen caractersticas y
propiedades diversas que hacen de ello una seleccin compleja similar a la expresada antes, ello
tambin se puede hacer desde la rutina LISP con la funcin SSGET del modo siguiente (para el
mismo ejemplo anterior):
En tu caso te sigo recomendando el uso de la orden FILTER, ya que para cada caso distinto de
seleccin que necesitases te veras obligado a reprogramar la rutina, mtodo siempre ms 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 ms fcil y exento de errores mediante el manejo interactivo de la
interfaz de usuario que te proporciona el cuadro de dilogo de la orden.
Un saludo.
LM2Ark.