需要获取从AutoCAD Civil3D中的类创建的对象数

问题描述 投票:0回答:1

[AutoCAD SDK非常特定,为AutoCAD开发了一个插件。我已将一些DWG文件加载到工程图中,并创建了所加载类的一些对象。创建这些对象后,我将添加一个包含一些有关BlockTableRecord信息的Xdata。现在,我需要删除已从图形中删除的对象的BlockTableRecords。保存文档时,我收到AutoCAD的回电。在此回叫中,我试图遍历所有“块表记录”以查找包含我们的信息的记录。以及包含使用我的加载项创建的信息的记录,我试图查看从该记录项创建的对象数。如果不存在,我将删除块表记录或至少更新我们的足迹。

这里我无法从一个特定的表记录中获得创建的对象数。这是我到目前为止所做的。

private static void CommandExecutionCallBack(object sender, CommandEventArgs e)
{
    string commando = e.GlobalCommandName.ToLower();
    if (commando.Contains("save"))
    {
        Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
        var documentManager = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
        Editor ed = doc.Editor;
        Database db = doc.Database;
        Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = db.TransactionManager;
        using (Transaction myT = tm.StartTransaction())
        {
            BlockTable bt = (BlockTable)tm.GetObject(db.BlockTableId, OpenMode.ForRead, false);
            SymbolTableEnumerator enumerator = bt.GetEnumerator();
            while (enumerator.MoveNext())
            {
                BlockTableRecord btr = tm.GetObject(enumerator.Current, OpenMode.ForRead, false) as BlockTableRecord;
                ResultBuffer xdata = btr.GetXDataForApplication(REGAPP_NAME);
                if (null != xdata)
                {

                    //Here I am trying to fetch the objects that exist against the selected btr.
                    AcadApplication acApp = Autodesk.AutoCAD.ApplicationServices.Application.AcadApplication as AcadApplication;
                    AcadDocument thisDrawing = acApp.ActiveDocument;


                    thisDrawing.SendCommand("(command MAPSELECTCLASSIFIED " + btr.Name + ")" + Environment.NewLine);
                    AcadSelectionSet selectionSet = thisDrawing.PickfirstSelectionSet;

                    //I am always getting selectionSet.Count as zero.
                    MessageBox.Show(btr.Name + " -> SelectionSet Count: " + selectionSet.Count.ToString());
                }
                else
                {
                    //Will ignore this condition. The current btr is not created by our add-in
                }
            }
        }
    }
}

在这方面的任何帮助,将不胜感激。

我已从AutoCAD论坛https://forums.autodesk.com/t5/net/how-to-find-and-export-object-classess-from-drawing/m-p/5814774#M45948中获得一些帮助>

关于,乌玛尔

它非常特定于AutoCAD SDK,为AutoCAD开发了一个插件。我已将一些DWG文件加载到工程图中,并创建了所加载类的一些对象。创建这些对象后,我添加...

c# autocad autocad-plugin
1个回答
0
投票

引用未引用的BlockTableRecord(或任何其他SymbolTableRecord)通常称为:清除。Database类提供了一种Purge()方法,可用于获取“可清除”对象。

© www.soinside.com 2019 - 2024. All rights reserved.