2015-11-11 3 views
0

Lorsque je calcule la différence entre deux formes qui se touchent (par exemple un rectangle A dans un rectangle plus grand B avec un trou au rectangle A) et une forme de clip (rectangle C) les deux formes touchantes sont fusionnées mêmes bords, puis l'écrêtage est exécuté.Empêcher le clipper de fusionner des polygones?

Est-il possible d'éviter de fusionner des formes touchantes lors de l'écrêtage?

Voici un exemple de la différence entre les deux formes (A en vert et B en rouge) et un clip (si l'opération est la suivante: A & B - Clip), il renvoie la forme bleue:

Difference (Blue) two touching shapes (A in green and B in red) with a clip

au lieu du rectangle bleu, je voudrais avoir ces deux formes:

Expected result

Et l'intersection donnerait:

Intersection

Cela me donne les quatre formes que je veux:

Expected result

Je sais que je pourrais effectuer les opérations sur chaque forme séparément, mais je crains que ce sera plus coûteux.

Remarque

Voici le résultat d'une XOR:

XOR

+0

Utilisez XOR au lieu de Différence. –

+0

J'ai oublié quelque chose dans ma question alors je l'ai édité, maintenant ça devrait être plus clair. Le XOR n'aide pas ... Je pense que la seule solution est d'effectuer des opérations séparément, ce que je fais pour l'instant. –

+0

J'ai posté une question similaire à https://stackoverflow.com/questions/46235176/clipperlib-clip-multiple-squares-with-rectangle-produces-1-result Avez-vous déjà trouvé une solution? À la fin, je vais traiter plus de 2 millions de formes. Je ne pense pas que les écraser séparément serait bon pour la performance. –

Répondre

0

Dans la main je calcule l'opération moi-même:

  1. calculer les intersections entre les bords (de la forme de l'agrafe et d'autres formes).
  2. pour chaque sommet: trier ses bords par angle (obligatoire)
  3. promenade dans chaque sens horaire bord et anti-horaire pour calculer les nouveaux polygones avec leurs trous

C'est assez efficace, mais je besoin d'un espace- structure de données de partitionnement pour trier les arêtes et rapidement leurs intersections.