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

    ICON MF_ENABLED, MF_CHECKED

    Scheduled Pinned Locked Moved Developers' Forum
    37 Posts 5 Posters 3.7k Views 5 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
      kaas
      last edited by

      Just looking at the error: Error: #<NameError: undefined local variable or methodcommandA'`
      My guess would be you forgot to add the @ in these lines. If you don't add it, the commandA is not initialized/set.


      command.jpg

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

        As @kaas succinctly says...

        Your code is full of typos or un-corrected errors. 😕
        Please proofread more closely [see below]...

        Also learn to read the error messages - where the reference or the line is given in the error-message in the Ruby Console...

        If you have Notepad++ and still can't locate the erroneous line, then you could select a variable's name and use 'find' to 'mark' all matching strings in your code.
        Any strings with a similar, BUT not exactly-matching, name can be found using a 'find' etc...

        This is an issue of attention to detail and care, rather than understanding how the code might work...
        5/10 😮

        TIG

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

          Thanks you kaas for your advices.

          I added the "@", and there is always the same error message.

          @tig said:

          Your code is full of typos or un-corrected errors.

          Or are errors frape TIG?

          That surprises me because the code works without any error message if there is no longer the @. 😮

          To my typos, you refer to your examples:

          @tig said:

          @cmdA=UI.command.new('cmdA'){self.cmdA())

          I had to correct like this:

          @commandA = UI::Command.new("cmdA"){ ClickWindow.cmdA()}

          If not, there was a lot of error messages for a single line.

          Thank you to tell me that I have errors in my code, I would be happier if you show 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
          • TIGT Online
            TIG Moderator
            last edited by

            OK, gloves off... 😕

            You do not seem to be able to understand OR to appreciate good advice...
            Many of us had offered tips, which you then ignore - often annoyingly !
            ...

            In the example code you posted, you use 'commandA' and 'cmdA' with no thought as to what they refer to !!!
            One is a 'command' and the other is a 'method' resulting from that command...

            So as it is this will certainly fail.

            Please learn how to inspect your code, for at least some semblance of order, and correct it...


            The rest of us have other lives to lead and work to do - please try to help us to help you................

            TIG

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

              @tig said:

              OK, gloves off...

              You do not seem to be able to understand OR to appreciate good advice...
              Many of us had offered tips, which you then ignore - often annoyingly !

              Of course I'm taking your advice and I'm doing my best to move forward.

              I voluntarily writing new code, to follow your example, so it is not fair to say things like that. 😮

              @tig said:

              In the example code you posted, you use 'commandA' and 'cmdA' with no thought as to what they refer to !!!
              One is a 'command' and the other is a 'method' resulting from that command...

              I did the same thing on your example, "cmdA" is a method of command is "commandeA".

              So I do not understand or you see a problem?

              Perhaps if you do a simple copy / paste my code with your corrections, it would be much simpler and effective?
              It's allow myself to understand my mistakes very quickly.

              [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

                Sorry I got overwrought. 😳
                But you can be very frustrating...

                def self.cmdA() is the method that is run by the command @commandA

                The reason you make it an instance variable with the @ is that the method should see the reference to the command, without it it will not.

                As @kaas highlighted in yellow boxes you [correctly] set up @commandA and later on make a reference to commandA which will not work !
                You also make the same error for @commandB...

                Please read your code carefully.

                With Notepad++ if you select the text @commandA all occurrences of it will be colored.
                You can then 'mark' then, then select commandA [sans @] and all will color - including so that were not marked in the earlier step, because of the missing @...

                TIG

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

                  TIG no problem. 😉

                  Indeed "Kaas" had identified the problem!

                  As a noodle, I did not understand that the "@" missing, should be in brackets.

                  The solution to the error message is simply this:

                  cc_menu.add_item (@commandA) tb.add_item (@commandA)

                  And it's the same for "commandeB".

                  As this problem is resolved, we can move forward hopefully. 💚

                  TIG, the line of code:

                  @commandA.set_validation_proc{MF_DISABLED}

                  Does not work!

                  If there are orders below this line, they will not be executed.

                  I tried all possible variants, with the "@" among the accolades, but it does not change ...

                  1.Do you knows why?


                  Other subject:

                  The more I discovered the ruby, the more I realize that it is an incredible complexity. 😮

                  If I write this in ruby ​​consol:

                  model = Sketchup.active_model  
                  model_definition = model.definitions
                  model_def = model_definition['box']
                  valeur = model_def.get_attribute 'dynamic_attributes','mode'
                  

                  She references me the value of the "mode" attribute, which exists in the dynamic component, "box".

                  Let's say the result is 1.

                  If I add this logic test:

                  if valeur == 1
                  puts "MODE 1"
                  else
                  puts "MODE2"
                  end
                  

                  He answer each time, "Mode 2".

                  Or am i completely off base of wall, if who is the safest, or the ruby ​​script is not logical. 😮 😮 😮

                  2.Can you tell me, how such a thing is possible?

                  I thank you for your emotional support.

                  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

                    Answering in reverse order...

                    DC values are strings
                    If it exists it might be say "1" rather than 1
                    If it doesn't exist it'd be nil - UNLESS you use a default response...
                    valeur = model_def.get_attribute('dynamic_attributes', 'mode', 'merde')
                    In which case you'd get a meaningful 'bad' result...
                    To see if it's getting read add in...
                    puts @commandA
                    It should show a valid command in the Ruby Console...
                    then try...
                    @commandA.set_validation_proc{ MF_DISABLED }
                    Try other alternatives: MF_ENABLED, MF_DISABLED, MF_CHECKED, MF_UNCHECKED, or MF_GRAYED.
                    ALWAYS test your code running it with the Ruby Console open, so you see the useful error messages...

                    Remember that the commands need to 'negate' their opposite sibling command...
                    Remember that your code needs to disable the opposite command as it starts and then re-enable it on completion of its processing, otherwise it'll remain disabled thereafter !

                    TIG

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

                      @TNTDAVID - to investigate problems like this yourself, you just do puts valeur just after valeur = model_def.get_attribute 'dynamic_attributes','mode'
                      At that moment you will see a value, an error, a string etc - when you expected an int etc etc. Next you can try to fix it.

                      If that puts returns a value though as expected you do the same in the next line where some code is executed etc etc. Repeat until you solved the problem.
                      Leaving the ruby console open is essential because errors are displayed there with some hints/line numbers where the code fails.

                      For anyone new in ruby (also for me), this really helps in learning why code fails. Asking here might result in a solution but you will learn not as much compared to trying to debug your code yourself.

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

                        I do not have the expected result, but at least the code works with the "puts".

                        @commandB.set_validation_proc{ puts MF_DISABLED }

                        The ruby console goes crazy, and sending 0 continuously after clicking on an icon ...

                        Here's the code:

                        module TesteCube
                        
                            module ClickWindow
                          
                            @@path_to_resources = File.join(File.dirname(__FILE__), 'Resources')
                          
                            if !file_loaded?(__FILE__)
                        	
                            su_menu = UI.menu("Plugins")
                            cc_menu = su_menu.add_submenu(%Q(TesteCube))
                            tb = UI;;Toolbar.new(%Q(TesteCube))
                        
                            @commandA = UI;;Command.new("mode1"){ ClickWindow.cmdA()}
                            @commandA.small_icon = File.join(@@path_to_resources,"add_A.png")
                            @commandA.large_icon = File.join(@@path_to_resources,"add_A.png")
                            @commandA.tooltip = %Q(Opens Settings SketchUp)
                            @commandA.status_bar_text = %Q(Opens Settings SketchUp)
                            @commandA.menu_text = %Q(Opens Settings SketchUp)
                            cc_menu.add_item(@commandA)
                            tb.add_item(@commandA)
                        	
                        	
                            @commandB = UI;;Command.new("mode1"){ ClickWindow.cmdB()}
                            @commandB.small_icon = File.join(@@path_to_resources,"add_B.png")
                            @commandB.large_icon = File.join(@@path_to_resources,"add_B.png")
                            @commandB.tooltip = %Q(Opens Settings SketchUp)
                            @commandB.status_bar_text = %Q(Opens Settings SketchUp)
                            @commandB.menu_text = %Q(Opens Settings SketchUp)
                            cc_menu.add_item(@commandB)
                            tb.add_item(@commandB)
                        	
                            tb.restore
                        	
                            file_loaded(__FILE__) 
                        	
                            end
                        	
                            def self.cmdA() 
                            @commandB.set_validation_proc{
                            puts MF_DISABLED
                            }
                            model = Sketchup.active_model  
                            model_definition = model.definitions
                            model_def = model_definition['Box']
                             
                            model_def.set_attribute 'dynamic_attributes','a0000mode', '1'
                            model_def.set_attribute 'dynamic_attributes','_a0000mode_label', 'mode'
                            model_def.set_attribute 'dynamic_attributes','_a0000mode_units', 'STRING'
                            model_def.set_attribute 'dynamic_attributes','_a0000mode_access', 'TEXTBOX'
                        	
                            @commandB.set_validation_proc{
                            puts MF_ENABLED
                            }
                            end
                        	
                            ### you say you want vice vers affects from the two toolbar buttons ! ?????
                        	
                            def self.cmdB() 
                            @commandA.set_validation_proc{
                            puts MF_DISABLED
                            }
                            model = Sketchup.active_model  
                            model_definition = model.definitions
                            model_def = model_definition['Box']
                             
                            model_def.set_attribute 'dynamic_attributes','mode', '2'
                            model_def.set_attribute 'dynamic_attributes','_mode_label', 'mode'
                            model_def.set_attribute 'dynamic_attributes','_mode_units', 'STRING'
                            model_def.set_attribute 'dynamic_attributes','_mode_access', 'TEXTBOX'
                        	
                            @commandA.set_validation_proc{
                            puts MF_ENABLED
                            }
                            end
                        
                          end
                           
                        end
                        

                        The code inside the methods are properly executed, but the icons state does not change.

                        What's wrong?

                        @tig said:

                        DC values are strings
                        If it exists it might be say "1" rather than 1

                        TIG thank you, it works fine now. 👍

                        The message is passed, "Kaas" I work only with the ruby consol to find my mistakes.

                        I just noticed that the ruby consol, create the toolbar and the icons. 😛

                        It lacks the "png", but this is normal.

                        Big thank you to you both for your advice.

                        Thank you

                        [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
                        • K Offline
                          kaas
                          last edited by

                          The 'crazy console' is because you put a puts at a very strange position ?!?

                          @commandB.set_validation_proc{puts MF_DISABLED}

                          Why did you put the puts there?? It makes no sense (to me). Think about the difference.

                          @commandB.set_validation_proc{MF_DISABLED}

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

                            If I remove the strange puts it still doesn't work and I think the reason is; you mixed up the logic for enabling / disabling the buttons;
                            if you enable A, you should disable B and vice versa. In your code you first enable A and then disable the same again.

                            The code below does show switching icons. I used CHECKED instead of ENABLED so its more clear.

                            module TesteCube
                                module ClickWindow
                            			@@path_to_resources = File.join(File.dirname(__FILE__), 'Resources')
                             
                            			if !file_loaded?(__FILE__)			 
                            				su_menu = UI.menu("Plugins")
                            				cc_menu = su_menu.add_submenu(%Q(TesteCube))
                            				tb = UI;;Toolbar.new(%Q(TesteCube))
                            
                            				@commandA = UI;;Command.new("mode1"){ ClickWindow.cmdA()}
                            				@commandA.small_icon = File.join(@@path_to_resources,"add_A.png")
                            				@commandA.large_icon = File.join(@@path_to_resources,"add_A.png")
                            				@commandA.tooltip = %Q(Opens Settings SketchUp)
                            				@commandA.status_bar_text = %Q(Opens Settings SketchUp)
                            				@commandA.menu_text = %Q(Opens Settings SketchUp)
                            				cc_menu.add_item(@commandA)
                            				tb.add_item(@commandA)
                            			 
                            				@commandB = UI;;Command.new("mode1"){ ClickWindow.cmdB()}
                            				@commandB.small_icon = File.join(@@path_to_resources,"add_B.png")
                            				@commandB.large_icon = File.join(@@path_to_resources,"add_B.png")
                            				@commandB.tooltip = %Q(Opens Settings SketchUp)
                            				@commandB.status_bar_text = %Q(Opens Settings SketchUp)
                            				@commandB.menu_text = %Q(Opens Settings SketchUp)
                            				cc_menu.add_item(@commandB)
                            				tb.add_item(@commandB)
                            			 
                            				tb.restore
                            				file_loaded(__FILE__)
                            			end
                            		 
                            			def self.cmdA()
                            				#puts'cmdA'
                            				@commandA.set_validation_proc{MF_CHECKED}
                            				@commandB.set_validation_proc{MF_DISABLED}
                            			end
                            		 
                            			def self.cmdB()
                            				#puts'cmdB'
                            				@commandA.set_validation_proc{MF_DISABLED}
                            				@commandB.set_validation_proc{MF_CHECKED}
                            			end
                              end
                            end
                            
                            1 Reply Last reply Reply Quote 0
                            • TNTDAVIDT Offline
                              TNTDAVID
                              last edited by

                              Kaas Congratulations!

                              A simple test of logic and the code works. 👍

                              For "puts", I misunderstood fredo:

                              @fredo6 said:

                              This is a proc, so it is called by Sketchup and expect a return value to set the state of the icon. It is called almost continuously (you can check that by the statement command18.set_validation_proc { puts "icon proc" ; MF_GRAYED }.

                              I can resume my labors, and I hold you informed of advancements or problems. 💚

                              Thank you for your help!

                              See you soon

                              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

                                A question that comes to mind. 💚

                                How an icon can be activated and deactivated with each click.

                                Example:

                                1st click on iconeA = "MF_CHECKED"
                                2nd click on iconeA = "MF_ENABLED"
                                3rd click on iconeA = "MF_CHECKED" ....

                                I tried this line of code:

                                @commandA.set_validation_proc{ MF_CHECKED; MF_ENABLED }

                                It does not work.

                                Do you know the method to be followed?

                                Thank you

                                [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
                                • K Offline
                                  kaas
                                  last edited by

                                  No surprise it doesn't work - you are making up code that doesn't exist in the API. http://www.sketchup.com/intl/en/developer/docs/ourdoc/command#set_validation_proc

                                  Just make a @variable to store the current state (0/1/2) and after clicking on an icon read the variable, use the proper MF_... and set the @variable to another value.

                                  Off-topic; coming from someone who is selling a SketchUp plugin for E99,- I find your questions and knowledge of Ruby rather 'strange'...

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

                                    I discovered the ruby ...

                                    My plugins are tools that work only with Dynamic Components.

                                    Many underestimate the power of dynamic components, which offer unlimited possibilitys.

                                    Example:

                                    Click-Change or Click-Kitchen, totaling 100,000 downloads, and more than a Million views in the entropot extensions.

                                    And 100% of my clients are satisfied.

                                    I am currently working on an updated Click-Window 3D, which will bring a lot of positive change.

                                    If I cling to the ruby, it's in the one and only goal, to offer even more to my customers.

                                    [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

                                      With your code
                                      @commandA.set_validation_proc{ MF_CHECKED; MF_ENABLED }
                                      It should set the @commandA menu item to be checked and enabled.
                                      It probably won't 'check' the toolbar button - which should be enabled or disabled/grayed ?
                                      BUT before you do that have you added
                                      puts @commandA in a line immediately before.
                                      When you run the command from its button, then it is shows up in the Ruby Console as a reference to a command if it's working right, but if it's nil it's somehow coded wrongly...

                                      TIG

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

                                        Good evening,

                                        Icon 1, use the following method:

                                        def self.panel
                                              model = Sketchup.active_model 
                                              layers = model.layers 
                                              new_layer = layers.add "Click-Window 3D"
                                              if new_layer.visible?
                                              new_layer.visible = false 
                                              else
                                              new_layer.visible = true 
                                              end
                                              end
                                        

                                        Icon 2, uses this method:

                                        def self.layerhid
                                              model = Sketchup.active_model 
                                              layers = model.layers
                                              new_layer = layers.add "Click-Window 3D"
                                              new_layer.visible = false
                                              instance.layer = new_layer
                                              end
                                        

                                        When I use the two icons, the visibility of the layer starts to bugger.

                                        Even if the code activates or deactivates the layer in the Layers window, the composents with this layer do not change state.

                                        Do you know why this strange bug?

                                        If so, how to avoid it?

                                        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
                                        • K Offline
                                          kaas
                                          last edited by

                                          If you added some puts to your code, you could get some more info on what your code is doing and where/why your code fails.

                                          In short:
                                          your first block (self.panel) is just toggling the visibility of new_layer
                                          your second block (self.layerhid) is always hiding the visibility of new_layer

                                          instance has not been defined in that second block so if you try to change its layer using instance.layer= it will fail. It probably has to be @my_instance that you have defined elsewhere. There probably was an error message about that in the Ruby Console that you forgot to read/post...

                                          
                                          def self.panel
                                          	model = Sketchup.active_model
                                          	layers = model.layers
                                          	new_layer = layers.add "Click-Window 3D" 
                                          	if new_layer.visible?
                                          		new_layer.visible = false
                                          		puts %(self.panel is setting visibility to false)
                                          	else
                                          		new_layer.visible = true
                                          		puts %(self.panel is setting visibility to true)
                                          	end
                                          end
                                          
                                          def self.layerhid
                                          	model = Sketchup.active_model
                                          	layers = model.layers
                                          	new_layer = layers.add "Click-Window 3D"
                                          	new_layer.visible = false
                                          	puts %(self.layerhid is setting visibility to false)
                                          	instance.layer = new_layer
                                          	puts instance.layer
                                          end
                                          
                                          1 Reply Last reply Reply Quote 0
                                          • TNTDAVIDT Offline
                                            TNTDAVID
                                            last edited by

                                            @tig said:

                                            With your code
                                            @commandA.set_validation_proc{ MF_CHECKED; MF_ENABLED }
                                            It should set the @commandA menu item to be checked and enabled.

                                            Thank you for that clarification, TIG.

                                            @kaas said:

                                            instance has not been defined in that second block so if you try to change its layer using instance.layer= it will fail. It probably has to be @my_instance that you have defined elsewhere. There probably was an error message about that in the Ruby Console that you forgot to read/post...

                                            Oops! I made a mistake in my copy / pasted, instance.layer should not exist in "Method layerhid".

                                            As I noticed the error in the ruby ​​console, and there to any subject in the API on "instance.layer", I ended up deleting it.

                                            Regarding "Puts", I added them more, because it can prevent in some cases, a method of work.

                                            Example:

                                            if new_layer.visible?
                                                 puts new_layer.visible = false # action 1A
                                                 puts Sketchup.send_action "selectSelectionTool;" # action 2A
                                                 elsif
                                                 puts new_layer.visible = true # action 1B
                                                 puts Sketchup.active_model.select_tool(DCInteractTool.new($dc_observers)) # action 2B
                                                 end
                                            

                                            This does not work!

                                            If I remove the puts as:

                                            if new_layer.visible?
                                                 new_layer.visible = false # action 1A
                                                 Sketchup.send_action "selectSelectionTool;" # action 2A
                                                 elsif
                                                 pnew_layer.visible = true # action 1B
                                                 Sketchup.active_model.select_tool(DCInteractTool.new($dc_observers)) # action 2B
                                                 end
                                            

                                            The code works!

                                            With or without "Puts", the console displays the line number or there is an error.

                                            So what are the avanatges of "Puts"?

                                            @kaas said:

                                            def self.panel
                                                model = Sketchup.active_model
                                                layers = model.layers
                                                new_layer = layers.add "Click-Window 3D"
                                               if new_layer.visible?
                                                  new_layer.visible = false
                                                  puts %(self.panel is setting visibility to false)
                                               else
                                                  new_layer.visible = true
                                                  puts %(self.panel is setting visibility to true)
                                               end
                                            end

                                            def self.layerhid
                                                model = Sketchup.active_model
                                                layers = model.layers
                                                new_layer = layers.add "Click-Window 3D"
                                                new_layer.visible = false
                                                puts %(self.layerhid is setting visibility to false)
                                                instance.layer = new_layer
                                                puts instance.layer
                                            end

                                            Thank you for your example code.

                                            Unfortunately the problem still exists.

                                            Here is the error message:

                                            @unknownuser said:

                                            self.layerhid is setting visibility to false
                                            Error: #<NoMethodError: undefined method transform!' for #<Sketchup::ComponentDefinition:0x0000000e47fb40>> c:/users/david/appdata/roaming/sketchup/sketchup 2015/sketchup/plugins/su_dynamiccomponents/ruby/dcclass_v1.rbs:454:in redraw'
                                            c:/users/david/appdata/roaming/sketchup/sketchup 2015/sketchup/plugins/su_dynamiccomponents/ruby/dcclass_v1.rbs:406:in redraw_with_undo' C:/Users/DAVID/AppData/Roaming/SketchUp/SketchUp 2015/SketchUp/Plugins/TNT_ClickWindow3D_Pro_mm/logic.rb:217:in mode1'
                                            C:/Users/DAVID/AppData/Roaming/SketchUp/SketchUp 2015/SketchUp/Plugins/TNT_ClickWindow3D_Pro_mm/logic.rb:252:in block in <module:CW_Pro_mm>' SketchUp:1:in call'

                                            Here are the relevant lines:

                                            L217 - $dc_observers.get_latest_class.redraw_with_undo(model_def) # mode 1

                                            L252 - @commandA = UI::Command.new("Mode 1"){ CW_Pro_mm.mode1 }

                                            L406 - command12.tooltip = %Q(add Crank Window)

                                            L454 - @commandO.small_icon = File.join(@@path_to_resources,"add_O.png")

                                            I'm surprised these lines triggers an error message!

                                            They exist in other methods or command, with these objects that works.

                                            It is therefore difficult to understand the reasons of the error message. 😮

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

                                            Advertisement