Экспорт чертежа Civil 3D в AutoCAD

Автор Тема: Экспорт чертежа Civil 3D в AutoCAD  (Прочитано 10435 раз)

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

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Необходимо сохранить текущий чертеж Civil 3D в формате AutoCAD с выбором версии DWG. Изначально я реализовал экспорт через:
Код - C# [Выбрать]
  1. ed.Command("_exporttoautocad2010", filename);
Но в этом случае, если в чертеже есть мои объекты (с переопределением DrawableOverrule) полученный чертеж потом невозможно открыть - во время открытия каждый раз происходит фатальная ошибка, даже при не загруженном модуле.

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

Нужно ли подкорректировать второй метод, чтобы он корректно работал (я его только сейчас реализовываю и пока не могу сказать на сколько он рабочий)?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #1 : 04-04-2019, 20:25:49 »
Но в этом случае, если в чертеже есть мои объекты (с переопределением DrawableOverrule) полученный чертеж потом невозможно открыть - во время открытия каждый раз происходит фатальная ошибка, даже при не загруженном модуле.
Видно ты что-то там напереопределял лишнего. Попробуй тогда анализировать запущенную команду и в случае если это экспорт отменяй переопределение.
Второй вариант - это создание копии чертежа с помощью:
Код - C# [Выбрать]

    db.Wblock();

Далее, сохранить этот новый чертеж, открыть и расчленить все свои объекты и объекты Civil 3D в модели и во всех листах, и сохранение в нужной версии DWG.
Теоретически должно работать, но Wblock теряет ссылки на SoftPointerId (например, группы рассыпаются)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #2 : 04-04-2019, 20:36:32 »
Попробуй тогда анализировать запущенную команду и в случае если это экспорт отменяй переопределение.
Но тогда я потеряю свою графику из переопределения...

Пока я склоняюсь ко второму варианту. Как сделаю - отпишусь что получилось.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #3 : 04-04-2019, 20:54:06 »
Но тогда я потеряю свою графику из переопределения...
Думаю что ты её потеряешь в любом случае.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #4 : 04-04-2019, 20:57:57 »
Так ведь в этом и заключается моя главная задача - оставить свою графику. Я уже написал свою команду Расчленить, которая находит в чертеже все мои объекты, получает всю пользовательскую графику, вычерчивает ее и удаляет исходные объекты.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #5 : 04-04-2019, 21:06:34 »
Алексей Терно,
Тут ты только экспериментальным путём сможешь определить всё ли хорошо в твоей логике. Вместо db.Wblock можешь еще попробовать db.SaveAs - точно ничего не потеряешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #6 : 04-04-2019, 21:19:14 »
Вместо db.Wblock можешь еще попробовать db.SaveAs - точно ничего не потеряешь.
Кстати, да ))

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #7 : 05-04-2019, 08:01:56 »
У меня похожая штука есть - при экспорте в автокад нужно отрисовать перерисовку видов профилей (overrule).
Подписываюсь на событие Document.CommandWillStart и если запускается комнда содержащая EXPORTTOAUTOCAD, то запускаю отрисовку, но не в WorldDraw, а в чертеж.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #8 : 05-04-2019, 11:23:39 »
Но в этом случае, если в чертеже есть мои объекты (с переопределением DrawableOverrule) полученный чертеж потом невозможно открыть - во время открытия каждый раз происходит фатальная ошибка, даже при не загруженном модуле.
Видно ты что-то там напереопределял лишнего.
Похоже на то. Проверил у себя - чертёж с переопределёнными объектами после стандартного экспорта открывается нормально, без фаталов. Только в нём не сохраняется переопределение - только стандартное отображение.
Подписываюсь на событие Document.CommandWillStart и если запускается комнда содержащая EXPORTTOAUTOCAD, то запускаю отрисовку, но не в WorldDraw, а в чертеж.
Интересное решение! Я так понимаю, что стандартное отображение сохраняется и выполняется только "дорисовка" того, чего не хватает, а не полная подмена отображения?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #9 : 05-04-2019, 11:29:29 »
Необходимо сохранить текущий чертеж Civil 3D в формате AutoCAD с выбором версии DWG.
Вот тут можно что-нибудь подсмотреть по теме: http://adn-cis.org/forum/index.php?topic=538.0

Оффлайн Вильдар

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #10 : 05-04-2019, 12:20:35 »
Интересное решение! Я так понимаю, что стандартное отображение сохраняется и выполняется только "дорисовка" того, чего не хватает, а не полная подмена отображения?
Да, частичная перерисовка, в основном подпрофильных данных.

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #11 : 07-04-2019, 15:54:05 »
Проверил у себя - чертёж с переопределёнными объектами после стандартного экспорта открывается нормально, без фаталов.
А где ты хранишь данные - в XData или в ExtensionDictionary?

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #12 : 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 получается какой-то неполноценный:


Что надо подправить, чтобы new_ed.SelectAll() заработал?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #13 : 08-04-2019, 10:21:10 »
Флаг "Session" у команды есть?
Что надо подправить, чтобы new_ed.SelectAll() заработал?
Возможно, лучше совсем его не использовать.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #14 : 08-04-2019, 12:10:04 »
Возможно, лучше совсем его не использовать.
Именно. Он совершенно не нужен в этой ситуации. Тебе нужна коллекция ObjectId всех примитивов? Ну так пройдись итератором и выбери их.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #15 : 10-04-2019, 06:48:59 »
А как собственно закрыть чертеж? Я так и не нашел способ.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #16 : 10-04-2019, 10:20:27 »
А зачем?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #17 : 10-04-2019, 13:53:50 »
А как собственно закрыть чертеж? Я так и не нашел способ.
DocumentExtension.CloseAndDiscard  или DocumentExtension.CloseAndSave
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей ТерноАвтор темы

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #18 : 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 - появляется ошибка:


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

Неужели тут может быть моя ошибка? Я передаю "чистые" примитивы - без словарей и XData, никакие Overrule тут уже не работают.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: Экспорт чертежа Civil 3D в AutoCAD
« Ответ #19 : 22-04-2019, 15:31:53 »
Неужели тут может быть моя ошибка?
Может быть. Надо смотреть код полностью.
Но вполне может быть это просто такая "особенность" работы Wblock с чертежами Civil 3D в версии 2018.