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 AutoLISP são: são: distance , angle , polar , inters , cal , osnap osnap e e trans Essas funções permitem: – – – –
2
desenhar rapidamente e com precisão; efectuar cálculos envolvendo os objectos 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: CF AC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Função angle
Obtém o ângulo em radianos de uma recta 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
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Função inters
Obtém a intersecção de duas rectas, cada uma definida por dois pontos. Sintaxe: (inters pnt1-r1 pnt2-r1 pnt1-r2 pnt2-r2 [onseg]) (onseg é opcional e pode ter nil – considera rectas infinitas ou T ) Exemplo: (setq p1r1 (getpoint "\nInsira um ponto da primeira recta:")) (setq p2r1 (getpoint p1r1 "\nInsira outro ponto:")) (setq p1r2 (getpoint "\nInsira um ponto da segunda recta:")) (setq p2r2 (getpoint p1r2 "\nInsira outro ponto:")) (setq pint (inters p1r1 p2r1 p1r2 p2r2))
6
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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") CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Função osnap
Exemplo: (selecção do ponto médio de uma recta especificada) (defun c:pontomediano(/ pt) (setq pt (getpoint "\nClique sobre uma recta:")) (Ponto mais próximo.) (setq pt (osnap pt "nea")) (Ponto mediano.) (setq ptmid (osnap pt "mid")) )
8
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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 vector 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
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) (trans p 1 0)
; retorna (-10.0 -10.0 -10.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
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Exemplo - funções trans e polar (defun c:tr(/ centro1 centro2 ncentro dia) (command "ucs" "") (setq centro1 (getpoint "Escolha o centro da (setq dia (getreal "Diametro do círculo:")) (setq centro2 (polar centro1 0 (* 2 dia))) (command "circle" centro2 (/ dia 2)) (repeat 10 (command "ucs" "y" "36") (setq ncentro (trans centro1 0 1)) (setq centro2 (polar ncentro 0 (* 2 dia))) (command "circle" centro2 (/ dia 2)) ) )
; ajustando o ucs para wcs rotação:")) ; centro do primeiro círculo ; desenho do 1º círculo, centro+raio ; roda ucs em torno do eixo Y 36º ; translada centro1 para o novo ucs ; centro do próximo círculo ; desenha o próximo círculo
Exemplo do resultado (circles)
11
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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”. CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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 . CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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 CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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. CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Funções de escrita em arquivos ASCII
Exemplo: (defun c:abrearq() ;abre arquivo para escrita e apaga o conteúdo se o arquivo ;já existia (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
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
Comandos de leitura
As funções read-line e read-char são funções que lêem 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
CFAC: AutoLISP (VII) - Funções Geométricas, de Strings, de Listas e de
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