Einzelnen Beitrag anzeigen

Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#1

[FMX] FillPolygon+DrawPolygon und Transparenzen

  Alt 4. Apr 2018, 15:30
Huhu DP,

ich spiele aktuell mit meinem frisch erworbenem Delphi mit FMX herum. Ich versuche gerade unsere internen Komponenten zu portieren, und will sie dabei natürlich gleich auf die neuen Möglichkeiten aufbohren.

Derzeit versuche ich unser Symbol für Ventile (einfach zwei Dreiecke die sich an einer Spitze berühren) umzusetzen - abgeleitet von TShape. Dabei jetzt folgendes Problem:
Die Eigenschaft "Opacity" scheint so erstmal nichts zu machen. Man muss scheinbar selbst in seiner Paint-Methode dafür sorgen, dass der Wert beachtet wird und ihn an seine Canvas.Draw*-Aufrufe weitergeben. So weit kein Problem.
Es wird aber eines, wenn man ein Polygon (in diesem Fall sogar eines, dass sich selbst durchdringt) mit Rand und Füllung haben will - insbesondere dann, wenn der Rand dicker als 1px ist und man Transparenz sauber unterstützen möchte.

Normal ist ja: Erst den Fill zeichnen, und dann die Kontur "drüberjauchen". Das geht auch, solange keine Transparenz dabei ist. Mit dieser jedoch sieht man im Ergebnis, dass der Fill bis zur halben Dicke des Strokes reicht, da dieser ja nun auch transparent ist. Siehe Bild im Anhang. (Was dagegen sauber klappt ist der Kreuzungsbereich des Strokes. Sehr cool schon mal!)

Das Polygon ist definiert als:
Delphi-Quellcode:
p: TPolygon;
p[0] := PointF(0, 0);
p[1] := PointF(Width, 0);
p[2] := PointF(0, Height);
p[3] := PointF(Width, Height);

Ich hätte aber gerne, dass der Fill eben gerade nur bis zum inneren Rand des Strokes reicht! Skalieren des Polygons für den Fill fällt leider mit Selbstdurchdringung als Option flach. Gibt es dafür eine schöne Lösung?
Miniaturansicht angehängter Grafiken
ventil.png  
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat