Accoler deux composants
-
Bonjour,
Je suis nouvelle sur ce forum ce qui n'empêche pas que j'ai cherché dans les différents topics si je trouvais mon bonheur mais en vain...
Voici mon problème:
J'ai crée un composant simple sur un fichier skp qui représente un morceau de clôture de largeur 6m.
J'ai créé un fichier ruby afin de créer un clôture complète en fonction des coordonnées pris dans un fichier xml (position de chaque clôture) + la rotation afin de pouvoir les accoler.le problème est que cela ne se fait pas... Il y a toujours un décalage....
Auriez-vous une idée de comment je peux joindre les bords de chaque morceau de clôture via ruby?
Je vous remercie d'avance pour votre aide.
Cordialement
kattig
Ps: je vous joint la capture d'écran
-
Bonjour.
Je ne suis pas connaisseur en Ruby mais voici comment procéder manuellement.
Une fois le premier morceau positionné, il faut saisir le deuxième morceau par un point d'extrémité qui devra ensuite s'accrocher sur un point d'extrémité du premier.
Il faut être attentif à bien saisir le morceau par le bon point d'extrémité et ensuite bien le déposer sur le bon point d'extrémité.
Avec un script Ruby, il faudrait probablement, pour chaque morceau, calculer les coordonnées du point final en fonction des coordonnées du point initial, de la longueur exacte du morceau et de l'angle que fait le morceau de clôture avec les axes rouge et vert. Ce point final servirait ensuite de position initiale pour le morceau suivant.
Salutations.
-
Component stringer by Chris Fulmer ne fait pas l'affaire ?
-
Bonjour Jean Lemire,
Merci pour votre réponse.
Le calcul est question dont vous faites référence avec déjà été précédemment fait. Ils se trouvent dans le fichier xml que j'ai parlé au début.
Sinon, j'avais eu un message en mp me conseillant d'utiliser le boundingbox ou le glued_to mais:- le boundingbox, je l'avais déjà testé manuellement sur la console pour voir ce que cela faisait mais cela ne donnait pas le rendu voulu...
- le glued_to ne concerne que les faces.. et ce n'est pas non plus ce que je recherche...
Sinon, j'ai compris d'où venait mon problème:
En utilisant le add_instance pour chaque point, cela rendait à chaque fois un composant et c'est à cause de cela que tous mes calculs étaient faussés et que les clotures n'étaient pas cote à cote..Ce que j'ai fait manuellement: j'ai éclaté tous les composants "cloture". A ce moment, presque toutes clotures se remettaient en place. Cependant, c'est "presque". Pour que le rendu soit complet, il fallait créer un composant sur toutes les entités des clotures.
Niveau code, explosé un composant, j'utilise explode.
Mais il me reste un soucis pour créer un composant sur toutes les entités générés par l'éclatement...
Est-ce possible en ruby?
Je sais que pour un group, on peut le créer grace à group.to_component.
Y aurait-il un moyen de le faire via les entités?Merci d'avance pour votre aide.
kattig
PS: je suis toujours intéressée de connaître la solution pour coller les clôtures..
-
-
Bonjour Pilou,
Merci pour votre réponse.
Component stringer parait intéressant mais vu que j'ai déjà les coordonnées de chaque morceau (qui sont censé être bon), je préfèrerais rester sur cette voie...Je tiendrai compte de votre conseil en envoyant un MP à Fredo6.
Merci
Kattig
-
Bonjour,
je pense que tu devrais plutot analyser pourquoi tu as ce décalage par ce qu'il n'y a pas de raison que tes composants se éecalent.
La méthode de tout exploser et de créer un composant fait un peu "pansement sur jambe de bois".tu peux mettre un petit bout de ton code et de xml ?
-
Bonjour Adebeo,
Effectivement, ce n'est pas la meilleur solution que de tout éclater...
En plus, cela créer une perte d'informations (qui est qui), etc.J'ai vraiment tout cherché mais là, je ne sais plus où chercher de plus...
Voici un bout de xml:
.... <structlayer> <name>Clotures</name> <structure id="Cloture 1"> <modelfile>Cloture_image(skp6).skp</modelfile> <point> <x>601908.878706722</x> <y>1815023.22060379</y> <z>345</z> </point> <roll>0</roll> <angle>1.85133587106625</angle> </structure> <structure id="Cloture 2"> <modelfile>Cloture_image(skp6).skp</modelfile> <point> <x>601907.217461881</x> <y>1815028.98604095</y> <z>345</z> </point> <roll>0</roll> <angle>1.85133587106625</angle> </structure> ...
Et un bout de code ruby:
... model = Sketchup.active_model view = model.active_view entities = model.entities layers = model.layers definitions = model.definitions .... structlayer.each_element('structure') do |structure| point=structure.elements["point"] x,y,z=point.elements.to_a roll=structure.elements["roll"].text skpmodel=structure.elements["modelfile"].text componentdefinition = definitions.load skpmodel rotation_cloture = structure.elements["angle"] x = (x.text.to_f).m y = (y.text.to_f).m z = (z.text.to_f).m roll= (-1)*roll.to_f point = Geom;;Point3d.new(x, y, z) t = Geom;;Transformation.new d = entities.add_instance componentdefinition, t vector=Geom;;Vector3d.new 0,1,0 t = Geom;;Transformation.new d.transformation.origin, vector, roll d.transform! t if(rotation_cloture) vector = Geom;;Vector3d.new 0,0,1 t = Geom;;Transformation.new d.transformation.origin, vector, rotation_cloture.text.to_f d.transform! t scaling_cloture = structure.elements["scaling"] if(scaling_cloture) t = Geom;;Transformation.scaling d.transformation.origin, scaling_cloture.text.to_f, 1, 1 d.transform! t end end t = Geom;;Transformation.new point d.transform! t ...
Franchement, je vous remercie infiniment si vous trouvez d'où vient le problème...
Cordialement
Kattig
-
Bonjour,
En reproduissant ton code mes composants sont bien alignés: je ne reproduis pas le problème. Si dessous des pistes de réflexion:
- Sur quelle version de sketchup est tu ?
- contrôle tes variable après changement de type pour vérifier que la conversion n'a pas créer de problèmes.
- essayé de positionner l'origine de ton composant au milieu de ce dernier. il me semble que ton décalage est de l'épaisseur du composant?
- les coordonnées x, y Z me paraissent ultra précise 10 chiffre après la virgule, ce qui me parait étrange ?
- essaye de réinitialiser des variables en début de loop.
tiens nous au courant
encore un petit truc :
est que ton composant n'aura pas des paramètre d'alignement ?
Advertisement