sketchucation logo sketchucation
    • Login
    โ„น๏ธ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    $ versus @

    Scheduled Pinned Locked Moved Developers' Forum
    20 Posts 11 Posters 3.0k 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.
    • AdamBA Offline
      AdamB
      last edited by

      I'd suggest always re-instance a Tool unless there is a compelling reason to make it persist.

      As a general rule, releasing resources as soon as possible is a GoodThing, and secondly - and probably more importantly in a Ruby context, to ensure you don't carry references to Ruby objects and therefore stop garbage collection happening - worse still carry stale references to objects that have subsequently been deleted which tends to make SU jump into the azure blue sea of unallocated heap store and commit hare-kiri.

      Adam

      Developer of LightUp Click for website

      1 Reply Last reply Reply Quote 0
      • 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