基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/hebackus/c3d-api-plugin --skill c3d-root-objects命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Corridors, baselines, regions, assemblies, subassemblies, corridor surfaces
Custom subassembly .NET design — CorridorState, SubassemblyGenerator, targets, SATemplate
Stock-subassembly pattern catalog — need→file index, worked DrawImplement recipes, point/link/shape code reference, mined from Autodesk's 120 VB stock subassemblies
| name | c3d-root-objects |
| description | CivilApplication, CivilDocument, transactions, settings hierarchy, locking |
Use this skill when accessing base Civil 3D objects, working with transactions, iterating collections, or configuring settings.
CivilApplication
└── ActiveDocument (CivilDocument)
├── GetAlignmentIds()
├── GetSitelessAlignmentIds()
├── GetSiteIds()
├── GetSurfaceIds()
├── GetPipeNetworkIds() ← gravity networks
├── GetPressurePipeNetworkIds() ← pressure networks
├── CorridorCollection
├── CogoPoints
├── PointGroups
├── Styles (StylesRoot)
│ ├── AlignmentStyles
│ ├── ProfileStyles
│ ├── ProfileViewStyles
│ ├── SurfaceStyles
│ ├── PipeStyles
│ ├── StructureStyles
│ ├── PointStyles
│ ├── InterferenceStyles
│ ├── AssemblyStyles
│ ├── LinkStyles
│ ├── ShapeStyles
│ ├── CodeSetStyles
│ ├── PartsListSet
│ ├── LabelStyles (all label style roots)
│ ├── LabelSetStyles
│ └── ProfileViewBandSetStyles
└── Settings (SettingsRoot)
├── DrawingSettings
└── GetSettings<T>()
using Autodesk.Civil.ApplicationServices;
// From active document shortcut
CivilDocument doc = CivilApplication.ActiveDocument;
// From any Database (works for non-active documents too)
CivilDocument doc = CivilDocument.GetCivilDocument(database);
Note: CivilApplication does NOT inherit from AutoCAD's Application. For application-level access (open documents, main window), use Autodesk.AutoCAD.ApplicationServices.Application directly.
All Civil 3D object reads/writes MUST be inside a Transaction:
using (Transaction ts = Application.DocumentManager.MdiActiveDocument
.Database.TransactionManager.StartTransaction())
{
// Read objects
Alignment align = ts.GetObject(alignId, OpenMode.ForRead) as Alignment;
// Write objects (must open ForWrite)
align = ts.GetObject(alignId, OpenMode.ForWrite) as Alignment;
align.StyleId = newStyleId;
// MUST commit for changes to persist
ts.Commit();
}
Best practice: Use using statement for automatic disposal. Otherwise, explicitly dispose in a finally block.
Collections return ObjectIdCollection (not typed objects). You must cast via Transaction.GetObject():
ObjectIdCollection alignmentIds = doc.GetAlignmentIds();
foreach (ObjectId objId in alignmentIds)
{
Alignment align = ts.GetObject(objId, OpenMode.ForRead) as Alignment;
ed.WriteMessage("Alignment: {0}\n", align.Name);
}
// Add returns ObjectId of new style
ObjectId styleId = doc.Styles.PointStyles.Add("MyStyle");
PointStyle style = ts.GetObject(styleId, OpenMode.ForWrite) as PointStyle;
style.Elevation = 114.6;
ts.Commit(); // Required for add/modify to take effect
try
{
// Throws ArgumentException if style doesn't exist
ObjectId styleId = doc.Styles.PointStyles["Name"];
}
catch (ArgumentException e)
{
ed.WriteMessage(e.Message);
}
When code runs outside document context (modeless dialogs, .NET toolbox execution), explicitly lock the document:
using (DocumentLock locker = Application.DocumentManager
.MdiActiveDocument.LockDocument())
{
// Perform document/database modifications here
CivilApplication.ActiveDocument.Settings
.DrawingSettings.AmbientSettings.Station.Precision.Value = 2;
}
Settings apply at three levels (each can override the previous):
doc.Settings.DrawingSettings (units, zone, abbreviations, ambient settings)doc.Settings.GetSettings<SettingsAlignment>() (overrides drawing ambient for that feature)doc.Settings.GetSettings<SettingsCmdCreateAlignmentLayout>() (overrides both)// Feature settings
SettingsAlignment alignSettings = doc.Settings.GetSettings<SettingsAlignment>();
var angleSettings = alignSettings.Angle;
ed.WriteMessage("Precision: {0}, Unit: {1}\n",
angleSettings.Precision.Value, angleSettings.Unit.Value);
// Command settings
SettingsCmdCreateAlignmentLayout cmdSettings =
doc.Settings.GetSettings<SettingsCmdCreateAlignmentLayout>();
ed.WriteMessage("AlignmentType: {0}",
cmdSettings.AlignmentTypeOption.AlignmentType.Value);
Note: Feature and command settings are in Autodesk.Civil.Settings — the same namespace as drawing/ambient settings. There is no separate Autodesk.Civil.Land.Settings namespace.
In the .NET API, most properties use Property* classes implementing IProperty. Access values via .Value:
// COM: oComponent.Visibility = True
// .NET: oComponent.General.Visible.Value = true;
[CommandMethod("MYCOMMAND")]
public void MyCommand()
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
try
{
using (Transaction ts = ...)
{
// work
ts.Commit();
}
}
catch (System.Exception e)
{
ed.WriteMessage("\nError: {0}\n", e.Message);
}
}
Surface exists in both Autodesk.AutoCAD.DatabaseServices and Autodesk.Civil.DatabaseServices. Disambiguate with alias:
using CivSurface = Autodesk.Civil.DatabaseServices.Surface;
ArgumentExceptionObjectIdCollection implements IList - can use foreach or index access.Value getter/setter (unlike COM's direct property access)Visibility -> General.Visible)c3d-project-setup - Project configuration and referencesc3d-label-styles - Label style creation and componentsc3d-pipe-networks - Gravity and pressure pipe networks (accessed via GetPipeNetworkIds / GetPressurePipeNetworkIds)c3d-sample-lines - Sample line groups and section views (accessed via alignment)