• Login
sketchucation logo sketchucation
  • Login
ℹ️ GoFundMe | Our friend Gus Robatto needs some help in a challenging time Learn More

Script help !

Scheduled Pinned Locked Moved Developers' Forum
8 Posts 3 Posters 1.0k Views
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 21 Apr 2008, 07:37

    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
    • D Offline
      Didier Bur
      last edited by 21 Apr 2008, 08:31

      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 21 Apr 2008, 08:49

        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
        • D Offline
          Didier Bur
          last edited by 21 Apr 2008, 10:12

          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 21 Apr 2008, 11:26

            @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
            • D Offline
              Didier Bur
              last edited by 21 Apr 2008, 17:41

              @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
              • F Offline
                fredo6
                last edited by 21 Apr 2008, 19:50

                @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 22 Apr 2008, 06:22

                  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
                  1 / 1
                  • First post
                    8/8
                    Last post
                  Buy SketchPlus
                  Buy SUbD
                  Buy WrapR
                  Buy eBook
                  Buy Modelur
                  Buy Vertex Tools
                  Buy SketchCuisine
                  Buy FormFonts

                  Advertisement