Você está na página 1de 10

CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

AutoLISP - V
Manipulação de entidades

João Manuel R. S.
Tavares

Dados das entidades

z No Autolisp, o processo de acesso aos dados das


entidades estende-se a vários níveis da estrutura da
base de dados do AutoCAD.
– Conjuntos de selecção representam um nível que contém
listas de nomes de entidades.
– O nome da entidade é um apontador para a base de dados
onde os dados referentes à mesma entidade estão
armazenados.
z Avançando um nível, os dados das entidades estão na
forma de uma lista de associações. Esta hierarquia de
dados, e a habilidade de trabalhar dentro dela, fornece
um mecanismo flexível para a interface de aplicativos em
Autolisp com a base de dados de desenho do AutoCAD.

2 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 1


CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

Nome de uma entidade e Lista de


dados

z A função entlast obtém o nome da última entidade


desenhada no desenho actual.
z A função entget obtém a lista de dados de uma
entidade a partir do seu nome.
(setq entnome (entlast))
; retorna <Entity name x...x>
(setq entdados (entget entnome))
; retorna ((-1 . <Entity name x...x>) (0 . "LINE") (8 ."0") ...)

3 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

Nome de uma entidade e Lista de


dados

z A lista de dados é uma lista de associações. A


maioria destas associações são pares (código .
valor) denominados “par pontuado” (dotted par).
– A lista “par pontuado” é composta por dois
valores (o ponto não conta).

4 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 2


CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

Funções cons, assoc e subst

z As funções de manipulação de entidades são:


– entdel, entget, entlast, entmake, entmod, entnext,
entsel, entupd, handent, nentsel, nentselp, tblnext
e tblsearch.
z Entretanto, antes de verificar cada uma destas
funções deve-se conhecer as funções cons,
assoc e subst, pois são muito utilizadas em
conjunto com estas.

5 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

Função cons

