Draw method (LineStyleDef)

Отрисовывает полиполилинию с данным стилем линии.

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

LineStyleDef

Синтаксис:

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 Sub

Python:

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)