Copie e gire de maneira fácil com o LISP

Em contraste com o exemplo do .NET que apontei para você no último episódio deste blog, aqui está um exemplo simples de um comando LISP usado para copiar e girar objetos:

 (defun c: copyrotate (/ slset pt1 pt2) (prompt "Selecionar entidades para copiar e girar:") (setq sset (ssget)) (setq pt1 (getpoint) Especifique o ponto base da cópia: ")) (terpri) (setq pt2 (getpoint pt1 "Especifique o segundo ponto da cópia:")) (terpri) (comando ".copy" sset "" pt1 pt1 ".move" sset "" pt1 pt2 ".redraw") (setq pt2 (getpoint) Especifique o ponto base rotacionado : ")) (terpri) (comando" .rotate "sset" "pt2))

Agora isso é um programa curto! Como eu mencionei acima, esse “comando” combina os comandos Mover e Girar em um único comando.

O mesmo programa, com comentários:

No LISP, o ponto e vírgula marca uma linha de comentário, portanto, qualquer coisa depois não é processada.

(defun c: copyrotate (/ slset pt1 pt2)
define a função de comando “copyrotate”
(prompt "Selecionar entidades para copiar e girar:")
; solicitar ao usuário na linha de comando 
(setq sset (ssget))   
; solicitar ao usuário selecionar objetos      
variável contendo os objetos é "sset"
(setq pt1 (getpoint "Especifique o ponto base da cópia:")) (terpri)
; obter o ponto base da cópia "pt1"
(setq pt2 (getpoint pt1 "Especifique o segundo ponto de cópia:")) (terpri)
; obter cópia segundo ponto “pt2”
(comando ".copy" sset "" pt1 pt1 ".move" sset "" pt1 pt2 ".redraw")
; copie objetos no lugar e mova-os para longe ... a maneira mais fácil de copiar e girar criado grupo de objetos
(setq pt2 (getpoint "Especifique o ponto base de rotação:")) (terpri)
; gire o ponto base ... como uma nota lateral,
Eu prefiro usar o ponto base da cópia original como o centro de rotação
; para fazer isso, simplesmente remova ou comente a linha acima "; (setq pt2"
(comando ".rotate" sset "" pt2)
gire o grupo anteriormente movido
)
feche a função

Para melhorar a usabilidade de nossa função, podemos adicionar um loop “while” (para continuar pedindo mais seleções), e dar opções angulares, ativar ou desativar osnaps ou Ortho, etc…

É uma rotina LISP demais?

Tendo apresentado isso, vou dizer-lhe que há muitos casos em que uma rotina LISP pode ser over-kill. Se você está simplesmente executando uma série de comandos que não exigem “manipulação” dos dados entre funções, ou onde a entrada de dados é consistente, então as macros de menu podem ser ainda mais eficientes que o LISP. Mas, as macros de menu não podem ser projetadas com opções e podem ser “frágeis” - isto é, fáceis de quebrar - já que não podem lidar com erros. Minha recomendação? Aqui está um pouco híbrido - é uma rotina LISP de uma linha:

* ^ c ^ c (comando “Selecionar” pausar “copiar” “p” “” “” “@” “mover” “p” “” pausar pausar “girar” “p” “” “@” pausar)

Esta simples, mas elegante, macro “LISP” funciona exatamente como o programa acima, com a repetição da função automática adicionada (* ^ c ^ c), e fornece todo o feedback gráfico dinâmico do usuário de um programa sofisticado. Basta adicionar um ícone a um de seus menus usando a interface CUI e conectar a linha acima na seqüência de comando, e você terá uma função de cópia / rotação super legal.

A ferramenta certa para o trabalho

Você pode estar pensando que é tão fácil usar o Grips no BricsCAD e clicar com o botão direito do mouse para percorrer todas as opções. Minha resposta seria para lembrá-lo que eu sou (realmente) old school, e enquanto eu uso Grips frequentemente, eu também sei que a tecla Esc sempre foi a primeira chave a morrer de abuso no meu teclado (OK, não realmente). O ponto principal aqui é certificar-se de que você está usando a ferramenta certa para o trabalho, e embora certamente existam usos válidos para aplicativos .NET, não consigo escrever páginas de código compilado quando posso fazer o trabalho de forma limpa com algumas linhas de LISP.

Espero que esta introdução tenha atingido o seu interesse. Acho que você encontrará algumas dicas / sugestões úteis ao mergulhar no mundo do LISP. Lembre-se, é tudo sobre como realizar seu trabalho de design com rapidez e precisão. Que melhor maneira do que usar os recursos embutidos no BricsCAD para fazê-lo funcionar do seu jeito?