z Sintaxe:
– (cons primeiro-novo-elemento lista)
acrescenta um novo elemento no início da lista
– (cons primeiro-novo-elemento átomo)
constrói uma lista do tipo “par pontuado”
z Exemplos:
(cons 'a '(b c d)) ;retorna (A B C D)
(cons '(a) '(b c d)) ;retorna ((A) (B C D))
(cons 'a 2) ;retorna (A . 2)
(car (cons 'a 2)) ;retorna A
(cdr (cons 'a 2)) ;retorna 2

6 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 3


CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

Função assoc

z Procura por um elemento numa lista de dados e


retorna a lista de associação em que o elemento
participa.
z Sintaxe: (assoc item lista)
z Exemplo:
(setq a1 '((nome box) (largura 3) (comprimento 4.72) (altura 5)))
(assoc 'largura a1) ;retorna (largura 3)
(assoc 'peso a1) ;retorna nil (não existe)

7 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

Função subst

z Executa uma substituição de um elemento numa lista


(retorna a lista com a substituição efectuada, permanecendo
intacta a lista original).
z Sintaxe: (subst item-novo item-velho lista)
z Exemplos:
(setq lista '(a b (c d) b))
(subst 'qq 'b lista)
; retorna (A QQ (C D) QQ) e a lista permanece igual
(setq lista (subst 'qq '(c d) lista))
; retorna a lista modificada para (A B QQ B)
(subst '(qq rr) 'qq lista)
; retorna (A B (QQ RR) B) e a lista permanece igual
8 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 4


CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

Funções entlast e entsel

z A função entlast obtém o nome da última entidade


desenhada no desenho.
(entlast) ;retorna <Entity name: x...x>
z A função entsel é similar à função anterior, obtém o nome
de uma entidade; entretanto, entsel retorna uma lista
composta pelo nome de uma entidade seleccionada (pelo
utilizador) e pelo ponto de selecção.
(entsel)
retorna (<Entity name: x...x> (3.5 5.5 6.8)) e a mensagem “Select
Object:” será utilizada.

(entsel "\nSeleccione um objecto:")


retorna (<Entity name: x...x> (3.5 5.5 6.8)) e a mensagem
incluída no prompt da função será utilizada
9 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

Função entget

z Obtém a lista de dados de uma entidade a partir do seu nome.


z A lista de dados é uma lista de associações, algumas destas
associações são representadas por listas denominadas “par
pontuado” (dotted par).
z Uma lista “par pontuado” é formada por dois átomos (código .
valor) separados por um ponto (o ponto não conta como átomo da
lista).
z Cada código representa um tipo de valor:
– -1 está associado ao nome da entidade;
– 0 está associado ao tipo da entidade "LINE", "ARC" ...;
– 8 está associado ao nome da layer na qual a entidade foi desenhada;
– ...

10 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 5


CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

Exemplo de uso de entsel, entget e


assoc

z Obter o nome da layer de um objecto seleccionado:


; obtém (<nome-da-entidade> (ponto-de-selecção))
(setq entidade (entsel))
; obtém a lista de dados da entidade seleccionada
(setq entdados (entget (car entidade)))
; obtém o “par pontuado” que contém o nome da layer da entidade
(setq par-layer (assoc 8 entdados))
; obtém o nome da layer da entidade
(setq entlayer (cdr par-layer))
; ou
(setq entnome (cdr (assoc 8 (entget (car (entsel))))))

11 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

Função entnext e entdel

z A função entnext retorna o nome da primeira entidade


desenhada no desenho ou da próxima entidade em relação
a uma entidade determinada.
z Exemplos:
armazena em ent o nome da primeira entidade desenhada no
desenho
(setq ent (entnext))
obtém o nome da entidade desenhada após a entidade
determinada (ent)
(entnext ent)
z A função entdel elimina uma entidade pelo seu nome.
(entdel (entlast)) ; elimina a última entidade desenhada

12 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 6


CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

Função entmake
z Cria um novo objecto no desenho a partir de uma lista
contendo informações descritivas do objecto.
z Sintaxe: (entmake (lista-que-descreve-o-objecto))
z Exemplo:

(entmake '( (0 . "LINE")


(8 . "0")
(62 . 1)
(10 3.0 4.0 0.0)
(11 8.0 4.0 0.0)
(210 0.0 0.0 1.0)
)
)

13 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

Função handent

z O handle da entidade é um código único e


permanente associado a cada entidade no
desenho em qualquer sessão de trabalho.
z O nome da entidade é um código dado à
entidade que muda entre sessões de trabalho.
z A função handent obtém o nome da entidade a
partir do handle da entidade.
(handent "código-do-handle")
; retorna o nome da entidade

14 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 7


CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

Função nentsel

z A função nentsel acede aos dados de um objecto


contido num outro objecto; por exemplo, objectos
que compõem um bloco.

Exemplo:
(setq Ent (nentsel "\nPick an entity or subEntity: "))
(print (strcat “O handle da subentidade seleccionada é: " (cdr (assoc 5 (entget
(car Ent))))))

15 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

Funções entmod e entupd

z A função entmod altera as características de


uma dada entidade.
z A função entupd actualiza a exibição de uma
dada entidade alterada por entmod.
– entupd só é necessária para alterar a exibição de
entidades compostas alteradas, por exemplo
polylines.
– no caso de entidade simples, por exemplo
círculos, arcos, etc., a própria entmod actualiza
as características e a visualização.

16 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 8


CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

Exemplo do uso de entmod

z Função que altera o raio de um círculo:


(defun c:raio()
(setq vl (getreal "Novo raio: "))
(setq sair "N")
(while (= sair "N")
(setq ent (car (entsel "\nClique o circulo a ser modificado: ")))
(setq dados (entget ent)) (print dados)
(setq dados (subst (cons 40 vl) (assoc 40 dados) dados))
(entmod dados)
(initget 1 "S N") (prompt "\nSair? (S/N) ") (setq sair (getkword))
)
)
17 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

Funções tblnext e tblsearch

z Pesquisa as tabelas de informação de um desenho sobre


os seguintes recursos:
– LAYER, LTYPE, VIEW, STYLE, BLOCK, UCS, APPID, DIMSTYLE
e VPORTS.
– Obs: na tabela de informação sobre as layers de um desenho,
cada layer definida compõe uma linha da tabela.
– O mesmo é válido para cada recurso enumerado acima.
z A função tblnext percorre a tabela linha por linha:
(tblnext "layer" T)
; retorna a lista com a primeira linha da tabela layers (T=TRUE)
(tblnext "layer")
; retorna a lista com a linha seguinte da tabela layers

18 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 9


CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI

Funções tblnext e tblsearch

z A função tblsearch procura por um dado item na


tabela indicada:
(tblsearch "layer" "2d-par")
; retorna informação sobre a layer 2d-par

19 @2001 João Tavares CFAC: AutoLISP (V) - Manipulação de entidades

João Manuel R. S. Tavares 10

Você também pode gostar