- Messages : 106
- Karma: 3
- Remerciements reçus 2
- Accueil
- Forum
- RhinoShack Forums
- Support et assistance
- Rhino Script
- Code qui fonctionne pas???
Code qui fonctionne pas???
- onlyforpeace
- Auteur du sujet
- Hors Ligne
- Expert Boarder
-
Réduire
Plus d'informations
il y a 4 ans 7 mois #244
par onlyforpeace
Code qui fonctionne pas??? a été créé par onlyforpeace
Salut la tribe!!
à chaque fois que j'essais des conditions en script, ça ne fonctionne jamais du premier coup, ça me g....fle!!
pourquoi la première ligne fonctionne et pas la deuxième dans:
If arrbox(1)(0) - arrbox(0)(0) < IntLong And arrbox(3)(1) - arrbox(0)(1) < IntLarg Then
rhino.ObjectColor strsurf, RGB(255, 255, 100)
Else
arrbox(1)(0) -arrbox(0)(0) < IntLarg And arrbox(3)(1) - arrbox(0)(1) < IntLong Then
rhino.ObjectColor strsurf, RGB(255, 255, 100)
End If
Merci d'avance....
à chaque fois que j'essais des conditions en script, ça ne fonctionne jamais du premier coup, ça me g....fle!!

pourquoi la première ligne fonctionne et pas la deuxième dans:
If arrbox(1)(0) - arrbox(0)(0) < IntLong And arrbox(3)(1) - arrbox(0)(1) < IntLarg Then
rhino.ObjectColor strsurf, RGB(255, 255, 100)
Else
arrbox(1)(0) -arrbox(0)(0) < IntLarg And arrbox(3)(1) - arrbox(0)(1) < IntLong Then
rhino.ObjectColor strsurf, RGB(255, 255, 100)
End If
Merci d'avance....
Connexion pour participer à la conversation.
- SwissRhino
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 81
- Karma: 2
- Remerciements reçus 11
il y a 4 ans 7 mois - il y a 4 ans 7 mois #245
par SwissRhino
Réponse de SwissRhino sur le sujet Code qui fonctionne pas???
C'est soitou bien"Else" veut dire "si aucune des autres conditions sont remplies, executer le code suivant..." The "Then" est implicite.
--Mitch
ElseIf...Then
Else (sans Then)...
Call Main()
Sub Main()
Dim A,B
A = 1
B = 2
If A = 1 Then
Call Rhino.Print("A equals one")
ElseIf B = 1 Then
Call Rhino.Print("B equals one")
Else
Call Rhino.Print("Neither A nor B are equal to one")
End If
End Sub
--Mitch
Dernière édition: il y a 4 ans 7 mois par SwissRhino.
Connexion pour participer à la conversation.
- onlyforpeace
- Auteur du sujet
- Hors Ligne
- Expert Boarder
-
Réduire
Plus d'informations
- Messages : 106
- Karma: 3
- Remerciements reçus 2
il y a 4 ans 7 mois #246
par onlyforpeace
Réponse de onlyforpeace sur le sujet Code qui fonctionne pas???
bin oui!!!
c'est tellement clair quand c'est toi qui le dit!!
merci!
c'est tellement clair quand c'est toi qui le dit!!
merci!
Connexion pour participer à la conversation.
- onlyforpeace
- Auteur du sujet
- Hors Ligne
- Expert Boarder
-
Réduire
Plus d'informations
- Messages : 106
- Karma: 3
- Remerciements reçus 2
il y a 4 ans 7 mois #247
par onlyforpeace
Réponse de onlyforpeace sur le sujet Code qui fonctionne pas???
encore une chose:
dans ce bout de code, lorsque j'ai une surface sur le Plan xy, il devrait informer la variable "casetype" en "plancher, mais non il laisse la case vide?
en fait j'aimerais que ce code me donne sur chaque plan d'un ensemble de plan, si c'est un plancher, une lisse ou un couple, voici le bout de code:
rhino.selectobject strsurf
center = Rhino.SurfaceAreaCentroid(strsurf)
centerpt = rhino.SurfaceClosestPoint(strsurf, center(0))
arrPlane = Rhino.SurfaceFrame(strsurf, centerpt)
arrbox = rhino.BoundingBox(strsurf, arrplane)
If arrbox(7)(2) = arrbox(1)(2) Then casetype = "plancher"
If arrbox(3)(1) = arrbox(5)(1) Then casetype = "lisse"
If arrbox(6)(0) = arrbox(0)(0) Then casetype = "couple"
dans ce bout de code, lorsque j'ai une surface sur le Plan xy, il devrait informer la variable "casetype" en "plancher, mais non il laisse la case vide?
en fait j'aimerais que ce code me donne sur chaque plan d'un ensemble de plan, si c'est un plancher, une lisse ou un couple, voici le bout de code:
rhino.selectobject strsurf
center = Rhino.SurfaceAreaCentroid(strsurf)
centerpt = rhino.SurfaceClosestPoint(strsurf, center(0))
arrPlane = Rhino.SurfaceFrame(strsurf, centerpt)
arrbox = rhino.BoundingBox(strsurf, arrplane)
If arrbox(7)(2) = arrbox(1)(2) Then casetype = "plancher"
If arrbox(3)(1) = arrbox(5)(1) Then casetype = "lisse"
If arrbox(6)(0) = arrbox(0)(0) Then casetype = "couple"
Connexion pour participer à la conversation.
- SwissRhino
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 81
- Karma: 2
- Remerciements reçus 11
il y a 4 ans 7 mois #248
par SwissRhino
Réponse de SwissRhino sur le sujet Code qui fonctionne pas???
Bienvenue au monde de « floating point math » (virgule flottante) utilisée pour quasi tous les calculs en informatique.
fr.wikipedia.org/wiki/Virgule_flottante
Voir aussi: effbot.org/pyfaq/why-are-floating-point-...ns-so-inaccurate.htm (anglais)
Donc, les plupart des chiffres – à part des intégraux 1, 2, 3, 4 etc. – sont approximative en Rhino et aussi ailleurs en informatique. Il y a toujours une quantité hypermicroscopique de « bruit » dans chaque chiffre. Et si pour toi et pour moi on pense 1.00 = 1.00, l’ordi voit 1.0000003421 != 1.0000003567...
Pour cette raison, il ne faut jamais assumer que deux chiffres peuvent être exactement égaux…
Donc, au lieu de faire ça :qui va probablement toujours retourner "False", il faut faire ça:
"abs" est la fonction "valeur absolue". Donc on dit là que si la valeur absolue de la différence entre deux chiffres est moins que la tolérance donnée, on les considère comme « egaux ». C’est « S.O.P » (standard operating procedure) dans la programmation.
En espérant que ça aide,
--Mitch
fr.wikipedia.org/wiki/Virgule_flottante
Précautions d'emploi
Les calculs en virgule flottante sont pratiques, mais présentent divers désagréments, notamment :
leur précision limitée, qui se traduit par des arrondis (dus aux opérations, ainsi qu'aux changements de base implicites, si la base est différente de 10) qui peuvent s'accumuler de façon gênante.
Voir aussi: effbot.org/pyfaq/why-are-floating-point-...ns-so-inaccurate.htm (anglais)
Donc, les plupart des chiffres – à part des intégraux 1, 2, 3, 4 etc. – sont approximative en Rhino et aussi ailleurs en informatique. Il y a toujours une quantité hypermicroscopique de « bruit » dans chaque chiffre. Et si pour toi et pour moi on pense 1.00 = 1.00, l’ordi voit 1.0000003421 != 1.0000003567...
Pour cette raison, il ne faut jamais assumer que deux chiffres peuvent être exactement égaux…
Donc, au lieu de faire ça :
If arrbox(7)(2) = arrbox(1)(2) Then casetype = "plancher"
Tol=Rhino.UnitAbsoluteTolerance
(Ceci est le tolérance du fichier, mais on peut utiliser un n’importe quelle chiffre selon ce qu’on attend de précision)
If abs(arrbox(7)(2)-arrbox(1)(2))<Tol Then casetype = "plancher"
En espérant que ça aide,
--Mitch
Connexion pour participer à la conversation.
- onlyforpeace
- Auteur du sujet
- Hors Ligne
- Expert Boarder
-
Réduire
Plus d'informations
- Messages : 106
- Karma: 3
- Remerciements reçus 2
il y a 4 ans 7 mois #249
par onlyforpeace
Réponse de onlyforpeace sur le sujet Code qui fonctionne pas???
ça à l'air de fonctionner...
merci !!
merci !!
Connexion pour participer à la conversation.
Temps de génération de la page : 0.452 secondes