Sunteți pe pagina 1din 33

Gestión de conjuntos designados

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.

Mediante la solicitud al usuario para que seleccione objetos.

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):

Opciones de selección en ssget

Mod

Método de designación

Prototipos

ninguno

Selección del usuario o designación de un solo punto (si se ha especificado pt1

(ssget) o (ssget pt1)

"U" La última entidad creada visible en pantalla (ssget "U")

"P" Conjunto designado anterior (ssget "P")

"I" Conjunto designado implícito (con junto anterior creado con PICKFIRST activada) (ssget "I")

"V" Designación de ventana (ssget "V" pt1 pt2)

"C" Designación de captura (ssget "C" pt1 pt2)

"B" Designación de borde (polígono abierto) (ssget "B" lista-pt)

"CP" Designación de captura de polígono (ssget "CP" lista-pt)

"VP"

Designación de ventana de polígono

(ssget "VP" lista-pt)

"X"

Designación de todos las entidades en el dibujo

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.

Si una aplicación ya no va a utilizar un conjunto designado, es important borrarlo de la memoria; esto puede llevarse a cabo definiendo el conjunto como nil.

(setq ssl nil)

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.

Listas de filtros de conjuntos designados

Las listas de filtros de entidades son listas de asociaciones que utilizan códigos de grupo DXF con el mismo formato que las listas que devuelve entget. La función ssget reconoce todos los códigos de grupo excepto los nombres de entidad (grupo -I), rótulos (grupo 5) y códigos de datos de entidad extendidos (>=1000). Si se utiliza un código de grupo en lista-fíltros que no sea válido, ssget no lo tiene en cuenta. Para buscar entidades con datos extendidos, puede utilizarse el código -3.

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.

Patrones de caracteres comodín en listas de filtros

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.

Filtros para datos de entidad extendidos

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.

Esto se lleva a cabo mediante el código de grupo -3, como en:

(ssget "X" '((0 . "CIRCLE") (-3 ("NOMBAPL"))))

Este código seleccionaría todos los círculos que incluyen datos extendidos de la aplicación "NOMBAPL". Si se incluye más de un nombre de aplicación en la lista de grupo -3 se realiza una operación AND; en este caso, la entidad debe contener datos extendidos de todas las aplicaciones señaladas. Así

(ssget "X" '((0 . "CIRCLE") (-3 ("APL1") ("APL2"))))

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:

(ssget "X" '((0 . "CIRCLE") (-3 ("APL[12]"))))

como

(ssget "X" '((0 . "CIRCLE") (-3 ("APL1,APL2"))))

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.

Agrupación lógica de condiciones de filtro

Además de los operadores de relación ya descritos, también es posible evaluar grupos mediante la creación de expresiones booleanas anidadas, que utilizan operadores de agrupación lógicos.

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.

Manipulación de conjuntos designados

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.

La función sslength devuelve el número de entidades de un conjunto designado y ssmemb comprueba si una entidad determinada forma parte de un conjunto designado. Por último, la función ssname devuelve el nombre de una entidad determinada de un conjunto designado, mediante la utilización de un índice del conjunto (las entidades de un conjunto designado se numeran a partir de 0).

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

Se puede usar sin parametros.

(setq Conjunto (ssget))

(setq Conjunto (ssget "X")) Selecciona todos los objetos en el archivo.

(setq Conjunto (ssget "P")) Selecciona todos los objetos de la seleccion anterior.

(setq Conjunto (ssget "L")) Selecciona el ultimo objeto creado en el dibujo.

(setq Conjunto (ssget "W" p1 p2)) Selecciona los objetos que se encuentren dentro de la ventana conformada por los vertices p1 y p2.

(setq Conjunto (ssget "C" p1 p2)) Selecciona los objetos que se encuentren dentro o atraviesen la ventana conformada por los vertices p1 y p2.

(setq Conjunto (ssget "WP" lista_puntos)) Selecciona los objetos que se encuentren dentro de la ventana conformada por los vertices de la lista de puntos.

(setq Conjunto (ssget "CP" lista_puntos)) Selecciona los objetos que se encuentren dentro o atraviesen la ventana conformada por los vertices de la lista de puntos.

(setq Conjunto (ssget "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 "X"(list;;;;;;;;;;;;;;;;;;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

"<AND"

uno o más operandos

"AND>"

"<OR"

uno o más 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 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.

Los demas objetos no seran selecconados.

(ssget "_:e")

Selecciona todo lo que esta dentro de la caja del cursor (pickbox)

(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")

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 :D

;;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 indice especifo

(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)

;; 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 seleccion 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 seleccion 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 selecionados y con grips activos

;;pickset es la seleccion que estara seleccionada

;;gripset es la seleccion que se le activaran los pinzamientos

(ssgetfirst)

;;Determina que objetos estan seleccionados y con pinzamientos activos

;; devuelve una lista de dos selecciones la primera es la seleccion de objetos que estan con los grips activos pero no seleccionados

;; y al segunda la selección de objetos seleccionados y con pinzamientos activos

(SSNAME conjunto índice)

SSNAME 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 unica a evaluar sera la primera con indice (ssname 0),

y se guardaria en la variable Entidad.

(SETQ Entidad (SSNAME (SSGET) 0))

Para acceder a las demas 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 indice para que cuando repita la accion 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 Indice sea memor 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 indice para que cuando repita la accion 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ó 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"))))

(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)

)

(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. 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 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.

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

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

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, 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.

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 . "<AND")

(-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 . "!=") (62 . 1)

;;o lo siguiente en lugar de la línea anterior:

;;(-4 . "<NOT") (62 . 1) (-4 . "NOT>")

(-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.