ExcludeSymbol method (Layer)

Из слоя удаляется символьный объект с указанным ElemID, если он соединен с двумя участками. Участки объединяются в один объект.

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

Layer

Синтаксис:

Visual Basic:

Function ExcludeSymbol(ElemID As Long) As Long

ElemID - ID удаляемого символьного объекта.

Описание:

Удаление символа происходит, если он связан с двумя участками. При этом участки объединяются в один участок, тем самым сохраняя связность сети. Объединенный участок получает ID одного из исходных участков. Если узел не может быть удален, метод возвращает -1.

При успешном удалении метод возвращает 0: символ и один из участков исчезают из слоя, а оставшийся участок продолжается до конца удалённого.

-1 метод возвращает, если к символу подключён один участок или больше двух, если ElemID — ключ линии или ключ, которого в слое нет, а также для простого символа между простыми линиями: метод работает с типовыми объектами сети, связанными между собой.

Пример:

Visual Basic:

Sub Layer_ExcludeSymbol
'Берем активный слой карты
Set L = Zulu.ActiveMapDoc.Layers.Active
'Тип и режим символа и участка берем у первых таких объектов слоя
NodeType = -1
LineType = -1
Set En = L.EnumElements
En.MoveFirst
Do While Not En.IsEOF
  If En.GraphType = 2 And NodeType = -1 Then
    NodeType = En.TypeID
    NodeMode = En.ModeId
  End If
  If En.GraphType = 0 And LineType = -1 Then
    LineType = En.TypeID
    LineMode = En.ModeId
  End If
  En.MoveNext
Loop
If NodeType = -1 Or LineType = -1 Then
  MsgBox "В слое нет типовых символов или линий"
  Exit Sub
End If
'Правее слоя строим три узла и два участка между ними
Set R = L.GetBoundsRectangle
D = (R.Xmax - R.Xmin) / 10
X = R.Xmax + D
Y = R.Ymin
L.AddSymbol X, Y, NodeType, NodeMode
Middle = L.AddSymbol(X + D, Y, NodeType, NodeMode)
L.AddSymbol X + 2 * D, Y, NodeType, NodeMode
Set St = CreateObject("ZuluLib.ElemStyle")
Set PL = CreateObject("ZuluLib.PolyLine")
PL.AddPoint X, Y
PL.AddPoint X + D, Y
Line1 = L.AddPolyLine(PL, St, LineType, LineMode)
Set PL = CreateObject("ZuluLib.PolyLine")
PL.AddPoint X + D, Y
PL.AddPoint X + 2 * D, Y
Line2 = L.AddPolyLine(PL, St, LineType, LineMode)
'Исключаем средний узел: участки сливаются в один
MsgBox "Участки " & Line1 & " и " & Line2 & vbCrLf & _
       "ExcludeSymbol(" & Middle & ") = " & L.ExcludeSymbol(Middle)
End Sub

Python:

import zulu

def Macro_Layer_ExcludeSymbol():
    # Берем активный слой карты
    L = zulu.App.ActiveMapDoc.Layers.Active
    # Тип и режим символа и участка берем у первых таких объектов слоя
    node = line = None
    En = L.EnumElements()
    En.MoveFirst()
    while not En.IsEOF():
        if En.GraphType == 2 and node is None:
            node = (En.TypeID, En.ModeId)
        if En.GraphType == 0 and line is None:
            line = (En.TypeID, En.ModeId)
        En.MoveNext()
    if node is None or line is None:
        print("В слое нет типовых символов или линий")
        return
    # Правее слоя строим три узла и два участка между ними
    R = L.GetBoundsRectangle()
    d = (R.Xmax - R.Xmin) / 10
    x = R.Xmax + d
    y = R.Ymin
    L.AddSymbol(x, y, node[0], node[1])
    middle = L.AddSymbol(x + d, y, node[0], node[1])
    L.AddSymbol(x + 2 * d, y, node[0], node[1])
    lines = []
    for x0 in (x, x + d):
        PL = zulu.PolyLine()
        PL.AddPoint(x0, y)
        PL.AddPoint(x0 + d, y)
        lines.append(L.AddPolyLine(PL, zulu.ElemStyle(), line[0], line[1]))
    # Исключаем средний узел: участки сливаются в один
    print("Участки", lines[0], "и", lines[1])
    print("ExcludeSymbol(", middle, ") =", L.ExcludeSymbol(middle))