Civil 3D中各种ObjectID集合中的对象具体是什么类型?
在Civil 3D程序设计中,
经常会返回一些ObjectIdCollection,
这些ObjectId对应的对象具体是什么类型呢?
在需要打开对象进行操作,
不知道具体类型,
代码可能就写不下去,
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
    var labelSet = id.GetObject(OpenMode.ForWrite) as AlignmentLabelSetStyle;
    if (labelSet != null)
    {
比如这里的AlignmentLabelSetStyle,
这个问题可以使用GetType()方法来解决。
我写了几行测试代码,
有需要的朋友可以研究一下:
[CommandMethod("Test20200513")]
public void Test20200513()
{
    Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.CurrentDocument;
    Editor ed = doc.Editor;
    var psr = doc.Editor.GetSelection();
    if (psr.Status == PromptStatus.OK)
    {
        var ss = psr.Value;
        using (Transaction tr = doc.TransactionManager.StartTransaction())
        {
            foreach (SelectedObject so in ss)
            {
                var ent = so.ObjectId.GetObject(OpenMode.ForRead);
                var t = ent.GetType();
                ed.WriteMessage("\nEnt.Type\t{0}", t.FullName);
            }
            tr.Commit();
        }
    }
}
测试结果类似如下:
命令: TEST20200513 选择对象: 指定对角点: 找到 5 个 选择对象: Ent.Type Autodesk.Civil.DatabaseServices.Alignment Ent.Type Autodesk.Civil.DatabaseServices.FeatureLine Ent.Type Autodesk.AutoCAD.DatabaseServices.Line Ent.Type Autodesk.AutoCAD.DatabaseServices.Circle Ent.Type Autodesk.AutoCAD.DatabaseServices.Polyline
有了这个结果,
我就可以继续写代码了。