Задать стиль напорного трубопровода.

Автор Тема: Задать стиль напорного трубопровода.  (Прочитано 17019 раз)

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

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

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
C3D 2016. При попытке присвоить значение свойству StyleId объекта класса PressurePipe возникает исключение - "need to override property StyleId()".
Аналогичная проблема обсуждалась на форуме Autodesk - https://forums.autodesk.com/t5/autocad-civil-3d-customization/set-corridor-stylename-is-giving-exception/td-p/6470113  (только для объекта Corridor).
Причина понятна - метод Set реализован только для базового класса Entity.
Существуют ли какие-либо альтернативные пути решения задачи?
« Последнее редактирование: 06-10-2017, 14:44:38 от Andant »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Приветствую на форуме!
А задам как я этот вопрос в ADN DevHelp. Только выложи пожалуйста кусочек кода в, котором ты присваиваешь StyleId и картинку с исключением.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Код примерно такой:
Код - C# [Выбрать]
  1.     foreach (PressurePipe prPipe in PrPipes)
  2.         prPipe.StyleId = prPipeStyleId;
  3.  
Трубопроводы в коллекции PrPipes предварительно открыты на запись.

Исключение:


« Последнее редактирование: 05-10-2017, 20:10:03 от Александр Ривилис »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я отправил вопрос в ADN DevHelp. Подождём ответа. Как только будет информация или понадобится уточнение - я сообщу.
Пока же обрати внимание на правило форматирования кода у нас на форуме (смотри у меня в подписи).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Спасибо, Александр!

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Для PressureAppurtenance такая же картина...

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Подозреваю, что и для фитингов тоже самое. Я бы посоветовал Вам оставить пока что идею использования напорного трубопровода до лучших времен, по крайней мере, пока не появится достаточный для использования функционал хотя бы со стороны пользователей.

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
У нас продвинутые пользователи. Хотят сегодня и сейчас. :)

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Ну смотря с какой целью использовать. Построить красивую 3D картинку уже спроектированного трубопровода - можно. Проектировать трубопроводы с использованием этого инструментария - крайне тяжело. Особенно, когда потребуется вносить изменения на поздних стадиях.

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Пытаюсь решить задачу с другой стороны. Создать напорный трубопровод с новым типоразмером и заменить им старый.
PressurePipeNetwork имеет методы AddCurvePipe и AddLinePipe, но они требуют в качестве параметра PressurePartSize.
Вопрос к знатокам - можно ли получить список доступных PressurePartSize документа? Мне удалось добраться только до PressurePartLists...

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
А этот класс является internal:
Код - C# [Выбрать]
  1. namespace Autodesk.Civil.DatabaseServices.Styles
  2. {
  3.         internal sealed class PressurePartSize : DisposableWrapper, IEquatable<PressurePartSize>
  4.         {
  5.         // ...
  6.  
Чисто теоретически, можно изучить внутренности AeccPressurePipesMgd.dll и попробовать через рефлексию добраться до нужных объектов...
Но я уже говорил, что этот инструментарий ещё в зачаточном состоянии и использовать его настоятельно не рекомендую.
Мне удалось добраться только до PressurePartLists...
Странно, учитывая, что он тоже internal:
Код - C# [Выбрать]
  1. namespace Autodesk.Civil.DatabaseServices.Styles
  2. {
  3.         [Wrapper("AeccDbPressurePartList")]
  4.         internal sealed class PressurePartList : StyleBase
  5.         {
  6.         // ...
  7.  

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Цитировать
Странно, учитывая, что он тоже internal:
Удалось получить только имена PressurePartList.  Нашел такое решение - https://forums.autodesk.com/t5/autocad-civil-3d-customization/how-to-access-pressure-network-parts-lists-using-vb-net/td-p/6205962
Через рефлексию :)

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Однако! Andant, отличная работа! Ну раз уж сам Jeff_M предложил такой способ и даже дал пример кода, то вынужден признать, что он имеет право на жизнь :)

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

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Продолжил погружение в рефлексию и создал новый PressurePipe на основе выбранного типоразмера.
Но, новая засада... Информация о типоразмере трубы хранится в свойстве PartDescription (readonly) от базового класса PressurePart.
У прародителя, Entity, есть свойство Description, доступное для редактирования. И если изменить Description, то автоматом меняется и PartDescription.
Как можно сделать, чтобы и информацию о типоразмере не терять, и дополнительный комментарий добавлять?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Информация о типоразмере трубы хранится в свойстве PartDescription (readonly) от базового класса PressurePart.
У прародителя, Entity, есть свойство Description, доступное для редактирования. И если изменить Description, то автоматом меняется и PartDescription.
А если вручную на чертеже поменять описание, что будет возвращать PartDescription?
Вообще, лучше придерживаться правила: один вопрос - одна тема. А в этой теме это уже 3-й вопрос.