polygon | polygon
-
hallo!
Wie kann ich von zwei mit CreatePolygonRgn() erstellen Polygonen
ein "OR-Polygon" erstellen? sprich: eine dritte Fläche mit allen
Pixeln die die zwei anderen Flächen NICHT gemeinsam haben.ich hoffe ich habe mich halbwegs verständlich ausgedrückt..
danke für eure hilfe
maTTYhias
-
Hm, müsste mit CombineRgn() gehen. Tipp: Das ist nicht OR, sondern XOR, was du meinst.
[ Dieser Beitrag wurde am 03.01.2003 um 00:37 Uhr von WebFritzi editiert. ]
-
In der MSDN steht bei CombineRgn, dass es nur
Drei Parameter benötigt (Region1, 2, und AND/OR...)
Unter VC++ braucht es aber komischerweise vier!?
3 Regions und die Combine Mode.Ich möchte doch einfach nur in eine Region zwei andere
Regions reinkombinieren.Beispiel:
... POINT r[4]; HRGN hRgn; HBRUSH hBrush; HRGN allRgn; HRGN oldRgn; for (int i = 0; i < 6; i++) { r[0].x = (int)currCube->cube->rect[i].p0.sx; r[0].y = (int)currCube->cube->rect[i].p0.sy; r[1].x = (int)currCube->cube->rect[i].p1.sx; r[1].y = (int)currCube->cube->rect[i].p1.sy; r[2].x = (int)currCube->cube->rect[i].p2.sx; r[2].y = (int)currCube->cube->rect[i].p2.sy; r[3].x = (int)currCube->cube->rect[i].p3.sx; r[3].y = (int)currCube->cube->rect[i].p3.sy; hRgn = CreatePolygonRgn(r, 4, ALTERNATE); hBrush = CreateSolidBrush(currCube->cube->rect[i].color); FillRgn(dc, hRgn, hBrush); // Alle flächen zusammensammeln und in allRgn speichern CombineRgn(???????????, RGN_OR); DeleteObject(hBrush); DeleteObject(hRgn); } // Alte Rgn mit neuer XORn und ergebnisfläche mit hintergrundfarbe // übermalen CombineRgn(???????????, RGN_XOR); ...
ERLÄUTERUNG:
Der obige Code ist ein ausschnitt aus meiner kleinen
3D Anwendung. Er dient dazu (besser: sollte später mal dazu dienen),
alle Seiten eines Würfels hinzumalen und die Gesamtfläche in allRgn
zu speichern. Beim nächsten Zeichen des (inzwischen um ein paar
Grad rotierten Würfels), wird wieder ein Rgn der neuen gesamtfläche
erstellt, mit der vorigen Region ge-XORT und somit weiß ich was
ich mit der Hintergrundfarbe übermalen muss, um die "Reste" des
vorigen Würfels wegzukriegen. mit dieser Methode, müsste ich doch
das flackern umgehen können, dass auftritt, wenn ich einfach
den ganzen Bildschirm vor jedem neuzeichnen des Würfels refreshe,
oder?
-
int CombineRgn( HRGN hrgnDest, // handle to destination region HRGN hrgnSrc1, // handle to source region HRGN hrgnSrc2, // handle to source region int fnCombineMode // region combining mode );
Wo ist dein Problem? Das erste ist die Region, wo am Ende die beiden "Ausgangs-Regionen" enthalten sind.
cu para
-
Das flackern kannst du auch mit BackBuffering bzw. DoubleBuffering verhindern!
Dabei zeichnest du einfach immer alles in einen DC im Speicher und Blittest diesen dann in WM_PAINT auf den normalen DC deines Client-Bereichs![ Dieser Beitrag wurde am 03.01.2003 um 14:45 Uhr von flenders editiert. ]