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

    Replace Several Textures?

    Scheduled Pinned Locked Moved Developers' Forum
    32 Posts 3 Posters 4.4k 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.
    • TNTDAVIDT Offline
      TNTDAVID
      last edited by

      **Hello, ☀

      After some tests of your codes on Click-Cuisine 2, I noticed a small problem that I hope to solve with your help.

      The change of component changes perfectly from 1 to 2 then to 3, except if one goes backwards.

      Here is an example in image:

      http://i.imgur.com/J316OLS.gif

      Same problem, if I close and I open the file because the script restarts to "1-Component".

      How to work around the problem?

      I think it is best to delete the error message, even though "1-Component" is not found.

      You can download skp example below:

      TESTE.skp

      And below the rbz plugin:

      TNT_Teste.rbz

      Thank you in advance for your help.

      David**

      [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

      1 Reply Last reply Reply Quote 0
      • TIGT Online
        TIG Moderator
        last edited by

        Without even looking at the code consider this...
        The 'file's suffix is to change thus:

        1 >>> 2
        2 >>> 3
        3 >>> 1

        So you don't use 'next' to increment the suffix just a 'case'...
        In 'pseudo' code...
        case suffix when '1'; suffix = '2' when '2'; suffix = '3' when '3'; suffix = '1' end#case

        Attach the suffix the the files' base names as you look through...
        If you want to remember the last used 'suffix' then use @suffix in a module or @@suffix in a class.
        Then the next time the tool is used the last used enduring variable is recalled...
        OR if you are getting the current value from a DC each tim then you can skip the enduring variable route ?

        TIG

        1 Reply Last reply Reply Quote 0
        • TNTDAVIDT Offline
          TNTDAVID
          last edited by

          **Sorry TIG to come back so late, but this time I finally have time to devote myself fully to ruby. ☀

          I would have to put "@@" into all the variables, but that is certainly not the solution you advise me. 💚

          Here is the basic code written by Sdmitch, which is almost perfect:

          def handles
                @mod = Sketchup.active_model
                @ent = @mod.active_entities  
                @last3 ||= '1' 
                @next = @last3.next
                @next = '1' if @next == '19'  
                last3_name = "#{@last3}-HANDLE"
          	  next_name = "#{@next}-HANDLE"
                if @mod.definitions[last3_name] && @mod.definitions[last3_name].instances[0]
                cd = @mod.definitions[next_name]
                unless cd
                cmp = File.join(Sketchup.find_support_file('plugins'),"TNT_ClickCuisine2/Components/#{next_name}.skp")
                cd = @mod.definitions.load cmp
                end
                @mod.definitions.find{|d|d.name==last3_name}.instances.each{|ci|ci.definition=cd}
                @last3 = @next
                else
                UI.messagebox "#{last3_name} not found."
                end
             end
          

          Before exploring your idea TIG:

          Can your solution manage multiple SKP files or the status of the handles are different for each file?

          For example :

          My Project 1 has been saved with the definition in "9-HANDLE".

          If I open this file the code must look for the definition "9-HANDLE", to replace it with "10-HANDLE".

          My Project 2 is saved in "4-HANDLE".

          If I open this file the code should look for the definition "4-HANDLE", to replace it with "5-HANDLE".

          Another example:

          If I go back with Sketchup, the code that is "4-HANDLE" will return to the "3-HANDLE" state.

          If your idea fulfills all these conditions can you write an example?

          Another idea would be to replace all the definitions that are called "Handle" in their definitions.

          For example:

          "1-Handle", "2-Handle" or "3-Handle" etc ...
          Are replaced because they contain the name "Handle" in their definitions.

          Is this easier to apply?

          If so, how will you change the code?

          Thank you in advance for your help.

          David**

          [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

          1 Reply Last reply Reply Quote 0
          • TNTDAVIDT Offline
            TNTDAVID
            last edited by

            **Hello,

            To replace several definitions with the "next name" definition, I tried this:

            def handles
                  @mod = Sketchup.active_model
                  @ent = @mod.active_entities  
                  @last3 ||= '1' 
                  @next = @last3.next
                  @next = '1' if @next == '4' 
             
                  last3_name = ['1-HANDLE','2-HANDLE','3-HANDLE']
                  next_name = "#{@next}-HANDLE"
            
                  if @mod.definitions[last3_name] && @mod.definitions[last3_name].instances[0]
                  cd = @mod.definitions[next_name]
                  unless cd
                  cmp = File.join(Sketchup.find_support_file('plugins'),"TNT_ClickCuisine2/Components/#
                  {next_name}.skp")
                  cd = @mod.definitions.load cmp
                  end
                  @mod.definitions.find{|d|d.name==last3_name}.instances.each{|ci|ci.definition=cd}
                  @last3 = @next
                  else
                  UI.messagebox "#{last3_name} not found."
                  end
               end
            

            But the code does not work for a list of definitions between these brackets "[]".

            How to replace a list of definitions with the definition "next name" ?

            Any help would be of great help to me.

            Cordially

            David**

            [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

            1 Reply Last reply Reply Quote 0
            • TNTDAVIDT Offline
              TNTDAVID
              last edited by

              **There is news ☀

              As my code is in a class, I tried to apply the advises of TIG, put in "@@".

              Now "@@ next" continues to evolve from 1 to 19, even if the definition that needs to be replaced is not found.

              Even if the situation is better than before, it is not perfect because the code restarts to
              "1-Handle" every time SketchUp runs.

              If the handles on the stage are defined "5-Handle", you have to click 4 times on the icon to change the handle.

              Thank you in advance for your help.**

              def Handle
                  @@mod = Sketchup.active_model
                  @@ent = @@mod.active_entities
                  @@avant ||= '1'
                  @@next = @@avant.next
                  @@next = '1' if @@next == '19'
              	  
                  @@last1 = "#{@@avant}-HANDLE"
                  @@next_name = "#{@@next}-HANDLE"
              	  
               if @@mod.definitions[@@last1]
                  @@cd = @@mod.definitions[@@next_name]	
                  unless @@cd
                  cmp = File.join(Sketchup.find_support_file('plugins'),"TNT_ClickCuisine2/Components/#
                  {@@next_name}.skp")
                  @@cd = @@mod.definitions.load cmp
               end
                  @@mod.definitions.find{|d|d.name==@@last1}.instances.each{|ci|ci.definition=@@cd}
                  @@avant = @@next
               else
                  UI.messagebox "#{@@last1} not found."
               end
              end
              

              [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

              1 Reply Last reply Reply Quote 0
              • sdmitchS Offline
                sdmitch
                last edited by

                I would suggest using attributes to keep tract of "next".

                @@avant = Sketchup.active_model.get_attribute("Handles","Last","1")
                @@next = @@avant.next
                Sketchup.active_model.set_attribute("Handles","Last",@@next)

                Nothing is worthless, it can always be used as a bad example.

                http://sdmitch.blogspot.com/

                1 Reply Last reply Reply Quote 0
                • TNTDAVIDT Offline
                  TNTDAVID
                  last edited by

                  **Great Thanks sdmitch.

                  The general change of all the Handles furniture is finally perfect. 😉

                  I will do the same for all the components of a kitchen, sink, taps, oven etc ...

                  Thanks to your help, "Click-Cuisine 2" will be even easier than ever.

                  A small remark without great consequence:

                  The current code does not replace the unique handles, such as "1-HANDLE # 1".

                  Is it possible to circumvent the problem, if so how?

                  The 2nd Great Steps is to replace the Handles of a single piece of furniture selected, without affecting other furniture.

                  How would you do that?

                  Any help from you is very good news to me. 😄

                  Thank you

                  David**

                  [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

                  1 Reply Last reply Reply Quote 0
                  • sdmitchS Offline
                    sdmitch
                    last edited by

                    @tntdavid said:

                    The current code does not replace the unique handles, such as "1-HANDLE # 1".

                    Is it possible to circumvent the problem, if so how?

                    @@mod.definitions.find{|cd|cd.name=~/#{@@last1}?/i}.instances.each{|ci|ci.definition=@@cd}
                    

                    The 2nd Great Steps is to replace the Handles of a single piece of furniture selected, without affecting other furniture.

                    How would you do that?
                    This would be difficult indeed. The easiest way would be to move the single piece to a new model, make the changes then import it back.

                    David

                    Nothing is worthless, it can always be used as a bad example.

                    http://sdmitch.blogspot.com/

                    1 Reply Last reply Reply Quote 0
                    • TNTDAVIDT Offline
                      TNTDAVID
                      last edited by

                      **Thanks for your Sdmitch solution, but the definitions rendered unique "1-HANDLE # 1" still do not change.

                      Maybe I made a mistake somewhere?

                      def poignee
                          @@mod = Sketchup.active_model
                          @@ent = @@mod.active_entities
                          @@avant = Sketchup.active_model.get_attribute("Handles","Last","1")
                          @@next = @@avant.next
                          @@next = '1' if @@next == '19'	
                      	  
                          @@last1 = "#{@@avant}-POIGNEE"
                          @@next_name = "#{@@next}-POIGNEE"
                      	  
                      if  @@mod.definitions[@@last1]
                          @@cd = @@mod.definitions[@@next_name]	
                          unless @@cd
                          cmp = File.join(Sketchup.find_support_file('plugins'),"TNT_ClickCuisine2/Components/#
                          {@@next_name}.skp")
                          @@cd = @@mod.definitions.load cmp
                          end
                          @@mod.definitions.find{|cd|cd.name=~/#{@@last1}?/i}.instances.each{|ci|ci.definition=@@cd}
                          @@avant = @@next
                          Sketchup.active_model.set_attribute("Handles","Last",@@next)
                          else
                          UI.messagebox "#{@@last1} not found."
                        end
                      end
                      

                      Perhaps it is more interesting not to reload the rendered unique models to find a solution to my 2nd Objective?

                      Here is a simpler idea for the 2nd Objective:

                      1 - I select a piece of furniture.

                      2 - I Click on the icon "Freeze the model". (The method that is executed makes all unique components and subcomponents of my selection.)

                      3 - I can execute the first code without changing the handles of the furniture made unique.

                      How to write this method?

                      Thanks in advance for your help.**

                      [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

                      1 Reply Last reply Reply Quote 0
                      • sdmitchS Offline
                        sdmitch
                        last edited by

                        @tntdavid said:

                        [size=110]Thanks for your Sdmitch solution, but the definitions rendered unique "1-HANDLE # 1" still do not change.

                        Maybe I made a mistake somewhere?

                        def poignee
                        >     @@mod = Sketchup.active_model
                        >     @@ent = @@mod.active_entities
                        >     @@avant = Sketchup.active_model.get_attribute("Handles","Last","1")
                        >     @@next = @@avant.next
                        >     @@next = '1' if @@next == '19'	
                        > 	  
                        >     @@last1 = "#{@@avant}-POIGNEE"
                        >     @@next_name = "#{@@next}-POIGNEE"
                        > 	  
                        > if  @@mod.definitions[@@last1]
                        >     @@cd = @@mod.definitions[@@next_name]	
                        >     unless @@cd
                        >     cmp = File.join(Sketchup.find_support_file('plugins'),"TNT_ClickCuisine2/Components/#
                        >     {@@next_name}.skp")
                        >     @@cd = @@mod.definitions.load cmp
                        >     end
                        >     @@mod.definitions.find{|cd|cd.name=~/#{@@last1}?/i}.instances.each{|ci|ci.definition=@@cd}
                        >     @@avant = @@next
                        >     Sketchup.active_model.set_attribute("Handles","Last",@@next)
                        >     else
                        >     UI.messagebox "#{@@last1} not found."
                        >   end
                        > end
                        

                        I think you need to use the same @@mod.definitions.find when checking for existence also.

                        if @@mod.definitions.find{|d|d.name=~/#{@@last1}?/}
                        	@@cd = @@mod.definitions.find{|d|d.name=~/#{@@next_name}?/}
                        	unless @@cd
                        		cmp = File.join(Sketchup.find_support_file('plugins'),"TNT_ClickCuisine2/Components/#{@@next_name}.skp")
                        		@@cd = @@mod.definitions.load cmp
                        	end
                        	@@mod.definitions.find{|cd|cd.name=~/#{@@last1}?/i}.instances.each{|ci|ci.definition=@@cd}
                        	@@avant = @@next
                        	Sketchup.active_model.set_attribute("Handles","Last",@@next)
                        else
                        	UI.messagebox "#{@@last1} not found."
                        end
                        
                        

                        Nothing is worthless, it can always be used as a bad example.

                        http://sdmitch.blogspot.com/

                        1 Reply Last reply Reply Quote 0
                        • sdmitchS Offline
                          sdmitch
                          last edited by

                          @tntdavid said:

                          Here is a simpler idea for the 2nd Objective:

                          1 - I select a piece of furniture.

                          2 - I Click on the icon "Freeze the model". (The method that is executed makes all unique components and subcomponents of my selection.)

                          3 - I can execute the first code without changing the handles of the furniture made unique.

                          How to write this method?

                          Thanks in advance for your help.[/size]

                          Could you post or PM me a sample model,version<=2016, that I could test.

                          Nothing is worthless, it can always be used as a bad example.

                          http://sdmitch.blogspot.com/

                          1 Reply Last reply Reply Quote 0
                          • TNTDAVIDT Offline
                            TNTDAVID
                            last edited by

                            @sdmitch said:

                            I think you need to use the same @@mod.definitions.find when checking for existence also.

                            **It does not work yet. 😲

                            For the code that makes it unique all of it is found. 😉

                            Here is the example of the updated cube:

                            TESTE 2.skp

                            TNT_Teste.rbz

                            **1.**Open the SKP file Teste 2.

                            2. Install the extension.

                            **3.**Click on the color icon. (All cubes will change texture.)

                            **4.**Click the cube icon. (This will reload the subcomponents.)

                            5. Select the middle cube and click on the padlock.

                            6. Click the cube icon again, you will see that the sub-components of the middle cube will no longer change.

                            7. Click on the color icon, the texture of the middle cube no longer changes. (Unfortunately this is not yet the case and I need your help to write this method.)

                            Thank you

                            David**

                            [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

                            1 Reply Last reply Reply Quote 0
                            • sdmitchS Offline
                              sdmitch
                              last edited by

                              @tntdavid said:

                              6. Click the cube icon again, you will see that the sub-components of the middle cube will no longer change.

                              7. Click on the color icon, the texture of the middle cube no longer changes. (Unfortunately this is not yet the case and I need your help to write this method.)

                              1. I'm not sure why this works at all since we changed to pattern matching of the name to over come the problem with names containing '#'!

                              2. This is never going to work because there is only a single 'color' involved and making a component unique has no effect on the material applied.

                              I'll keep thinking about it but I'm not optimistic about finding a solution.

                              Nothing is worthless, it can always be used as a bad example.

                              http://sdmitch.blogspot.com/

                              1 Reply Last reply Reply Quote 0
                              • sdmitchS Offline
                                sdmitch
                                last edited by

                                I have PM'd you a possible solution to #7

                                Nothing is worthless, it can always be used as a bad example.

                                http://sdmitch.blogspot.com/

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

                                Advertisement