CFAC: AutoLISP (V) - Ma Manipulação de entidades
FEUP/DEMEGI-SDI
AutoLISP - V
Manipulação de entidades
João Manuel R. S. Tavares / JOF
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 . – –
z
2
Conjuntos de selecção representam um nível que contém listas de nomes de entidades. O nome da entidade entidade é um apontador apontador para a base de dados dados onde os dados referentes referentes à mesma entidade 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 dentro dela, fornece um mecanismo flexível para a interface de aplicativos em Autolisp com a base de dados de desenho do AutoCAD .
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
1
CFAC: AutoLISP (V) - Manipulação de entidades
FEUP/DEMEGI-SDI
Nome de uma entidade e Lista de dados z
z
A função entlast obtém o nome da última entidade desenhada no desenho actual. A função entget obtém a lista de dados de uma entidade a partir do seu nome. (setq entnome (entlast)) ; retorna (setq entdados (entget entnome)) ; retorna ((-1 . ) (0 . "LINE") (8 ."0") ...)
3
@2008 João Tavares / JOF
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). –
4
A lista “par pontuado” é composta por dois valores (o ponto não conta).
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
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: –
z
5
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.
@2008 João Tavares / JOF
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
6
Exemplos: (cons 'a '(b c d)) (cons '(a) '(b c d)) (cons 'a 2)
;retorna (A B C D) ;retorna ((A) (B C D)) ;retorna (A . 2)
(car (cons 'a 2)) (cdr (cons 'a 2))
;retorna A ;retorna 2
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
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. Sintaxe: (assoc item lista)
z
Exemplo:
z
(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
@2008 João Tavares / JOF
CFAC: AutoLISP (V) - Manipulação de entidades
Função subst z
z z
Executa uma substituição de um elemento numa lista (retorna a lista com a substituição efectuada, permanecendo intacta a lista original). Sintaxe: (subst item-novo item-velho 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
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
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)
z
;retorna
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 ( (3.5 5.5 6.8)) e a mensagem “Select Object:” será utilizada. (entsel "\nSeleccione um objecto:") retorna ( (3.5 5.5 6.8)) e a mensagem incluída no prompt da função será utilizada
9
@2008 João Tavares / JOF
CFAC: AutoLISP (V) - Manipulação de entidades
Função entget z z
z
z
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: – – – –
10
-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; ...
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
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 ( (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
@2008 João Tavares / JOF
CFAC: AutoLISP (V) - Manipulação de entidades
Função entnext e entdel z
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. 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
12
A função entdel elimina uma entidade pelo seu nome. (entdel (entlast)) ; elimina a última entidade desenhada
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
6
CFAC: AutoLISP (V) - Manipulação de entidades
FEUP/DEMEGI-SDI
Função entmake z
z z
Cria um novo objecto no desenho a partir de uma lista contendo informações descritivas do objecto. Sintaxe: (entmake (lista-que-descreve-o-objecto)) 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
@2008 João Tavares / JOF
CFAC: AutoLISP (V) - Manipulação de entidades
Função handent z
z
z
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
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
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
@2008 João Tavares / JOF
CFAC: AutoLISP (V) - Manipulação de entidades
Funções entmod e entupd z
z
A função entmod altera as características de uma dada entidade. A função entupd actualiza a exibição de uma dada entidade alterada por entmod . –
–
16
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.
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
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
@2008 João Tavares / JOF
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: – – –
z
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
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
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
@2008 João Tavares / JOF
JOF / João Manuel R. S. Tavares
CFAC: AutoLISP (V) - Manipulação de entidades
10