Вы находитесь на странице: 1из 7

En este captulo vamos a ver cmo podemos trabajar con las entidades de dibujo, acce diendo a la base de datos

de Autocad. En primer lugar veremos los comandos utili zados para seleccionar entidades. Despus veremos los utilizados para editar y mod ificar estas entidades de dibujo. En la mayora de los casos ser preciso conocer el nombre de la entidad seleccionada para poder manipularla. Dicho nombre es un nmero hexadecimal y corresponde a la clave -1, de la lista de la entidad. Si echis un vistazo a las listas que aparece n en el tema anterior, podis observar que todas empiezan con una sublista cuyo pr imer elemento es -1 y el segundo es el nombre de la entidad. SELECCIN DE OBJETOS Los comandos de seleccin de entidades de dibujo comienzan pidiendo al usuario que Designe objeto. Tras esta operacin de designacin, los objetos seleccionados son i ntroducidos en un conjunto, al que daremos nombre con una variable. En autolisp podemos tener abiertos simultneamente hasta 128 conjuntos, siempre que la memoria nos lo permita. Cuando un conjunto creado ya no sea til, es conveniente asignarl e valor nil, para liberar espacio de la memoria. Cuando la operacin que queremos realizar slo requiere la designacin de una entidad podemos usar: (ENTLAST) NOMBRE DE LA LTIMA ENTIDAD DIBUJADA Devuelve el nombre de la ltima entidad dibujada y que no ha sido borrada. Cdigo: (COMMAND "_line" p1 p2 "") (SETQ nombre (ENTLAST)) En este caso dibujamos una lnea y almacenamos el nombre en la variable nombre. El resultado podra ser: <Nombre entidad: 7ef5ef78>, que quedara almacenado, tal cu al, en la variable nombre. Si dibujas una entidad en Autocad y tecleas en la lnea de comandos (SETQ nombre ( ENTLAST)), pulsas INTRO. Y despus tecleas !nombre, y pulsas INTRO, observars que se produce el efecto indicado. (ENTNEXT [<nom>]) NOMBRE DE LA SIGUIENTE ENTIDAD Devuelve el nombre de la entidad que sigue a la indicada en <nom>, segn aparece e n la Base de Datos. Si no aparece <nom>, devuelve el nombre de la primera entidad que aparece en la Base de Datos y que no ha sido borrada. Cdigo: (COMMAND "_line" p1 p2 "") (SETQ nombre1 (ENTLAST)) (COMMAND "_circle" p1 rad) (SETQ nombre2 (ENTLAST)) (SETQ nombre3 (ENTNEXT nombre1)) En este caso nombre2 y nombre3 son iguales, ya que con el ltimo comando lo que he mos hecho es asignar a la variable nombre3 el nombre de la entidad que sigue a nombre1, en este caso nombre2.Alguien se ha perdido? Je,je,je. (ENTSEL [<dialogo>]) NOMBRE DE ENTIDAD Y PUNTO DE DESIGNACIN Devuelve una lista con dos elementos. El primero es el nombre de la entidad y el segundo es una sublista con las coordenadas del punto de designacin. Si <dialogo > no aparece, mostrar el mensaje por defecto, que muestran siempre este tipo de f

