alexlibrelon escreveu:
Tem esta:
Simples e coloca o resultado entre parênteses e outra, onde você clicar, o resultado é inserido.
Olá Alex, e obrigado por partlhares o teu código conosco!
Espero que não te importes que faça algumas sugestões em relação ao código, aqui vão...
Em relação ao 'Simples', eu concordo, mas por vezes os codigos não podem ser tão simples como nós pretendiamos.
Convem garantir a seleção da entidade correta (TEXTm MTEXT), caso contrario vai dar um erro como:
Command: sb Selecione o primeiro valor : Selecione o segundo : ; error: bad
argument type: stringp nil
Quando corres o teu código, recebes um 'echo' na linha de comandos
Command: SB Unknown command "SB". Press F1 for help.
A causa disso é um 'enter' a mais em
(command "._text" Pkt1 "" "" Txt3 "" )
se utilizares
(command "._text" Pkt1 "" "" Txt3)
o 'echo' desaparece.
Ao utilizar o comando 'text' na rotina, e se o 'Current Text Style' tiver altura definida no 'Style' o comando vai dar um erro como:
Command: sb
Selecione o primeiro valor : Selecione o segundo : Clique no ponto para inserir
o resultado: ._text
Current text style: "style1" Text height: 2.5000 Annotative: No
Specify start point of text or [Justify/Style]:
Specify rotation angle of text <0>:
Enter text:
Command: (82) LISP command is not available.
Para não acontecer isto, substitui
(command "._text" Pkt1 "" "" Txt3)
por
(if (zerop (cdr (assoc 40 (tblsearch "STYLE" (getvar "TEXTSTYLE")))))
(command "_.text" Pkt1 "" "" Txt3)
(command "_text" Pkt1 "" Txt3)
)
Mas eu perfiro utilizar a função 'entmake' na criação do texto.
O que eu sugiro não é assim tão 'Simples', mas é algo assim:
(defun c:sb (/ pt s s1)
(if (and (princ "\nSelecione o primeiro valor : ")
(setq s (ssget "_+.:E:S" '((0 . "TEXT,MTEXT") (1 . "#*"))))
(princ "\nSelecione o segundo : ")
(setq s1 (ssget "_+.:E:S" '((0 . "TEXT,MTEXT") (1 . "#*"))))
(setq pt (getpoint "Clique no ponto para inserir o resultado: "))
);; and
(entmake
(list
(cons 0 "TEXT")
(cons 100 "AcDbText")
(cons 10 (trans pt 1 0))
(cons 40 (getvar 'TEXTSIZE))
(cons 1
(strcat "("
(rtos (- (atof (cdr (assoc 1 (entget (ssname s 0)))))
(atof (cdr (assoc 1 (entget (ssname s1 0)))))
)
2
2
)
")"
)
)
(cons 50 (angle (list 0 0) (getvar "ucsxdir")))
)
);; entmake
);; if
(princ)
)
Espero que ajude
Henrique