Você está na página 1de 10

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

AutoLISP - V
Manipulação de entidades

João Manuel R. S. Tavares


Joaquim Oliveira Fonseca

Dados das entidades

 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 seleçã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.
 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 com a mesma, fornece
um mecanismo flexível para a interface de aplicativos em
Autolisp com a base de dados de desenho do AutoCAD.

2 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 1
CFAC: AutoLISP (V) - Manipulação de entidades 2011@FEUP/DEMec-SDI

Nome de uma entidade e Lista de


dados

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


desenhada no desenho atual.
 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

Nome de uma entidade e Lista de


dados

 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 2
CFAC: AutoLISP (V) - Manipulação de entidades 2011@FEUP/DEMec-SDI

Funções cons, assoc e subst

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


– entdel, entget, entlast, entmake, entmod, entnext,
entsel, entupd, handent, nentsel, nentselp, tblnext
e tblsearch
 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

Função cons

 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”
 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 3
CFAC: AutoLISP (V) - Manipulação de entidades 2011@FEUP/DEMec-SDI

Função assoc

 Procura por um elemento numa lista de dados e


retorna a lista de associação em que o elemento
participa.
 Sintaxe: (assoc item lista)
 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

Função subst

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


(retorna a lista com a substituição efetuada, permanecendo
intacta a lista original).
 Sintaxe: (subst item-novo item-anterior lista)
 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 4
CFAC: AutoLISP (V) - Manipulação de entidades 2011@FEUP/DEMec-SDI

Funções entlast e entsel

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


desenhada.
(entlast) ;retorna <Entity name: x...x>
 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 selecionada (pelo
utilizador) e pelo ponto de seleção.
(entsel)
retorna (<Entity name: x...x> (3.5 5.5 6.8)) e a mensagem “Select
Object:” será utilizada

(entsel "\nSelecione um objeto:")


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

Função entget

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


 A lista de dados é uma lista de associações, algumas destas
associações são representadas por listas denominadas “par
pontuado” (dotted par).
 Uma lista “par pontuado” é formada por dois átomos (código .
valor) separados por um ponto (o ponto não conta como átomo da
lista).
 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 5
CFAC: AutoLISP (V) - Manipulação de entidades 2011@FEUP/DEMec-SDI

Exemplo de uso de entsel, entget e


assoc

 Obter o nome da layer de um objeto selecionado:


; obtém (<nome-da-entidade> (ponto-de-seleção))
(setq entidade (entsel))
; obtém a lista de dados da entidade selecionada
(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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

Função entnext e entdel

 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.
 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)
 A função entdel elimina uma entidade pelo seu nome.
(entdel (entlast)) ; elimina a última entidade desenhada

12 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 6
CFAC: AutoLISP (V) - Manipulação de entidades 2011@FEUP/DEMec-SDI

Função entmake
 Cria um novo objeto no desenho a partir de uma lista contendo
informações descritivas do objeto.
 Sintaxe: (entmake (lista-que-descreve-o-objeto))
 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

Função handent

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


permanente associado a cada entidade no
desenho em qualquer sessão de trabalho.
 O nome da entidade é um código dado à
entidade que muda entre sessões de trabalho.
 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 7
CFAC: AutoLISP (V) - Manipulação de entidades 2011@FEUP/DEMec-SDI

Função nentsel

 A função nentsel acede aos dados de um objeto


contido num outro objeto; por exemplo, objetos que
compõem um bloco.

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

15 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

Funções entmod e entupd

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


uma dada entidade.
 A função entupd atualiza 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 atualiza as
características e a visualização.

16 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 8
CFAC: AutoLISP (V) - Manipulação de entidades 2011@FEUP/DEMec-SDI

Exemplo do uso de entmod

 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

Funções tblnext e tblsearch

 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.
 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 9
CFAC: AutoLISP (V) - Manipulação de entidades 2011@FEUP/DEMec-SDI

Funções tblnext e tblsearch

 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 2011@JST/JOF CFAC: AutoLISP (V) - Manipulação de entidades

JST/JOF 10

Você também pode gostar