ADN Open CIS
Сообщество программистов Autodesk в СНГ

12/02/2015

Как найти все внешние ссылки в текущей базе с помощью C#

Метод Database.GetHostDwgXrefGraph() возвращает иерархию внешних ссылок для текущего чертеж в виде объекта XrefGraph. Ниже простой пример, демонстрирующий его использование – печать структуры этой иерархии для текущего чертежа в командной строке.

Код - C#: [Выделить]
  1.     [CommandMethod("XrefGraph")]
  2.     public static void XrefGraph()
  3.     {
  4.       Document doc = Application.DocumentManager.MdiActiveDocument;
  5.       Database db = doc.Database;
  6.       Editor ed = doc.Editor;
  7.       using (Transaction Tx = db.TransactionManager.StartTransaction())
  8.       {
  9.         ed.WriteMessage("\n---Находим все внешние ссылки ------------------");
  10.         db.ResolveXrefs(true, false);
  11.         XrefGraph xg = db.GetHostDwgXrefGraph(true);
  12.         ed.WriteMessage("\n---Граф внешних ссылок -------------------------");
  13.         ed.WriteMessage("\nТекущий чертеж ");
  14.         GraphNode root = xg.RootNode;
  15.         printChildren(root, "|-------", ed, Tx);
  16.         ed.WriteMessage("\n----------------------------------------\n");
  17.       }
  18.     }
  19.  
  20.     // Рекурсивно печатаем информацию об иерархии внешних ссылок
  21.     private static void printChildren(GraphNode i_root, string i_indent,
  22.                                       Editor i_ed, Transaction i_Tx)
  23.     {
  24.       for (int o = 0; o < i_root.NumOut; o++)
  25.       {
  26.         XrefGraphNode child = i_root.Out(o) as XrefGraphNode;
  27.         if (child.XrefStatus == XrefStatus.Resolved)
  28.         {
  29.           BlockTableRecord bl =
  30.             i_Tx.GetObject(child.BlockTableRecordId, OpenMode.ForRead)
  31.                 as BlockTableRecord;
  32.           i_ed.WriteMessage("\n" + i_indent + child.Database.Filename);
  33.           // Имя внешней ссылки (найденное имя)
  34.           // Вы можете найти также и оригинальный путь:
  35.           //if (bl.IsFromExternalReference == true)
  36.           // i_ed.WriteMessage("\n" + i_indent + "Путь внешней ссылки: "
  37.           //                      + bl.PathName);
  38.           printChildren(child, "| " + i_indent, i_ed, i_Tx);
  39.         }
  40.       }
  41.     }

 

Источник: http://adndevblog.typepad.com/autocad/2012/06/finding-all-xrefs-in-the-current-database-using-cnet.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=1856

Опубликовано 12.02.2015