Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#2

Re: Hülle einer kalligrafischen Beziér-Kurve ermitteln

  Alt 21. Jul 2006, 12:27
Ich würde es so anpacken:

Du erzeugst ein Canvas und zeichnest mit den Windows API Funktionen BeginPath(), EndPath() alle Zeichenausgaben auf. Du zeichnest also an deiner Spline mit FillEllipse() deine kalligraphische Figur. Mit ExtCreatePen() kannst du Stifte dafür erzeugen die beliebige Regionen -> hRgn als Grundlage ihrer Form besitzen. Eine solche Region kannst du aber auch aus einem Path erzeugen -> PathToRegion(), also alles was zwischen BeginPath() und EndPath() als Path gezeichnet wurde. So das Entscheidende ist es das du einen solchen Path in eine geschlossene Figur umwandeln kanst -> CloseFigure(), also die Hülle ermitteln. Den Path selber kannst du als Vektor betrachten und dementsprechend auch skalieren -> WiddenPath().

Wenn du diese Region -> PathToRegion() hast dann ist das eine Hülle die du nun direkt in deinem Metafile Canvas mit FillRgn() benutzen kannst. Der Brush der dafür benutzt wird kann wiederum ein Muster enthalten.

Edit:

wo ich's jetzt lese sehe ich das es wohl ein bischen verworren ist

Also: Ziel ist es erstmal in einem temporären Canvas deine Figur zu zeichnen. Das dauert ja seine Zeit und produziert sehr große Datenmengen, da ja an jedem Slinepunkt zb. FillRect(), FillElipse() oä. aufgerufen wird. Vor dieser Zeichenoperation wird BeginPath() aufgerufen und nach dieser Zeichnung EndPath(). Das GDI hat nun alle deine Operationen in einem "Path" aufgezeichnet, sowas ähnliches wie in den Metafiles.
Nun wandeln wird die gezeichnete Figur, die ja viele Pixelüberschneidungen, quasi ein breiter gefüllter Strich darstellt, in eine Region um. EIne Region beschreibt dann nur noch die Hüllkurve deiner Zeichnung.

Diese Region-> hRgn wird nun als geschlossene Figur in dein Metafile gezeichnet, mit FillRgn() und wohl stinknormalem Brush -> TBrush.Style := bsSolid und .Color := clBlack.

Dein Metafile enthält dann nur die Vekrotdaten zu dieser Region = Hüllkurve.

ABER! vielleicht musst du es garnicht so umständlich anpacken
Schau dir mal ExtCreatePen() genauer an. Er müsste PS_GEOMETRIC, aus einer Bitmap -> DibSection erzeugt sein die die Form und Größe deines kalligraphischen Stiftes aufweist und dann einfach die Spline mit diesem Stift zeichnen.

Gruß Hagen
  Mit Zitat antworten Zitat