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

ADN Club => Civil 3D API => Тема начата: Алексей Терно от 04-04-2019, 19:57:57

Название: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Алексей Терно от 04-04-2019, 19:57:57
Необходимо сохранить текущий чертеж Civil 3D в формате AutoCAD с выбором версии DWG. Изначально я реализовал экспорт через:
Код - C# [Выбрать]
  1. ed.Command("_exporttoautocad2010", filename);
Но в этом случае, если в чертеже есть мои объекты (с переопределением DrawableOverrule) полученный чертеж потом невозможно открыть - во время открытия каждый раз происходит фатальная ошибка, даже при не загруженном модуле.

Второй вариант - это создание копии чертежа с помощью:
Код - C# [Выбрать]
  1. db.Wblock();
Далее, сохранить этот новый чертеж, открыть и расчленить все свои объекты и объекты Civil 3D в модели и во всех листах, и сохранение в нужной версии DWG.

Нужно ли подкорректировать второй метод, чтобы он корректно работал (я его только сейчас реализовываю и пока не могу сказать на сколько он рабочий)?
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Александр Ривилис от 04-04-2019, 20:25:49
Но в этом случае, если в чертеже есть мои объекты (с переопределением DrawableOverrule) полученный чертеж потом невозможно открыть - во время открытия каждый раз происходит фатальная ошибка, даже при не загруженном модуле.
Видно ты что-то там напереопределял лишнего. Попробуй тогда анализировать запущенную команду и в случае если это экспорт отменяй переопределение.
Второй вариант - это создание копии чертежа с помощью:
Код - C# [Выбрать]

    db.Wblock();

Далее, сохранить этот новый чертеж, открыть и расчленить все свои объекты и объекты Civil 3D в модели и во всех листах, и сохранение в нужной версии DWG.
Теоретически должно работать, но Wblock теряет ссылки на SoftPointerId (например, группы рассыпаются)
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Алексей Терно от 04-04-2019, 20:36:32
Попробуй тогда анализировать запущенную команду и в случае если это экспорт отменяй переопределение.
Но тогда я потеряю свою графику из переопределения...

Пока я склоняюсь ко второму варианту. Как сделаю - отпишусь что получилось.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Александр Ривилис от 04-04-2019, 20:54:06
Но тогда я потеряю свою графику из переопределения...
Думаю что ты её потеряешь в любом случае.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Алексей Терно от 04-04-2019, 20:57:57
Так ведь в этом и заключается моя главная задача - оставить свою графику. Я уже написал свою команду Расчленить, которая находит в чертеже все мои объекты, получает всю пользовательскую графику, вычерчивает ее и удаляет исходные объекты.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Александр Ривилис от 04-04-2019, 21:06:34
Алексей Терно,
Тут ты только экспериментальным путём сможешь определить всё ли хорошо в твоей логике. Вместо db.Wblock можешь еще попробовать db.SaveAs - точно ничего не потеряешь.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Алексей Терно от 04-04-2019, 21:19:14
Вместо db.Wblock можешь еще попробовать db.SaveAs - точно ничего не потеряешь.
Кстати, да ))
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Вильдар от 05-04-2019, 08:01:56
У меня похожая штука есть - при экспорте в автокад нужно отрисовать перерисовку видов профилей (overrule).
Подписываюсь на событие Document.CommandWillStart и если запускается комнда содержащая EXPORTTOAUTOCAD, то запускаю отрисовку, но не в WorldDraw, а в чертеж.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Дмитрий Загорулькин от 05-04-2019, 11:23:39
Но в этом случае, если в чертеже есть мои объекты (с переопределением DrawableOverrule) полученный чертеж потом невозможно открыть - во время открытия каждый раз происходит фатальная ошибка, даже при не загруженном модуле.
Видно ты что-то там напереопределял лишнего.
Похоже на то. Проверил у себя - чертёж с переопределёнными объектами после стандартного экспорта открывается нормально, без фаталов. Только в нём не сохраняется переопределение - только стандартное отображение.
Подписываюсь на событие Document.CommandWillStart и если запускается комнда содержащая EXPORTTOAUTOCAD, то запускаю отрисовку, но не в WorldDraw, а в чертеж.
Интересное решение! Я так понимаю, что стандартное отображение сохраняется и выполняется только "дорисовка" того, чего не хватает, а не полная подмена отображения?
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Дмитрий Загорулькин от 05-04-2019, 11:29:29
Необходимо сохранить текущий чертеж Civil 3D в формате AutoCAD с выбором версии DWG.
Вот тут можно что-нибудь подсмотреть по теме: http://adn-cis.org/forum/index.php?topic=538.0
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Вильдар от 05-04-2019, 12:20:35
Интересное решение! Я так понимаю, что стандартное отображение сохраняется и выполняется только "дорисовка" того, чего не хватает, а не полная подмена отображения?
Да, частичная перерисовка, в основном подпрофильных данных.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Алексей Терно от 07-04-2019, 15:54:05
Проверил у себя - чертёж с переопределёнными объектами после стандартного экспорта открывается нормально, без фаталов.
А где ты хранишь данные - в XData или в ExtensionDictionary?
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Алексей Терно от 08-04-2019, 07:06:58
Вот, что я наделал:
Код - C# [Выбрать]
  1. Document doc = Application.DocumentManager.MdiActiveDocument;
  2. Database db = doc.Database;
  3.  
  4. Database newDB = new Database(false, true);
  5. newDB = db.Wblock();
  6. newDB.SaveAs(@"D:\Temp\exportfile.dwg", DwgVersion.AC1032);
  7. newDB.CloseInput(true);
  8.  
  9. Document new_doc = Application.DocumentManager.Open(@"D:\Temp\exportfile.dwg", false);
  10. Application.DocumentManager.MdiActiveDocument = new_doc;
  11. Database new_db = new_doc.Database;
  12. Editor new_ed = new_doc.Editor;
  13.  
  14. PromptSelectionResult res = new_ed.SelectAll();

