[CommandMethod( "GetRelativePathTest", CommandFlags.Modal)]
public static void GetRelativePathCommand()
{
Document adoc = Application.DocumentManager.MdiActiveDocument;
if (adoc == null) return;
Database db = adoc.Database;
Editor ed = adoc.Editor;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
using (XrefGraph xg = db.GetHostDwgXrefGraph(false))
{
for (int index = 1; index < xg.NumNodes; ++index)
{
using (XrefGraphNode node = xg.GetXrefNode(index))
{
if (node.IsNested)
{
BlockTableRecord btr = tr.GetObject(node.BlockTableRecordId, OpenMode.ForRead) as BlockTableRecord;
//Получить имя внешней ссылки
string btrName = btr.Name;
//Получить базу данных внешней ссылки, в которую она вложена
XrefGraphNode nodeIn = (XrefGraphNode)node.In(0);
Database dbIn = nodeIn.Database;
//Найти в этой базе соответствующий BlockTableRecord
using (Transaction trIn = dbIn.TransactionManager.StartTransaction())
{
BlockTable btIn = trIn.GetObject(dbIn.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord btr1 = trIn.GetObject(btIn[btrName], OpenMode.ForRead) as BlockTableRecord;
ed.WriteMessage("\nbtr1 Path: " + btr1.PathName);
ed.WriteMessage("\nbtr Path: " + btr.PathName+ "\n");//Получаются одинаковые пути
trIn.Commit();
}
}
}
}
}
tr.Commit();
}
}