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

02/11/2013

Редактирование по месту файлов внешних ссылок

Код ниже показывает процедуру редактирования файла внешней ссылки. Для этой цели используется класс “XrefFileLock”, который обрабатывает управление блокировкой файлов внешних ссылок:

Код - C#: [Выделить]
  1. [CommandMethod("editexref")]
  2. static public void editexref()
  3. {
  4.   Document doc = Application.DocumentManager.MdiActiveDocument;
  5.   Database database = doc.Database;
  6.   XrefGraph mXRefTree = database.GetHostDwgXrefGraph(false);
  7.  
  8.   Database xrefDatatbase = null;
  9.   XrefGraphNode xgn = null;
  10.  
  11.   for (int i = 0; i < mXRefTree.HostDrawing.NumOut; i++)
  12.   {
  13.    xgn = mXRefTree.HostDrawing.Out(i) as XrefGraphNode;
  14.  
  15.    // Находим имя файла внешней ссылки для редактирования
  16.    if (string.Compare(xgn.Name, "TEST", true) == 0)
  17.    {
  18.        xrefDatatbase = xgn.Database;
  19.        break;
  20.    }
  21.   }
  22.  
  23.   if (xrefDatatbase == null)
  24.       return;
  25.  
  26.   // Редактируем его
  27.   int nCtlType =
  28.           XrefFileLock.GetXloadCtlType(xrefDatatbase.XrefBlockId);
  29.   using (XrefFileLock Filelock =
  30.                   XrefFileLock.LockFile(xrefDatatbase.XrefBlockId))
  31.   {
  32.       xrefDatatbase.RestoreOriginalXrefSymbols();
  33.  
  34.       // добавляем отрезок
  35.       Line line =
  36.           new Line(new Point3d(0, 0, 0), new Point3d(10, 10, 0));
  37.  
  38.       using (Transaction tr =
  39.               xrefDatatbase.TransactionManager.StartTransaction())
  40.       {
  41.           BlockTable bt =
  42.               (BlockTable)tr.GetObject(xrefDatatbase.BlockTableId,
  43.                                                   OpenMode.ForRead);
  44.           BlockTableRecord ms = (BlockTableRecord)tr.GetObject(
  45.                                   bt[BlockTableRecord.ModelSpace],
  46.                                                 OpenMode.ForWrite);
  47.  
  48.           ms.AppendEntity(line);
  49.           tr.AddNewlyCreatedDBObject(line, true);
  50.           tr.Commit();
  51.  
  52.       }
  53.       xrefDatatbase.RestoreForwardingXrefSymbols();
  54.   }
  55.  
  56. }

Источник: http://adndevblog.typepad.com/autocad/2013/10/in-place-edit-of-external-reference-drawing-files.html

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

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