首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

再學GDI+[48]: 路徑子圖形管理 - StartFigure、CloseFigure、CloseAllFigures 完整指南

     編輯:Delphi

前言

GDI+ 路徑由一或多個子圖形組成。StartFigure 開始新子圖形,CloseFigure 閉合當前子圖形,CloseAllFigures 一次閉合所有開啟的子圖形。本文透過三組折線示範三種方法的行為差異。

三大方法功能對照

方法作用影響範圍PathTypes 標記
StartFigure開始新子圖形,後續點屬於新子圖形後續 AddLine/AddCurve 等下一點標記 $00 (Start)
CloseFigure連接當前點到子圖形起點並標記閉合當前子圖形當前點加上 $80 (CloseSubpath)
CloseAllFigures遍歷所有未閉合子圖形並閉合所有開啟的子圖形各子圖形最後點加 $80

三折線測試範例

建立三個平移的三角形折線(各 3 點),CheckBox 控制閉合行為。

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
  path: TGPGraphicsPath;
  p: TGPPen;
  b: TGPBrush;
  pts1, pts2, pts3: array[0..2] of TGPPoint;
  i: Integer;
begin
  {三組平移的三角形頂點}
  pts1[0] := MakePoint(0, 30); pts1[1] := MakePoint(30, 0); pts1[2] := MakePoint(60, 30);
  for i := 0 to 2 do begin
    pts2[i].X := pts1[i].X + 80; pts2[i].Y := pts1[i].Y + 20;
    pts3[i].X := pts2[i].X + 80; pts3[i].Y := pts2[i].Y + 20;
  end;
  
  g := TGPGraphics.Create(Canvas.Handle);
  path := TGPGraphicsPath.Create;
  path.StartFigure; path.AddLines(PGPPoint(@pts1), 3);
  path.StartFigure; path.AddLines(PGPPoint(@pts2), 3);
  path.StartFigure; path.AddLines(PGPPoint(@pts3), 3);
  
  if CheckBox1.Checked then path.CloseFigure;      {閉合最後一個}
  if CheckBox2.Checked then path.CloseAllFigures;  {閉合所有}
  
  p := TGPPen.Create(aclRed, 2);
  b := TGPSolidBrush.Create(aclYellow);
  g.DrawPath(p, path);  {觀察邊框閉合情況}
  
  b.Free; p.Free; path.Free; g.Free;
end;

執行效果預覽

子圖形管理效果

行為矩陣分析

設定子圖形1子圖形2子圖形3視覺結果
無勾選開放開放開放三條開放折線
CloseFigure開放開放閉合僅最後一個三角形閉合
CloseAllFigures閉合閉合閉合三個三角形全閉合
兩者皆勾選閉合閉合閉合同上(CloseFigure 重複無效)

進階應用場景

  • 複雜圖形構建:字形輪廓(外框+內孔各自為子圖形)
  • 路徑編輯器:插入/刪除子圖形、合併/分割
  • 動畫路徑:每個子圖形代表一個動畫片段
  • 填充規則:子圖形方向決定 Winding 模式下的孔洞效果

表單定義檔

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 139
  ClientWidth = 227
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesktopCenter
  OnCreate = FormCreate
  OnPaint = FormPaint
  PixelsPerInch = 96
  TextHeight = 13
  object CheckBox1: TCheckBox ... {CloseFigure / CloseAllFigures}
end
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved