ADN Club > Civil 3D API

Координаты текстового компонента метки области вида профиля

(1/2) > >>

Алексей Терно:
Всем привет!
Можно ли как-то получить координаты меток горизонтальной геометрии из областей данных вида профиля?
Сами метки и их текстовые компоненты я получаю вот так:

--- Код - C# [Выбрать] ---[CommandMethod("_test2")]public static void test2(){    Document doc = Application.DocumentManager.MdiActiveDocument;    Database db = doc.Database;    Editor ed = doc.Editor;    AeccApp.CivilDocument civilDoc = AeccApp.CivilApplication.ActiveDocument;     using (Transaction trans = db.TransactionManager.StartTransaction())    {        AeccDb.ProfileView pv = (AeccDb.ProfileView)trans.GetObject(ed.GetEntity("\npv:").ObjectId, OpenMode.ForRead);         RXClass rx = (RXClass)SystemObjects.ClassDictionary["AeccDbHorizontalGeometryBandLabeling"];        ObjectIdCollection labelGroupIDs = AeccDb.ProfileBandLabelGroup.GetAvailableLabelGroupIds(rx, pv.Id, false);         foreach (ObjectId labelGroupID in labelGroupIDs)        {            AeccDb.ProfileBandLabelGroup labelGroup = (AeccDb.ProfileBandLabelGroup)trans.GetObject(labelGroupID, OpenMode.ForWrite);            IList<AeccDb.LabelGroupSubEntity> labels = labelGroup.SubEntities;             foreach (AeccDb.LabelGroupSubEntity label in labels)            {                Point3d segmentLabelPosition = label.LabelLocation - label.DraggedOffset;                 ObjectIdCollection componentIDs = label.GetTextComponentIds();                 foreach (ObjectId componentID in componentIDs)                {                    AeccDb.Styles.LabelStyleTextComponent component = (AeccDb.Styles.LabelStyleTextComponent)trans.GetObject(componentID, OpenMode.ForRead);                 }            }        }         trans.Commit();    }} 
Точка segmentLabelPosition - это точка центра всей метки. Фактически, это середина сегмента трассы в области данных, для которого показывается метка. Так же я могу получить все текстовые компоненты метки, но не могу определить координаты положения этих компонентов. Есть ли какие-нибудь идеи, как получить координаты положения текстового компонента?

Александр Ривилис:
А если воспользоваться MGDDBG для исследования этого объекта, и всех связанных с ним объектов? В документации Civil 3D API я не нашел ничего подходящего.

Алексей Терно:
К сожалению, с помощью этих утилит ничего полезного я не нашел. Пока у меня есть единственный способ - отслеживать, к какому компоненту прикреплен текст, определять границы этих компонентов, их точки привязки, и так пошагово вычислять координаты.

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

--- Цитата: Алексей Терно от 09-05-2021, 00:01:12 ---Есть ли какие-нибудь идеи, как получить координаты положения текстового компонента?
--- Конец цитаты ---
Насколько я помню, ни координаты, ни содержимое извлечь нельзя напрямую с помощью Civil 3D API. Я, помнится, взрывал метку, чтобы получить тексты из неё.

Алексей Терно:
Содержимое метки можно получить с помощью LabelStyleTextComponent.Text.Contents.Value, правда в том же виде, что и в редакторе меток:


Но я понял, как решается моя задача! :)
Координаты метки мне нужны были для определения пикета вдоль трассы.
Метки области данных горизонтальной геометрии привязываются к положению элементов трассы - кривая, прямая, переходная кривая. И для корневого компонента можно выбрать привязку к началу элемента трассы, к его концу или к середине. С помощью свойства LabelStyleTextComponent.General.AnchorComponent.Value я смогу определить корневой компонент, а с помощью свойства LabelStyleTextComponent.General.AnchorLocation.Value могу определить точку привязки - начала, конец или середина элемента трассы. Вот по сути и искомый пикет :) Единственный момент - это поиск "родительского" компонента через стиль метки, но это легко делается с помощью функции LabelStyle.GetComponents(LabelStyleComponentType type).

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии