Разбивает ближайшую к символу линию в точке этого символа.
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 SubPython:
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)