← Volver al blog
Civil 3DCivil 3D APIC#.NETPlugins para Civil 3DAutomatización BIM

Civil 3D API en C#: primeros pasos para programar Civil 3D, del primer comando al plugin

Qué es la API de Civil 3D, qué necesitas para programarla en C#, tu primer comando paso a paso, los objetos clave y los errores que más se repiten.

Zeist··8 min de lectura
Compartir en LinkedInCivil 3D API en C#: primeros pasos para programar Civil 3D, del primer comando al plugin

Civil 3D · API · C#

La API de Civil 3D es la puerta que casi nadie explica en español.

Qué es, qué necesitas instalar, cómo escribir tu primer comando en C#, cuáles son los objetos que vas a usar siempre y qué errores aparecen la primera semana. Con código que puedes copiar y versiones de .NET al día.

Por qué casi nadie programa Civil 3D

Hay mucho material sobre la API de Revit y casi nada sobre la de Civil 3D, sobre todo en español. No es porque Civil 3D tenga menos que automatizar: un expediente vial repite tanto trabajo como un edificio. Es porque la API de Civil 3D tiene más capas, sus objetos son más complejos y su documentación tiene menos ejemplos.

Esta guía recorre lo mínimo para empezar con el pie derecho: qué es, qué instalar, un primer comando real y los errores que conviene conocer antes de tropezar con ellos.

Del código a un botón en Civil 3D

Proyecto en Visual Studio

Biblioteca de clases .NET

Referencias de Autodesk

AutoCAD + Civil 3D, sin copiar

Comando en C#

Lee y modifica el dibujo

NETLOAD o bundle

Cargado en Civil 3D

Civil 3D API en C#, en 6 pasos

Qué es la API, qué instalar, tu primer comando, los objetos clave, los errores de la primera semana y cómo convertir un comando en un plugin.

  1. 01Concepto

    Qué es la API

    Dos capas, AutoCAD y Civil 3D, y sus alternativas

  2. 02Preparación

    Lo que necesitas

    Visual Studio, el .NET de tu versión y las referencias

  3. 03Código

    Primer comando

    Listar los alineamientos del dibujo

  4. 04API

    Objetos clave

    Alineamientos, superficies, corredores y puntos

  5. 05Errores

    Errores comunes

    NETLOAD, Copiar localmente, Commit y bloqueo

  6. 06Acción

    Del comando al plugin

    Botón, bundle, errores y estructura

Civil 3D se construye sobre AutoCAD, y su API también. Un programa para Civil 3D usa dos capas:

  • La API de AutoCAD (.NET): documentos, transacciones, la línea de comandos, líneas, polilíneas, bloques y capas.
  • La API de Civil 3D (.NET): los objetos de ingeniería: alineamientos, perfiles, superficies, corredores, secciones, puntos COGO, parcelas y redes de tuberías.

Las alternativas, según lo que necesites:

  • Dynamo, para automatizar sin escribir código. Desde Civil 3D 2025.1 trae más de mil nodos nativos; lo explicamos en 10 scripts de Dynamo para Civil 3D.
  • Python, dentro de los nodos de Python de Dynamo, cuando los nodos visuales se quedan cortos.
  • La API COM, más antigua, que todavía usan algunas rutinas LISP y VBA.
  • C# sobre la API .NET, para herramientas de producción que usa toda la oficina. Es el camino de esta guía.
  1. Windows con Civil 3D instalado. La API solo funciona dentro de Civil 3D.
  2. Visual Studio Community, gratuito, con la carga de trabajo de desarrollo de escritorio con .NET.
  3. El framework correcto para tu versión:
Versión de Civil 3DFramework
2024 y anteriores.NET Framework 4.8
2025 y 2026.NET 8
2027.NET 10
  1. Un proyecto de tipo biblioteca de clases, con referencias a las librerías de la carpeta de instalación de Civil 3D: AcCoreMgd, AcDbMgd y AcMgd, de AutoCAD, y AecBaseMgd y AeccDbMgd, de Civil 3D.

Este comando recorre los alineamientos del dibujo y escribe su nombre y su longitud en la línea de comandos:

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Civil.ApplicationServices;
using Autodesk.Civil.DatabaseServices;

