AutoLISP - Manipulação de entidades

AutoLISP - Manipulação de entidades

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

JOF / João Manuel R. S. Tavares1

AutoLISP -V Manipulação de entidades

João Manuel R. S. Tavares / JOF

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades2

Dados das entidades zNo 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.

zAvanç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 Autolispcom a base de dados de desenho do AutoCAD.

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

JOF / João Manuel R. S. Tavares2

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades3

Nome de uma entidade e Lista de dados zA função entlastobtém o nome da última entidade desenhada no desenho actual.

zA função entgetobtém a lista de dados de uma entidade a partir do seu nome.

; retorna ((-1 . <Entity name x...x>) (0 . "LINE") (8 ."0"))

(setq entnome (entlast)) ; retorna <Entity name x...x> (setq entdados (entget entnome))

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades4

Nome de uma entidade e Lista de dados zA 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).

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

JOF / João Manuel R. S. Tavares3

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades5

Funções cons, assoce subst zAs funções de manipulação de entidades são:

–entdel, entget, entlast, entmake, entmod, entnext, entsel, entupd, handent, nentsel, nentselp, tblnext e tblsearch.

zEntretanto, antes de verificar cada uma destas funções deve-se conhecer as funções cons, assoce subst, pois são muito utilizadas em conjunto com estas.

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades6

Função cons zSintaxe:

–(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”

(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

zExemplos: (cdr (cons 'a 2)) ;retorna 2

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

JOF / João Manuel R. S. Tavares4

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades7

Função assoc zProcura por um elemento numa lista de dados e retorna a lista de associação em que o elemento participa.

zSintaxe: (assoc item lista) zExemplo:

(assoc 'largura a1);retorna (largura 3)
(assoc 'peso a1);retorna nil (não existe)

(setq a1 '((nome box) (largura 3) (comprimento 4.72) (altura 5)))

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades8

Função subst zExecuta uma substituição de um elemento numa lista (retorna a lista com a substituição efectuada, permanecendo intacta a lista original).

zSintaxe: (subst item-novo item-velho lista) zExemplos: (setq lista '(a b (c d) b))

(subst 'q 'b lista) ; retorna (A Q (C D) Q) e a lista permanece igual

(setq lista (subst 'q '(c d) lista)) ; retorna a lista modificada para (A B Q B)

(subst '(q r) 'q lista) ; retorna (A B (Q R) B) e a lista permanece igual

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

JOF / João Manuel R. S. Tavares5

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades9

Funções entlaste entsel zA função entlastobtém o nome da última entidade desenhada no desenho.

(entlast);retorna <Entity name: x...x> zA função entselésimilar àfunção anterior, obtém o nome de uma entidade; entretanto, entselretorna 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

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades10

Função entget zObtém a lista de dados de uma entidade a partir do seu nome.

zA lista de dados éuma lista de associações, algumas destas associações são representadas por listas denominadas “par pontuado”(dotted par).

zUma lista “par pontuado”éformada por dois átomos (código . valor)separados por um ponto (o ponto não conta como átomo da lista).

zCada 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 layerna qual a entidade foi desenhada;

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

JOF / João Manuel R. S. Tavares6

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades11

Exemplo de uso de entsel, entgete assoc zObter o nome da layerde 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))))))

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades12

Função entnexte entdel zA função entnextretorna o nome da primeira entidade desenhada no desenho ou da próxima entidade em relação a uma entidade determinada.

zExemplos:

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

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

JOF / João Manuel R. S. Tavares7

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades13

Função entmake zCria um novo objecto no desenho a partir de uma lista contendo informações descritivas do objecto.

z Sintaxe: (entmake (lista-que-descreve-o-objecto)) zExemplo:

(entmake '( (0 . "LINE") (8 . "0") (62 . 1) (10 3.0 4.0 0.0) (1 8.0 4.0 0.0) (210 0.0 0.0 1.0) )

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades14

Função handent zO handleda entidade éum código único e permanente associado a cada entidade no desenho em qualquer sessão de trabalho.

zO nomeda entidade éum código dado à entidade que muda entre sessões de trabalho.

zA função handentobtém o nome da entidade a partir do handleda entidade.

(handent "código-do-handle") ; retorna o nome da entidade

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

JOF / João Manuel R. S. Tavares8

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades15

Função nentsel zA função nentselacede 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))))))

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades16

Funções entmode entupd zA função entmodaltera as características de uma dada entidade.

zA função entupdactualiza a exibição de uma dada entidade alterada por entmod.

–entupdsóé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 entmodactualiza as características e a visualização.

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

JOF / João Manuel R. S. Tavares9

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades17

Exemplo do uso de entmod zFunçã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)) )

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades18

Funções tblnexte tblsearch zPesquisa 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 layersde um desenho, cada layerdefinida compõe uma linha da tabela.

–O mesmo éválido para cada recurso enumerado acima.

zA função tblnextpercorre 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

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

JOF / João Manuel R. S. Tavares10

@2008 João Tavares / JOFCFAC: AutoLISP (V) -Manipulação de entidades19

Funções tblnexte tblsearch zA função tblsearchprocura por um dado item na tabela indicada:

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

Comentários