Constante condition !!! A L'aideeee....

Résolu
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 - 1 mai 2005 à 14:01
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 - 2 mai 2005 à 16:56
Salut, je travaille sur la version 2 de mon visualisateur de fichier 3ds, et la j'avoue etre bloqué, j'ai une constante et une condition, je teste la constante avec une var, la var ayant la meme valeur que la constante cependant la condition est fausse .... si vous avez une idée ....

Public Const Objet_Block As Integer = &H3D3D Or &H100 Or &H1100 Or &H1101 Or &H1200 Or &H1201 Or &H1300 Or &H1301 Or &H1400 Or &H1420 Or &H1450 Or &H1460 Or &H1470 Or &H2100 Or &H2200 Or &H2210 Or &H2201 Or &H2210 Or &H2300 Or &H2310 Or &H2301 Or &H2302 Or &H2303 Or &H3D3E

Public Const Triang_Mesh_Block As Integer = &H4000 Or &H4010 Or &H4012 Or &H4013 Or &H4015 Or &H4017 Or &H4100 Or &H4110 Or &H4120 Or &H4130 Or &H4140 Or &H4150 Or &H4160 Or &H4165 Or &H4181 Or &H4182 Or &H4600 Or &H4610 Or &H4627 Or &H4630 Or &H4641 Or &H4650 Or &H4651 Or &H4652 Or &H4653 Or &H4656 Or &H4658 Or &H4620 Or &H4625 Or &H4659 Or &H465A Or &H465B Or &H4700 Or &H7001 Or &H7011 Or &H7012 Or &H7020

tBloc.Entete as integer
tbloc.Entete = 15677 ' donc comme &H3D3D

If tBloc.Entete = Objet_Block Or Triang_Mesh_Block Then
If tBloc.Entete = Objet_Block Then '3D editor chunk
Call Editor(tBloc.Entete, fpos)
ElseIf tBloc.Entete = Triang_Mesh_Block Then
End If
End If

Donc voiçi le code, la premiere condition est vraix, mais quand j'arrive dans la deuxieme sa marche plus....

5 réponses

cs_Zeroc00l Messages postés 367 Date d'inscription lundi 1 avril 2002 Statut Membre Dernière intervention 11 février 2010
1 mai 2005 à 17:22
Tu ne peux pas faire ca .. :


Voici un exemle ou toute les valeurs numerique sont en binaire et les operateur logique aussi :





j'ai trois constante :





EST_POMME = 1


EST_POIRE = 10


EST BANANE = 11











Tu veux faire un ensemble (EST_POMME ou EST_POIRE)





toi tu ecris :





EST_POMME_POIRE = EST_POMME ou EST_POIRE





Il s'agit d'un OU binaire donc tu obtient :





EST_POMME_POIRE = 11





maintenant comment savoir si une constante est une de ces constante la ?





Admettons A = EST_BANANE


On va faire : (A et EST_BANANE) qui renverra "11" qui est une valeur
differente de 0 donc vrai .... or EST _BANANE n'etait pas dans ton
ensemble !


on peut donc essayer (A ou EST_BANANE) idem ...





Autrement dit ca ne marche pas ..


la seule facon pour que cela marche est la suivante:


En utilisant le et :


il ne faut pas, en faisant un ensemble :


CONST_1 ou CONST_2 ou CONST_3 ... pouvoir construire une autre CONST (entierement)


On construisait la const EST_BANANE a partir des deux autres ..? ce qui n'etait pas bon


le test qu'il faut faire ensuite : If (A = A and ENSEMBLE)





En utilisant le ou :



il ne faut pas, en faisant un ensemble :



CONST_1 ou CONST_2 ou CONST_3 ... pouvoir construire une partie d'une autre CONST


exemple : ENSEMBLE 11 ou 100 [ 111 ]


if (1001 ou ENSEMBLE ) retourne vrai alors que 1001 n'etait pas une const dedans ...














Bref la meilleur solution c'est d'utilser les puissance de deux, dans ce cas aucun probleme


const1 = 1


const2 = 10


const3 = 100


const4 = 1000


const5 = 10000








ENSEMBLE = const1 ou const 2 ou const 3





pour tester if (A et ENSEMBLE) renvoie A si A est effectivement dans l'ensemble


0 sinon





La difference avec precedement c'ets que dans le cas precedent ca
pouvait renvoyer ue valeur differente de 0 mais etre faut quand meme
.... d'ou le test A = A et ENSEMBLE








Bon j'espere que j'ai pas ete tres incomprehensible ..


Le mieux c'ets que tu y reflechisse par toi meme !


bonne chance !


















-={[ Zeroc00l ]}=-
3
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
1 mai 2005 à 16:58
Petite erreur de ma part :
If tBloc.Entete = Objet_Block Or Triang_Mesh_Block Then

c'est
If tBloc.Entete Objet_Block Or tBloc.Entete Triang_Mesh_Block Then

et

Public type Bloc
Entete as integer
end type

dim tbloc as Bloc

voila rectifier sachant que sa bug toujours sur les conditions avec les const ...
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
2 mai 2005 à 01:15
Dis ça ne serais pas plus simple avec une select case ? Puisque tu n'utilise pas Triang_Mesh_Block

Select Case tBloc.Entete
Case Is Objet_Block '3D editor chunk
Call Editor(tBloc.Entete, fpos)
Case Is Triang_Mesh_Block
End Select

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
2 mai 2005 à 04:08
faut tester le premier chiffre.

dans le premier cas le premier chiffre est toujours 0, 1, 2 ou 3
&H3D3D Or &H0100 Or &H2210

et dans le deuxième 4, 7
&H4700 Or &H7001 Or &H7011

If (tBloc.Entete and &H4000) = 0 Then ... premier cas

If (tBloc.Entete and &H4000) = 1 Then ... deuxième cas

c'est une supposition, s'il y a d'autres cas il faut trouver le bit qui permet de les distinguer.

Daniel
0

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

Posez votre question
ciberrique Messages postés 589 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 18 juillet 2010 1
2 mai 2005 à 16:56
Je vous remerci, tout deux, de m'avoir repondu. Pour valtrase, effectivement un select case simplifierais le code, mais ceci ne me servirais en rien pour ce debut, car le select case est plus loin dans le code ...
Pour Gobillot, c'est un possibilité de tester le bit qui differe.

La solution que j'ai choisis et d'utiliser une fonction et un tableau qui verifie si la valeur est presente et qui renvoie True ou False, je vous remercie ....
0
Rejoignez-nous