sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    πŸ«› Lightbeans Update | Metallic and Roughness auto-applied in SketchUp 2025+ Download

    $ versus @

    Scheduled Pinned Locked Moved Developers' Forum
    20 Posts 11 Posters 3.2k Views 11 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.
    • T Offline
      tomot
      last edited by

      @didier bur said:

      Hi,
      But it is a lazy way of retaining values for your dialog boxes for instance, so user get the last values used.
      One can avoid globals when using classes and methods, classes variables (@@) and objects variables (@).

      I'm sorry but I cant let this topic die just yet. I have carefully reread all the
      comments. Does this quote offer a solution to retaining values in Dialog Boxes?

      [my plugins](http://thingsvirtual.blogspot.ca/)
      tomot

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

        For a dialog's default values that you want keeping from session to session within a particular model, I write them as attributes to the model itself: when the dialog initialises it looks for their values, if they are not there it takes defaults - otherwise you have them saved on a model by model basis... For an example see my TextTag.rb.

        .

        TIG

        1 Reply Last reply Reply Quote 0
        • R Offline
          RickW
          last edited by

          So, there you have it - three solutions that avoid globals:

          1. Sketchup.read_default and Sketchup.write_default (persistent across SketchUp sessions and models)
          2. Attributes (persistent within a given model, between sessions)
          3. Class variables (@@variable) (persistent only within a SketchUp session)

          RickW
          [www.smustard.com](http://www.smustard.com)

          1 Reply Last reply Reply Quote 0
          • T Offline
            todd burch
            last edited by

            For persistent data for Dialog Boxes, you should use Sketchup.write_default and Sketchup.read_default. The keys and values are stored in the registry (Windows) and the plist (Mac).

            Todd

            1 Reply Last reply Reply Quote 0
            • T Offline
              tomot
              last edited by

              @rickw said:

              So, there you have it - three solutions that avoid globals:

              1. Sketchup.read_default and Sketchup.write_default (persistent across SketchUp sessions and models)
              2. Attributes (persistent within a given model, between sessions)
              3. Class variables (@@variable) (persistent only within a SketchUp session)

              Thanks everyone; I took a quick look at TIG's, TextTag.rb. It appears to take a little bit more understanding of Ruby then just simply banging out a mass replacement of @ to $ or vise versa. πŸ˜„ Nevertheless I will try to implement
              these attributes on an exisitng Ruby of mine.

              [my plugins](http://thingsvirtual.blogspot.ca/)
              tomot

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

                Hi all !

                Just one question : How can you do when you have that :

                class ToolsObsTest < Sketchup;;ToolsObserver
                	def onActiveToolChanged (tools_object, toolname, toolid)
                		[b]@t[/b] = toolid
                	end
                end
                

                and this variable @t is used here :

                module
                  def
                    [b]@t[/b]
                  end
                end
                

                So the variable is not used inside the first class section, but inside the instance of a module section ???
                To find variable, I use $....

                How can I preserve variable value ????

                Frenglish at its best !
                My scripts

                1 Reply Last reply Reply Quote 0
                • AdamBA Offline
                  AdamB
                  last edited by

                  Just define your Observer class in the scope of your Module

                  module Foo
                  
                  class ToolsObsTest < Sketchup;;ToolsObserver
                     def onActiveToolChanged (tools_object, toolname, toolid)
                        @t = toolid
                     end
                  end
                  
                  end
                  
                  instance = Foo;;ToolsObsTest.new
                  

                  Developer of LightUp Click for website

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

                    Hi AdamB !
                    Thak you for your answer...

                    I tried it but it didn't work for me... @toolID (variable name in the code) always returns nil....
                    here is the real "tree" of the code (including your advice)

                    module Toto
                    	class ToolsObsTest < Sketchup;;ToolsObserver
                    		def onActiveToolChanged (tools_object, toolname, toolid)
                    			@toolID = toolid
                    		end
                    	end
                    	###
                    	def self.act
                    		model.tools.add_observer(Toto;;ToolsObsTest.new)
                    	end
                    	###
                    	def self.obs(id)
                    		@toolID
                    	end
                    end
                    

                    Do you know why your method doesn't work ?
                    Thank you ! πŸ˜„

                    Frenglish at its best !
                    My scripts

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

                      Matt,

                      The two @toolid are different. One is a Class instance variable, the other a Module variable.
                      If you want to track the toolid in module Toto, then use a method to set its value, which you can call from the class.
                      Note that normally, you might use a Module variable, with @@, (since module instance variables do not really have real application)

                      
                      def Toto.set_toolid(toolid)
                         @@toolid = toolid
                      end
                      def Toto.get_toolid()
                         @@toolid
                      end
                      
                      

                      Fredo

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

                        Hello Fredo6 !
                        Thank you for your answer ! It works great ! get_toolid & set_toolid are perfect !
                        Just one thing, @@variable doesn't work. Just @variable...

                        Thank you Fredo ! πŸ˜‰ πŸ˜„ πŸ˜„

                        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