unciones: Designe objeto. Si no acertamos en la designacin, devuelve nil. (SETQ listaent (ENTSEL ?Designa una entidad:?)) En este caso la variable listaent podra almacenar un resultado como este: (<Nombre entidad: 7ef5ef78> (50.456 75.002 0.0)) Si ahora quisiramos saber el nombre, recordando lo visto en el TEMA 7, haramos: (SETQ nombre (NTH 1 listaent)) O tambin: (SETQ nombre (CAR listaent)) Con lo que almacenaramos en la variable nombre el primer elemento de la lista lis taent. Que es <Nombre entidad: 7ef5ef78>. Cuando la operacin que queremos realizar requiere la designacin de varias entidade s, primero tendremos que crear un conjunto de designacin, donde almacenaremos tod as las entidades seleccionadas. Podemos usar: (SSGET [<modo>] [<pt1>] [<pt2>] [<lista-pt>] [<lista-filtros>]) CREA UN CONJUNTO DE SELECCIN Este es un comando complicado pero muy interesante y con un amplsimo abanico de p osibilidades de seleccin. Sin ningn argumento, solicita la designacin mediante cualquier mtodo. Slo sirve para designar objetos visibles en el rea de pantalla. El <modo> indica el tipo de seleccin elegida. Siempre debe ir entre comillas. Pue de ser: ?_C?: Queda seleccionado todo aquello que est dentro, total o parcialmente, de un rectngulo definido por <pt1> y <pt2>. (SETQ conj (SSGET ?_C? pt1 pt2)) ?_CP?: Queda seleccionado todo aquello que est dentro, total o parcialmente, de u n polgono formado por la lista de puntos <lista-pt>. (SETQ polig (LIST pt1 pt2 pt3 pt4 pt5)) (SETQ conj (SSGET "_CP" polig)) ?_F?: Queda seleccionado todo aquello que intersecte con una poligonal definida por sus vrtices. (SETQ polig (LIST pt1 pt2 pt3 pt4 pt5 pt6)) (SETQ conj (SSGET "_F" polig)) ?_I?: Si se utiliza con filtros de seleccin., slo tiene en cuenta los objetos pres eleccionados que muestran pinzamientos. La variable PICKFIRST debe estar activa. ?_L?: Selecciona la ltima entidad dibujada y no borrada. ?_P?: Vuelve a seleccionar el ltimo conjunto creado. ?_W?: Queda seleccionado todo aquello que est dentro, totalmente, de un rectngulo definido por <pt1> y <pt2>. (SETQ conj (SSGET ?_W? pt1 pt2)) ?_WP?: Queda seleccionado todo aquello que est dentro, totalmente, de un polgono f ormado por la lista de puntos <lista-pt>. (SETQ conj (SSGET ?_WP? polig)) ?_X?: Sirve para seleccionar todos los objetos del dibujo, estn dentro o fuera de l rea visible de pantalla, estn en capas activadas o no, e incluso en capas inutil izadas. Tiene la particularidad de que se pueden usar listas de filtros para sel eccionar objetos con determinadas caractersticas.

