← Voltar ao blog
AutoCADCivil 3DAutoLISPRotinas LISPAutomação BIM

Rotinas LISP para AutoCAD e Civil 3D: como carregá-las sem risco, 3 rotinas úteis e quando passar para um plugin

O que é AutoLISP, como carregar rotinas LISP no AutoCAD e no Civil 3D com segurança, 3 rotinas com código para copiar e quando vale um plugin em C#.

Zeist··10 min de leitura
Compartilhar no LinkedInRotinas LISP para AutoCAD e Civil 3D: como carregá-las sem risco, 3 rotinas úteis e quando passar para um plugin

AutoCAD · Civil 3D · AutoLISP

As rotinas LISP continuam economizando horas em milhares de escritórios. E continuam sendo um risco se ninguém as revisa.

O que é AutoLISP, como carregar uma rotina para que fique sempre disponível, três rotinas úteis com o código, como se proteger de malware em LISP e quando vale dar o salto para um plugin em C#.

Por que o LISP continua vivo

Quase todo escritório de engenharia tem uma pasta com rotinas LISP: umas baixadas de fóruns, outras escritas por alguém que já não trabalha lá. Continuam funcionando porque o AutoLISP quase não mudou em décadas, e porque para tarefas de desenho simples é a forma mais rápida de automatizar.

O problema aparece quando essas rotinas se tornam críticas e ninguém sabe o que fazem, ou quando se tenta usar LISP para algo que não lhe cabe, como ler os objetos de engenharia do Civil 3D. Este guia cobre as duas coisas.

De um arquivo .lsp a um comando

Arquivo .lsp

Código em texto

APPLOAD ou Startup Suite

A partir de um local confiável

Comando novo

Digitado na linha de comando

Uso diário

Em cada desenho que você abre

Rotinas LISP para AutoCAD e Civil 3D, em 7 blocos

O que é AutoLISP, como carregar rotinas com segurança, três rotinas com o código, o risco de malware e quando passar para um plugin.

  1. 01Conceito

    O que é AutoLISP

    Onde funciona e para que serve hoje

  2. 02Primeiro

    Como carregar

    APPLOAD, Startup Suite e SECURELOAD

  3. 03Rotina 1

    Exportar pontos

    Pontos para um CSV PNEZD do Civil 3D

  4. 04Rotina 2

    Rotular coordenadas

    Este e Norte de cada ponto

  5. 05Rotina 3

    Comprimento total

    Soma de linhas, polilinhas e arcos

  6. 06Risco

    Segurança

    Malware em LISP e como se proteger

  7. 07Ação

    Quando passar para um plugin

    Os limites do LISP frente ao C#

AutoLISP é uma linguagem que o AutoCAD inclui desde os anos 80. Uma rotina LISP define um ou mais comandos novos que são executados como qualquer comando do AutoCAD.

Onde funciona:

  • No AutoCAD e em todas as suas versões verticais, incluindo o Civil 3D.
  • No AutoCAD LT para Windows desde a versão 2024. Antes, as versões LT não executavam LISP.

Para que é bom:

  • Rotular, numerar, renomear layers, mudar propriedades em lote.
  • Medir e somar: comprimentos, áreas, quantidades de blocos.
  • Exportar e importar dados simples para arquivos de texto ou CSV.

Onde se escreve: desde o AutoCAD 2021, o editor recomendado é o Visual Studio Code com a extensão de AutoLISP da Autodesk, que substitui o antigo editor Visual LISP.

Para usá-la uma vez:

  1. Digite APPLOAD na linha de comando.
  2. Procure o arquivo .lsp e clique em Carregar.
  3. Digite o comando que a rotina define.

Você também pode arrastar o arquivo .lsp para a janela do desenho.

Para que fique sempre disponível: no mesmo quadro do APPLOAD, adicione a rotina ao Startup Suite (os aplicativos de inicialização). Ela será carregada em cada desenho que você abrir.

Exporta os objetos ponto (POINT) selecionados para um arquivo CSV no formato PNEZD: número, Norte, Este, cota e descrição. Esse arquivo é importado diretamente no Civil 3D como pontos COGO. Como importá-lo sem erros, em importar pontos no Civil 3D.