На последней строке выскакивает исключение eNotApplicable. Редактор new_ed получается какой-то неполноценный:
(https://i.postimg.cc/DzyCJJ2T/2019-04-08-7-00-17.png)

Что надо подправить, чтобы new_ed.SelectAll() заработал?
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Дмитрий Загорулькин от 08-04-2019, 10:21:10
Флаг "Session" у команды есть?
Что надо подправить, чтобы new_ed.SelectAll() заработал?
Возможно, лучше совсем его не использовать.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Александр Ривилис от 08-04-2019, 12:10:04
Возможно, лучше совсем его не использовать.
Именно. Он совершенно не нужен в этой ситуации. Тебе нужна коллекция ObjectId всех примитивов? Ну так пройдись итератором и выбери их.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Алексей Терно от 10-04-2019, 06:48:59
А как собственно закрыть чертеж? Я так и не нашел способ.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Дмитрий Загорулькин от 10-04-2019, 10:20:27
А зачем?
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Александр Ривилис от 10-04-2019, 13:53:50
А как собственно закрыть чертеж? Я так и не нашел способ.
DocumentExtension.CloseAndDiscard  или DocumentExtension.CloseAndSave
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Алексей Терно от 22-04-2019, 15:19:12
Реализовал следующим образом:
1. выбираю в чертеже все свои объекты
2. создаю все примитивы, которые вычерчиваются при DrawableOverrule
3. сохраняю id всех этих примитивов и копирую их с помощью функции Wblock(ObjectIdCollection outObjIds, Point3d basePoint)
4. сохраняю новую базу данных с помощью SaveAs(string fileName, DwgVersion version)
5. удаляю все созданные в п.2 примитивы

В результате у меня создается новый чертеж, который содержит только примитивы, относящиеся к объектам моего модуля. Все хорошо, но потом созданный новый чертеж не открывается в C3D2018 - появляется ошибка:
(https://i.postimg.cc/pL7K27qb/2019-04-22-15-02-19.png)

Этот же чертеж без проблем открывается в C3D2019. Если выполнить экспорт в C3D2019, то картина такая же - созданный файл в 2018 версии не открывается, а в 2019 версии открывается. Этой проблемы нет только если новый чертеж создается без примитивов, т.е. ObjectIdCollection, передаваемый в Wblock не содержит элементов.

Неужели тут может быть моя ошибка? Я передаю "чистые" примитивы - без словарей и XData, никакие Overrule тут уже не работают.
Название: Re: Экспорт чертежа Civil 3D в AutoCAD
Отправлено: Дмитрий Загорулькин от 22-04-2019, 15:31:53
Неужели тут может быть моя ошибка?
Может быть. Надо смотреть код полностью.
Но вполне может быть это просто такая "особенность" работы Wblock с чертежами Civil 3D в версии 2018.