Главная › Форум › Средства разработки Топоматик Robur › Точки привязки выноски DwgLeader()
- В этой теме 5 ответов, 2 участника, последнее обновление 7 месяцев, 3 недели назад сделано Пивен Евгений.
-
АвторСообщения
-
26.03.2024 в 13:14 #6689Пивен ЕвгенийУчастник
Здравствуйте.
В Topomatic.Dwg.Entities есть класс DwgLeader(), создание подписи на выноске.
У данного класса есть свойство DwgLeader.Position, но это точка привязки текста на выноске.
Как определить точку привязки начала выноски, стрелки?@cmd(«dgt_»)
def act_dgt_(self, args):
#Определение координат точек привязки выноски
cadview = self.CadView
if (cadview == None):
return
actSfcLayer = SurfaceLayer.GetSurfaceLayer(cadview)
if (actSfcLayer == None):
Topomatic.Controls.Dialogs.MessageDlg.Show(‘Активная ЦММ не найдена’, System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Warning)
print ‘Активная ЦММ не найдена’
surface = actSfcLayer.Surface
cadview.SelectionSet.Clear()
filter = lambda obj: isinstance(obj, DwgLeader)
eleader = cadview.SelectionSet.PickOneObjectAtScreen(filter, ‘Выберите выноску’)
if (eleader == None):
return
pos = eleader.Position # Точка привязки текста.
#Как определить точку привязки начала выноски, стрелки?
print posВложения:
Вы должны войти для просмотра вложений.28.03.2024 в 13:44 #6698Support EngineerУчастникЗдравствуйте!
Выноска DwgLeader хранит в себе коллекцию вершин (стрелок). Благодаря этому одной выноской можно указывать на разные объекты плана.
Вам следует указать положение текста с помощью свойства Position, как вы описали выше, а после добавить нужные вершины (стрелки) выноски с помощью метода DwgLeader.Add(Vector2D pt).
Важно! Вершина задаётся в относительных координатах. То есть положение вершины располагается относительно координат Position.- Ответ изменён 8 месяцев назад пользователем Support Engineer.
01.04.2024 в 14:04 #6723Пивен ЕвгенийУчастникЗдравствуйте.
Метод DwgLeader.Add(Vector2D pt) создаёт выноску, а мне необходимо вернуть координаты вершины (стрелки), расположенной на линейном объекте, для дальнейшего поиска этой выноски вдоль линейного объекта с помощью метода
res, station, offset = Topomatic.Cad.Foundation.PolylineExtentions.PosToStaOffset(polyline, pos).
Т.е. мне необходимо получить координату (Vector2D), в месте где выноска и линейный объект соединяются. Это мне необходимо для поиска выносок вдоль линии и обновления их содержимого DwgLeader.Content. Например, есть линейный объект линия электропередач, у неё есть подпись характеристик 10кВ/ 3пр, я меняю характеристики линии электропередач в семантике на 35кВ/ 6пр, затем нажимаю на кнопку обновить подпись и у меня все подписи вдоль линейного объекта обновляются.
Я написал скрипт который работает для класса DwgMText(), в данный момент у меня создаются и в последствии обновляются, мульти текста DwgMText .Content, теперь осталось «прикрутить» выноску, а как найти координаты её стрелки, для дальнейшего поиска я не знаю.Вложения:
Вы должны войти для просмотра вложений.01.04.2024 в 14:10 #6725Пивен ЕвгенийУчастникЗдравствуйте.
Метод DwgLeader.Add(Vector2D pt) создаёт выноску, а мне необходимо вернуть координаты вершины (стрелки), расположенной на линейном объекте, для дальнейшего поиска этой выноски вдоль линейного объекта с помощью метода
res, station, offset = Topomatic.Cad.Foundation.PolylineExtentions.PosToStaOffset(polyline, pos).
Т.е. мне необходимо получить координату (Vector2D), в месте где выноска и линейный объект соединяются. Это мне необходимо для поиска выносок вдоль линии и обновления их содержимого DwgLeader.Content. Например, есть линейный объект линия электропередач, у неё есть подпись характеристик 10кВ/ 3пр, я меняю характеристики линии электропередач в семантике на 35кВ/ 6пр, затем нажимаю на кнопку обновить подпись и у меня все подписи вдоль линейного объекта обновляются.
Я написал скрипт который работает для класса DwgMText(), в данный момент у меня создаются и в последствии обновляются, мульти текста DwgMText .Content, теперь осталось «прикрутить» выноску, а как найти координаты её стрелки, для дальнейшего поиска я не знаю.02.04.2024 в 19:01 #6743Support EngineerУчастникКак было описано выше, выноска содержит коллекцию вершин в относительных координатах. Вершину можно получить по индексу
DwgLeader leader = ...; // Выноска Polyline3D polyline = ...; // Полилиния var vector = leader[0]; // получение вершины по индексу var pos = leader.Position + vector; // координаты выноски в глобальных координатах double station, offset if (Topomatic.Cad.Foundation.PolylineExtentions.PosToStaOffset( polyline, pos, out station, out offset) && offset.Equals(0.0)) { // Значит вершина выноски лежит на полилинии }
или пройти по коллекции вершин с помощью цикла for или foreach
DwgLeader leader = ...; // Выноска Polyline3D polyline = ...; // Полилиния foreach (var vector in leader) { // vector - вершина выноски в относительных координатах var pos = leader.Position + vector; // координаты выноски в глобальных координатах double station, offset; if (Topomatic.Cad.Foundation.PolylineExtentions.PosToStaOffset( polyline, pos, out station, out offset) && offset.Equals(0.0)) { // Значит вершина выноски лежит на полилинии } }
03.04.2024 в 10:17 #6745Пивен ЕвгенийУчастникСпасибо.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.