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

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

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

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

  • ADN Club
  • **
  • Сообщений: 54
  • Карма: 13
Цитировать
А если вручную на чертеже поменять описание, что будет возвращать PartDescription?
В том то и дело, что Description заменяет значение PartDescription даже при ручном редактировании.

Цитировать
Вообще, лучше придерживаться правила: один вопрос - одна тема. А в этой теме это уже 3-й вопрос.
Эту задачу можно закрывать. Исследования показали, что присваивание стиля напрямую не актуально. Стилю присваивается значение стиля PressurePartSize. Проверено. Единственное - зачем генерировать исключение, если можно просто сделать ReadOnly.
Типоразмер можно задать при добавлении новой трубы к сети. При помощи рефлексии, но возможно...
Вопрос о PartDescription выношу в отдельную тему.

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

  • ADN Club
  • **
  • Сообщений: 54
  • Карма: 13
Отменил статус решенной задачи. Пользователи хотят иметь возможность задавать стиль элементов напорных сетей независимо от типоразмера.

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

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

Отмечено как Решение rivilis 18-10-2017, 08:36:23

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

  • Administrator
  • *****
  • Сообщений: 6816
  • Карма: 752
  • Рыцарь ObjectARX
  • Skype: rivilis
Получил второй ответ (от разработчиков) - такого функционала в текущих версиях Civil 3D API нет. Создана заявка на добавление такого функционала, но без серьезного  ‘business case’ до него руки дойдут не скоро. По поводу ‘business case’: http://adn-cis.org/forum/index.php?topic=2640.0
В любом случае если это изменение и будет, то только в новых версиях.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 54
  • Карма: 13
Получил второй ответ (от разработчиков) - такого функционала в текущих версиях Civil 3D API нет. Создана заявка на добавление такого функционала, но без серьезного  ‘business case’ до него руки дойдут не скоро. По поводу ‘business case’: http://adn-cis.org/forum/index.php?topic=2640.0
В любом случае если это изменение и будет, то только в новых версиях.
Спасибо! Примерно это я и предполагал после изучения вопроса.
Попробовал DwgOut,  заменить ссылку на StyleId в ReferenceFiler и вызвать DwgIn, но попытка не удалась... Может, возможны подобные "танцы с бубном"?

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

  • Administrator
  • *****
  • Сообщений: 6816
  • Карма: 752
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробовал DwgOut,  заменить ссылку на StyleId в ReferenceFiler и вызвать DwgIn, но попытка не удалась... Может, возможны подобные "танцы с бубном"?
Такие "танцы с бубном" теоретически возможны через P/Invoke для функций acdbEntGet/acdbEntMod из ObjectARX.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 54
  • Карма: 13
Такие "танцы с бубном" теоретически возможны через P/Invoke для функций acdbEntGet/acdbEntMod из ObjectARX.

Результат acdbEntGet:


Аналогично:
(entget (car (entsel)))
Выберите объект: ((-1 . <Имя объекта: 7ffffb6d580>) (0 . "AECC_PRESSUREPIPE") (330 . <Имя объекта: 7ffffb361f0>) (5 . "77C8") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "_ГКС ОСВЕЩЕНИЕ СЕТЬ") (100 . "AeccDbEntity") (100 . "AeccDbGeo_aec") (100 . "AeccDbGeo") (100 . "AeccDbNetworkPartBase") (100 . "AeccDbPressurePart") (100 . "AeccDbPressurePipe"))

Да и MgdDbg показывает PressyrePipeStyle только в ссылках:


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

  • Administrator
  • *****
  • Сообщений: 6816
  • Карма: 752
  • Рыцарь ObjectARX
  • Skype: rivilis
Значит и этот вариант не подходит. Увы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 54
  • Карма: 13
Удалось поменять стиль трубы через стиль типоразмера.
1. Меняем у типоразмера трубы стиль на новый.
2. Создаем новую трубу с геометрией старой, но отредактированным типоразмером.
3. Удаляем старую трубу.
4. Возвращаем типоразмеру родное значение стиля.

Вот такой "финт ушами", но сработало!

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

  • ADN
  • *
  • Сообщений: 1235
  • Карма: 235
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Ну это как бы не совсем замена стиля. В общем случае, с заменой трубы возникает ряд других проблем:
- Точное определение геометрии исходной трубы: в напорной сети труба может быть очень сложной формы в вертикальной плоскости.
- Отображение на виде профиля: после замены трубы нужно восстановить отображение трубы на всех видах профилей с учётом возможного переопределения стиля трубы на отдельном виде профиля. Кстати, то же самое, возможно, касается и видов сечений.
- Восстановление меток трубы как на плане, так и на видах профиля (видах сечения).
- Восстановление ссылочной поверхности.
- Восстановление ссылочной трассы.
- Восстановление присоединений к другим элементам.
В частном случае, возможно, этих проблем не будет.

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

  • ADN
  • *
  • Сообщений: 1235
  • Карма: 235
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Кстати, возможно, что от некоторых проблем (например, с метками) можно избавиться, если использовать при замене трубы метод подмены Id: http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_DBObject_SwapIdWith_Autodesk_AutoCAD_DatabaseServices_ObjectId__MarshalAsUnmanagedType_U1__bool__MarshalAsUnmanagedType_U1__bool
Я использовал его при аналогичной замене в безнапорной сети.

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

  • ADN Club
  • **
  • Сообщений: 54
  • Карма: 13
Кстати, возможно, что от некоторых проблем (например, с метками) можно избавиться, если использовать при замене трубы метод подмены Id:
Спасибо, Дмитрий!

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

  • ADN Club
  • **
  • Сообщений: 54
  • Карма: 13
Пока не проверил, но скорее всего проблема решается заменой ссылок аналогично http://adn-cis.org/forum/index.php?topic=8112.0

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

  • Administrator
  • *****
  • Сообщений: 6816
  • Карма: 752
  • Рыцарь ObjectARX
  • Skype: rivilis
Пока не проверил, но скорее всего проблема решается заменой ссылок аналогично http://adn-cis.org/forum/index.php?topic=8112.0
Проверь пожалуйста эту возможность. Если это так, то можно будет утереть нос и ADN DevHelp, и команде разработчиков. Хотя я просил у них посмотреть нет ли workaround, но они этот вариант не нашли.

Ну и кусочек кода, который это делает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • **
  • Сообщений: 54
  • Карма: 13
Проверь пожалуйста эту возможность.
Проверил. Работает!
Ну и кусочек кода, который это делает.
Кусочек:
Код - C# [Выбрать]
  1. IdMapping map = new IdMapping();
  2. map.Add(new IdPair(pipe.LayerId, pipe.LayerId, true, false, true));
  3. map.Add(new IdPair(pipe.LinetypeId, pipe.LinetypeId, true, false, true));
  4. map.Add(new IdPair(pipe.MaterialId, pipe.MaterialId, true, false, true));
  5. map.Add(new IdPair(partListId, partListId, true, false, true));
  6. map.Add(new IdPair(partDefId, partDefId, true, false, true));
  7. map.Add(new IdPair(pipe.NetworkId, pipe.NetworkId, true, false, true));
  8. map.Add(new IdPair(pipe.StyleId, newStyleId, true, false, true));
  9.  
  10. pipe.SwapReferences(map);
  11.  
« Последнее редактирование: 30-10-2017, 12:34:20 от Andant »