Problème de pente
-
Ta façon de construire ton composant l'a rendu complexe.
Il te faut séparer l'interface du composant (tous les attributs accessibles à l'utilisateur) de son implémentation (la partie non accessible qui contient les calculs).
En conception orientée objet (voir boite noire), on parle de la partie visible (interface) et de la partie cachée (implémentation).Pour cela Sketchup crée :
- l'interface sous la forme d'un composant parent (pas de formules dans cette partie mais les attributs saisis par l'utilisateur),
- l'implémentation sous la forme de composants enfants qui comprennent les différentes pièces de bois (poteaux, poutres, arbas, ...) avec toutes les formules.
En procédant comme cela (du haut vers le bas), tu éviteras entre autres les références circulaires.
Enfin, si tu veux que ton composant soit encore compréhensible et bien documenté, tu peux en faire une représentation (semi-formelle) avec UML2 par exemple.
PS : ne pas perdre de vue que Sketchup est une application entièrement pensée "objet" et que dans Ruby tout est objet.
-
Merci Elmer pour ta réponse...
Je pense que je ne vais pas négliger cette possibilité qui m'évite des calculs de changement d'axe de rotation, même si du coup, je ne peux plus changer la section de l'aretier.
-
j'ai regardé vite fait:
tu peux garder ton composant dynamique tel quel. Ton problème est mathématique (regarde pythagore et thales susr wikipedia)
ma reponse en francais a mettre en code est
rotx = arctan(longueur projeté en vue de dessus coté 1+longueur projeté en vue de dessus coté 2)
LP ( nouvelle attribut qui corresponds à la longueur projeté en vue de dessus de l'arretier) = racine(longueur projeté en vue de dessus coté 2^1+longueur projeté en vue de dessus coté 1^2)
roty = arctan(longueur projeté en vue de dessus coté 1+LP)a mon avis ta longueur d'arretier sera aussi a calculé
bref je suis sur c'est faisable.
par contre tu n'aura jamais avec les composants dynamique ton calcul de section et de coupe
bon courgae -
Je vais essayer ça
En fait, je n'arrive pas à bien saisir si la rotation se fait par rapport aux axes du projet ou aux axes des composants. Je pense que c'est par rapport aux axes du projet.
En fait, on devrait pouvoir faire les deux selon les besoins et donc avoir six axes de rotation possibles (peut-être une suggestion à faire aux développeurs de Google)
-
@boris vaisman said:
En fait, je n'arrive pas à bien saisir si la rotation se fait par rapport aux axes du projet ou aux axes des composants. Je pense que c'est par rapport aux axes du projet.
En fait, on devrait pouvoir faire les deux selon les besoins et donc avoir six axes de rotation possibles (peut-être une suggestion à faire aux développeurs de Google)Chaque élément tourne autour de son propre axe.
Si on avait à définir d'autres axes, on ne s'arrêterai plus si on a des composants dans des composants dans des composants... Sans compter que si l'axe de rotation n'est pas interne à l'objet, si on doit déplacer et tourner l'objet (autour d'un autre axe) il faudrait dire si on tourne puis on bouge ou si on bouge puis on tourne, ça ne fait pas la même chose
Dans ton cas, avec l'axe de l'arêtier au bout, les pistes d'adebeo vers la trigonométrie et Pythagore devraient te permettre de calculer les angles de rotation et la longueur de l'élément. -
Ah, ben voila une réponse qui m'intéresse mais me met également dans l'embarras...
Donc, si je comprends bien, tu me dis que dans les composants dynamiques, ROTX, ROTY et ROTZ correspondent aux rotations par rapport aux axes des composants ?
Moi, je croyais naïvement que c'était les rotations par rapport aux axes du projet.
Quelqu'un peut confirmer ou infirmer, s'il vous plait ?
Désolé de vous embêter avec des questions triviales mais je suis un bleu dans le domaine...
-
@boris vaisman said:
Donc, si je comprends bien, tu me dis que dans les composants dynamiques, ROTX, ROTY et ROTZ correspondent aux rotations par rapport aux axes des composants ?
Moi, je croyais naïvement que c'était les rotations par rapport aux axes du projet.
Quelqu'un peut confirmer ou infirmer, s'il vous plait ?Petit test simple :
Test.skp Peu importe où tu place le composant, quand tu modifies les angles de rotation, il tourne autour de la pointe de la flèche.Regarde aussi les trois fichiers que j'ai posté ici, tu verra que chaque fois que la rotation est utilisée, c'est autour de l'axe propre du composant.
-
A DC ROTates relative to its axes.
It's easy to test: make a DC that rotates about its Z-axis, with onClick.
Lay it on its side and it still rotates about its Z-axis, never that of the model.
Un DC tourne par rapport à ses axes.
C'est facile à tester: faites un DC qui tourne autour de son axe Z, avec onClick.
Déposez-le sur le côté et il tourne encore sur son axe Z, jamais celle du modèle. -
Alors, vous avez surement remarqué que dans les exemples que vous m'avez fournis ainsi que dans le mien posté ici, on ne peut pas tourner à la fois autour de deux axes simultanément (quand on change une valeur sur un axe, il remet les deux autres à 0) , la seule solution que j'ai trouvée pour contrer ça est de créer trois variables et de dire que ROTX=VARX, ROTY=VARY et ROTZ=VARZ.
Dans mon exemple ici, comment expliquez vous que suite à mes deux rotations autour de Y et Z, le chevron ait aussi fait une rotation autour de son propre axe X ?
C'est ce qui me fait dire que c'est par rapport aux axes du projet et non par rapport à ses propres axes.
Je suis dubitatif (et ce n'est pas un gros mot...)
-
@boris vaisman said:
Alors, vous avez surement remarqué que dans les exemples que vous m'avez fournis ainsi que dans le mien posté ici, on ne peut pas tourner à la fois autour de deux axes simultanément (quand on change une valeur sur un axe, il remet les deux autres à 0)
Oui, ça c'est "normal", du moins connu... On ne peut pas attaquer directement une rotation sans qu'elle se remette à 0. Si on veut le faire dans la fenêtre des "Attributs du composant" il faut mettre un "=" avant pour conserver la valeur.@unknownuser said:
Dans mon exemple ici, comment expliquez vous que suite à mes deux rotations autour de Y et Z, le chevron ait aussi fait une rotation autour de son propre axe X ?
C'est ce qui me fait dire que c'est par rapport aux axes du projet et non par rapport à ses propres axes.
Ce sont les joies de la rotation sur trois axes. Si tu fait une rotation de 180° sur les Y et de 180° sur les Z, c'est comme faire une rotation de 180° sur les X ! Étonnant, non !
C'est donc normal que quand on tourne sur deux axes on trouve une composante qui pourrait être effectuée sur le troisième axe.
Pour ton cas, pour ton arêtier, tu ne travailleras essentiellement qu'avec deux angles (azimut et relèvement) parce que la pièce reste sur son champ, elle ne déverse pas. -
Bon, ok pour le signe égal je saurais pour la prochaine fois. Merci beaucoup...
Par contre, si les trois axes sont indépendants et sont bien les axes du composant, pourquoi une rotation sur deux des trois axes me donne aussi une rotation sur le troisième ???
(dans l'exemple précis que tu donnes, ROTY=180 et ROTZ=180 équivaut bien à ROTX=180, ce sont deux façons différentes de positionner au même endroit le composant mais ça ne signifie pas que tourner autour de deux axes fait aussi tourner autour du troisième)Excusez moi encore d'essayer de bien comprendre mais je suis vraiment largué, là
-
En fait, quand on travaille sur trois axes, quand on fait des rotations, l'ordre a une importance. Dans les composants dynamiques, Sketchup a choisi de les faire dans l'ordre autour des axes X, Y puis Z. Dans ton exemple, la logique est respectée et le résultat est bien une rotation sur l'axe Y (l'élément se lève) puis sur l'axe Z (il bascule sur le coté). Je pense d'ailleurs que ça doit âtre pour ça que si on attaque directement les angles de rotation par une valeur, il remet les autres à 0.
Pour revenir à ton cas, on est bien dans une logique azimut et élévation, mais l'ordre pose en effet un problème...
J'explore ça, et je reviens... -
Si l'axe X était l'axe vertical, tout marcherait bien... mais c'est pas comme ça
Donc, une solution possible, c'est de mettre ce composant dans un autre qui permet de tourner le monde localement pour avoir les X verticaux. Du coup, on manipule le sous-composant avec les rotations autour des axes X et Y, X pour régler l'azimut et Y pour l'élévation. Pour la longueur ça se règle avec le LenZ. Il ne reste plus qu'à calculer ces valeurs à partir des données que tu as.
-
Effectivement, ta solution est valide, je n'aurais franchement pas trouvé...
Par contre, je crois sincèrement que Sketchup est buggé sur les composants dynamiques. Cela fait un petit mois que je suis dessus et j'ai déjà trouvé je ne sais combien de parades pour arriver à mes fins.
Dans le cas qui nous intéresse et dans l'hypothèse où on fait les rotations dans l'ordre X, Y et Z, si je fais une rotation sur Y et une autre sur Z, je persiste à penser qu'il ne devrait pas y avoir de rotation sur X. Donc on peut en conclure qu'il faut s'arranger pour faire des rotations simultanées uniquement sur X et Y...
Franchement c'est lourd...
-
En reprenant ta méthode et en l'adaptant un peu, j'ai réussi à faire enfin ce que je voulais...
D'abord, mon composant chevron
Je fais un trait dessus, je crée un autre composant avec le trait et le composant chevron -> Composant 2 (le trait sert uniquement à faire en sorte que le chevron devienne un sous composant)
Je masque le trait .
Je fais d'abord ma rotation sur Y dans le sous composant puis ma rotation sur Z dans le composant... Et miracle !!! (en PJ)
Advertisement