;; ZPONTOSCSV: exporta os pontos (POINT) selecionados para um CSV PNEZD
(defun c:ZPONTOSCSV (/ ss arq f i n p)
  (setq ss (ssget '((0 . "POINT"))))
  (if ss
    (progn
      (setq arq (getfiled "Salvar pontos" "" "csv" 1))
      (if arq
        (progn
          (setq f (open arq "w") i 0 n 1)
          (repeat (sslength ss)
            (setq p (cdr (assoc 10 (entget (ssname ss i)))))
            (write-line
              (strcat (itoa n) ","
                      (rtos (cadr p) 2 3) ","
                      (rtos (car p) 2 3) ","
                      (rtos (caddr p) 2 3) ",PT")
              f)
            (setq i (1+ i) n (1+ n)))
          (close f)
          (princ (strcat "\n" (itoa (sslength ss)) " pontos exportados para " arq)))))
    (princ "\nNenhum ponto selecionado."))
  (princ))

Como funciona: ssget com o filtro (0 . "POINT") deixa selecionar só pontos; getfiled abre o quadro para salvar; cada linha escreve o Norte (Y) antes do Este (X), que é a ordem do PNEZD.

Pede pontos no desenho e escreve ao lado um texto com seu Este e seu Norte. Serve para plantas de situação, vértices de um terreno ou pontos de controle.

;; ZCOORD: rotula as coordenadas Este e Norte de cada ponto indicado
(defun c:ZCOORD (/ alt p w)
  (setq alt (getreal "\nAltura do texto <2.5>: "))
  (if (not alt) (setq alt 2.5))
  (while (setq p (getpoint "\nPonto a rotular (Enter para terminar): "))
    (setq w (trans p 1 0))
    (entmake
      (list (cons 0 "TEXT")
            (cons 10 w)
            (cons 40 alt)
            (cons 1 (strcat "E " (rtos (car w) 2 3) "  N " (rtos (cadr w) 2 3))))))
  (princ))

Como funciona: getpoint devolve o ponto no sistema de coordenadas do usuário (UCS); trans o converte para o sistema universal (WCS), que é o que guarda as coordenadas reais. Sem esse passo, com um UCS girado, o rótulo mostraria coordenadas erradas.

Soma o comprimento de tudo o que foi selecionado. Útil para levantar tubulações, sarjetas, meios-fios ou qualquer elemento desenhado como linha.

;; ZCOMPTOTAL: soma o comprimento de linhas, polilinhas, arcos, circulos e splines
(vl-load-com)
(defun c:ZCOMPTOTAL (/ ss i total e)
  (setq ss (ssget '((0 . "LINE,LWPOLYLINE,POLYLINE,ARC,CIRCLE,SPLINE")))
        total 0.0
        i 0)
  (if ss
    (progn
      (repeat (sslength ss)
        (setq e (ssname ss i)
              total (+ total (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
              i (1+ i)))
      (princ (strcat "\nObjetos: " (itoa (sslength ss))
                     "   Comprimento total: " (rtos total 2 3))))
    (princ "\nNada selecionado."))
  (princ))

Como funciona: vl-load-com ativa as funções vlax-curve, que medem qualquer curva da mesma forma, seja uma linha, uma polilinha ou um arco.

O AutoCAD carrega automaticamente certos arquivos, como acad.lsp e acaddoc.lsp, se os encontra na pasta do desenho ou nos caminhos de busca. Esse comportamento já foi usado para propagar malware: um arquivo LISP escondido que viaja junto com os desenhos e é executado ao abri-los.

O caso mais conhecido aconteceu na América do Sul. Em 2012, a empresa de segurança ESET documentou o ACAD/Medre.A, um malware escrito em AutoLISP que se propagou sobretudo no Peru e enviou dezenas de milhares de desenhos por e-mail para contas na China.

Como se proteger:

  • Mantenha o SECURELOAD em 1 ou 2, nunca em 0.
  • Tenha uma única pasta de rotinas revisadas como local confiável.
  • Desconfie de um acad.lsp ou acaddoc.lsp que apareça junto com desenhos recebidos de terceiros.
  • Não carregue arquivos .fas ou .vlx de origem desconhecida: não podem ser lidos, então você não sabe o que fazem.

O LISP trabalha muito bem com o que o AutoCAD desenha: linhas, polilinhas, textos, blocos e layers. Com os objetos de engenharia do Civil 3D é outra história: ele os vê quase como caixas fechadas. Para ler os dados de um alinhamento, uma superfície ou um corredor, precisa passar pela interface COM do Civil 3D, que é trabalhosa, muda entre versões e não cobre tudo.

Sinais de que sua rotina já deveria ser um plugin:

  • Precisa ler ou modificar alinhamentos, perfis, superfícies, corredores ou redes de tubulação.
  • Precisa de uma janela com opções, validações ou tabelas, além de perguntas na linha de comando.
  • O escritório inteiro a usa e um erro custa horas de trabalho.
  • Só uma pessoa a entende.
CritérioPlugin em C#Rotina LISP
Objetos do Civil 3DAcesso completo pela API .NETLimitado, via COM
InterfaceJanelas, tabelas e validaçõesLinha de comando e quadros simples
Velocidade com milhares de objetosAltaAceitável
DistribuiçãoInstalador com versão e registro de mudançasArquivo que se copia
Curva de aprendizadoMesesDias
Ideal paraFerramentas críticas do escritórioTarefas de desenho rápidas

Se você quer dar o passo sozinho, comece pela API do Civil 3D em C#. Se prefere que nós façamos, explicamos em desenvolvimento de add-ins para Revit e Civil 3D.

Recursos relacionados

Perguntas frequentes sobre rotinas LISP

É um arquivo de texto com código em AutoLISP, a linguagem que vem no AutoCAD, que adiciona comandos novos. É usada para automatizar tarefas de desenho repetitivas, como rotular, somar comprimentos, numerar ou exportar pontos. Os arquivos .lsp podem ser lidos; os .fas e .vlx são versões compiladas.


Nota técnica: o código é um exemplo de referência. Teste-o num desenho de teste antes de usá-lo num projeto.

Fale com um engenheiroResposta hoje · Sem compromisso