;Macro para fazer textura da madeira num poligono. ;Macro realizada pela aluna Madalena Spinola, da turma D do 2 ano. ;Sistemas de representacao digital em arquitetura lecionada pelo professor Luis Romao ;Mestrado Integrado em Arquitetura - Faculdade de Arquitetura - UL ;Macro ajustada partir de macro já existente da aluna Joana ;nome da funcao (defun c:politrim () ;a variavel "os" controla o modo como os pontos sao selecionados. ;com getvar guardamos o valor das variaveis (setq os (getvar 'osmode)) ;com setvar atribuimos um valor ;atribuir o valor de 1 - Object Snap ON com Endpoint seleccionado (setvar 'osmode 1) ;selecao do primeiro ponto (setq pt1 (getpoint "\n Indique um ponto onde a textura vai comecar: ")) ;alteracao da origem do sistema (command "ucs" "n" pt1) (setq pt1 (list 0 0)) ;selecao do segundo ponto ;(setq pt2 (getpoint "\n Indique o comprimento da area: ")) ;selecao do terceiro ponto (setq pt3 (getpoint "\n Indique o ponto oposto da diagonal: ")) ;criacao de uma funcao com a seguinte condicao: (if (> (car pt1)(car pt3)) ;variavel que permite identificar apenas dois pontos da area a preencher (progn (setq a pt1 b pt3) (setq pt1 (list (car b) (cadr a))) (setq pt3 (list (car a) (cadr b))))) (setq pt2 (list (car pt3) (cadr pt1))) ;seleccao do quarto ponto ;(setq pt4 (getpoint "Indique a largura da area: ")) (setq pt4 (list (car pt1) (cadr pt3))) ;divisao de cada lado da area a preencher com a textura em tres partes iguais - a b c - d e f - g h j - k l m ;uma primeira funcao atraves do comando list, car e cadr ;a mesma funcao, mas com coordenadas polares ;com coordenadas polares: para definir um ponto e necessario colocar um ponto de referencia ao qual vai ser adicionado uma determinada distancia. O angulo sera entre os pontos das extremidades da respectiva aresta. ;(setq pta (list (* (/ (distance pt1 pt2) 3) 1) (cadr pt1))) (setq pta (polar pt1 (angle pt1 pt2) (* (/ (distance pt1 pt2) 3) 1))) ;(setq ptd (list (car pt2) (* (/ (distance pt3 pt2) 3) 2))) (setq ptd (polar pt2 (angle pt2 pt3) (* (/ (distance pt3 pt2) 3) 2))) ;(setq ptb (list (* (/ (distance pt1 pt2) 3) 2) (cadr pt1))) (setq ptb (polar pt1 (angle pt1 pt2) (* (/ (distance pt1 pt2) 3) 2))) ;(setq ptc (list (car pt2) (* (/ (distance pt3 pt2) 3) 1))) (setq ptc (polar pt2 (angle pt2 pt3) (* (/ (distance pt3 pt2) 3) 1))) ;(setq ptf (list (* (/ (distance pt4 pt3) 3) 1) (cadr pt3))) (setq ptf (polar pt4 (angle pt4 pt3) (* (/ (distance pt4 pt3) 3) 1))) ;(setq pth (list (car pt1) (* (/ (distance pt4 pt1) 3) 2))) (setq pth (polar pt4 (angle pt4 pt1) (* (/ (distance pt4 pt1) 3) 2))) ;(setq pte (list (* (/ (distance pt4 pt3) 3) 2) (cadr pt3))) (setq pte (polar pt4 (angle pt4 pt3) (* (/ (distance pt4 pt3) 3) 2))) ;(setq ptg (list (car pt1) (* (/ (distance pt4 pt1) 3) 1))) (setq ptg (polar pt4 (angle pt4 pt1) (* (/ (distance pt4 pt1) 3) 1))) ;atribuir o valor de 0 - Object Snap ON, mas sem qualquer tipo de selecao especifica (setvar 'osmode 0) ;criacao de uma curva que faz 25 graus de angulo entre dois pontos. Dependendo do tipo de area a preencher, o angulo pode variar. (command "pline" pt1 "arc" "angle" "25" pt3 "") (command "pline" pta "arc" "angle" "25" ptd "") (command "pline" ptb "arc" "angle" "25" ptc "") (command "pline" ptg "arc" "angle" "25" ptf "") (command "pline" pth "arc" "angle" "25" pte "") ;repor o valor inicial da macro. (setvar 'osmode os) ;alteracao para a origem do sistema inicial (command "ucs" "world" "") ;utilizar o comando trim, selecionar o poligono, selecionar a area retangular para apagar a textura que esta a mais. (command "trim" (entsel) "" pause pause "") )