Перенос стилей из внешнего *.DWG файла.

Автор Тема: Перенос стилей из внешнего *.DWG файла.  (Прочитано 8053 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн AndantАвтор темы

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Решаю задачу переноса стилей объектов Civil (поверхности, трассы, профили, трубы и т.д.). Использую метод CloningHelper.Clone().  Перенос осуществляется, но не удается решить проблему одинаковых имен. Вроде бы CloningHelper.MergeType позволяет выбрать нужный режим - игнорировать, заменить, переименовать.  Но на практике, ни замена, ни переименование не происходят.  Только добавление новых стилей с уникальными именами. Может, кто - нибудь уже сталкивался с данной проблемой?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Использую метод CloningHelper.Clone()
А что это за метод? Я такой не нашёл в SDK.

Оффлайн AndantАвтор темы

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Да, поиск рулит, уже нашёл. Вроде как, метод как раз для такой ситуации и должен работать корректно. Если установка режима не работает - то это, скорее всего, баг в его реализации.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Да, поиск рулит, уже нашёл. Вроде как, метод как раз для такой ситуации и должен работать корректно. Если установка режима не работает - то это, скорее всего, баг в его реализации.
Вообще-то, как указано в статье, этот метод для ACA и MEP. Так что не обязательно, что он работает корректно в Civil 3D.
Кроме того нужно убедиться, что одноименные стили не открыты в этот момент.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Согласен, но не полностью. Метод же всё-таки работает, но  не так, как ожидается. Разработан он как раз для вертикальных продуктов, так что, по-хорошему, должен и с Civil дружить. Но это если была предусмотрена универсальность. А этого могло и не быть, Вы правы.
Ну и поиском по Civil 3D .NET Reference я не нашёл подходящих инструментов. Возможно, что как раз-таки и подразумевается использование этого метода. Наверное, надо в DevHelp спрашивать.

Оффлайн AndantАвтор темы

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Посмотрел, где хранятся стили в Civil. Древовидная структура. 
Если подниматься вверх от стиля, то на 4 уровне упираемся в NamedObjectDictionary (Dictionary C):


Странно, что хоть что-то добавляется...

Оффлайн AndantАвтор темы

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Скорее всего, придется сравнивать имена стилей, удалять перезаписываемые, при необходимости переименовывать. И только после этого клонировать... 

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Если подниматься вверх от стиля, то на 4 уровне упираемся NamedObjectDictionary
А что странного? Наоборот, довольно логично. Только жаль, что хранятся эти данные в недоступном для API виде.

Оффлайн AndantАвтор темы

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Только жаль, что хранятся эти данные в недоступном для API виде
Можно через референсы добраться. Handle 242 - это узел Root. У него можно найти AeccDbTreeNode (handle 33C), который уже содержит ссылки на все стили:



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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Так ведь стили можно гораздо проще получить ;) Но тоже интересный вариант.

Оффлайн AndantАвтор темы

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Так ведь стили можно гораздо проще получить
Боюсь, что если дело дойдет до "ручного" контроля имен стилей с удалением и переименованием, то для напорных сетей опять понадобятся "танцы с бубном"...:)

Отмечено как Решение Andant 28-11-2017, 15:10:25

Оффлайн AndantАвтор темы

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Ну и поиском по Civil 3D .NET Reference я не нашёл подходящих инструментов
И все-таки есть такая партия! Статический метод StyleBase.ExportTo() успешно справился с задачей. И даже производит замену стиля для всех уже имеющихся в базе объектов!

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Эвона как! Мои поздравления! Значит, я плохо искал :)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Эвона как! Мои поздравления! Значит, я плохо искал :)
Не. Это ранний склероз называется. :-) Три года назад ты сам этот метод рекомендовал: http://adn-cis.org/forum/index.php?topic=731.msg2830#msg2830
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение