| 類別/方法 | 繼承 | 支援運算 | 元素數量 | 適用場景 |
|---|---|---|---|---|
GeometryGroup | `Geometry` | 單純聯集 (Union) | 任意多個 (`Children` 集合) | 簡單疊加、填充規則控制 |
CombinedGeometry | `Geometry` | Union、Intersect、Xor、Exclude | 固定兩個 (`Geometry1`、`Geometry2`) | 需要布爾運算的雙圖形合併 |
Geometry.Combine() | 靜態方法 | Union、Intersect、Xor、Exclude | 固定兩個,可附加變換 | 需先變換再合併、或程式碼動態合併 |
protected override void OnRender(DrawingContext dc)
{
base.OnRender(dc);
EllipseGeometry ellipse = new EllipseGeometry(new Point(50, 50), 50, 20);
RectangleGeometry rect = new RectangleGeometry(new Rect(50, 50, 50, 20), 5, 5);
GeometryGroup group = new GeometryGroup();
group.FillRule = FillRule.EvenOdd; // 或 Nonzero
group.Children.Add(ellipse);
group.Children.Add(rect);
dc.DrawGeometry(Brushes.LightBlue, new Pen(Brushes.Green, 2), group);
}

FillRule.EvenOdd:射線穿越奇數段填充、偶數段不填 → 重疊區中空。
FillRule.Nonzero:考慮方向性,重疊區通常實心。
CombinedGeometry combin = new CombinedGeometry(
GeometryCombineMode.Xor, ellipse, rect);
// 模式可換為 Union, Intersect, Exclude
dc.DrawGeometry(Brushes.LightBlue, new Pen(Brushes.Green, 2), combin);

Exclude:$A - B$ (A 減去 B)Intersect:$A \cap B$ (交集)Union:$A \cup B$ (聯集)Xor:$(A-B) \cup (B-A)$ (對稱差集,不重疊區域)PathGeometry combin = Geometry.Combine(
ellipse, rect, GeometryCombineMode.Xor, null); // null 為無額外變換
dc.DrawGeometry(Brushes.LightBlue, new Pen(Brushes.Green, 2), combin);
優勢:第 4 參數接受 `Transform`,可在合併前對任一幾何套用旋轉、縮放、平移,靈活性最高。
GeometryGroup (效能最好)。CombinedGeometry (宣告式,適合 XAML)。Geometry.Combine()。WPF 提供完整的幾何布爾運算體系,從簡單的 `GeometryGroup` 到功能全面的 `CombinedGeometry`/`Geometry.Combine()`,滿足從靜態 XAML 宣告到動態程式碼計算的各種需求。善用填充規則與布爾運算,能以極簡代碼構建複雜剪裁路徑、遮罩、複合圖形,是進階向量繪圖的核心技巧。