AutoLISP - VII
Funções Geométricas, de Strings, de
Listas e de Manipulação de Arquivos
João Manuel R. S. Tavares
Joaquim Oliveira Fonseca
Funções geométricas


As funções geométricas do AutoLISP são:
distance, angle, polar, inters, cal, osnap e trans
Essas funções permitem:
–
–
–
–
2
desenhar rapidamente e com precisão;
efetuar cálculos envolvendo os objetos desenhados;
obter o máximo de informação a partir do desenho;
permitir que o utilizador introduza o mínimo de dados para
que entidades sejam criadas.
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Função distance



Obtém a distância entre dois pontos.
Sintaxe:
(distance ponto1 ponto2)
Exemplo:
(setq p1 (getpoint "\nInsira um ponto:"))
(setq p2 (getpoint p1 "\nInsira outro ponto:"))
(setq d (distance p1 p2))
3
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Função angle



Obtém o ângulo em radianos de uma reta
definida por dois pontos e o eixo X do UCS ou
WCS corrente, medido no sentido anti-horário.
Sintaxe:
(angle ponto1 ponto2)
Exemplo:
(setq p1 (getpoint "\nInsira um ponto:"))
(setq p2 (getpoint p1 "\nInsira outro ponto:"))
(setq a (angle p1 p2))
4
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Função polar



Retorna um ponto em 3D do UCS corrente a
partir de um ponto, de um ângulo (em radianos)
e de uma distância (coordenadas relativas polares).
Sintaxe:
(polar ponto ang dist)
Exemplo:
(setq p1 (getpoint "\nInsira um ponto:"))
(setq p2 (polar p1 0.785398 141.5))
5
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Função inters



Obtém a intersecção de duas retas, cada uma definida
por dois pontos.
Sintaxe:
(inters pnt1-r1 pnt2-r1 pnt1-r2 pnt2-r2 [onseg])
(onseg é opcional e pode ter nil – considera retas infinitas
ou T)
Exemplo:
(setq p1r1 (getpoint "\nInsira um ponto da primeira reta:"))
(setq p2r1 (getpoint p1r1 "\nInsira outro ponto:"))
(setq p1r2 (getpoint "\nInsira um ponto da segunda reta:"))
(setq p2r2 (getpoint p1r2 "\nInsira outro ponto:"))
(setq pint (inters p1r1 p2r1 p1r2 p2r2))
6
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Função osnap



7
Retorna um ponto em 3D do UCS corrente
resultado da aplicação de uma função de
precisão (osnap) através de um ponto
especificado.
Os modos de precisão (opções osnap) são:
end, mid, int, appint, cen, qua, per, tan, nod, ins,
nea ...
Sintaxe:
(osnap ponto “modo")
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Função osnap

Exemplo: (seleção do ponto médio de uma reta especificada)
(defun c:pontomediano(/ pt)
(setq pt (getpoint "\nClique sobre uma reta:"))
(Ponto mais próximo.)
(setq pt (osnap pt "nea"))
(Ponto mediano.)
(setq ptmid (osnap pt "mid"))
)
8
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Função trans



Translada um ponto de um sistema de coordenadas para um
outro sistema de coordenadas.
Sintaxe:
(trans pnt sc-orig sc-dest [disp])
sc-orig e sc-dest especificam os sistemas de coordenadas
original e destino. Estes argumentos podem ser:
–
–
–

9
códigos (0 para WCS,1 para UCS corrente, 2 para UCS do view, 3
para paperspace);
nomes de entidade (obtidos com entnext, entlast, entsel, nentsel e
ssname);
um vetor de extrusão em 3D.
disp se presente e não-nulo, especifica que pnt deve ser
tratado com um deslocamento em 3D e não um ponto.
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Função trans - exemplos

Se o UCS corrente foi obtido da mudança de origem para o
ponto (10,10,10), então:
(setq p (list 0 0 0))
(trans p 0 1)
; retorna (-10.0 -10.0 -10.0)
(trans p 1 0)
; retorna (10.0 10.0 10.0)

Para se converter pontos em 2D para 3D:
(setq ponto (list 1 2))
(trans ponto 0 1) ; acrescenta z = 0 ao ponto
(trans ponto 1 0) ; acrescenta z = z do UCS corrente ao ponto
10
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Exemplo - funções trans e polar
(defun c:tr(/ centro1 centro2 ncentro dia)
(command "ucs" "")
; ajustando o ucs para wcs
(setq centro1 (getpoint "Escolha o centro da rotação:"))
(setq dia (getreal "Diametro do círculo:"))
(setq centro2 (polar centro1 0 (* 2 dia)))
; centro do primeiro círculo
(command "circle" centro2 (/ dia 2))
; desenho do 1º círculo, centro+raio
(repeat 10
(command "ucs" "y" "36")
; roda ucs em torno do eixo Y 36º
(setq ncentro (trans centro1 0 1))
; translada centro1 para o novo ucs
(setq centro2 (polar ncentro 0 (* 2 dia))) ; centro do próximo círculo
(command "circle" centro2 (/ dia 2))
; desenha o próximo círculo
)
)
Exemplo do
resultado (circles)
11
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Funções para Strings
Strings – conjunto de caracteres
–
–
–
–
–
12
getstring: leitura de uma string a partir do teclado;
read-line/write-line: leitura/escrita de uma string de
um/num arquivo;
substr: obtenção de uma substring a partir de uma
string original, por ex: (substr "abcde" 2 1) devolve “b”;
strlen: devolve o número de caracteres de uma string;
strcat: realiza a concatenação (“soma”) de strings, por
ex: (strcat "a" "bout") devolve “about”.
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Mais funções para Listas



13
append: junta listas numa única lista, por ex:
(append '(a b) '(c d)) retorna (A B C D);
list: cria uma lista, por ex: (list 3.9 6.7) retorna
(3.9 6.7);
nth: retorna o elemento de uma lista que ocupa
uma determinada posição (o 1º elemento
corresponde à posição 0), por ex: (nth 3 '(a b c d
e)) retorna d.
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Manipulação de arquivos ASCII



