02/11/2013
Редактирование по месту файлов внешних ссылок
Код ниже показывает процедуру редактирования файла внешней ссылки. Для этой цели используется класс “XrefFileLock”, который обрабатывает управление блокировкой файлов внешних ссылок:
Код - C#: [Выделить]
Источник: http://adndevblog.typepad.com/autocad/2013/10/in-place-edit-of-external-reference-drawing-files.html
- [CommandMethod("editexref")]
- static public void editexref()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- Database database = doc.Database;
- XrefGraph mXRefTree = database.GetHostDwgXrefGraph(false);
- Database xrefDatatbase = null;
- XrefGraphNode xgn = null;
- for (int i = 0; i < mXRefTree.HostDrawing.NumOut; i++)
- {
- xgn = mXRefTree.HostDrawing.Out(i) as XrefGraphNode;
- // Находим имя файла внешней ссылки для редактирования
- if (string.Compare(xgn.Name, "TEST", true) == 0)
- {
- xrefDatatbase = xgn.Database;
- break;
- }
- }
- if (xrefDatatbase == null)
- return;
- // Редактируем его
- int nCtlType =
- XrefFileLock.GetXloadCtlType(xrefDatatbase.XrefBlockId);
- using (XrefFileLock Filelock =
- XrefFileLock.LockFile(xrefDatatbase.XrefBlockId))
- {
- xrefDatatbase.RestoreOriginalXrefSymbols();
- // добавляем отрезок
- Line line =
- new Line(new Point3d(0, 0, 0), new Point3d(10, 10, 0));
- using (Transaction tr =
- xrefDatatbase.TransactionManager.StartTransaction())
- {
- BlockTable bt =
- (BlockTable)tr.GetObject(xrefDatatbase.BlockTableId,
- OpenMode.ForRead);
- BlockTableRecord ms = (BlockTableRecord)tr.GetObject(
- bt[BlockTableRecord.ModelSpace],
- OpenMode.ForWrite);
- ms.AppendEntity(line);
- tr.AddNewlyCreatedDBObject(line, true);
- tr.Commit();
- }
- xrefDatatbase.RestoreForwardingXrefSymbols();
- }
- }
Обсуждение: http://adn-cis.org/forum/index.php?topic=303
Опубликовано 02.11.2013