PureBasic

ClipPath()

Синтаксис

ClipPath([Flags])

Описание


Отсекает последующий вывод Векторной графики за пределами замкнутых фигур текущего Векторного контура. Последующие операции рисования будут работать только с внутренними областями замкнутых фигур текущего Векторного контура. Зона отсечения будет объединена с любым отсечением, которое существовало ранее на данной поверхности вывода.

По умолчанию, после вызова этой функции, текущий Векторный контур будет сброшен. Это поведение можно изменить с помощью соответствующих флагов.

Параметры

Flags (дополн.) Может быть одним из следующих значений:
  #PB_Path_Default     : Без специальных опций (по умолчанию).
  #PB_Path_Preserve    : Не сбрасывать текущий Векторный контур после вызова этой функции.

Возвращаемое значение

Ничего.

Комментарии

Не существует функции "UnclipPath()": после применения ClipPath(), остаётся область отображающая вывод Векторной графики (зоны внутри замкнутых фигур), и она может быть только уменьшена, путем дальнейшего отсечения, и не может быть увеличена. Однако, текущая отображающая область может быть сохранена и восстановлена с помощью функций SaveVectorState() и RestoreVectorState() соответственно. Поэтому, чтобы использовать временное ограничение, сначала сохраните состояние свойств Векторной графики, а затем восстановите его, чтобы вернуться к исходному размеру отображающей области.

Обратите внимание, если используемый для отсечения Векторный контур имеет накладываемые друг на друга замкнутые фигуры, отсечение будет выполняется в нечётной / чётной последовательности. Нечётные слои замкнутых областей будут доступны для рисования, а чётные слои - не доступны. Работа этой функции выглядит следующим образом:

Пример

If OpenWindow(0, 0, 0, 400, 200, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    CanvasGadget(0, 0, 0, 400, 200)
    LoadFont(0, "Times New Roman", 20, #PB_Font_Bold)

    If StartVectorDrawing(CanvasVectorOutput(0))

        ; Построим отсекающий Векторный контур с вложенными эллипсами (каждый второй будет протравлен).
        For i = 10 To 150 Step 5
            AddPathEllipse(200, 100, 2*i, i)
        Next i
        ClipPath()

        ; Выведем текст, протравленный с помощью этого Векторного контура.
        VectorFont(FontID(0), 150)
        VectorSourceColor(RGBA(255, 0, 0, 255))

        MovePathCursor(50, 25)
        DrawVectorText("Text")

        StopVectorDrawing()
    EndIf

    Repeat
        Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
EndIf

См. также

Поддерживаемые OS

Все

<- BeginVectorLayer() - Оглавление VectorDrawing - ClosePath()->