Как сохранить изменения в открытом dxf-файле

Автор Тема: Как сохранить изменения в открытом dxf-файле  (Прочитано 5327 раз)

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

Оффлайн sash-2007Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: -1

Продолжение  темы   "Работа с базой данных открытого чертежа ".



Теперь столкнулся с проблемой сохранения моего dxf - файла  под тем же именем
в Автокаде пишет  что файл открывается только для чтения

замена параметра метода Оpen  (OpenMode.ForRead)    на  (OpenMode.ForWrite)
не помогло

пробовал метод   dxfDoc.CloseAndSave(pathDXF);   не получается.

Подскажите пожалуйста, как сохранить?

Вот код Александра Ривилиса  для  редактирования файла:

Код - C# [Выбрать]
  1. using System.Windows.Forms;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.EditorInput;
  6. using AcAp = Autodesk.AutoCAD.ApplicationServices;
  7.  
  8. #pragma warning disable 0618
  9.  
  10. [assembly: CommandClass(typeof(Rivilis.DXFModify))]
  11.  
  12. namespace Rivilis
  13. {
  14.   public class DXFModify
  15.   {
  16.     [CommandMethod("DXFModify", CommandFlags.Session)]
  17.     public void MyCommand()
  18.     {
  19.       Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
  20.       if (doc == null) return;
  21.       OpenFileDialog openFileDialog = new OpenFileDialog();
  22.       openFileDialog.Title = "Выберите dxf-файл";
  23.       openFileDialog.Filter = "dxf-файлы|*.dxf";
  24.       DialogResult dr = openFileDialog.ShowDialog();
  25.       if (dr == DialogResult.OK)
  26.       {
  27.         Document dxfDoc = AcAp.Application.DocumentManager.Open(openFileDialog.FileName);
  28.         if (dxfDoc != null)
  29.         {
  30.           // Так как мы работаем в контексте приложения и будем модифицировать документ,
  31.           // то должны его заблокировать
  32.           using (DocumentLock docloc = dxfDoc.LockDocument())
  33.           {
  34.             Database db = dxfDoc.Database;
  35.             using (BlockTable blks = db.BlockTableId.Open(OpenMode.ForRead) as BlockTable)
  36.             {
  37.               using (BlockTableRecord modelSpace =
  38.                   blks[BlockTableRecord.ModelSpace].Open(OpenMode.ForRead) as BlockTableRecord)
  39.               {
  40.                 foreach (ObjectId id in modelSpace)
  41.                 {
  42.                   using (Entity ent = id.Open(OpenMode.ForRead) as Entity)
  43.                   {
  44.                     Circle circ = ent as Circle;
  45.                     if (circ != null)
  46.                     {
  47.                       using (ResultBuffer rb = ent.XData)
  48.                       {
  49.                         if (rb != null)
  50.                         {
  51.                           //foreach (TypedValue tv in rb)
  52.                           //{
  53.                           //  dxfDoc.Editor.WriteMessage(
  54.                           //    "\nTypedValue - type: {0}, value: {1}",
  55.                           //     tv.TypeCode, tv.Value);
  56.                           //}
  57.                           // Будем модифицировать круг
  58.                           circ.UpgradeOpen();
  59.                           // Отметим круги с расширенными данными красным цветом
  60.                           // (тут возможно вставить свою логику проверки xData)
  61.                           circ.ColorIndex = 1;
  62.                         }
  63.                       }
  64.                     }
  65.                   }
  66.                 }
  67.               }
  68.             }
  69.           }
  70.         }
  71.       }
  72.     }
  73.   }
  74. }


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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Дмитрий Загорулькин
У нас не нашёл мой перевод? :)

Сохранение чертежа в DXF-формате

Но тут есть нюанс. Сохранить под тем же именем наверное не получится - скорее всего возникнет исключение (не проверял). Так что нужно сохранить под другим, закрыть документ без сохранения и скопировать/переименовать из нового имени в старое.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sash-2007Автор темы

  • ADN OPEN
  • Сообщений: 21
  • Карма: -1
Спасибо за ответы.
Попробую реализовать задуманное.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
У нас не нашёл мой перевод? 
Да просто я по привычке ввел в гугл "autocad net save dxf" - 3-я сверху ссылка указала на статью в adndevblog.
А если ввести "autocad net сохранить dxf" - то 6-я ссылка сверху будет на переведенную статью.