SplitBySymbol method (Layer)

Разбивает ближайшую к символу линию в точке этого символа.

Применяется к:

Layer

Синтаксис:

Visual Basic:

Function SplitBySymbol(SymbolID As Long, R As Double, flags As Long) As Long

SymbolID - ID типового символа.

R - радиус поиска линии вокруг символа.

flags - на работу метода не влияет, передается 0.

Описание:

Метод находит ближайшую к символу линию в пределах радиуса R и разбивает её на две в точке символа. Если символ стоит в стороне от линии, линия проводится через символ. Исходная линия сохраняет свой ID и часть до символа, вторая часть становится новой линией того же типа и режима. Обе линии соединяются с символом, как при обычной записи сети.

Метод возвращает ID новой линии или -1, если разбить линию не удалось: в радиусе нет линии, символ уже стоит в конце линии, SymbolID указывает не на типовой символ или объекта с таким ID нет.

Разбить участок, добавив новый символ, позволяет метод InsertSymbol.

Пример:

Visual Basic:

Sub Layer_SplitBySymbol
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Находим первую линию и тип первого символа слоя
LineID = -1
TypeID = -1
Set En = L.EnumElements
En.MoveFirst
Do While Not En.IsEOF
  If En.GraphType = 0 And LineID = -1 Then
    LineID = En.ElemID
    Set P = En.GetXY
  ElseIf En.GraphType = 2 And TypeID = -1 Then
    TypeID = En.TypeID
    ModeNum = En.ModeId
  End If
  En.MoveNext
Loop
'Ставим символ в середину линии и разбиваем им линию
SymID = L.AddSymbol(P.X, P.Y, TypeID, ModeNum)
NewID = L.SplitBySymbol(SymID, 1, 0)
MsgBox "Символ " & SymID & " разбил линию " & LineID & vbCrLf & _
       "ID новой линии: " & NewID
End Sub

Python:

import zulu

def Macro_Layer_SplitBySymbol():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    # Находим первую линию и тип первого символа слоя
    line_id = type_id = mode_num = -1
    P = None
    En = L.EnumElements()
    En.MoveFirst()
    while not En.IsEOF():
        if En.GraphType == 0 and line_id == -1:
            line_id = En.ElemID
            P = En.GetXY()
        elif En.GraphType == 2 and type_id == -1:
            type_id, mode_num = En.TypeID, En.ModeId
        En.MoveNext()
    # Ставим символ в середину линии и разбиваем им линию
    sym_id = L.AddSymbol(P.X, P.Y, type_id, mode_num)
    new_id = L.SplitBySymbol(sym_id, 1, 0)
    print("Символ", sym_id, "разбил линию", line_id)
    print("ID новой линии:", new_id)