12/02/2015
Как найти все внешние ссылки в текущей базе с помощью C#
Метод Database.GetHostDwgXrefGraph() возвращает иерархию внешних ссылок для текущего чертеж в виде объекта XrefGraph. Ниже простой пример, демонстрирующий его использование – печать структуры этой иерархии для текущего чертежа в командной строке.
Код - C#: [Выделить]
- [CommandMethod("XrefGraph")]
- public static void XrefGraph()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database db = doc.Database;
- Editor ed = doc.Editor;
- using (Transaction Tx = db.TransactionManager.StartTransaction())
- {
- ed.WriteMessage("\n---Находим все внешние ссылки ------------------");
- db.ResolveXrefs(true, false);
- XrefGraph xg = db.GetHostDwgXrefGraph(true);
- ed.WriteMessage("\n---Граф внешних ссылок -------------------------");
- ed.WriteMessage("\nТекущий чертеж ");
- GraphNode root = xg.RootNode;
- printChildren(root, "|-------", ed, Tx);
- ed.WriteMessage("\n----------------------------------------\n");
- }
- }
- // Рекурсивно печатаем информацию об иерархии внешних ссылок
- private static void printChildren(GraphNode i_root, string i_indent,
- Editor i_ed, Transaction i_Tx)
- {
- for (int o = 0; o < i_root.NumOut; o++)
- {
- XrefGraphNode child = i_root.Out(o) as XrefGraphNode;
- if (child.XrefStatus == XrefStatus.Resolved)
- {
- BlockTableRecord bl =
- i_Tx.GetObject(child.BlockTableRecordId, OpenMode.ForRead)
- as BlockTableRecord;
- i_ed.WriteMessage("\n" + i_indent + child.Database.Filename);
- // Имя внешней ссылки (найденное имя)
- // Вы можете найти также и оригинальный путь:
- //if (bl.IsFromExternalReference == true)
- // i_ed.WriteMessage("\n" + i_indent + "Путь внешней ссылки: "
- // + bl.PathName);
- printChildren(child, "| " + i_indent, i_ed, i_Tx);
- }
- }
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=1856
Опубликовано 12.02.2015