← Volver al blog
AutoCADCivil 3DAutoLISPRutinas LISPAutomatización BIM

Rutinas LISP para AutoCAD y Civil 3D: cómo cargarlas sin riesgo, 3 rutinas útiles y cuándo pasar a un plugin

Qué es AutoLISP, cómo cargar rutinas LISP en AutoCAD y Civil 3D de forma segura, 3 rutinas con código para copiar y cuándo conviene un plugin en C#.

Zeist··10 min de lectura
Compartir en LinkedInRutinas LISP para AutoCAD y Civil 3D: cómo cargarlas sin riesgo, 3 rutinas útiles y cuándo pasar a un plugin

AutoCAD · Civil 3D · AutoLISP

Las rutinas LISP siguen ahorrando horas en miles de oficinas. Y siguen siendo un riesgo si nadie las revisa.

Qué es AutoLISP, cómo cargar una rutina para que esté siempre disponible, tres rutinas útiles con su código, cómo protegerte del malware en LISP y cuándo conviene dar el salto a un plugin en C#.

Por qué el LISP sigue vivo

Casi toda oficina de ingeniería tiene una carpeta con rutinas LISP: unas descargadas de foros, otras escritas por alguien que ya no trabaja ahí. Siguen funcionando porque AutoLISP casi no ha cambiado en décadas, y porque para tareas de dibujo sencillas es la forma más rápida de automatizar.

El problema aparece cuando esas rutinas se vuelven críticas y nadie sabe qué hacen, o cuando se intenta usar LISP para algo que no le corresponde, como leer los objetos de ingeniería de Civil 3D. Esta guía cubre las dos cosas.

De un archivo .lsp a un comando

Archivo .lsp

Código en texto

APPLOAD o Startup Suite

Desde una ubicación de confianza

Comando nuevo

Se escribe en la línea de comandos

Uso diario

En cada dibujo que abres

Rutinas LISP para AutoCAD y Civil 3D, en 7 bloques

Qué es AutoLISP, cómo cargar rutinas de forma segura, tres rutinas con su código, el riesgo del malware y cuándo pasar a un plugin.

  1. 01Concepto

    Qué es AutoLISP

    Dónde funciona y para qué sirve hoy

  2. 02Primero

    Cómo cargarla

    APPLOAD, Startup Suite y SECURELOAD

  3. 03Rutina 1

    Exportar puntos

    Puntos a un CSV PNEZD para Civil 3D

  4. 04Rutina 2

    Rotular coordenadas

    Este y Norte de cada punto

  5. 05Rutina 3

    Longitud total

    Suma de líneas, polilíneas y arcos

  6. 06Riesgo

    Seguridad

    El malware en LISP y cómo protegerte

  7. 07Acción

    Cuándo pasar a un plugin

    Los límites del LISP frente a C#

AutoLISP es un lenguaje que AutoCAD incluye desde los años 80. Una rutina LISP define uno o más comandos nuevos que se ejecutan como cualquier comando de AutoCAD.

Dónde funciona:

  • En AutoCAD y en todas sus versiones verticales, incluido Civil 3D.
  • En AutoCAD LT para Windows desde la versión 2024. Antes, las versiones LT no ejecutaban LISP.

Para qué es bueno:

  • Rotular, numerar, renombrar capas, cambiar propiedades en lote.
  • Medir y sumar: longitudes, áreas, cantidades de bloques.
  • Exportar e importar datos simples a archivos de texto o CSV.

Dónde se escribe: desde AutoCAD 2021, el editor recomendado es Visual Studio Code con la extensión de AutoLISP de Autodesk, que reemplaza al antiguo editor Visual LISP.

Para usarla una vez:

  1. Escribe APPLOAD en la línea de comandos.
  2. Busca el archivo .lsp y haz clic en Cargar.
  3. Escribe el comando que define la rutina.

También puedes arrastrar el archivo .lsp a la ventana del dibujo.

Para que esté siempre disponible: en el mismo cuadro de APPLOAD, agrega la rutina al Startup Suite (las aplicaciones de inicio). Se cargará en cada dibujo que abras.

Exporta los objetos punto (POINT) seleccionados a un archivo CSV con el formato PNEZD: número, Norte, Este, cota y descripción. Ese archivo se importa directamente en Civil 3D como puntos COGO. Cómo importarlo sin errores, en importar puntos a Civil 3D.