A manipulação de arquivos consiste em armazenar
informação (e também ler ...) obtida durante uma sessão
do AutoCAD em arquivos para uso posterior.
O AutoLISP permite que dados sejam gravados e lidos a
partir de arquivos escritos no padrão ASCII.
As funções de manipulação de arquivos ASCII em
AutoLISP são:
–
–
–
14
de abertura e fecho de arquivos: open e close
de leitura: read-char e read-line
de escrita: write-char, write-line, princ, print, prin1
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Abrir arquivos



Quando um arquivo ASCII é aberto pelo AutoLISP, o
registro da sua abertura deve ficar associado a uma
variável especificada no programa.
Essa variável aponta para o arquivo dentro do programa.
Sempre que se deseja referir esse arquivo dentro do
programa, deve-se referir a correspondente variável
associada.
Um arquivo pode ser aberto para:
–
–
–
15
leitura;
escrita;
leitura e escrita.
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Função open

Sintaxe:
(open "unidade:\\subdir\\arquivo.txt" "código")
–
onde "código" pode ser:




r (para leitura);
w (para escrita);
a (para leitura e escrita).
Exemplos:
(setq LE (open "c:\\lista.txt" "r"))
(setq GRAVA (open "c:\\trab\\lista.txt" "w"))
(setq INCRE (open "c:\\tmp\\lista.txt" "a"))
16
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Funções de escrita em arquivos ASCII


As funções write-char, write-line, princ, print e
prin1 escrevem (gravam) informação num
arquivo ASCII previamente aberto para escrita
ou para leitura e escrita.
Sintaxe:
(comando-de-escrita informação arquivo)
(Variável
associada)
17
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Funções de escrita em arquivos ASCII

Exemplo:
(defun c:abrearq()
;abre arquivo para escrita e apaga o conteúdo se o arquivo
;já existir
(setq arq (open "c:\\trab\\arquivo.txt" "w"))
(princ "CFAC " arq)
(setq ano 2009) (princ ano arq)
(write-line “Utilizando autocad" arq)
(close arq)
; fecha o arquivo
)
18
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Comandos de leitura



As funções read-line e read-char são funções
que leem dados a partir de arquivos ASCII.
Sintaxe:
(read-line arquivo) ; retorna a linha lida
(read-char arquivo) ; retorna o código ascii do
; caracter lido
Exemplo:
(setq caracter (chr (read-char arq)))
(Conversão ascii -> caracter.)
19
2011@JST/JOF
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Manipulação de Arquivos
Exemplo - função read-line
20
(defun c:learq()
(setq arq (open "c:\\trab\\arquivo.txt" "r"))
(if (= arq nil)
(alert "Open Inválido!") ; erro na abertura do file
(progn
(setq linha (read-line arq))
(Escrita de todas
(while (/= linha nil)
as linhas do
(print linha)
ficheiro.)
(setq linha (read-line arq))
)
)
)
(princ)
)
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
2011@JST/JOF
Manipulação de Arquivos
Download

Modulo 7 - Funções Geométricas, de Strings, de Listas e de