quarta-feira, 21 de julho de 2010

Lisp para colocar rumos em alinhamentos

Segue abaixo uma rotina em AutoLisp que insere rumos em alinhamentos,da seguinte forma:
Ex: 292m - 36º 25' 42" SW.
Para usar este comando, basta copiar o código abaixo em um arquivo txt e salvá-lo com a extensão .lsp.
Depois, no AutoCAD, carrega a rotina através do comando APPLOAD, selecione o arquivo .lsp e confirme.
A partir daí, o AutoCAD passará a contar com este comando.

;;RODRIGO AUGUSTO DOURADO NEVES
;;SÃO JOSÉ DO RIO PRETO - SP
;;SETEMBRO DE 2003
;;radneves@gmail.com


(defun c:rumo ()

(setvar "cmdecho" 0)
(setvar "angdir" 0)
(setvar "luprec" 2)
(setq escala (/ (getreal "Entre com a escala: 1:") 1000))
(setq ttext (getreal "Entre com o tamanho do texto: "))
(setq pa (getpoint "\nClique no ponto: "))
(setq pb (list 0 0 0))

(while (/= pb nil)

(setq pb (getpoint "\nClique no próximo ponto: " pa))
(setq ds (* (distance pa pb) escala))
(setq an (angle pa pb))
(setq gr (/ (* an 360) (* 2 pi)))

(if (< gr 90)
(list (princ ds) (princ "\t") (setq angulo (princ (- 90 gr))) (princ "\t") (setq rumo (princ "NE")))

(if (and (< gr 180) (>= gr 90))
(list (princ ds) (princ "\t") (setq angulo (princ (- gr 90))) (princ "\t") (setq rumo (princ "NW")))

(if (and (< gr 270) (>= gr 180))
(list (princ ds) (princ "\t") (setq angulo (princ (- 270 gr))) (princ "\t") (setq rumo (princ "SW")))

(if (and (< gr 360) (>= gr 270))
(list (princ ds) (princ "\t") (setq angulo (princ (- gr 270))) (princ "\t") (setq rumo (princ "SE")))

)
)
)
)


(setq ang1 (fix angulo))
(setq fra_ang1 (- angulo ang1))
(setq minuto1 (fix (* fra_ang1 60)))
(setq fra_min (- (* fra_ang1 60) (fix minuto1)))
(setq segundo1 (* 60 fra_min))
(setq segundo2 (fix segundo1))
(setq texto (strcat (rtos ds) "m - " (rtos ang1) "º " (rtos minuto1) "' " (rtos segundo2) "''" rumo ))
(command "text" "j" "c" (list (+ (/ (+ (car pa) (car pb)) 2) 1) (+ (/ (+ (cadr pa) (cadr pb)) 2) 1) 0) ttext gr texto)
(setq pa pb)

)
(setvar "cmdecho" 1)
(setvar "luprec" 4)

)





Utilização:

Digite o comando rumo.
O AutoCAD irá solicitar a escala.
O valor 1 indica que a distância a ser mostrada corresponde a mesma medida pelo AutoCAD.
Caso utilize o valor 0,5, indica que a distância a ser mostrada será metade da medida pelo AutoCAD.
Entre com o tamanho do texto. Indique o tamanho da fonte a ser utilizada.
Clique em 2 pontos.
É isso ai. Espero que gostem.
Até!!!!
Fiquem a vontade para divulgar a rotina, porém lembre-se de citar a fonte.

8 comentários:

Adilson disse...

Muito enteressante e de muito facil interpretação

Mil e umas... disse...

Tem alguma configuração de unidades ou coisa do tipo ? Aqui marca apenas o numero decimal, sem indicação da direção e unidade em Grau Minuto Segundo

Rodrigo Augusto Neves disse...

Estranho. Deve estar acontecendo algum erro na hora de rodar a rotina.
Me mande um print screen com o que está acontecendo que eu tento te ajudar.
Favor indicar qual versão do AutoCAD você está usando.

Cerrado Ambiental disse...

Boa tarde Rodrigo,

Esse lisp que você postou vai ser muito útil pra mim.
Criei o mesmo da maneira que você informou, porém quando executo no autocad esta dando o seguinte erro:
Comando "text" desconhecido

A versão de meu AutoCad é 2013 em português.

Poderia ver pra mim. Agradeço.

Dennys Azevedo
E-mail: cerradoambiental@hotmail.com

E.F. disse...

Cerrado, não sou dona da LISP mas está claro que o problema é que o seu AutoCad é em português, portanto não reconhece o comando "text" Talvez se vc mudar a palavra "text" para "texto" conserte, se não houver outro comando em inglês na LISP.

Anônimo disse...

Muito obrigada!!! Me ajudou bastante!!!

tulio boca negra disse...

não esta funcionando no meu auto cad 2015 english fica numeros grandes sem noção

Jean disse...

CAAAAAAAAAARA!!!!!!!! SALVOU MEU DESMEMBRAMENTO!! MUITO OBRIGADO!! SEJA ILUMINADO POR COMPARTILHAR ISSO!

É necessário que o Gerente de Projetos tenha conhecimento técnico sobre o projeto que irá gerenciar?

Um assunto muito comum que normalmente leva a discussões acaloradas em diversos ambientes, tanto digital quanto presencial, é sobre a ne...