;; ZPUNTOSCSV: exporta los puntos (POINT) seleccionados a un CSV PNEZD
(defun c:ZPUNTOSCSV (/ ss arch f i n p)
  (setq ss (ssget '((0 . "POINT"))))
  (if ss
    (progn
      (setq arch (getfiled "Guardar puntos" "" "csv" 1))
      (if arch
        (progn
          (setq f (open arch "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)) " puntos exportados a " arch)))))
    (princ "\nNo se seleccionaron puntos."))
  (princ))

Cómo funciona: ssget con el filtro (0 . "POINT") deja seleccionar solo puntos; getfiled abre el cuadro para guardar; cada línea escribe el Norte (Y) antes que el Este (X), que es el orden de PNEZD.

Pide puntos en el dibujo y escribe al lado un texto con su Este y su Norte. Sirve para planos de ubicación, vértices de un terreno o puntos de control.

;; ZCOORD: rotula las coordenadas Este y Norte de cada punto que indiques
(defun c:ZCOORD (/ alt p w)
  (setq alt (getreal "\nAltura del texto <2.5>: "))
  (if (not alt) (setq alt 2.5))
  (while (setq p (getpoint "\nPunto 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))

Cómo funciona: getpoint devuelve el punto en el sistema de coordenadas del usuario (SCP); trans lo convierte al sistema universal (SCU), que es el que guarda las coordenadas reales. Sin ese paso, con un SCP girado, el rótulo mostraría coordenadas equivocadas.

Suma la longitud de todo lo seleccionado. Útil para metrar tuberías, cunetas, bordes de vereda o cualquier elemento dibujado como línea.

;; ZLONGTOTAL: suma la longitud de lineas, polilineas, arcos, circulos y splines
(vl-load-com)
(defun c:ZLONGTOTAL (/ 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))
                     "   Longitud total: " (rtos total 2 3))))
    (princ "\nNo se selecciono nada."))
  (princ))

Cómo funciona: vl-load-com activa las funciones vlax-curve, que miden cualquier curva de la misma forma, sea una línea, una polilínea o un arco.

AutoCAD carga automáticamente ciertos archivos, como acad.lsp y acaddoc.lsp, si los encuentra en la carpeta del dibujo o en las rutas de búsqueda. Ese comportamiento se ha usado para propagar malware: un archivo LISP oculto que viaja junto a los planos y se ejecuta al abrirlos.

El caso más conocido golpeó al Perú. En 2012, la empresa de seguridad ESET documentó ACAD/Medre.A, un malware escrito en AutoLISP que se propagó sobre todo en el Perú y envió decenas de miles de planos por correo a cuentas en China.

Cómo protegerte:

  • Mantén SECURELOAD en 1 o 2, nunca en 0.
  • Ten una sola carpeta de rutinas revisadas como ubicación de confianza.
  • Desconfía de un acad.lsp o acaddoc.lsp que aparezca junto a planos recibidos de terceros.
  • No cargues archivos .fas o .vlx de origen desconocido: no se pueden leer, así que no sabes qué hacen.

LISP trabaja muy bien con lo que AutoCAD dibuja: líneas, polilíneas, textos, bloques y capas. Con los objetos de ingeniería de Civil 3D es otra historia: los ve casi como cajas cerradas. Para leer los datos de un alineamiento, una superficie o un corredor tiene que pasar por la interfaz COM de Civil 3D, que es engorrosa, cambia entre versiones y no cubre todo.

Señales de que tu rutina ya debería ser un plugin:

  • Necesita leer o modificar alineamientos, perfiles, superficies, corredores o redes de tuberías.
  • Necesita una ventana con opciones, validaciones o tablas, más allá de preguntas en la línea de comandos.
  • La usa toda la oficina y un error cuesta horas de trabajo.
  • Solo una persona la entiende.
CriterioPlugin en C#Rutina LISP
Objetos de Civil 3DAcceso completo por la API .NETLimitado, por COM
InterfazVentanas, tablas y validacionesLínea de comandos y cuadros simples
Velocidad con miles de objetosAltaAceptable
DistribuciónInstalador con versión y registro de cambiosArchivo que se copia
Curva de aprendizajeMesesDías
Ideal paraHerramientas críticas de la oficinaTareas de dibujo rápidas

Si quieres dar el paso tú mismo, empieza por la API de Civil 3D en C#. Si prefieres que lo hagamos, lo explicamos en desarrollo de add-ins para Revit y Civil 3D.

Recursos relacionados

Preguntas frecuentes sobre rutinas LISP

Es un archivo de texto con código en AutoLISP, el lenguaje que trae AutoCAD, que agrega comandos nuevos. Se usa para automatizar tareas de dibujo repetitivas, como rotular, sumar longitudes, numerar o exportar puntos. Los archivos .lsp se pueden leer; los .fas y .vlx son versiones compiladas.


Nota técnica: el código es un ejemplo de referencia. Pruébalo en un dibujo de prueba antes de usarlo en un proyecto.

Habla con un ingenieroRespuesta hoy · Sin compromiso