[assembly: CommandClass(typeof(ZeistDemo.Comandos))]

namespace ZeistDemo
{
    public class Comandos
    {
        [CommandMethod("ZLISTAREJES")]
        public void ListarEjes()
        {
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            CivilDocument civil = CivilApplication.ActiveDocument;

            using (Transaction tr = doc.Database.TransactionManager.StartTransaction())
            {
                foreach (ObjectId id in civil.GetAlignmentIds())
                {
                    var eje = (Alignment)tr.GetObject(id, OpenMode.ForRead);
                    ed.WriteMessage($"\n{eje.Name}: {eje.Length:F2} m");
                }
                tr.Commit();
            }
        }
    }
}

Qué hace cada parte:

  • CommandMethod convierte el método en un comando que se escribe en Civil 3D.
  • CivilApplication.ActiveDocument da acceso a los objetos de Civil 3D del dibujo abierto.
  • GetAlignmentIds() devuelve los identificadores de todos los alineamientos.
  • La transacción abre cada alineamiento para leerlo, y Commit la cierra.

Para probarlo: compila, abre Civil 3D con un dibujo que tenga alineamientos, escribe NETLOAD, elige tu DLL y ejecuta ZLISTAREJES.

Casi todo empieza en el CivilDocument, el documento de Civil 3D del dibujo abierto:

Quieres trabajar conPunto de partida en CivilDocument
AlineamientosGetAlignmentIds()
SuperficiesGetSurfaceIds()
CorredoresCorridorCollection
Puntos COGOCogoPoints
Redes de tuberíasGetPipeNetworkIds()
EstilosStyles

Desde cada alineamiento se llega a sus perfiles y a sus grupos de líneas de muestreo; desde cada corredor, a sus líneas base y regiones. La regla es siempre la misma: obtener el identificador, abrir el objeto dentro de una transacción y leerlo o modificarlo.

  • «No se pudo cargar» al hacer NETLOAD. El proyecto apunta a un framework distinto del que usa tu versión de Civil 3D. Revisa la tabla del paso 2.
  • Errores raros al cargar o al cerrar Civil 3D. Las referencias de Autodesk quedaron con Copiar localmente en Sí.
  • Los cambios no se guardan. Falta tr.Commit(): una transacción que no se confirma se descarta entera.
  • Error de bloqueo del documento (eLockViolation). Pasa cuando el código se ejecuta desde una ventana propia y no desde un comando: hay que bloquear el documento antes de modificarlo.
  • Funciona en tu versión y no en la de tu colega. Cada versión de Civil 3D exige compilar contra sus propias librerías.

Un comando que funciona en tu computadora todavía no es una herramienta. Para que la use la oficina hace falta:

  • Un botón en la barra superior de Civil 3D, en lugar de un comando escrito.
  • Un bundle: la carpeta con formato oficial de Autodesk que Civil 3D carga solo al iniciar.
  • Manejo de errores y registro de lo que hace, para que un fallo no deje el dibujo a medias.
  • Una estructura en capas, para que el cambio de versión de Autodesk toque una sola parte del código.

Lo explicamos en desarrollo de add-ins para Revit y Civil 3D, y si quieres llegar más rápido con IA, en crear un plugin de Civil 3D con Claude Code.

CriterioPlugin en C# con la APIScript de Dynamo
Velocidad con miles de objetosAltaVariable
Interfaz propia y validacionesSíBásica
DistribuciónInstalador o bundle para toda la oficinaArchivo que cada uno abre
Curva de aprendizajeMesesSemanas
Ideal paraHerramientas de uso diarioProbar una idea rápido

Recursos relacionados

Preguntas frecuentes sobre la API de Civil 3D

Es la interfaz oficial de Autodesk para programar Civil 3D. Permite que un programa en C# lea y modifique alineamientos, perfiles, superficies, corredores, puntos COGO y redes de tuberías. Funciona sobre .NET y sobre la API de AutoCAD, que aporta los documentos, las transacciones y los objetos de dibujo.


Nota técnica: las versiones de .NET corresponden a la documentación de Autodesk vigente en octubre de 2026. Revisa la guía del desarrollador de tu versión antes de empezar.

Habla con un ingenieroRespuesta hoy · Sin compromiso