quinta-feira, 17 de novembro de 2016

Aula 15 e 16 - 5 de novembro de 2016

Nesta aula foi introduzida a criaçao de uma macro. Foi então proposto que se criasse um commando que permitisse originar automaticamente o indicativo da direção norte tomando como referência o que aparece nos desenhos da White U de Toyo ito.



Para definir a formula a partir da qual o simbolo vai ser desenhado, tem de se saber que comandos vao ser utilizados. Observando o símbolo percebe-se que este é constituido por uma circunferencia e uma linha cuja orientação define o norte-sul. 
 Com base nisso, pode-se recorrer aos commandos circle e pline, determinando que a linha corresponda ao raio da circunferencia. Também se pode definir que essa linha terá uma espessura determinada de modo proporcional, de modo a que independentemente do raio da circunferencia, o símbolo seja semelhante. Defini-se por exeplo que a sua espessura corresponderá a um decimo do comprimento do raio.









 Em linguagem de programação, pode-se definir então um conjunto de regras que irão dar origem ao comando. Primeiro a criação de uma circunferencia a partir de dois pontos: pt1 sendo o centro do circulo e pt2 um ponto da circunferencia marcado conforme o raio que se pertende. Além disso, a marcação do pt2 pode determinar também a orientação da linha orientada a norte, linha que terá uma espessura igual a 1/10 do comprimento do raio, isto é 0.1 vezes o seu comprimento.

Nesse caso, em formato de texto, pode-se registar os passos traduzidos graficamente em autocad.

(command "circle" pt1 pt2) (não determinando os parametros destes pontos)

