RegionInRegion

Utilisateur anonyme - 4 oct. 2003 à 19:38
 Utilisateur anonyme - 24 oct. 2003 à 21:12
Bonjour,

Voila comme l'indique le titre je voudrais savoir si il est possible de verifier si une region est en collision ou supperposition avec une autre region. Un peut comme RectInRegion.

Si il existe pourriez vous me faire un exemple .

Je vous remercie d'avance

PS: Je pense qu'il doit y avoir une api qui permettent de faire cela.

10 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 oct. 2003 à 19:56
Aucune API directe faisant cela.
Il y a aussi PtInRegion et GetRgnBox.
BruNews, ciao...
0
Utilisateur anonyme
4 oct. 2003 à 20:22
Merci de me repondre si vite,

Mais est ce qu'l y'a une fassons de detecter si une region intersect une autre region sans utiliser les apis?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 oct. 2003 à 20:32
C'est surement la voie la + rapide.
BruNews, ciao...
0
Utilisateur anonyme
4 oct. 2003 à 20:47
Autrement tu serais pas si il y'a une api qui verifie si un polygon est dans une region.

Mercie
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 oct. 2003 à 20:59
Je t'ai mis les 2 autres APIs qui servent en verif de zones, avec RectInRegion font 3, je n'en vois pas d'autres.
BruNews, ciao...
0
Utilisateur anonyme
5 oct. 2003 à 01:38
Dans ce cas la pourrais tu me faire un exemples de getrgnbox mercie. Et m'expliquer a quoi ca sert mercie.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 oct. 2003 à 02:52
En fait, c'est tout simple !!!

Cette fonction (RgnInRgn) n'existe pas mais il est aisé de la créer soit meme !!

Option Explicit

Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Const RGN_AND = 1
Private Const NULLREGION = 1

Private Sub Form_Load()
    Dim RGN1 As Long, RGN2 As Long
    
    '# Cas d'intersection entre les deux regions
    RGN1 = CreateRectRgn(0, 0, 100, 100)
    RGN2 = CreateRectRgn(50, 50, 150, 150)
    
    MsgBox "Cas 1 : " & RgnInRgn(RGN1, RGN2)
    
    '# Cas de non intersection entre les deux regions
    RGN1 = CreateRectRgn(0, 0, 100, 100)
    RGN2 = CreateRectRgn(150, 150, 250, 250)
    
    MsgBox "Cas 2 : " & RgnInRgn(RGN1, RGN2)
    
    End
End Sub

Public Function RgnInRgn(ByVal RGN1 As Long, ByVal RGN2 As Long) As Boolean
    '# RGNOUT doit pointer sur une region valide !!
    Dim RGNOUT As Long:  RGNOUT = CreateRectRgn(0, 0, 0, 0)
    
    '# CombineRGN renvoie NULLREGION si la region est vide
    '# Dans le cas présent, on tente d'effectuer une intersection des deux regions. (RGN_AND)
    RgnInRgn = NULLREGION <> CombineRgn(RGNOUT, RGN1, RGN2, RGN_AND)
End Function



By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
Utilisateur anonyme
5 oct. 2003 à 11:59
Merci renfield mais est ce que tas fonction marcherai pour des regions par exemple elliptique ou polygonale, ou meme une region créer avec l'aide d'une image (CreateRgnFromBitmap )

Merci !!
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
5 oct. 2003 à 12:35
Bien sur, cette fonction fonctionne pour tout type de regions !!

le test est effectué par le systeme , lors de la tentative de combinaison...

By Renfield

[mailto:thomas_reynald@msn.com thomas_reynald@msn.com]

Aucune touche n'a ete blessee lors de la saisie de ce texte.......... ;)
0
Utilisateur anonyme
24 oct. 2003 à 21:12
Renfield t'as fonction plante sur long termes et a utilisation multiples =, j'ai trouver une solution a ce bug il suffit de rajouter a la fin de la fonction : DeleteObject RGNOUT

ainsi :
Public Function RgnInRgn(ByVal RGN1 As Long, ByVal RGN2 As Long) As Boolean
'# RGNOUT doit pointer sur une region valide !!
Dim RGNOUT As Long: RGNOUT = CreateRectRgn(0, 0, 0, 0)

'# CombineRGN renvoie NULLREGION si la region est vide
'# Dans le cas présent, on tente d'effectuer une intersection des deux regions. (RGN_AND)
RgnInRgn = NULLREGION <> CombineRgn(RGNOUT, RGN1, RGN2, RGN_AND)
DeleteObject RGNOUT ' Important sinon ca peut planter, j'ai fais des test.

End Function


Cette versions mlarche tres bien.
0
Rejoignez-nous