Civil3D二次开发的API都是应用在DB对象上的,因此我们在plugin中一般都会需要得到所需要操作的DB对象。需要得到DB对象,我们需要首先得到它的ObjectId然后用Transaction打开得到。
得到ObjectId有几种方法:
(1) 通过名字或者Index从Civil3D API定义的集合中获得。例如,我们需要得到一个PointGroup的ObjectId,则可以从PointGroupCollection 获得,代码类似
var civilDoc = CivilDocument.GetCivilDocument(db);
var pgId = civilDoc.PointGroups["MyPointGroup"];
或者
var civilDoc = CivilDocument.GetCivilDocument(db);
var pgId = civilDoc.PointGroups[0];
(2) 通过UI交互,提示用户选择一个对象,例如
var editor = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor;
var result = editor.GetEntity("Select an alignment:");
if (result.Status == PromptStatus.OK)
{
var alignId = result.ObjectId;
}
(3) 根据Handle值,直接获得ObjectId。例如我们知道需要操作哪个对象,那么可以首先选择这个对象,然后输入命令list,例如
代码如下:
Handle hdl = new Handle(0x6580);
var alignId = db.GetObjectId(false, hdl, 0);