Это очень специфично c до AutoCAD
SDK, разработка надстройки для AutoCAD. Я загрузил некоторые DWG-файлы в чертеж и создал несколько объектов загруженных классов. Когда эти объекты созданы, я добавляю Xdata, содержащую некоторую информацию о BlockTableRecord. Теперь мне нужно удалить BlockTableRecords для объектов, которые были удалены из чертежа. Я получаю ответный звонок от AutoCAD при сохранении документа. В этом обратном звонке я пытаюсь просмотреть все записи таблицы блоков, чтобы найти записи с нашей информацией. И записи, которые содержат информацию, что они были созданы с помощью моей надстройки, я пытаюсь увидеть количество объектов, созданных из этого элемента записи. Если такой записи не существует, я удаляю запись таблицы блоков или, по крайней мере, обновляю нашу площадь.
Здесь я не могу получить количество объектов, созданных из одной указанной c записи таблицы. Вот что я сделал до сих пор.
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
С уважением, Умар