Вы находитесь на странице: 1из 20

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

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


2 2011@JST/JOF 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))

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


3 2011@JST/JOF 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))
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
4 2011@JST/JOF 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))

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


5 2011@JST/JOF 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))
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
6 2011@JST/JOF Manipulação de Arquivos
Função osnap

 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")
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
7 2011@JST/JOF 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:"))
(setq pt (osnap pt "nea")) (Ponto mais próximo.)

(setq ptmid (osnap pt "mid")) (Ponto mediano.)


)

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


8 2011@JST/JOF 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:
– 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.

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


9 2011@JST/JOF 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

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


10 2011@JST/JOF 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)
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
11 2011@JST/JOF Manipulação de Arquivos
Funções para Strings

Strings – conjunto de caracteres

– 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”.
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
12 2011@JST/JOF Manipulação de Arquivos
Mais funções para Listas

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

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


13 2011@JST/JOF 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:
– 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
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
14 2011@JST/JOF 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:
– leitura;
– escrita;
– leitura e escrita.

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


15 2011@JST/JOF 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"))

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


16 2011@JST/JOF 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)

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


17 2011@JST/JOF 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
)

CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de


18 2011@JST/JOF 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.)
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
19 2011@JST/JOF Manipulação de Arquivos
Exemplo - função read-line
(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))
(while (/= linha nil) (Escrita de todas
(print linha) as linhas do
ficheiro.)
(setq linha (read-line arq))
)
)
)
(princ)
) CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
20 2011@JST/JOF Manipulação de Arquivos

Вам также может понравиться