Assim, o circulo será automaticamente determinado por dois pontos. Para ordenar também o desenho da linha, utiliza-se o commando "Pline" com especificação da sua espessura, isto é, 0.1 vezes o comprimento do raio tanto no inicio como no fim da mesma. Para isso determina-se que a linha começa no ponto "pt1". Depois, automatiza-se a opção "weight", ou seja, "w". Para que fique com a espessura de 1/10 do raio, determinace entao que será desde pt1 a pt2 0.1 vezes a distancia entre os dois pontos, isto é,  (* 0.1 (distance pt1 pt2)(* 0.1 (distance pt1 pt2)). Por fim autoriza-se a marcação de pt2 e confirma-se, o equivalente a "".

(command "pline" pt1 "w" (* 0.1 (distance pt1 pt2) )(* 0.1 (distance pt1 pt2)) pt2 "")

Tendo a informação gráfica do simbolo é ncessário então determinar os critérios que os definem.
Pt1 funciona como o centro, pt2 define a direção norte.

Para isso utiliza-se a definição "setq" para atribuir aos pontos estas funções, que no fundo são respontas a questões realizadas pelo programa.

(setq pt1 (getpoint "Qual o centro do símbolo?"))
(setq pt2 (getpoint "Qual a direção Norte?"))

Ainda para a macro ser reconhecida no programa atribui-se um nome. Neste caso poderá ser norte:´

(defun c:norte ()

Ainda se pode definir certos parametros tais como, por exemplo, o osnap. O osnap ligado pode interferir com a marcação livre dos pontos desencadeando o reconhecimento de outros ja existentes para a marcaçãopor exemplo de Pt1 2 pt2. Não querendo que haja essa interferencia, pode-se definir que Osmode tem valor 0, sendo osmode a soma dos valores das opções ligadas em Osnap, por exemplo, se a Endpoint(1) e Midpoint(2) estiverem ativos, o valor de osmode será 3. Neste caso pretende-se que Osnap fique inativo, logo, osmode=0.

Pode-se então traduzir isso da seguinte forma:

(setq pontos (getvar "osmode"))
(setvar "osmode" 0)

para que no fim da utilização da macro se possa voltar a ativar o Osnap, determina-se então que osmode deve retomar o seu valor anterior a marcação dos pontos:

(setvar "osmode" pontos)

)- para terminar

Guardando esta informação em formato lisp, pode-se fazer o load da nova app em AutoCad.




Tendo este simbolo feito, tenta-se então criar uma nova macro desta vez para que a indicação norte nao seja o segmento de reta mas sim um triangulo. Pode-se entender que o processo é praticamente igual. Basta defenir uma nova regra para o segmento criado através do commando "pline", se entendermos que o triangulo é um segmento que de um extremo ao outro vai perdendo a sua espessura.

Uma vez que o primeiro extremo corresponte nao ao raio mas sim ao diametro da circunferência, pode-se substituir o valor 0.1 por 2 vezes a distancia desde pt1 a pt2, tendo a outra extremidade definida por pt2 espessura nula. Traduzido em linguagem de programação de texto:

(command "pline" pt1 "w" (* 2 (distance pt1 pt2)) 0 pt2 "")





Ainda se quis criar uma macro que executasse mais um simbolo com a indicação norte com maior complexidade.

Pode-se observar que muita da informação do primeiro simbolo é semelhante, havendo mais uma circunferencia com espessura superior e dois eixos ortogonais.

Construindo em AutoCad o primeiro elemento pode ser definido por dois arcos simetricos, com uma distancia em relação ao circulo exterior, que pode ser determinado a partir de dois pontos. Os eixos podem-se definir a partir de pontos. O eixo norte sul por 2 pontos que no mesmo eixo de pt1 e pt2 se encontram afastados mais 1/10 da sua distancia entre si e o eixo este-oeste uma rotação desse novo eixo.

Esta criação de novos pontos pressupõe então que se atribua uma regra a cada um deles.
Determina-se ent que pt3 e pt4 definem o eixo "vertical".
Pt3, utilizando coordenadas polares, esta alinhado(mesmoangulo) com o pt1-pt2 e afasta-se um decimo em relação a esse segmento. 
(setq pt4 (polar pt1 (angle pt1 pt2) (* (distance pt1 pt2) 1.1 )))
Pt4 terá uma regra semelhante, sendo o sentido em que essa formação é interpretada, inversa.
(setq pt4 (polar pt1 (angle pt2 pt1) (* (distance pt1 pt2) 1.1 )))
Basta acionar a execução desta linha depois de definidos os parâmetros destes pontos.
(command "line" pt3 pt4 "")
A partir desta informação pode-se já obter a linha perpendicular (90º) a esta, tendo como centro pt1 e fixando a linha nesse ponto.
(command "rotate" "l" "" pt1 90)
De modo a obter-se o circulo interior utiliza-se pt5 pt6 e pt7, partindo da ideia que se poderá obter isse elemento criando dois arcos simetricos e que o arco é construido com o comando PLINE através de 3 pontos. Para tal é necessário definir a configuração desses pontos em relação ao resto da figura de maneira a ficar proporcional independentemente do tamanho da mesma. Defini-se que o circulo terá um raiocom menos um décimo do que o raio do criculo exterior. Para ficar no mesmo eixo definido por pt1 e pt2 utilizam-se coorenadas polares. Tendo em consta estas informações pode-se difinir logo pt5 e pt6 que serão "simétricos".

(setq pt5 (polar pt1 (angle pt1 pt2)(*(distance pt1 pt2) 0.9)))
(setq pt6 (polar pt1 (angle pt2 pt1)(*(distance pt1 pt2) 0.9)))


Pt7 seria um ponto que em relação a pt1 teria a mesma distancia que os pontos anteriores mas estaria sobre um eixo perpendicular ao eixo anterior que, em radianos, se traduz como um angulo de valor pi/2:
(setq pt7 (polar pt1 (+ (angle pt2 pt1) (/ pi 2))(*(distance pt1 pt2) 0.9)))


Para desenhar o arco aciona-se o comando pline com a opção arc e com uma espessura igual  0.05 vezes o comprimento do segmento pt1-pt2, e com a opção de selecionar um segundo ponto (s).


(command  "pline" pt5 "w" (* 0.05 (distance pt1 pt2)) (* 0.05 (distance pt1 pt2)) "a" "s" pt7 pt6 "")


Para que se obtenha uma circunferência fechada pode-se então utilizar o comando mirror utilizando como eixo aquele eixo formado por pt2 e pt1 sem apagar o objeto inicial.

(command "mirror" "l" "" pt1 pt2 "n") 


Para que a opção osnap nao interfira com a marcação dos pontos que definem o objeto final, determina-se que este fique desligado, atribuindo a osmode o valor de 0.

(setq pontos (getvar "osmode"))
(setvar "osmode" 0)

Ainda para que retome o valor incial, no fim determina-se que osmode tem o mesmo valor que tinha antes da ativação do novo commando criado, e fecha-se a informação.


(setvar "osmode" pontos)
)
Guardando estes dados em formato autolisp pode-se fazer um appload da nova ferramenta e testar.


                               
















Sem comentários:

Enviar um comentário