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 "Select entities to Copy and Rotate:") (setq sset (ssget)) (setq pt1 (getpoint "Specify copy base point:"))(terpri) (setq pt2 (getpoint pt1 "Specify copy second point:"))(terpri) (command ".copy" sset "" pt1 pt1 ".move" sset "" pt1 pt2 ".redraw") (setq pt2 (getpoint "Specify rotate base point:"))(terpri) (command ".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 "Select entities to Copy and Rotate:") ; 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 "Specify copy base point:"))(terpri) ; obter o ponto base da cópia "pt1" (setq pt2 (getpoint pt1 "Specify copy second point:"))(terpri) ; obter cópia segundo ponto “pt2” (command ".copy" sset "" pt1 pt1 ".move" sset "" pt1 pt2 ".redraw") ; copiar objetos no lugar e mova-os para longe ... ; a maneira mais fácil de copiar e girar criado grupo de objetos (setq pt2 (getpoint "Specify rotate base point:"))(terpri) ; obter o ponto base de rotação ... 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 “ (command ".rotate" sset "" pt2) : rotacione o grupo anteriormente movido ) ; fecha 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(command “Select” pause “copy” “p” “” “@” “@” “move” “p” “” pause pause “rotate” “p” “” “@” pause)
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?
Sr. Vince
Obrigado por suas dicas do iceberg.
Sim, você pode ter “atingido” meu interesse, mas você também “despertou” meu interesse também.
Este é o meu dia 1 usando o BricsCAD Shape e descobrindo sobre o LISP.
Este LISP funciona com o BricsCAD Shape? ou apenas com os grandes programas?
Agradecemos antecipadamente por qualquer informação adicional.
Escrevi muitas rotinas básicas do OtherLISP em 1990-2.
mas não muito desde então.
Cuidar.
Não, não há LISP atualmente disponível para usuários Shape. No entanto BricsCAD, BricsCAD BIM e BricsCAD Mechanical suportam LISP.