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

23/03/2017

Определение внешних ссылок, требующих обновления

Вопрос: Как определить, что в чертеже есть внешние ссылки, которые требуют обновления?

Ответ:  Это возможно только в том случае, когда системная переменная XREFNOTIFY отлична от 0 (в противном случае AutoCAD не отслеживает изменение внешних ссылок и не уведомляет об изменениях).

Для получения информации об изменившихся внешних ссылках следует пробежаться по графу внешних ссылок и найти те, статус (XrefNotificationStatus) которых равен ResolvedUpdateAvailable

Код может выглядеть так:

Код - C#: [Выделить]
  1.     public Editor ed;
  2.     [CommandMethod("CheckNeedReload")]
  3.     public void CheckNeedReload()
  4.     {
  5.       Document doc = Application.DocumentManager.MdiActiveDocument;
  6.       if (doc == null) return;
  7.       ed = doc.Editor;
  8.       Database db = doc.Database;
  9.       XrefGraph xg = db.GetHostDwgXrefGraph(true);
  10.       CheckNeedReloadNode(xg.RootNode);
  11.     }
  12.     public void CheckNeedReloadNode(GraphNode root)
  13.     {
  14.       for (int o = 0; o < root.NumOut; o++)
  15.       {
  16.         XrefGraphNode child = root.Out(o) as XrefGraphNode;
  17.         if (child != null)
  18.         {
  19.           ed.WriteMessage("\n{0} -- {1}", child.Database.Filename, child.XrefNotificationStatus);
  20.           CheckNeedReloadNode(child);
  21.         }
  22.       }
  23.     }

Ну и результат её работы:

Автор: Александр Ривилис

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

Опубликовано 23.03.2017
Отредактировано 27.03.2017 в 00:59:14