Всем привет. Столкнулся с такой задачкой..
Выделяю чертеж, на котором может быть все, что угодно (любые объекты Autocad, прокси и прочее), хочу получить доступ только к динамическим блокам с определенным именем.
Когда задача была получать только динамические блоки, тогда делал я вот так:
[CommandMethod("Select")]
public void Select()
{
var doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null)
return;
var db = doc.Database;
var ed = doc.Editor;
using (doc.LockDocument())
{
using (var tr = db.TransactionManager.StartTransaction())
{
var acSelSetPrompt = ed.GetSelection() as PromptSelectionResult;
if (acSelSetPrompt.Status == PromptStatus.OK)
{
var acSSet = acSelSetPrompt.Value;
foreach (SelectedObject acSelSetObj in acSSet)
{
if (acSelSetObj != null)
{
var blkRef = tr.GetObject(acSelSetObj.ObjectId, OpenMode.ForWrite) as BlockReference;
if (blkRef.IsDynamicBlock == true && blkRef != null)
{
Application.ShowAlertDialog("Есть!!!");
}
}
}
}
tr.Commit();
}
}
}
Когда стало необходимо получить динамический блок с конкретным именем, то я добавил следующее:
[CommandMethod("Select")]
public void Select()
{
var doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null)
return;
var db = doc.Database;
var ed = doc.Editor;
using (doc.LockDocument())
{
using (var tr = db.TransactionManager.StartTransaction())
{
var acSelSetPrompt = ed.GetSelection() as PromptSelectionResult;
if (acSelSetPrompt.Status == PromptStatus.OK)
{
var acSSet = acSelSetPrompt.Value;
foreach (SelectedObject acSelSetObj in acSSet)
{
if (acSelSetObj != null)
{
var blkRef = tr.GetObject(acSelSetObj.ObjectId, OpenMode.ForWrite) as BlockReference;
var block = (BlockTableRecord)tr.GetObject(blkRef.DynamicBlockTableRecord, OpenMode.ForRead);
if (blkRef.IsDynamicBlock == true && blkRef != null && block.Name == "Имя блока")
{
Application.ShowAlertDialog("Есть!!!");
}
}
}
}
tr.Commit();
}
}
}
Ну и что-то не то добавил
, так как, при выделении, например, полилинии, я получаю фатальную ошибку, не могу понять, почему?
Буду рад любой помощи и пояснениям. Заранее, спасибо.