-
Notifications
You must be signed in to change notification settings - Fork 0
Hosts Civil3D
Truong Giang Vu edited this page May 31, 2026
·
1 revision
Civil 3D is an AutoCAD vertical product with additional APIs for civil engineering design. RevitDevTool loads via the shared AcadDevTool add-in — all AutoCAD features are available plus access to Civil 3D-specific APIs.
Civil 3D extends AutoCAD with domain-specific objects:
| Object | Namespace | Library |
|---|---|---|
| Alignments | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
| Surfaces | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
| Corridors | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
| Pipe Networks | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
| Point Groups | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
| Sites | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
| Parcels | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
| Profiles | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
| Assemblies | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
| Grading | Autodesk.Civil.DatabaseServices |
AeccDbMgd.dll |
import clr
clr.AddReference("AeccDbMgd")
from Autodesk.Civil.DatabaseServices import CivilDocumentThe AeccDbMgd.dll is pre-loaded in Civil 3D's runtime — clr.AddReference registers it with Python.NET.
# /// script
# dependencies = ["tabulate>=0.9"]
# ///
import clr
clr.AddReference("AeccDbMgd")
from Autodesk.AutoCAD.ApplicationServices.Core import Application
from Autodesk.AutoCAD.DatabaseServices import OpenMode
from Autodesk.Civil.DatabaseServices import CivilDocument, Alignment
from tabulate import tabulate
doc = Application.DocumentManager.MdiActiveDocument
db = doc.Database
civil_doc = CivilDocument.GetCivilDocument(db)
tr = db.TransactionManager.StartTransaction()
try:
align_ids = civil_doc.GetAlignmentIds()
rows = []
for oid in align_ids:
alignment = tr.GetObject(oid, OpenMode.ForRead)
rows.append([alignment.Name, f"{alignment.Length:.2f}"])
tr.Commit()
finally:
tr.Dispose()
print(tabulate(rows, headers=["Alignment", "Length"]))Configure pyproject.toml for Civil 3D:
[tool.pytest.ini_options]
host_name = "civil3d"
host_version = "2026"Run tests:
pytest tests/Civil3d/ -v# conftest.py
import pytest
@pytest.fixture(scope="session")
def acad_app():
from Autodesk.AutoCAD.ApplicationServices.Core import Application
return Application
@pytest.fixture(scope="session")
def acad_doc(acad_app):
doc = acad_app.DocumentManager.MdiActiveDocument
if doc is None:
pytest.skip("No active document in Civil 3D")
return doc
@pytest.fixture(scope="session")
def acad_db(acad_doc):
return acad_doc.Database
@pytest.fixture
def acad_auto_rollback(acad_db):
"""Start a transaction and always abort — undo all changes after test."""
tr = acad_db.TransactionManager.StartTransaction()
try:
yield tr
finally:
tr.Abort()
tr.Dispose()def test_list_alignments(acad_db, acad_transaction):
import clr
clr.AddReference("AeccDbMgd")
from Autodesk.Civil.DatabaseServices import CivilDocument
from Autodesk.AutoCAD.DatabaseServices import OpenMode
civil_doc = CivilDocument.GetCivilDocument(acad_db)
align_ids = civil_doc.GetAlignmentIds()
print(f"Found {align_ids.Count} alignments")
for oid in align_ids:
alignment = acad_transaction.GetObject(oid, OpenMode.ForRead)
print(f" {alignment.Name}: length={alignment.Length:.2f}")All standard RevitDevTool features work in Civil 3D:
- Python 3.13 with PEP 723 + Pixi dependencies
- VSCode debugger integration
- C# / F# scripting
- .NET assembly execution
- Logging panel with color keywords
- MCP integration (standalone + in-host)
- PyTest bridge
Visualization (DirectContext3D) is not available — this is a Revit-only feature.
- AutoCAD Features — shared AutoCAD base features
- Host Support — full feature matrix
- PyTest Bridge — multi-host testing setup
- Civil 3D Examples — more examples
- Run Code Overview
- Modern Python Scripting
- Python Debugging
- Python Ecosystems
- RevitDevTool And pyRevit
- Python Stub Generation
- Run .NET Add-ins
- Scripting Runtimes