Laden...

Forenbeiträge von Tagacat Ingesamt 1 Beiträge

26.09.2010 - 21:09 Uhr

Hi Everybody,

perhaps I can provide a little workaround, which works really fine for my (quite similar) problem. Here is what you do:

Step 1:
Cobine all polygons, pathes, Rectangles or whatever to one big Region using Region.Union(SecondRegion).

Step 2:
Create a second Region and do the same.

I did both within a foreach slope!

Step 3:

Start to shift one of the two regions around using the Region.Translate() Member and always let this Follow by a Union with the second Region which stays static. (Doing so you will create a bigger Version of the original Region.

Move as follows upi, lefti, right2i, left2i, down2i, right2i, (up and left)*i
the Width of the Outline will be set with the factor i.

Step 4:
Now you just have to cut the small Region version from the second bid one using, SecondRegion.Xor(Region)

Step 5:
And finally you just have to draw the Outline using: e.Graphics.FillRegion(MyBrush, SecondRegion

Here you are, I hope this will help as a workaround.

Have fun

Tagacat!

PS: This works with every shape Regions as well as with multiple separate Regions PatchworkRegions)

Übersetzung:

Hallo alle zusammen,

vielleicht kann ich hiermit einen kleinen WorAround beschreiben, der für mein, recht ähnlich geartetes, Problem sehr gut funktioniert. Ihr müsst einfach folgendes machen:

Schritt 1:
Vereint einfach aller Polygone, Rechtecke, Pathes oder was auch immer zu einer großen Region. Nutz hierfür Region.Union(ZweiteRegion)

Schritt 2:
Kreiere eine Zweite Region analog zu Schritt 1.

Ich habe für beides einfach eine ForEach-Schleife verwendet!

Schritt 3:
Beginne nun eine der beiden (noch übereinanderliegenden Regionen mit der Methode Region.Translate() umher zu verschieben. Nach jeder Verschienbeaktion die verschobene Region mit der Basisregion vereinen. (Auf diese Weise kreiert man in 5 Verschiebeschritten eine größere Version der ursprüglichen Region).

Verschiebe: hochi, linksi, runteri, rechts2i, (hoch und links)*i. Die Breite der Umrisslinie kann somit durch den Faktor i in Pixeln gesetzt werden.

Schritt 4:
Abschließend muss nun nur noch die kleine Region aus der großen Region herausgeschnitten werden, indem man die Methode ZweiteRegion.Xor(Region) nutzt.

Step 5:
jetzt kann der Umriss gezeichnet werden, indem man e.Graphics.FillRegion(MyBrush, ZweiteRegion) verwendet.

Ich hoffe dieser Workaround war hilfreich.

Viel Spaß,

Tagacat

PS: DieseMethode funktioniert mit Regionen jeder Form ebenso auch mit vielen seperaten PatchworkRegionen. 😉