You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The CivilApplication class is the top-level entry point for accessing Civil3D functionality. It provides access to the active Civil3D document, application settings, and global Civil3D operations.
Key Concept:CivilApplication is the Civil3D equivalent of AutoCAD's Application class, providing Civil3D-specific application-level access.
Class Hierarchy
Object
└─ CivilApplication
Key Properties
Property
Type
Description
ActiveDocument
CivilDocument
Gets the currently active Civil3D document
Version
string
Gets the Civil3D version string
Key Methods
Method
Return Type
Description
GetCivilDocument(Database)
CivilDocument
Gets the CivilDocument for a specific database
Common Usage Patterns
1. Accessing Active Civil3D Document
usingAutodesk.Civil.ApplicationServices;usingAutodesk.AutoCAD.ApplicationServices;usingAutodesk.AutoCAD.Runtime;[CommandMethod("CIVILAPP")]publicvoidAccessCivilApplication(){// Get active Civil3D documentCivilDocumentcivilDoc=CivilApplication.ActiveDocument;if(civilDoc!=null){Editored=Application.DocumentManager.MdiActiveDocument.Editor;ed.WriteMessage($"\nCivil3D Document: {civilDoc.Name}");ed.WriteMessage($"\nCivil3D Version: {CivilApplication.Version}");}}
2. Getting CivilDocument from Database
[CommandMethod("GETcivildoc")]publicvoidGetCivilDocumentFromDatabase(){DocumentacDoc=Application.DocumentManager.MdiActiveDocument;Databasedb=acDoc.Database;Editored=acDoc.Editor;// Method 1: From active documentCivilDocumentcivilDoc1=CivilApplication.ActiveDocument;// Method 2: From specific databaseCivilDocumentcivilDoc2=CivilApplication.GetCivilDocument(db);ed.WriteMessage($"\nBoth methods return same document: {civilDoc1==civilDoc2}");}
3. Checking Civil3D Availability
[CommandMethod("CHECKCIVIL")]publicvoidCheckCivil3DAvailability(){Editored=Application.DocumentManager.MdiActiveDocument.Editor;try{CivilDocumentcivilDoc=CivilApplication.ActiveDocument;if(civilDoc!=null){ed.WriteMessage("\n✓ Civil3D is available");ed.WriteMessage($"\n Version: {CivilApplication.Version}");ed.WriteMessage($"\n Document: {civilDoc.Name}");// Check for Civil3D objectsintalignmentCount=civilDoc.GetAlignmentIds().Count;intsurfaceCount=civilDoc.GetSurfaceIds().Count;intnetworkCount=civilDoc.GetPipeNetworkIds().Count;ed.WriteMessage($"\n Alignments: {alignmentCount}");ed.WriteMessage($"\n Surfaces: {surfaceCount}");ed.WriteMessage($"\n Pipe Networks: {networkCount}");}else{ed.WriteMessage("\n✗ Civil3D document not available");}}catch(System.Exceptionex){ed.WriteMessage($"\n✗ Civil3D not available: {ex.Message}");}}
[CommandMethod("SAFECIVIL")]publicvoidSafeCivil3DCommandPattern(){DocumentacDoc=Application.DocumentManager.MdiActiveDocument;Editored=acDoc.Editor;// Always check for Civil3D availability firstCivilDocumentcivilDoc=null;try{civilDoc=CivilApplication.ActiveDocument;}catch(System.Exceptionex){ed.WriteMessage($"\nError: Civil3D not available - {ex.Message}");return;}if(civilDoc==null){ed.WriteMessage("\nError: No Civil3D document found");return;}// Proceed with Civil3D operationsusing(Transactiontr=civilDoc.Database.TransactionManager.StartTransaction()){ObjectIdCollectionalignmentIds=civilDoc.GetAlignmentIds();if(alignmentIds.Count==0){ed.WriteMessage("\nNo alignments found in drawing");tr.Commit();return;}ed.WriteMessage($"\nProcessing {alignmentIds.Count} alignments...");foreach(ObjectIdalignIdinalignmentIds){Alignmentalignment=tr.GetObject(alignId,OpenMode.ForRead)asAlignment;ed.WriteMessage($"\n{alignment.Name}");}tr.Commit();}}
6. Version-Specific Features
[CommandMethod("CIVILVERSION")]publicvoidCheckCivil3DVersion(){Editored=Application.DocumentManager.MdiActiveDocument.Editor;try{stringversion=CivilApplication.Version;ed.WriteMessage($"\nCivil3D Version: {version}");// Parse version for feature checksif(version.StartsWith("13."))// Civil3D 2024{ed.WriteMessage("\nCivil3D 2024 detected");}elseif(version.StartsWith("12."))// Civil3D 2023{ed.WriteMessage("\nCivil3D 2023 detected");}// Use version info to enable/disable featuresCivilDocumentcivilDoc=CivilApplication.ActiveDocument;if(civilDoc!=null){ed.WriteMessage("\n\nAvailable Object Types:");ed.WriteMessage($"\n Alignments: {civilDoc.GetAlignmentIds().Count}");ed.WriteMessage($"\n Surfaces: {civilDoc.GetSurfaceIds().Count}");ed.WriteMessage($"\n Pipe Networks: {civilDoc.GetPipeNetworkIds().Count}");ed.WriteMessage($"\n Corridors: {civilDoc.GetCorridorIds().Count}");ed.WriteMessage($"\n Assemblies: {civilDoc.GetAssemblyIds().Count}");}}catch(System.Exceptionex){ed.WriteMessage($"\nError: {ex.Message}");}}
Application Lifecycle
graph TD
A[AutoCAD Starts] --> B[Civil3D Loads]
B --> C[CivilApplication Available]
C --> D[Open Drawing]
D --> E{Civil3D Data?}
E -->|Yes| F[CivilDocument Created]
E -->|No| G[CivilDocument = null]
F --> H[Access Civil3D Objects]
G --> I[Create Civil3D Objects]
Loading
Best Practices
Always check for null: CivilApplication.ActiveDocument can return null
Use try-catch: Civil3D may not be available in all AutoCAD installations
Check version: Use CivilApplication.Version for version-specific features
Prefer GetCivilDocument: Use GetCivilDocument(db) for specific databases
Validate before operations: Check object counts before processing
Common Patterns
Pattern 1: Safe Civil3D Access
CivilDocumentcivilDoc=null;try{civilDoc=CivilApplication.ActiveDocument;if(civilDoc==null)return;// Operations}catch(System.Exceptionex){// Handle Civil3D not available}
Pattern 2: Multi-Document Processing
foreach(DocumentdocinApplication.DocumentManager){CivilDocumentcivilDoc=CivilApplication.GetCivilDocument(doc.Database);if(civilDoc!=null){// Process Civil3D data}}
Pattern 3: Version Check
stringversion=CivilApplication.Version;if(version.StartsWith("13.")){// Use Civil3D 2024 features}
Common Errors
Error
Cause
Solution
NullReferenceException
Civil3D not available
Check for null before accessing
FileNotFoundException
AeccDbMgd.dll not found
Ensure Civil3D is installed
InvalidOperationException
No active document
Check document state first
Comparison: AutoCAD vs Civil3D Application
Feature
AutoCAD
Civil3D
Application class
Application
CivilApplication
Document class
Document
CivilDocument
Entry point
Application.DocumentManager
CivilApplication.ActiveDocument
Namespace
Autodesk.AutoCAD.*
Autodesk.Civil.*
Related Classes
CivilDocument - Civil3D document containing all Civil objects