2010-12-05 6 views
2

J'utilise un CombinedGeometry en C# pour joindre plusieurs polygones ensemble.Union de formes adjacentes en C#/WPF

Le RenderedGeometry de chaque forme est pris, et joint à la forme finale avec GeometryCombineMode.Union.

Cependant, j'ai un problème où deux formes sont adjacentes, mais ne se chevauchent pas (un écart 0px entre les deux). Comme ils ne se chevauchent pas, ils ne seront pas rejoints par le CombinedGeometry.

J'ai envisagé d'agrandir chaque forme d'entrée de 1 pixel, puis de contracter la sortie par la même, mais cela ne peut pas être fait avec précision en utilisant un ScaleTransform.

Comment joindre ces deux formes ensemble?

Répondre

2

Essayez les options suivantes - Je ne l'ai pas testé, mais logiquement je pense que cela va fonctionner:

Créer un rectangle qui entoure vos formes - calculer la zone de délimitation combinée et d'étendre un peu pour faire face à l'arrondissement des chiffres . Effectuez ensuite un "Exclude" entre le rectangle et chaque forme à tour de rôle.

Une fois que vous avez fait cela, vous aurez un rectangle avec un trou découpé qui est l'union efficace de toutes vos formes. Puis faites un "Xor" de ceci avec un autre rectangle de la même taille que le premier. Je pense que cela devrait produire votre "union".

+0

Je n'ai pas implémenté cela, mais je ne vois pas pourquoi cela n'aurait pas marché non plus, alors je l'accepte comme réponse. – dig412

+0

@ dig412 - qu'est-ce que vous êtes allé à la fin? – ChrisF

+0

J'ai trouvé que RenderedGeometry était inexact de 0,5 - 1px, ce qui signifiait que mes formes qui se chevauchaient auparavant avaient un léger décalage entre elles. Je viens de construire une nouvelle géométrie pour eux avec la largeur et la hauteur de la forme originale. – dig412