Отрисовывает полиполилинию с данным стилем линии.
Visual Basic:
Sub Draw(hDC As Long, Line As PolyPolyLine, Scale As Double, LineColor As Long, LineWidth As Double)
hDC - контекст устройства.
Line - отображаемая полиполилиния.
Scale - масштаб отображения.
LineColor - цвет линии.
LineWidth - толщина линии.
Метод рисует средствами Windows, поэтому ему нужен контекст устройства. В макросе его дает вид карты: GetDrawHandle возвращает описатель, GetDCByDrawHandle - контекст по этому описателю, а по окончании работы описатель освобождается методом ReleaseDrawHandle.
Вершины полиполилинии задаются в точках контекста устройства, а не в координатах слоя.
Нарисованное появляется в окне карты поверх слоев и держится до ближайшего перестроения карты - после него рисунок пропадает.
Рисунок подчиняется стилю: одна и та же линия, нарисованная сплошным и штриховым стилями слоя, выходит разной, а параметр LineWidth утолщает ее. У стиля из символов толщина ничего не меняет.
Параметр Scale на результат не влияет: рисунок и штрихового, и символьного стиля от его значения не зависит.
Пустая полиполилиния ошибки не вызывает - метод просто ничего не рисует.
Пример рисует поверх карты ломаную стилем линии из библиотеки слоя. Рисунок держится до первого перестроения карты.
Visual Basic:
Sub LineStyleDef_Draw 'Берем активный слой карты и вид карты Set L = Zulu.ActiveMapDoc.Layers.Active Set V = Zulu.ActiveMapDoc.Views.Active 'Стиль, которым будем рисовать Set lsd = L.LineStyles.ItemById(4) 'Ломаная в точках окна карты Set pl = CreateObject("ZuluLib.PolyLine") pl.AddPoint 50, 50 pl.AddPoint 300, 150 Set ppl = CreateObject("ZuluLib.PolyPolyLine") ppl.AddPolyLine pl 'Описатель рисования и контекст устройства по нему h = V.GetDrawHandle hDC = V.GetDCByDrawHandle(h) lsd.Draw hDC, ppl, 1.0, RGB(255, 0, 0), 2 V.ReleaseDrawHandle h End SubPython:
import zulu def Macro_LineStyleDef_Draw(): # Берем активный слой карты и вид карты L = zulu.App.ActiveMapDoc.Layers.Active V = zulu.App.ActiveMapDoc.Views.Active # Стиль, которым будем рисовать lsd = L.LineStyles.ItemById(4) # Ломаная в точках окна карты pl = zulu.PolyLine() pl.AddPoint(50, 50) pl.AddPoint(300, 150) ppl = zulu.PolyPolyLine() ppl.AddPolyLine(pl) # Описатель рисования и контекст устройства по нему h = V.GetDrawHandle() hdc = V.GetDCByDrawHandle(h) lsd.Draw(hdc, ppl, 1.0, 255, 2) V.ReleaseDrawHandle(h)