(SETQ conj (SSGET ?_X? (LIST (CONS 0 ?ARC?) (CONS 8 ?rotura?) (CONS 62 3)))) En este caso almacena todas las entidades que sean arcos, que estn en la capa "ro tura" y que tengan color verde, que es el numero 3. Como veis, hemos utilizado c omo filtros los cdigos DXF 0,8 y 62. Se pueden utilizar todos los cdigos DXF excep to el -1, el 5, y los mayores de 1000. (SETQ conj (SSGET ?(0 . ?CIRCLE?))); Solicita seleccin de entidades, y de todos l os objetos seleccionados, slo almacena los crculos. (SETQ conj (SSGET ?_X? ?((0 . ?LINE?))); Selecciona todas las lneas del dibujo. (SETQ conj (SSGET ?_I? ?((0 . ?LINE?) (62 . 2)))); Almacena todas las lneas del d ibujo que tengan color amarillo y que estn preseleccionadas. FILTROS DE SELECCIN Hay una serie de filtros que podemos utilizar con (SSGET) para realizar una sele ccin ms particular. ?_:E?: Queda seleccionado todo lo que se encuentra dentro de la caja del cursor. ?_:N?: Slo se puede usar con selecciones grficas(ventana, captura?). Selecciona su bentidades de un bloque, polilinea 3D? ?_:S?: Una vez realizamos la primera seleccin, no continua pidiendo que designemo s ms objetos. ?_:D?: Acepta la seleccin de entidades repetidas. ?_:P?: No selecciona ventanas grficas del Espacio Papel. ?_:L?: No selecciona objetos de capas bloqueadas. FILTROS DE COMPARACIN Mediante el cdigo especial -4 podemos indicar una serie de operadores de comparac in para realizar la seleccin. La comparacin se aplica slo a la sublista que sigue a la lista del cdigo -4. Podemos agrupar varios operadores separados por comas.Siem pre van entre comillas y pueden ser: ?*?: Comodn ?=?: Igualdad ?!=?: Desigualdad ?/=?: Desigualdad ?<>?: Desigualdad ?<?: Menor que ?<=?: Menor o igual que ?>?: Mayor que ?>=?: Mayor o igual que ?&?: AND binario. Se aplica para comprobar el bit asociado a la clave DXF de una sublista. ?&=?: Igualdad AND binario. Se aplica para comprobar el bit asociado a la clave DXF de una sublista. (SSGET ?_X? ?((0 . ?CIRCLE?) (-4 . ?>=?) (40 . 50.4) (62 . 3))) En este caso se seleccionan los circulos -(0 . ?CIRCLE?)-, cuyo radio sea mayor o igual que 50.4 -(-4 . ?>=?) (40 . 50.4)-, y cuyo color sea el verde -(62 . 3). (SSGET ?_X? ?((0 . ?LWPOLYLINE?) (-4 . ?&?) (70 . 129))) En este caso se seleccionan las lwpolylines cerradas, bit 1 de la clave 70 de un a lwpolyline, independientemente del patrn de tipo de linea que tengan activado, bit 128 de la clave 70 de una lwpolyline. Como veis, no es necesario que aparezc a el bit 1 en la expresin de Autolisp. ste est incluido en el bit 129, pero lo cont rola igual. AGRUPACIN DE FILTROS

Como los filtros de comparacin, tambin stos se deben indicar mediante el cdigo espec ial -4. Estos operadores van en pareja, y a cada operador de apertura le debe co rresponder otro igual de cierre. ?<AND? con ?AND>?: Deben cumplirse todos los criterios. ?<OR? con ?OR>?: Debe cumplirse al menos un criterio. ?<XOR? con ?XOR>?: de dos criterios existentes, debe cumplirse uno u otro, pero no los dos. ?<NOT? con ?NOT>?: No debe cumplirse el criterio. En el ejemplo que sigue, seleccionamos todos los arcos, circulos, lineas y lwpol ilineas cuya elevacin sea distinta de cero. Cdigo: (SETQ conj_dibujo (SSGET "_X" '((-4 . "<OR") (-4 . "<AND") (0 . "LINE") (-4 . "*,*,!=")(10 1 1 0) ;Pto inta de 0 (-4 . "*,*,!=")(11 1 1 0) ;Pto nta de 0 (-4 . "AND>") (-4 . "<AND") (0 . "LWPOLYLINE") (-4 . "!=")(38 . 0) ;Elevacin de 0 (-4 . "AND>") (-4 . "<AND") (0 . "ARC") (-4 . "*,*,!=")(10 1 1 0) ;Pto inta de 0 (-4 . "AND>") (-4 . "<AND") (0 . "CIRCLE") (-4 . "*,*,!=")(10 1 1 0) ;Pto inta de 0 (-4 . "AND>") (-4 . "OR>") ) ) ;_fin de SSGET ) (SSADD [<nom> [conj>]]) AADE ENTIDAD A CONJUNTO Aade una entidad a un conjunto designado. Empleado sin argumentos crea un conjunt o vaco sin elementos. (SSDEL <nom> <conj>) BORRA ENTIDAD DE UN CONJUNTO Elimina la entidad <nom> de el conjunto <conj>. OTROS COMANDOS PARA OPERAR CON ENTIDADES (SSLENGTH <conj>) NUMERO DE ENTIDADES DE CONJUNTO Devuelve el nmero de entidades de un conjunto. (SSNAME <conj> <posicin>) NOMBRE DE ENTIDAD Devuelve el nombre de una entidad perteneciente a un conjunto, situada en una po

inicio con Z dist final con Z disti

de polilnea distinta

centro con Z dist

centro con Z dist

sicin determinada. Las entidades de un conjunto ocupan una posicin que se empieza a contar desde cer o. Un conjunto con 5 entidades estara numerado de 0 a 4. (SSMEMB <nom> <conj>) COMPRUEBA SI ENTIDAD EST EN CONJUNTO Si el nombre indicado est en <conj>, devuelve ese nombre y si no est devuelve nil. (NENTSEL [<mensaje>]) SELECCIONA ENTIDAD COMPONENTE DE UNA ENTIDAD COMPUESTA. Funciona igual que (ENTSEL) . Sirve para extraer datos de entidades que forman p arte de otras entidades, como un bloque o una polilinea. Devuelve una lista con dos elementos. El primero es el nombre de la subentidad y el segundo es el punto de designacin. (NENTSELP [<mensaje>] [<punto>]) SELECCIONA ENTIDAD COMPONENTE DE UNA ENTIDAD CO MPUESTA MEDIANTE PUNTO DE DESIGNACIN Es igual que (NENTSEL) pero con la posibilidad de indicar el punto de designacin. (ENTGET <nom>) LISTA ENTIDAD Busca en la base de datos el nombre de la entidad indicada y devuelve una lista completa de dicha entidad. Lgicamente, debemos obtener el nombre previamente, med iante cualquiera de los comando que ya vimos para tal fin: SSNAME, ENTLAST, ENTN EXT? Una vez obtenida la lista, podemos acceder a todos los datos de la entidad media nte el comando (ASSOC) visto en el Tema 7. Supongamos que acabamos de dibujar un arco. (SETQ lista_ent (ENTGET (ENTLAST))) Con esto almacenamos en la variable lista_ent la lista perteneciente al arco que acabamos de dibujar, que podra ser esta: Cdigo: ((-1 . <Nombre entidad: 7272b6e8>) (0 . "ARC") (330 . <Nombre entidad: 7ef7acf8>) (5 . "D62CD") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "Escollera") (100 . "AcDbCircle") (10 301.164 2023.47 0.0) (40 . 494.779) (210 0.0 0.0 1.0) (100 . "AcDbArc") (50 . 4.23078) (51 . 5.82005) ) Si queremos saber la coordenada X del centro, debemos saber primero que la clave DXF 10 contiene las coordenadas del centro. As: Cdigo: (SETQ Xcentro (CADR (ASSOC 10 lista_ent))); Coordenada X del centro del arco.Es

el segundo elemento de la sublista. (SETQ Ycentro (CADDR (ASSOC 10 lista_ent))); Coordenada Y del centro del arco. E s el tercer elemento de la sublista. (SETQ Zcentro (CADDDR (ASSOC 10 lista_ent))); Coordenada Z del centro del arco. Es el cuarto elemento de la sublista. (SETQ radio (CADR (ASSOC 40 lista_ent))); Valor del radio (ENTDEL <nom>) BORRA O RECUPERA ENTIDAD Si la entidad <nom> existe, es borrada. Pero si no existe es recuperada, siempre y cuando haya sido borrada con ENTDEL. Slo vale para la actual sesin de dibujo. (ENTMOD <lista-entidad>) ACTUALIZA LISTA Sirve para actualizar una lista de una entidad, previa modificacin de esta. Supon gamos el caso visto antes, del arco. Cdigo: (SETQ lista_ent (ENTGET (ENTLAST))) (SETQ nueva_lista (SUBST (CONS 8 "Muro") (ASSOC 8 lista_ent) lista_ent)) (ENTMOD nueva_lista) Lo que hemos hecho es, partiendo de la lista del arco lista_ent, hemos creado un a nueva lista nueva_lista, donde hemos cambiado el arco de capa, pasndolo de la c apa ?Escollera? a la capa ?Muro?. (ENTMAKE <lista>) Podemos construir ta, con todos los como puede ser la CONSTRUYE UNA ENTIDAD una entidad de dibujo elementos necesarios. capa, la entidad va a EN LA BASE DE DATOS definiendo correctamente su lista comple Si omitimos algn dato no imprescindible, la capa actual.

(ENTMAKE ?((0 . ?line?) (10 50 20 0) (11 100 200 0))) En este caso construimos una lnea partiendo nicamente de los datos de sus coordena das de los puntos inicial y final. Como no especificamos el color ni la capa, co nsidera los actuales del dibujo. Nos quedara por ver lo referente a tablas de smbolos, que aunque no son entidades de dibujo, tambin son accesibles y pueden ser modificadas. Lo dejamos para el prxi mo tema. He hecho una rutina sencillita para contar bloques. Aunque en las versiones ms re cientes de Autocad ya existe un comando que lo hace, y bastante ms completo, supo ngo que para practicar servir. Cdigo: ;;;;;;;;;;;;; CUENTA BLOQUES ;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;; ;;;;;; (DEFUN c:cuenta(/ listaent) (while (/= (cdr (assoc 0 listaent)) "INSERT") (setq nomblist1 (entsel "\nSelecciona bloque:")); lista con nombre y punto d e designacion, de la entidad seleccionada (setq nomblist (car nomblist1)); Nombre de la entidad seleccionada (setq listaent (ENTGET nomblist)); lista completa de la entidad seleccionada

(if (/= (cdr (assoc 0 listaent)) "INSERT") (princ "\nEl elemento seleccionado no es un bloque") ) ); Fin while (setq nombloc (cdr (assoc 2 listaent))); nombre del bloque (SETQ conj1 (SSGET "_X" (LIST(CONS 0 "insert")))); Conjunto con todos los bloq ues del dibujo (SETQ conj (SSGET "_X" (LIST (CONS 0 "insert") (CONS 2 nombloc) ) ) ); conjunto con los bloques de igual nombre que el seleccionado (SETQ enti1 (SSLENGTH conj1)) (SETQ enti (SSLENGTH conj)) (prompt "\nDe los ") (prin1 enti1) (prompt " bloques existentes en el dibujo, ") (prin1 enti) (prompt " son igual que el seleccionado") (prompt "\n Roberto Gonzlez ;-)") )

Вам также может понравиться