Instituto Superior Técnico Licenciatura em Arquitectura Desenho Assistido por Computador II Ano lectivo 2005/06, 2 ano Responsável: Assistente: Prof. José Pinto Duarte Arq. Deborah Benrós Notas de apoio ao Exercício 4. Parte 1 Manipulação de Listas e Strings e outros assuntos 1. Definição de funções anónimas (lambda args exp) (lambda (x) (* 2 x)) ; define uma função ; ver exemplo de aplicação abaixo com mapcar 2. Manipulação de listas - básico (10 20 5) ; retorna uma lista formada pelos elementos indicados (list 10 20 5) ; retorna uma lista formada pelos elementos indicados (car lista) ; retorna o primeiro elemento da lista (nth indice lista) ; retorna o enésimo elemento da lista (last lista) ; retorna o último elemento da lista (cdr lista) ; retorna uma lista sem o primeiro elemento (length lista) ; retorna o número de elementos na lista (cons elemento lista) ; adiciona o elemento ao início da lista (subst novo velho lista) ; retorna a lista com elemento velho substituido pelo novo (append lista1 lista2...) ; adiciona duas ou mais listas (reverse lista) ; retorna uma lista com os elementos em posição invertida (setq lista (list 10 20 5)) ; retorna (10 20 5) (car lista) ; retorna 10 (nth 0 lista) ; retorna 10 (nth 1 lista) ; retorna 20 (last lista) ; retorna 5 (cdr lista) ; retorna (20 5) (length lista) ; retorna 3 (cons 0 lista) ; retorna (0 10 20 5) (subst 50 10 lista) ; retorna (50 20 5) (append lista lista) ; retorna (10 20 5 10 20 5) (reverse lista) ; retorna (5 20 10) 1
3. Manipulação de listas - avançado (member elemento lista) ; verifica se o elemento faz parte da lista, se faz retorna o resto da lista a partir do elemento (member c (a b c d e)) ; retorna (c d e) (assoc elemento lista) ; procura o registo que tem o elemento como chave numa lista do tipo associativo (setq data ((width 12) (height 12) (length 4))) (assoc height data) ; retorna (height 12) (foreach variavel lista expressao) ; executa a expressão para cada elemento da lista, representado pela variável (setq total 0) (foreach x (list 1 2 3 4 5) (setq total (+ total x))) ; o total é 15 (foreach ponto (list 1 1) (list 2 2) (command donut 4 3 ponto ) (mapcar funcao lista1 lista2 ) ; retorna uma lista formada por elementos resultantes da aplicação da função dada aos elementos da listas (mapcar + (list 1 2) (list 50 60)) ; retorna (51 62) (mapcar (lambda (x) (* x 2)) (list 1 2 3)) ; retorna (2 4 6) (apply funcao lista) ; retorna o resultado da execução da função tendo como argumentos os elementos Exemplo (apply + (1 2 3)) ; retorna 6 4. Manipulação de strings - básico (strcase string op) ; retorna a string em maiúsculas (nada na opção) ou em minúsculas (1 ou T na opção) (strcat string1 string2) ; une duas ou mais strings numa só (substr string posicao comprimento) ; retira parte da string a partir da posição e com o comprimento dados (strlen string) ; indica o número de caracteres na string (wcmatch string padrao) ; procura o padrão dado na string e retorna T ou nil (read string) ; lê o conteúdo de uma expressão e retorna o valor no formato adequado (strcase Maisculas ) (strcase Maisculas 1) ; retorna MAISCULAS ; retorna maisculas 2
(strcat Isto sao palvras ) ; retorna Isto sao palavras (substr frase a retirar parte 17 5) ; retorna parte (strlen palavra ) ; retorna 7 (read 3.1415 ) ; retorna 3.1415 (wcmatch palavra p* ) ; retorna T (ver quadro de wildcards abaixo) # Caracter numérico simples @ caracter alfanumérico simples * qualquer sequencia de caracteres, incluindo em vazio ~ se for o primeiro caracter do padrão aceita qualquer caracter menos os que são do padrão [...] verifica a equivalencia de qualquer caracter dentro dos parentesis [~...] verifica algum carater que não seja equivalente aos dos parentesis - usado dentro de parentises especifica a tolerancia para um caracter simples, separa dois padrões ` ignora carateres especiais, faz uma leitura literal do carater seguinte 5. Funções de conversão (atof string) (atoi string) (fix real) (float inteiro) (itoa inteiro) (rtos real formato precisao) (distof distancia unidades) (anftof angulo unidades) (ascii string) (chr inteiro) ; transforma uma string numérica num real ; transforma uma string numérica num inteiro (se a string for um real retorna a parte inteira) ; retorna a parte inteira dum real ; transforma um inteiro num real ; transforma um inteiro numa string ; transforma um real numa string ; transforma uma string num real ; transforma string representando ângulo num real ; retorna o código ascii do caracter ; transforma um inteiro no respectivo caracter (entre 0-255) (atof 2.53 ) ; retorna 2.53 (atoi 114 ) ; retorna 114 (fix 3.457 ) ; retorna 3 (float 12) ; retorna 12.0 (itoa 21) ; retorna 21 (rtos 11.65 2 4) ; retorna 11.6500 (formatos: 1-científico, 2-decimal, 3-engenharia, 4- arquitecura) e 5-fraccional) (distof 1.7500E+01 1) ; retorna 17.5 (angtof 45 1) ; retorna 0.785398 (unidades: 0 graus, 1 graus/minutos/segundos, 2-grados, 3-radianos, 4- unidades geográficas) (ascii h ) ; retorna 104 (chr 87) ; retorna W 6. Funções auxiliares (function expressao) ; faz com que a expressao não seja executada 3
(eval expressao) (princ) (polar ponto angulo distancia) (angle ponto1 ponto2) (distance ponto1 ponto2) (inters pt1 pt2 pt3 pt4 op) (osnap ponto snaps) ; executa a expressão ; evita que a função retorne ; retorna as coordenadas dum ponto a partir de outro recorrendo as coordenadas polares (o ângulo é dado em radianos) ; calcula o ângulo da recta definida pelos dois pontos com a horizontal ; calcula a distância entre dois pontos ; retorna a intersecção entre os dois segmentos definidos pelos quatro pontos (se a opção é nil calcula a intersecção entre as duas rectas mesmo que os segmentos não se intersectem) ; permite aplicar o objecto snap a um ponto (setq pt1 (getint indique ponto )) (setq pt2 (osnap pt1 endp, midp ) ; faz snap para o ponto mais próximo de pt1 (tem que existir um objecto e o ponto indicado tem que estar sobre o objecto) (trans pt1 from to) (trans (list 12 3) 0 1) (trans (list 12 3) 1 0) ; transforma as coordenadas do ponto dado de um sistema de coordenadas para outro 0 WCS world coordinate system 1 UCS user coordinate system 2 viewport 3 ecran ; transforma coordenadas de WCS para UCS ; de UCS para WCS 7. Funções para manipular entidades (continuação) (entmake...) ; constrói uma nova entidade a partir da lista dada com as características da entidade (se não forem indicadas características do objecto usa características por defeito) (defun linha () (entmake (list (cons 0 line ) (cons 8 layer ) (cons 62 0) (list 10 2.5 4.5) (list 11 3.2 6.5)))) pág. 539 do livro de apoio lista os códigos (entmode ent) ; recria a entidade após os seguintes passos: 1. obtém-se a entidade 2. obtém-se o atributo 3. altera-se e coloca-se num variável 4. recria-se a entidade 4
(defun mudarlayer () (setq ent (car (entsel \n seleccione entidade ))) (if ent (progn (setq ent1 (entget ent)) (setq ent1 (subst (cons 8 20 ) (assoc 8 ent1) ent1)) (entmode ent1) ) ; prong ) ; if ) ; defun (entupd ent) ; semelhante ao entmode mas usa-se para entidades mais complexas 8. Funções para verificar o input (null valor) (not valor) (atom valor) (zerop valor) (listp valor) (boundp simbolo) (numberp valor) (minusp valor) (type valor) (setq a 0) (zerop a) (null b) (setq c 2.01) ; listas, retorna T se o valor é nil, senão retorna nil ; número, retorna T se o item é nil, senão retorna nil ; retorna T se o item é um átomo, senão retorna nil (um átomo é tudo o que não é uma lista) ; retorna T se o valor é zero, senão retorna nil ; retorna T se o valor é uma lista, senão retorna nil ; retorna T se o símbolo tem um valor atribuido, senão nil ; retorna T se o valor é real ou inteiro, senão retorna nil ; retorna T se o valor é negativo, senão retorna nil ; retorna o tipo de valor, como indicado abaixo (os tipo são referenciados sempre em letras maiúsculas) ; retorna T ; retorna T porque a variável b não está definida (not c) ; retorna nil porque c = 2.01 (atom (list 0 1)) ; retorna nil porque é uma lista (listp a) ; retorna nil porque a é um átomo (boundp a) ; retorna T porque tem valor atribuido (numberp a) ; retorna T (minusp a) ; retorna nil (type a) ; SYM símbolos (type 2) ; INT inteiro (type 2.1) ; REAL real (type a ) ; STR string (type (list a b c)) ; LIST lista (type nil) ; nil nil (type +) ; SUBR função interna do autolisp EXSUBR função externa ADS (type (entlast)) ; ENAME nome de entidade (entity name) (type (ssadd)) ; PICKSET lista de entidades (selection set) 5