Hallo,
ich suche eine Möglichkeit zu bestimmen, ob eine Blockreferenz in einem xref enthalten ist, oder direkt in die Zeichnung eingefügt wurde.
Hintergrund: Ich möchte alle Blöcke und Xrefs in einer Zeichnung mit einer transienten Grafik markieren. Beim Iterieren durch die BlockTable werden dann aber auch nested blocks und blocks in xrefs gefunden und markiert. Nested blocks konnte ich schon herausfiltern, aber bei xrefs wird immer noch jedes xref insgesamt markiert und dann noch einmal jeder Block einzeln (und das auch noch bezüglich des Nullpunkts im xref...).
Mein Code sieht bisher so aus:
Code:
Document activeDocument = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database database = activeDocument.Database;
Autodesk.AutoCAD.DatabaseServices.TransactionManager transactionManager = database.TransactionManager;using (Transaction transaction = transactionManager.StartTransaction())
{
BlockTable blockTable = (BlockTable)transaction.GetObject(database.BlockTableId, OpenMode.ForRead);
foreach (ObjectId objectId in blockTable)
{
BlockTableRecord blockTableRecord = (BlockTableRecord)transaction.GetObject(objectId, OpenMode.ForRead);
if (!blockTableRecord.IsLayout)
{
ObjectIdCollection objectIdCollection = blockTableRecord.GetBlockReferenceIds(false, false);
foreach (ObjectId blockReferenceId in objectIdCollection)
{
BlockReference blockReference = (BlockReference)transaction.GetObject(blockReferenceId, OpenMode.ForRead);
if (IsPrimary(blockReference)) //&& filter blocks from xrefs
{
//draw transient bounding box
//...
}
}
}
}
}
private bool IsPrimary(BlockReference blockReference)
{
BlockTableRecord owner = (BlockTableRecord)blockReference.OwnerId.GetObject(OpenMode.ForRead);
return owner.IsLayout; //false for nested blocks
}
Wie kann ich die Blöcke, die in einem Xref enthalten sind, herausfiltern?
Vielen Dank für eure Antworten!
Viel Grüsse
Enza
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP