6
votes

Pourquoi la région.Impty () a besoin d'un contexte graphique?

J'utilise région.Impty () Pour voir si deux régions se croisent, mais je ne comprends vraiment pas pourquoi je dois fournir un graphique contexte. < / p>

Le officiel Description dit

La transformation actuelle du contexte graphique G est utilisée pour calculer l'intérieur de la région sur la surface de dessin.

Quelle transformation en deux dimensions pourrait éventuellement séparer deux régions qui se chevauchent ou faire une région non vide vide?

Est-ce une question de granularité? D'aliasing vs anti-aliasing?


0 commentaires

3 Réponses :


4
votes

the région.Impty (graphisme g) méthode vérifie pour voir si le contexte graphique actuel spécifié comme g a des éléments qui occupent la région spécifique.

Ce n'est pas nécessairement en train de vérifier si deux régions se croisent, mais plutôt si une région intersections les autres articles sur une surface de dessin. L'instance graphique permet la région d'effectuer une vérification de la surface de dessin, car cela est défini comme le graphique . Dans un sens, cette méthode est vraiment comme [pas de code de travail] g.conainselementsQuiSect (young) .


3 commentaires

Donc, région est dans un sens une classe d'utilitaire pour graphiques alors? J'ai suivi la recommandation à Stackoverflow.com/questions/3615326/... (et ailleurs), mais il semble que ce ne soit pas la voie à suivre.


@Zano Vous devez essentiellement dessiner une région dans un graphisme, puis vérifier avec le 2e. Cela vous donnerait une opération «faire ces intersections».


Avec l'exception possible des contextes graphiques du métafichier, il n'y a pas de concept de contexte graphique "ayant des éléments" ou "éléments contenant des éléments". Les choses que vous dessinez sont rastralisées sur une image bitmap ou HDC. Il n'y a pas d'enregistrement que vous pouvez vérifier pour voir qu'une région particulière a été dessinée pour produire les bits actuels ou que le dessin a été effectué par System.Drawing plutôt que de la manipulation de GDI ou de mémoire. Avec cela à l'esprit, votre réponse n'a aucun sens.



2
votes

de votre lien:

teste si cette région a un intérieur vide sur le surface de dessin.

Le terme opératoire dans cette déclaration est surface de dessin . Pour avoir une surface de dessin, vous avez besoin d'un contexte graphique et donc une instance d'un objet graphique.

Que la documentation mentionne une transformation est probablement juste un peu de jargon déroutant. C'est juste une façon fantaisie de dire que la valeur de retour sera vraie dans l'état actuel du contexte graphique. Si quelque chose change, comme une scaltransform ou même un appel à la vanille, il y avait une "transformation", puis votre résultat indéectoriel peut ne plus être valide.

aussi


0 commentaires

4
votes

Les régions sont une fonctionnalité GDI et fortement corrélées aux contextes de l'appareil GDI. Vous pouvez spécifier une région avec des numéros de points flottants, comme le constructeur qui prend un groupe graphique ou un rectanglef. Mais les calculs ultimes sont effectués avec une précision entière. Juste assez bon pour la précision du pixel, plus besoin n'est nécessaire.

Le mappage des coordonnées logiques aux coordonnées de périphériques (I.E. pixels) est guidée par la configuration du contexte du périphérique. Qui peut avoir un mode de mappage autre que 1: 1. Donc, une région qui est un rectangle de, disons, 2,0 x 2,0 peut devenir vide une fois que cela est mappé aux pixels. Découvrez SetMapMode () par exemple.

montre donc lorsque vous avez l'intention d'utiliser des régions en tant qu'outil général, en particulier le manque de précision dans le résultat (pas mieux que la précision entière) peut être une surprise.


0 commentaires