От группы меток областей данных к областям данных.

Автор Тема: От группы меток областей данных к областям данных.  (Прочитано 4408 раз)

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

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Привет,
Разбираюсь с видами профилей сетей.
Например, задача поправить значение меток в области данных, см. картинку.
Получаю метки областей данных так:
Код - C# [Выбрать]
  1. var lgs = PipeNetworkBandLabelGroup.GetAvailableLabelGroupIds(pv.Id).GetObjects<PipeNetworkBandLabelGroup>();
1. Как для них определить области данных ProfileViewBandItem из набора ProfileView.Bands?

Сами значения меток беру из PipeNetworkBandLabelGroup.SubEntities:
Код - C# [Выбрать]
  1. foreach (var subEntity in lg.SubEntities)
  2. {
  3.    var tcs = subEntity.GetTextComponentIds().GetObjects<LabelStyleTextComponent>();
  4.    foreach (var tc in tcs)
  5.    {
  6.       var value = tc.Text.Contents.Value;
  7.    }
  8. }
2. Как получить источник данных, в данном случае трубу.

Пока не могу понять взаимную работу вида профиля, частей сети, областей данных и их меток  :-\



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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Задачка не из простых. Бегло посмотрел - вроде как в API нет инструментов для этого. Но мог что-то упустить.
Основная загвоздка в том, что я не нашёл никакой связи между объектами ProfileBandLabelGroup и ProfileViewBandItem. Первый объект - это графика, второй - настройка этой графики. Но ни у одного из них нет какой-то ссылки на другой.
2. Как получить источник данных, в данном случае трубу.
А если через MgdDbg посмотреть, там есть ссылки меток на трубы/сеть/вид профиля?

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
По 1 вопросу, небольшая зацепка есть в имени текстового компонента
Код - C# [Выбрать]
  1. LabelStyleTextComponent.General.Name
В нашем случае эти имена сочетаются с названиями областей данных.

А если через MgdDbg посмотреть, там есть ссылки меток на трубы/сеть/вид профиля?

По MgdDbg, в референсах сидят трубы, может это как то использовать:


Попробую от координат метки плясать. Буду искать пикет на трассе и трубу в этом месте.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
У subEntity нашёл интересный метод: http://docs.autodesk.com/CIV3D/2016/ENU/API_Reference_Guide/html/dac6ae0d-40c5-66f7-7888-624a5f14fa3a.htm
Может он как раз на трубу укажет?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
По MgdDbg, в референсах сидят трубы, может это как то использовать:
Ты можешь вытянуть трубы таким образом. Это то, чего ты добиваешься?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Может он как раз на трубу укажет?
При вызове (передаю ObjectId самого TextComponent)
Код - C# [Выбрать]
  1. subEntity.GetReferenceTextTarget(referenceTextComponentId)
выскакивает исключение System.ArgumentException:
Цитировать
referenceTextComponentId should be the ObjectId of LabelStyleReferenceTextComponent.
А откуда взять referenceTextComponent? Не понятно.

Ты можешь вытянуть трубы таким образом. Это то, чего ты добиваешься?
Там список труб для группы меток. А как сопоставить метку из SubEntities (LabelGroupSubEntity не объект чертежа) конкретной трубе? Похоже только геометрически.
Этот список, возможно, поможет сильно не промахнуться с поиском трубы.

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
Скорее всего метод subEntity.GetTextComponentIds() возвращает, в том числе, и типы LabelStyleReferenceTextComponent.
Но в моем случае таких объектов нет.
Ну и этот тип не содержит дополнительных ссылок на источник (трубу).

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Тогда пока больше не знаю, что подсказать. А времени на исследования нет совсем :(
Могу только поделиться своим опытом. Когда-то давно у меня встала похожая задача. После исследования всех плюсов и минусов, я решил полностью отрисовывать с нуля данные в подпрофиле. Это позволило потом избежать очень многих проблем, и этой - в частности. Возможно, что в этом случае тоже будет проще просто отключить стандартную отрисовку и вывести только свои данные?

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 405
  • Карма: 77
  • Skype: vildar82
я решил полностью отрисовывать с нуля данные в подпрофиле.
Через overrule вида профиля или отрисовку примитивов в чертеже?
Overrule выглядит "нативно" для пользователя ), но без плагина не работает.
Отрисовка примитивов - надежно, но засоряется чертеж объектами.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Overrule, причём сразу как минимум три типа: Drawable, Transform и Osnap.
но без плагина не работает
Да, именно так.