Сообщество программистов Autodesk в СНГ

ADN Club => Civil 3D API => Тема начата: Вильдар от 06-04-2018, 20:48:15

Название: От группы меток областей данных к областям данных.
Отправлено: Вильдар от 06-04-2018, 20:48:15
Привет,
Разбираюсь с видами профилей сетей.
Например, задача поправить значение меток в области данных, см. картинку.
Получаю метки областей данных так:
Код - 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. Как получить источник данных, в данном случае трубу.

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

(https://s18.postimg.org/n2w1ahfmt/image.png) (https://postimg.org/image/n2w1ahfmt/)
Название: Re: От группы меток областей данных к областям данных.
Отправлено: Дмитрий Загорулькин от 06-04-2018, 21:13:05
Задачка не из простых. Бегло посмотрел - вроде как в API нет инструментов для этого. Но мог что-то упустить.
Основная загвоздка в том, что я не нашёл никакой связи между объектами ProfileBandLabelGroup и ProfileViewBandItem. Первый объект - это графика, второй - настройка этой графики. Но ни у одного из них нет какой-то ссылки на другой.
2. Как получить источник данных, в данном случае трубу.
А если через MgdDbg посмотреть, там есть ссылки меток на трубы/сеть/вид профиля?
Название: Re: От группы меток областей данных к областям данных.
Отправлено: Вильдар от 06-04-2018, 22:05:53
По 1 вопросу, небольшая зацепка есть в имени текстового компонента
Код - C# [Выбрать]
  1. LabelStyleTextComponent.General.Name
В нашем случае эти имена сочетаются с названиями областей данных.

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

По MgdDbg, в референсах сидят трубы, может это как то использовать:
(https://s31.postimg.org/lgancw3ef/Mgd_Dbg.png) (https://postimg.org/image/lgancw3ef/)

Попробую от координат метки плясать. Буду искать пикет на трассе и трубу в этом месте.
Название: Re: От группы меток областей данных к областям данных.
Отправлено: Дмитрий Загорулькин от 06-04-2018, 22:30:13
У subEntity нашёл интересный метод: http://docs.autodesk.com/CIV3D/2016/ENU/API_Reference_Guide/html/dac6ae0d-40c5-66f7-7888-624a5f14fa3a.htm
Может он как раз на трубу укажет?
Название: Re: От группы меток областей данных к областям данных.
Отправлено: Александр Ривилис от 06-04-2018, 23:07:53
По MgdDbg, в референсах сидят трубы, может это как то использовать:
Ты можешь вытянуть трубы таким образом. Это то, чего ты добиваешься?
Название: Re: От группы меток областей данных к областям данных.
Отправлено: Вильдар от 09-04-2018, 14:01:07
Может он как раз на трубу укажет?
При вызове (передаю ObjectId самого TextComponent)
Код - C# [Выбрать]
  1. subEntity.GetReferenceTextTarget(referenceTextComponentId)
выскакивает исключение System.ArgumentException:
Цитировать
referenceTextComponentId should be the ObjectId of LabelStyleReferenceTextComponent.
А откуда взять referenceTextComponent? Не понятно.

Ты можешь вытянуть трубы таким образом. Это то, чего ты добиваешься?
Там список труб для группы меток. А как сопоставить метку из SubEntities (LabelGroupSubEntity не объект чертежа) конкретной трубе? Похоже только геометрически.
Этот список, возможно, поможет сильно не промахнуться с поиском трубы.
Название: Re: От группы меток областей данных к областям данных.
Отправлено: Вильдар от 09-04-2018, 14:11:56
Скорее всего метод subEntity.GetTextComponentIds() возвращает, в том числе, и типы LabelStyleReferenceTextComponent.
Но в моем случае таких объектов нет.
Ну и этот тип не содержит дополнительных ссылок на источник (трубу).
Название: Re: От группы меток областей данных к областям данных.
Отправлено: Дмитрий Загорулькин от 09-04-2018, 14:12:36
Тогда пока больше не знаю, что подсказать. А времени на исследования нет совсем :(
Могу только поделиться своим опытом. Когда-то давно у меня встала похожая задача. После исследования всех плюсов и минусов, я решил полностью отрисовывать с нуля данные в подпрофиле. Это позволило потом избежать очень многих проблем, и этой - в частности. Возможно, что в этом случае тоже будет проще просто отключить стандартную отрисовку и вывести только свои данные?
Название: Re: От группы меток областей данных к областям данных.
Отправлено: Вильдар от 09-04-2018, 15:01:26
я решил полностью отрисовывать с нуля данные в подпрофиле.
Через overrule вида профиля или отрисовку примитивов в чертеже?
Overrule выглядит "нативно" для пользователя ), но без плагина не работает.
Отрисовка примитивов - надежно, но засоряется чертеж объектами.
Название: Re: От группы меток областей данных к областям данных.
Отправлено: Дмитрий Загорулькин от 09-04-2018, 15:34:00
Overrule, причём сразу как минимум три типа: Drawable, Transform и Osnap.
но без плагина не работает
Да, именно так.