Beispiel 3 — Union: Rechteck und Kreis verschmelzen

Erstellt: 2026-05-27 · Aktualisiert: 2026-05-27

Advanced Snippet Editor

Zwei sich überlappende Formen werden mit Union zu einer einzigen neuen Form zusammengeschmolzen. Zeigt das Grundprinzip aller Boolean-Operationen: Selektieren → Operation → Ergebnis abgreifen.


Ergebnis


Code

/* PARAMS */
float left  = 80f;
float top   = 100f;
float size  = 150f;
int   rgb   = System.Drawing.ColorTranslator.ToOle(
                  System.Drawing.Color.FromArgb(155, 89, 182));
/* END PARAMS */

// Rechteck und Kreis erstellen (überlappend)
var oRect   = ppptools.AddRect(left, top, size, size);
var oCircle = ppptools.AddOval(left + size * 0.6f, top, size, size);

// Union — beide Formen zu einer verschmelzen
oRect.Select(MsoTriState.msoTrue);
oCircle.Select(MsoTriState.msoFalse);
ppptools.Union();

// Ergebnis-Form formatieren
foreach (dynamic sh in ppptools.GetSelectedRange())
{
    sh.Name = "UnionShape";
    sh.Fill.ForeColor.RGB = rgb;
    sh.Fill.Transparency  = 0f;
    sh.Line.Visible       = MsoTriState.msoFalse;
}

Schritt-für-Schritt-Erklärung

1. Zwei überlappende Formen erstellen

var oRect   = ppptools.AddRect(left, top, size, size);
var oCircle = ppptools.AddOval(left + size * 0.6f, top, size, size);

Der Kreis beginnt bei left + size * 0.6f, also 60 % der Grösse rechts vom Rechteck-Start. Damit überlappt er zu 40 % mit dem Rechteck — genug für eine sichtbare Verschmelzung.

2. Selektion aufbauen — der Kern aller Boolean-Operationen

oRect.Select(MsoTriState.msoTrue);    // Erste Form: ersetzt bestehende Selektion
oCircle.Select(MsoTriState.msoFalse); // Zweite Form: wird zur Selektion hinzugefügt
Parameter Bedeutung
msoTrue Replace — ersetzt die aktuelle Selektion
msoFalse Add — fügt zur bestehenden Selektion hinzu

Diese Selektions-Methode ist in Roslyn-Skripten die einzige zuverlässige Art, mehrere Formen für eine Boolean-Op zu markieren. List<Shape> funktioniert wegen des Namespace-Konflikts nicht.

3. Boolean-Operation ausführen

ppptools.Union();

ppptools.Union() entspricht dem PowerPoint-Befehl „Formen verbinden → Vereinigung". Die selektierten Formen werden zu einer einzigen Form zusammengeschmolzen. Die ursprünglichen Formen werden dabei gelöscht.

ppptools-Methode Ergebnis
ppptools.Union() Alle selektierten Formen verschmelzen zu einer
ppptools.Intersect() Nur der Überschneidungsbereich bleibt
ppptools.Combine() Vereinigung, aber Überschneidung wird ausgestanzt (Loch)
ppptools.Subtract() Zweite Form wird von erster abgezogen

4. Ergebnis abgreifen und formatieren

foreach (dynamic sh in ppptools.GetSelectedRange())
{
    sh.Name = "UnionShape";
    sh.Fill.ForeColor.RGB = rgb;
    sh.Fill.Transparency  = 0f;
    sh.Line.Visible       = MsoTriState.msoFalse;
}

Nach ppptools.Union() ist die neue Ergebnis-Form automatisch selektiert. ppptools.GetSelectedRange() gibt das ShapeRange-Objekt zurück. Da Union immer genau eine Form erzeugt, liefert das foreach nur einen Durchlauf — es ist aber robuster als der direkte Zugriff ppptools.GetSelected() für Code, der auch bei Intersect mit mehreren Teilen korrekt wäre.


Besonderheiten dieses Beispiels

  • Selektions-ReihenfolgemsoTrue für die erste Form, dann msoFalse für alle weiteren. Falsche Reihenfolge führt zu falschen Ergebnissen.
  • Originale werden gelöscht — nach ppptools.Union() existieren oRect und oCircle nicht mehr. Nicht mehr verwenden!
  • foreach statt [1] — bei Union ist das Ergebnis immer eine Form; foreach ist trotzdem idiomatischer, weil der Code auch bei Intersect mit mehreren Teilen funktionieren würde.
  • int rgb — hier wird rgb direkt als int (OLE-Integer) gespeichert, da er in der foreach-Schleife mehrfach verwendet wird. Kürzer als jedes Mal ToOle() aufzurufen.

Zurück: Beispiel 2 — Kreis · Weiter: Beispiel 4 — Loch (Combine)