Académique Documents
Professionnel Documents
Culture Documents
La función ssget proporciona los métodos más generales para crear un conjunto designado:
De forma explícita mediante la especificación de las entidades que se seleccionan con las opciones
Ultimo, Previo, Ventana, Implícito, PolígonoV, Captura, PolígonoC o Borde (como en el uso
interactivo de AutoCAD) o mediante la especificación de un solo punto. También puede
seleccionarse la base de datos completa.
Con ambas opciones se puede utilizar el filtrado, que permite especificar una lista de los atributos
y condiciones que deben cumplir las entidades seleccionadas.
El primer argumento de ssget es una cadena que describe qué opción de selección se va a utilizar.
Los dos argumentos siguientes ptl y pt2 especifican los valores de puntos para las opciones
relevantes (si no se aplican, no deben incluirse). Debe incluirse una lista de puntos lísta-pt como
argumento para los métodos de selección que permiten la designación por polígonos (por ejemplo
Borde, Captura de polígono y Ventana de polígono). El último argumento, lista-fíltros, es opcional.
Si se incluye, especifica la lista de valores de campo de las entidades que se utilizan en el filtrado.
En la tabla siguiente se resumen los valores de modo disponibles y los argumentos que utiliza cada
uno (puede utilizarse lista-filtros como argumento adicional):
Mod
Método de designación
Prototipos
ninguno
(ssget "U")
"P"
(ssget "P")
"I"
Conjunto designado implícito (con junto anterior creado con PICKFIRST activada)
(ssget "I")
"V"
Designación de ventana
"C"
Designación de captura
"B"
"CP"
"VP"
Designación de ventana de polígono
"X"
c>(ssget "X")
Cuidado: Si se especifica modo "X" y no se incluye lista-fíltros, ssget selecciona todas las entidades
de la base de datos, incluidas las capas desactivadas, inutilizadas y fuera de la parte visible de la
pantalla.
Importante: Las aplicaciones de AutoLlSP no pueden tener más de 128 conjuntos designados
abiertos a la vez. El límite viene determinado por diferentes factores y puede ser ligeramente
menor según el sistema. Cuando se alcanza el límite, AutoCAD no permite crear más conjuntos
designados. No resulta aconsejable utilizar un gran número de conjuntos de forma simultánea; en
su lugar, es preferible mantener un pequeño número de conjuntos abiertos y definir como nil los
que ya no resulten necesarios. Si se alcanza el número máximo de conjuntos designados, debe
llamarse a gc (véase "Memoria nodal" en la página 183 para obtener más información sobre la
recuperación de memoria inutilizada) antes de volver a utilizar ssget.
Si se incluye lista-fíltros como último argumento de ssget, la función analiza las entidades
seleccionadas y crea un conjunto designado que contiene los nombres de las entidades principales
que concuerdan con los criterios especificados. Por ejemplo, puede obtenerse un conjunto
designado que incluya todas las entidades de un tipo determinado, que estén en una capa
determinada o que tengan un color determinado.
lista-fíltros especifica qué propiedades) deben comprobarse y qué valores constituyen una
concordancia.
Los nombres de símbolos que se especifican en las listas de filtros el tipo de entidad (0), el nombre
de bloque (2), el nombre de DIMSTYLE (3), el tipo de línea (6), el estilo de texto (7) y el nombre de
capa (8)-pueden incluir patrones de comodines. Estos patrones que reconoce ssget son los mismos
que reconoce la función wcmatch.
Con la utilización de¡ argumento lísta-fíltros en ssget, pueden seleccionarse todas las entidades
que contienen datos de entidad extendidos de una aplicación determinada.
seleccionaría todos los círculos con datos extendidos tanto en la aplicación "APL1" como en
"APL2". Puede utilizarse la concordancia de comodines, por lo que tanto:
como
seleccionarían todos los círculos con datos extendidos en cualquiera o ambas aplicaciones.
Condiciones de relación
Si no se indica de otra forma, los elementos de lísta-fíltros deben cumplir la condición "igual a". En
el caso de los grupos numéricos (números enteros, reales, puntos y vectores) pueden especificarse
otras relaciones mediante la inclusión de un código especial del grupo -4, que indica un operador
de relación. El valor de un,grupo -4 es una cadena que indica el operador de condición que debe
aplicarse al grupo siguiente de lista-fíltros.
Los operadores de agrupación se especifican mediante grupos de tipo -4, al igual que los
operadores de relación. Estos operadores se incluyen en parejas y deben situarse de forma
correcta en lista-filt:ros para que ssget no genere ningún error.
Una vez creado un conjunto designado, pueden añadirse o suprimiese entidades del conjunto
mediante las funciones ssadd y ssdel, similares a las opciones Añadir y Quitar cuando AutoCAD
solicita al usuario de forma interactiva la selección o supresión de objetos.
http://docs.autodesk.com/ACD/2011/ENU/filesALR/WSfacf1429558a55de1a7524c1004e616f8b-
5913.htm
http://www.hispacad.com/foro/viewtopic.php?t=29660
Seleccionar Objeto(s).
Funcion SSGET
Selecciona los objetos que se encuentren dentro de la ventana conformada por los
vertices p1 y p2.
Selecciona los objetos que se encuentren dentro o atraviesen la ventana conformada por los
vertices p1 y p2.
Selecciona los objetos que se encuentren dentro de la ventana conformada por los
Selecciona los objetos que se encuentren dentro o atraviesen la ventana conformada por los
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.
);;;;;;;;;;;;;;;;;;;;;;Cerramos la lista
);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Cerramos la seleccion.
(8 . "Construido")
(62 . 1)
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)
____________________________________________________________
"!=" Distinto de
"+/=" Distinto de
"<>" Distinto de
'(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):
Operadores booleanos
Ejemplo:
Esto nos premite Seleccionar todos los objetos y filtrarlos de la siguiente manera:
Lineas que se encuentren en el Layer "Construido" y Arcos que tenga radio igual a 10.
(ssget "_:e")
(ssget "_:n")
llama a ssnamex para obtener informacion adicional sobre bloques contenedores y matrices de
transformacion para cualquier entidad seleccionada durante la operacion.
(ssget "_:r")
(ssget "_:s")
(ssget "_:u")
(ssget "_:d")
permite duplicados.
(ssget "_:v")
(ssname ss #)
(ssnamex ss #)
;;Obtiene el nombre de entidad ademas de informacion del metodo por el cual fue seleccionado,
incluyendo las coordenadas
;;devuelve lista con el metodo de selección, nombre de entidad y coordenadas (segun el caso)
;;1 Pick
;;4 Fence
(sslength ss)
;;Obtiene la cantidad de elementos que contiene la selección
;;Prueba si una entidad pertenece a una selección, si pertenece regresa el nombre de la entidad y
si no regresa NIL
(ssgetfirst)
;; devuelve una lista de dos selecciones la primera es la seleccion de objetos que estan con los
grips activos pero no seleccionados
Seleccionamos varias entidades pero la unica a evaluar sera la primera con indice (ssname 0),
Para acceder a las demas entidades necesitamos ejecutar un bucle (while o repeat).
Ej.-
(SETQ Cont (+ 1 Cont));;;Sumamos una unidad al valor del indice para que cuando repita la accion
tome la
);;;;;;;;;;;;;;;;;;;;;;;;Terminamos el REPEAT
EJ.-
(SETQ Cont (+ 1 Cont));;;Sumamos una unidad al valor del indice para que cuando repita la accion
tome la
);;;;;;;;;;;;;;;;;;;;;;;;Terminamos el WHILE
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
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ó 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
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
Arriba
(if
(setq nent
(ssname ss1 v)
v (1+ v)
)))
(if
(setq nent
(ssname ss2 w)
w (1+ w)
)))
(if
(setq nent
(ssname ss3 x)
x (1+ x)
)
)))
(if
(setq nent
(ssname ss4 y)
y (1+ y)
)))
(if
(setq nent
(ssname ss5 z)
z (1+ z)
)))
(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"))
Adjuntos
I-1143APLF01-G.dwg
nueva version
Última edición por Gilberth el Sab 02 Ago, 2008 23:45, editado 1 vez en total
Gilberth
Mensajes: 180
Arriba
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
(setq v 0)
v (1+ v))
(if (tblsearch "layer" caso) (command "-laydel" "n" caso "" "y"))
)
(command "-layer" "m" "0-VE" "C" 144 "" "" "change" ss "" "p" "la" "0-VE" ""))
gerardogqa
Mensajes: 2312
Arriba
DEVITG@GMAIL.COM
Si tuviera ocho horas , para voltear un arbol , me pasaria seis horas afilando mi hacha.
Abraham Lincoln
devitg
Mensajes: 5770
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
Arriba
Me imagino , que son los cuadrados que tienen una sola letra.
DEVITG@GMAIL.COM
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
Arriba
Devitg exacto son las que dices si me das un par de horas te las marco :-)
Gilberth
Mensajes: 180
Arriba
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
cont 0
ssdef (ssadd)
(if ss
puntos nil
;;Si parece cuadrado (polilinea cerrada, con deltax=deltay entre el primer y el tercer punto)
(if (and
(progn
(if (setq ss2 (ssget "_W" (car puntos)(caddr puntos)'((0 . "*TEXT")(8 . "SROT4"))))
(progn
(eval 'ssdef)
gerardogqa
Mensajes: 2312
Arriba
Ok capte algunas cosas las que no utilizare la ayuda del auto cad gracias :-)
Gilberth
Mensajes: 180
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 :-)
Gilberth
Mensajes: 180
Arriba
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
Gilberth
Mensajes: 180
(defun filtro ( / )
(setq ss (filtro))
gerardogqa
Mensajes: 2312
Arriba
Gilberth
Mensajes: 180
Arriba
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:
(if (and
)
Cambiar entidades a una capa nueva
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.
De madrid al cielo.
leo
Mensajes: 251
Ubicación: Madrid
Arriba
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, XOR, 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 trabajo 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.
http://perso.wanadoo.es/lm2ark/index.htm
LM2Arq
Mensajes: 221
Arriba
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 madrid al cielo.
leo
Mensajes: 251
Ubicación: Madrid
Arriba
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
oaleman64
Mensajes: 1888
Arriba
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:
**Inicio OR
Objeto = Línea
Objeto = Polilínea
** Fin OR
** Inicio OR
Capa = MUROS
Capa = SANEAMIENTO
** Fin OR
** Inicio OR
** 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.
(-4 . "<OR")
(0 . "LINE") (0 . "LWPOLYLINE")
(-4 . "OR>")
(-4 . "<OR")
(8 . "MUROS") (8 . "SANEAMIENTO")
(-4 . "OR>")
(-4 . "<OR")
(6 . "LÍNEAS_OCULTAS") (6 . "MORSE_G")
(-4 . "OR>")
(-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 rutina, 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.