AttachXref Можно ли вставить в качестве внешней ссылки текущий файл?

Автор Тема: AttachXref Можно ли вставить в качестве внешней ссылки текущий файл?  (Прочитано 2364 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн unit-85Автор темы

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Добрый день.

Пытаюсь присоединить внешнюю ссылку с помощью функции AttachXref (текущий файл в качестве внешней ссылки в сторонний файл). Возникает ошибка eFileAccessErr
Код - C# [Выбрать]
  1. Database dbX = new Database(false, false);
  2.                 Document docX = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.GetDocument(dbX);
  3.                 DocumentLock docLoc1 = docX.LockDocument();
  4.                 dbX.ReadDwgFile("c:\1.dwg", System.IO.FileShare.ReadWrite, true, "");
  5.  
  6.                 HostApplicationServices.WorkingDatabase = dbX;
  7.                                  
  8.                 using (Transaction trX = dbX.TransactionManager.StartTransaction())
  9.                 {
  10.                             LayoutManager.Current.CurrentLayout = layoutName;
  11.  
  12.                             DBDictionary lytDct = (DBDictionary)trX.GetObject(dbX.LayoutDictionaryId, OpenMode.ForWrite);
  13.                             foreach (DBDictionaryEntry dictEntry in lytDct)
  14.                             {
  15.                                 Layout lyt = (Layout)trX.GetObject(dictEntry.Value, OpenMode.ForWrite);
  16.  
  17.                                 if (!lyt.ModelType && dictEntry.Key != layoutName)
  18.                                 {
  19.                                     lyt.Erase();
  20.                                 }
  21.  
  22.                             }
  23.                            
  24.  
  25.                             BlockTable bt = (BlockTable)trX.GetObject(dbX.BlockTableId, OpenMode.ForWrite);
  26.                             ObjectId msId = bt[BlockTableRecord.ModelSpace];
  27.  
  28.                             BlockTableRecord btr = (BlockTableRecord)trX.GetObject(msId, OpenMode.ForWrite);
  29.                            
  30.                             //Вставка внешней ссылки                  
  31.                             string PathName = Application.DocumentManager.MdiActiveDocument.Name;
  32.                             ObjectId acXrefId = dbX.AttachXref(PathName, System.IO.Path.GetFileNameWithoutExtension(PathName));
  33.  
  34.                    
  35.                             if (!acXrefId.IsNull)
  36.                             {
  37.                                 // Attach the DWG reference to the current space
  38.                                 Autodesk.AutoCAD.Geometry.Point3d insPt = new Autodesk.AutoCAD.Geometry.Point3d(0, 0, 0);
  39.                                 using (BlockReference acBlkRef = new BlockReference(insPt, acXrefId))
  40.                                 {
  41.                                     BlockTableRecord acBlkTblRec;
  42.                                     acBlkTblRec = trX.GetObject(SymbolUtilityServices.GetBlockModelSpaceId(dbX), OpenMode.ForWrite) as BlockTableRecord;
  43.  
  44.                                     acBlkTblRec.AppendEntity(acBlkRef);
  45.                                     trX.AddNewlyCreatedDBObject(acBlkRef, true);
  46.                                 }
  47.                             }
  48.  
  49.  
  50.  
  51.  
  52.  
  53.                             dbX.SaveAs("c:\1.dwg", DwgVersion.Current);
  54.  
  55.                             trX.Commit();
  56.                        
  57.                    
  58.    
  59.             }
  60.  
Если PathName - не текущий файл, то работает нормально.
Можно ли как-то вставить в качестве внешней ссылки текущий файл?
« Последнее редактирование: 21-08-2017, 15:14:39 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
1. Читай у меня в подписи как форматировать код на форуме и соблюдай это правило.
2. "c:\1.dwg" - это не правильный путь. Правильный: "c:\\1.dwg" или @"c:\1.dwg"
3. Текущий файл (открытый в редакторе AutoCAD) нельзя добавить в другой как внешнюю ссылку.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот это бред:
Код - C# [Выбрать]
  1. Database dbX = new Database(false, false);
  2. Document docX = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.GetDocument(dbX);
  3. DocumentLock docLoc1 = docX.LockDocument();
У dbX нет документа. Так что и блокировать нечего.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн unit-85Автор темы

  • ADN OPEN
  • Сообщений: 7
  • Карма: 0
Спасибо, Александр. Путь к файлу я уже тут неправильно написал, а с LockDocument эксперименты.
пункт 3 - это ответ.