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

再學GDI+[52]: 路徑頂點反轉與清空 - Reverse、Reset 方法實戰

     編輯:Delphi

前言

TGPGraphicsPath 提供兩個結構操作方法:Reverse 反轉頂點順序(影響填充模式與線條方向),Reset 清空所有頂點並重置填充模式。本文透過貝塞爾曲線路徑示範兩者效果。

方法功能對照

方法作用影響範圍典型用途
Reverse反轉 PathPoints 陣列順序,PathTypes 同步調整頂點序列、繞數方向、線條方向修正字形孔洞方向、反轉動畫路徑
Reset清空 PathPoints、PathTypes,FillMode 重置為 Alternate整個路徑結構路徑重用、動態重建、記憶體釋放前清理

CheckBox 互動控制範例

  • CheckBox1:啟用 Reverse(頂點編號順序反轉)
  • CheckBox2:啟用 Reset(路徑清空,無繪製內容)
  • 繪製頂點編號標籤輔助觀察順序變化

核心實作

procedure TForm1.FormPaint(Sender: TObject);
var
  g: TGPGraphics;
  p: TGPPen;
  path: TGPGraphicsPath;
  PathPts: array of TGPPoint;
  i: Integer;
begin
  g := TGPGraphics.Create(Canvas.Handle);
  p := TGPPen.Create(aclRed, 2);
  path := TGPGraphicsPath.Create;
  path.AddBeziers(PGPPoint(@pts), Length(pts));  {預設 7 點貝塞爾}
  
  if CheckBox1.Checked then path.Reverse;
  if CheckBox2.Checked then path.Reset;
  
  {顯示頂點編號}
  SetLength(PathPts, path.GetPointCount);
  path.GetPathPoints(PGPPoint(PathPts), Length(PathPts));
  Canvas.Pen.Color := clGray;
  for i := Low(PathPts) to High(PathPts) do
    Canvas.TextOut(PathPts[i].X, PathPts[i].Y, IntToStr(i+1));
  
  g.DrawPath(p, path);
  path.Free; p.Free; g.Free;
end;

執行效果預覽

Reverse/Reset 效果

Reverse 進階影響分析

  • 填充模式:Winding 模式下,Reverse 會翻轉繞數正負,改變填充結果
  • 線條方向:DrawPath 繪製虛線、箭頭線帽時方向反轉
  • 文字路徑:AddString 產生的路徑 Reverse 後會鏡像翻轉
  • 資料結構:PathTypes 中的 Start/Close 標記會自動調整到新位置

表單定義檔

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 156
  ClientWidth = 232
  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 ... {Reverse / Reset 兩選項}
end
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved