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

    Script help !

    Scheduled Pinned Locked Moved Developers' Forum
    8 Posts 3 Posters 1.0k Views 3 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.
    • M Offline
      Matt666
      last edited by

      Hello !
      Sorry for my poor english 😉

      I try to write a script which texturise a selection.
      It works fine but when I save the drawing, all textures created with this script disappear....

      Can you help me, please ? I don't understand why this script don't rules ! And I'm not a ruby professionnal 😄

      Thank you !
      Matt.


      seltxt.rb

      Frenglish at its best !
      My scripts

      1 Reply Last reply Reply Quote 0
      • Didier BurD Offline
        Didier Bur
        last edited by

        Bjr Matt,
        Qu'est ce que le paramètre hcomp ? Il manque du code là-dedans...

        DB

        1 Reply Last reply Reply Quote 0
        • M Offline
          Matt666
          last edited by

          Salut Didier !!

          Cool, un français me répond, et quel français 😉

          Bon pour tout te dire, je ne sais pas ce qu'est cette variable... J'ai pris ce code ici, et je l'ai mis à ma sauce !
          Au passage, merci fredo6 !

          D'après ma piètre expérience dans le ruby, j'ai l'impression que ça ressemble à une fonction avec des arguments (désolé ce sont des termes du lisp !)

          def process_seltxt(entities, hcomp)
          

          Donc le nom du script et ses deux arguments. Par contre je ne sais pas à quoi sert hcomp. Et il n'a pas l'air de servir beaucoup ici. Lorsqu'on voit des trucs comme

          def process_at_level(entities, hcomp)
          process_at_level model.active_entities, {}
          

          def process_at_level(entities, hcomp)
          dans le code initial, le deuxième argument hcomp ne sert pas. Ce doit être un filtre, c'est tout.

          Voilà. Mais là je parle à un pro, donc je parle un peu dans le vent !
          Donc voilà, j'ai utilisé un code existant ! Et non, le code est en entier ici.

          Merci à toi !
          A bientot.
          Matt.

          PS : Vite fait, j'ai utilisé le code de fredo6 en ajoutant les faces à révéler... Plus pratique je trouve !

          #**************************************************************
          #Révéler toutes les arêtes
          def unhide_all_edges
          	model = Sketchup.active_model
          	model.start_operation "Reveler toutes les aretes"
          	process_at_level model.active_entities, {}
          	model.commit_operation
          end
          
          def process_at_level(entities, hcomp)
          	entities.each do |entity| 
          		case entity.typename
          		when 'Group'
          			process_at_level entity.entities, hcomp
          		when 'ComponentInstance'
          			edef = entity.definition
          			next if hcomp[edef.to_s]
          			hcomp[edef.to_s] = edef
          			process_at_level edef.entities, hcomp
          		when 'Edge'
          			entity.hidden = false 
          		when 'Face'
          			entity.hidden = false 
          		end
          	end
          end	
          

          Frenglish at its best !
          My scripts

          1 Reply Last reply Reply Quote 0
          • Didier BurD Offline
            Didier Bur
            last edited by

            Re-Bjr,
            Hi again,

            @unknownuser said:

            j'ai l'impression que ça ressemble à une fonction avec des arguments

            Exact, c'est la même chose.

            Apparement hcomp était un "hash" de tous les composants du modèle. Vu que ça sert à rien dans ton cas, je l'ai enlevé. La sauvegarde des texturage marche (depuis le départ en plus...).
            Entre nous, ça sert à quoi cette fonction puisqu'on peut faire la même chose sans script 😲 ?
            A+

            Apparently hcomp was a hash table referencing all components in model or something like that. I removed it.
            Code works now, including textures saving.
            CU


            seltxt.rb

            DB

            1 Reply Last reply Reply Quote 0
            • M Offline
              Matt666
              last edited by

              @unknownuser said:

              Entre nous, ça sert à quoi cette fonction puisqu'on peut faire la même chose sans script

              ?????????????????????
              Merde !!!!
              Mais comment ??? J'y suis jamais arrivé moi !!

              @unknownuser said:

              La sauvegarde des texturage marche (depuis le départ en plus...).

              Chez moi ça ne fonctionne toujours pas. je sélectionne les objets, la texture et je clique sur l'icone. Les faces deviennent texturées, mais lorsque je sauvegarde, tout se remet en blanc !

              Comprends pas....

              A bientot !
              Matt.

              Frenglish at its best !
              My scripts

              1 Reply Last reply Reply Quote 0
              • Didier BurD Offline
                Didier Bur
                last edited by

                @unknownuser said:

                Mais comment ??? J'y suis jamais arrivé moi !!

                Baaahh,
                Tu sélectionnes des trucs, tu mets un coup de pot de peinture et basta...

                @unknownuser said:

                Chez moi ça ne fonctionne toujours pas.

                Tu charges le script, tu fais une sélection, tu cliques sur l'icône (un icone à toi je suppose ?) ou tu tapes seltxt dans la console Ruby. Tu enregistres, tu sors et tu relances. Les textures sont là, c'est IMPOSSIBLE qu'elles n'y soient pas, vu que les données de texture sont enregistrées en temps réel avec entity.material = mat

                Mais j'ai trouvé dans quel cas cela ne marche pas: quand tu sélectionnes un matériau dans la bibliothèque et qu'il n'a jamais été utilisé dans le modèle: la texture est appliquée, mais le matériau ne fais pas partie du modèle (tu peux vérifier dans la palette "matières", onglet "dans le modèle". Il faut donc le créer avec le script pour l'intégrer au modèle. Fastoche:

                Sketchup.active_model.materials.add nom #(où nom est la variable contenant le matériau actif.
                

                à mettre juste avant de peindre la sélection.

                DB

                1 Reply Last reply Reply Quote 0
                • fredo6F Offline
                  fredo6
                  last edited by

                  @didier bur said:

                  Qu'est ce que le paramètre hcomp ? Il manque du code là-dedans...

                  <hcomp> est effectivement une Hash Table qui sert a enregistrer les composants traitees. En effet, quand on parcourt la selection, on peut tomber sur plusieurs instances du meme composant, et en realite, on ne doit appliquer la modification de texture qu'une seule fois, pour la definition du composant, ce qui modifiera toutes ses instances.

                  Dans le cas present, cela n'a effectivement pas d'impact (au pire on change plusieurs fois la texture du meme composant!).

                  Pour le material, il faut utiliser l'objet <model.materials.current> et non son nom

                  Enfin, il me semble aussi que la ligne "model.commit_operation" est mal placee. Mieux vaut ecrire:

                  
                  model.start_operation "Texturiser selection"
                  process_seltxt model.selection, {}, active_material
                  model.commit_operation		
                  
                  

                  Ci-joint une version modifiee du script

                  Fredo

                  PS1: Didier a raison de dire que la fonction de texturage d'une selection existe en standard dans le user interface de Sketchup. Mais je remarque que ton script texture les deux cotes des faces, ce qui n'est effectivement pas disponible en standard

                  PS2: il me semble qu'en Sketchup Ruby, on ne peut pas creer un nouveau materiel qui est une copie d'un existant (materials.add cree un nouveau material vide). Si quelqu'un connait une methode, cela me rendra service!

                  PS3: Sorry for non-French speaking members!


                  seltxt Modif.rb

                  1 Reply Last reply Reply Quote 0
                  • M Offline
                    Matt666
                    last edited by

                    Salut !

                    merci à vous deux pour les réponses !
                    I will try to translate my answers ! So sorry for my "french accent" 😄 ...

                    @Didier,

                    @unknownuser said:

                    Tu sélectionnes des trucs, tu mets un coup de pot de peinture et basta...

                    Ah. Je croyais qu'une méthode de texturisation de sélection était disponible dans SU directement....
                    I believed that a texture selection technic was possible in SU without ruby....

                    @unknownuser said:

                    la texture est appliquée, mais le matériau ne fais pas partie du modèle

                    Ok, je comprends mieux... Va falloir trouver un moyen, ou laisser tomber 😉
                    Ok that's a big problem..

                    @unknownuser said:

                    à mettre juste avant de peindre la sélection.

                    Ta méthode ne fonctionne pas, cela revient au même. Le matériau n'est pas enregistré.
                    Your technic doesn't work. The material is not recorded into the drawing.

                    @fredo6
                    Merci pour le script des lignes cachées !! 😄 Il est bien utile pour comprendre un peu mieux le ruby pour des débutants comme moi ! Et merci pour le code modifié..
                    Thank you for the hidden edges script ! It's useful to understand a few ruby language for beginners like me !

                    @unknownuser said:

                    Didier a raison de dire que la fonction de texturage d'une selection existe en standard dans le user interface de Sketchup.

                    Ah bon ?? Texturer une sélection ?? C'est exactement ce que je veux faire, mais je ne sais pas comment sans ruby ! C'est pour ça que j'ai voulu écrire un truc comme ça !
                    Après le texturage des deux faces est pratique mais si une technique existe en natif, je saurais bien m'en passer ! Peux tu me dire comment faire ?
                    Texturise a selection ??? This is exactly what I want to do, but I don't know why without Ruby !! Can you tell me how to do ?

                    Ceci étant dit, le problème du matériau nouveau est un pavé, j'ai l'impression...
                    However, the non-recorded new material is a big problem... If someone can tell us how to do that ?

                    Merci !
                    A bientot.
                    Matt.

                    Frenglish at its best !
                    My scripts

                    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