sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Accoler deux composants

    Scheduled Pinned Locked Moved Français
    9 Posts 4 Posters 10.8k Views 4 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • K Offline
      kattig
      last edited by

      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


      capture d'écran

      1 Reply Last reply Reply Quote 0
      • Jean LemireJ Offline
        Jean Lemire
        last edited by

        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.

        Jean (Johnny) Lemire from Repentigny, Quebec, Canada.

        1 Reply Last reply Reply Quote 0
        • pilouP Offline
          pilou
          last edited by

          Component stringer by Chris Fulmer ne fait pas l'affaire ?

          Frenchy Pilou
          Is beautiful that please without concept!
          My Little site :)

          1 Reply Last reply Reply Quote 0
          • K Offline
            kattig
            last edited by

            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:

            1. 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...
            2. 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..

            1 Reply Last reply Reply Quote 0
            • pilouP Offline
              pilou
              last edited by

              Il faut envoyer un PM à Fredo6 en français ou à TIG en anglais 😉

              Frenchy Pilou
              Is beautiful that please without concept!
              My Little site :)

              1 Reply Last reply Reply Quote 0
              • K Offline
                kattig
                last edited by

                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

                1 Reply Last reply Reply Quote 0
                • A Offline
                  adebeo
                  last edited by

                  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 ?

                  adebeo
                  Nos Formations sketchup
                  Notre blog : www .adebeo.com/wp/
                  Nos tutoriels: www .youtube.com/adebeo

                  1 Reply Last reply Reply Quote 0
                  • K Offline
                    kattig
                    last edited by

                    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

                    1 Reply Last reply Reply Quote 0
                    • A Offline
                      adebeo
                      last edited by

                      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 ?

                      adebeo
                      Nos Formations sketchup
                      Notre blog : www .adebeo.com/wp/
                      Nos tutoriels: www .youtube.com/adebeo

                      1 Reply Last reply Reply Quote 0
                      • 1 / 1
                      • First post
                        Last post
                      Buy SketchPlus
                      Buy SUbD
                      Buy WrapR
                      Buy eBook
                      Buy Modelur
                      Buy Vertex Tools
                      Buy SketchCuisine
                      Buy FormFonts

                      Advertisement