Autolisp V

10
CFAC: AutoLISP (V) - Manipulação de entidades FEUP/DEMEGI-SDI JOF / João Manuel R. S. Tavares 1 AutoLISP -V Manipulação de entidades João Manuel R. S. Tavares / JOF @2008 João Tavares / JOF CFAC: AutoLISP (V) - Manipulação de entidades 2 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 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. 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.

Transcript of Autolisp V

Page 1: Autolisp V

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

JOF / João Manuel R. S. Tavares 1

AutoLISP - VManipulação de entidades

João Manuel R. S. Tavares / JOF

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

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 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.

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.

Page 2: Autolisp V

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

JOF / João Manuel R. S. Tavares 2

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

Nome de uma entidade e Lista de dados

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 <Entity name x...x>(setq entdados (entget entnome)); retorna ((-1 . <Entity name x...x>) (0 . "LINE") (8 ."0") ...)

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

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).

Page 3: Autolisp V

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

JOF / João Manuel R. S. Tavares 3

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

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, tblnexte 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 entidades6

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

Page 4: Autolisp V

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

JOF / João Manuel R. S. Tavares 4

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

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)

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

Função subst

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

Page 5: Autolisp V

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

JOF / João Manuel R. S. Tavares 5

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

Funções entlast e entsel

A função entlast obtém o nome da última entidade desenhada no desenho.

(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 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 / JOF CFAC: AutoLISP (V) - Manipulação de entidades10

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; – ...

Page 6: Autolisp V

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

JOF / João Manuel R. S. Tavares 6

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

Exemplo de uso de entsel, entget e assoc

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))))))

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

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

Page 7: Autolisp V

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

JOF / João Manuel R. S. Tavares 7

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

Função entmake

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)

))

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

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

Page 8: Autolisp V

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

JOF / João Manuel R. S. Tavares 8

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

Função nentsel

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))))))

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

Funções entmod e entupd

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. – 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.

Page 9: Autolisp V

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

JOF / João Manuel R. S. Tavares 9

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

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))

))

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

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, DIMSTYLEe 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

Page 10: Autolisp V

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

JOF / João Manuel R. S. Tavares 10

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

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