Точки привязки выноски DwgLeader()

Главная Форум Средства разработки Топоматик Robur Точки привязки выноски DwgLeader()

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Сообщения
  • #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

    Вложения:
    Вы должны войти для просмотра вложений.
    #6698
    Support Engineer
    Участник

    Здравствуйте!
    Выноска DwgLeader хранит в себе коллекцию вершин (стрелок). Благодаря этому одной выноской можно указывать на разные объекты плана.
    Вам следует указать положение текста с помощью свойства Position, как вы описали выше, а после добавить нужные вершины (стрелки) выноски с помощью метода DwgLeader.Add(Vector2D pt).
    Важно! Вершина задаётся в относительных координатах. То есть положение вершины располагается относительно координат Position.

    • Ответ изменён 1 месяц назад пользователем Support Engineer.
    #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, теперь осталось «прикрутить» выноску, а как найти координаты её стрелки, для дальнейшего поиска я не знаю.

    Вложения:
    Вы должны войти для просмотра вложений.
    #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, теперь осталось «прикрутить» выноску, а как найти координаты её стрелки, для дальнейшего поиска я не знаю.

    #6743
    Support 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))
        {
            // Значит вершина выноски лежит на полилинии
        }
    }
    
    #6745
    Пивен Евгений
    Участник

    Спасибо.

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Для ответа в этой теме необходимо авторизоваться.