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

Namespace and Tool Class Question

Scheduled Pinned Locked Moved Developers' Forum
3 Posts 3 Posters 328 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.
  • K Offline
    ktkoh
    last edited by 10 Mar 2013, 21:11

    I have started working on my wood joint tools script to wrap it in my namespace and this is what I came up with so far. The attached code that demonstrates only the Dowell part of my tools. This works, however I would like some comments on the method.
    I retained the old directory structure for the actual tool K2WS_Tools\K2_ToolsDowelJoint.rb so that the new version would overwrite the old version for users that have downloaded the old version.

    Keith

    #This Program Loads the Individual K2_Tools when their Menu is accessed!
    require 'K2WS/k2ws_module.rb' #-NameSpace Module
    
    module K²WS;;K2_ToolsLoader
    
      class << self
    
        #ToolBars are only created when Menu Item is selected
        
        
        
        def dowel_ToolBar	
          if  @tlb5== nil
            itcmd51 = UI;;Command.new("Dowel Joint") {dowelJoint}
            itcmd51.tooltip = "Complete Dowel Joint"
            itcmd51.small_icon = File.join(File.dirname(__FILE__),"K2_ToolsSupportFiles","DowelJoint_small.png")
            itcmd51.large_icon = File.join(File.dirname(__FILE__),"K2_ToolsSupportFiles","DowelJoint_large.png")
            itcmd52 = UI;;Command.new("Dowels 1 Comp") {dowel1Comp}
            itcmd52.small_icon = File.join(File.dirname(__FILE__),"K2_ToolsSupportFiles","Dowel1Comp_small.png")
            itcmd52.large_icon = File.join(File.dirname(__FILE__),"K2_ToolsSupportFiles","Dowel1Comp_large.png")
            itcmd52.tooltip = "Dowel 1 Comp"
            @tlb5 = UI;;Toolbar.new("Dowels")
            @tlb5.add_item(itcmd51)
            @tlb5.add_item(itcmd52)
            @tlb5.show
          else
            #state = @tlb5.get_last_state
            #UI.messagebox("State of Dowel ToolBar " + state.to_s)
            @tlb5.show
          end
        end
    
        def dowelJoint
          require  'K2WS_Tools\K2_ToolsDowelJoint.rb'
          Sketchup.active_model.select_tool K2_Tools_Dowel_Joint.new  
        end
        
        
        def dowel1Comp
          require  'K2WS_Tools\K2_ToolsDowelJoint.rb'
          Sketchup.active_model.select_tool K2_Tools_Dowel_Holes.new
          
        end
        
        
        
        
      end # proxy class
      
      #Run Once
    	unless file_loaded?(File.basename(__FILE__))
    		
        # Access the main Tools menu
        tools_menu = UI.menu "Tools"
        # Add a separator and a submenu
        tools_menu.add_separator
        sub_menu = tools_menu.add_submenu("KK_Tools")
        # Add items to the submenu
    		
        it1= sub_menu.add_item("Dowels"){dowel_ToolBar}
        
        
      file_loaded(File.basename(__FILE__))  
         
      end #End Run Once 
    
     
     end #module K²WS;;K2_ToolsLoader
    
    1 Reply Last reply Reply Quote 0
    • A Offline
      Aerilius
      last edited by 10 Mar 2013, 22:54

      Looks good so far. I haven't seen anyone using ² in a module name (but if it works, though Unicode characters like ᚠᚢᚦᚨᚱᚲ are not supported in our version of Ruby in SketchUp, otherwise my plugins would be full of them).

      @unknownuser said:

      'K2WS_Tools\K2_ToolsDowelJoint.rb'
      

      Ruby internally uses forward slashes that are common on all unix and most non-unix systems. To deal with file paths, you let Ruby handle the delimiters and use the File methods like File.join("K2WS_Tools", "K2_ToolsDowelJoint.rb"). Also it would be best if your plugin works independent of the installation path. Therefore define a constant in your main ruby file (or loader) in your namespace
      PLUGIN_ROOT = File.dirname(__FILE__) unless defined(self::PLUGIN_ROOT)
      and reference all files relative to that.

      1 Reply Last reply Reply Quote 0
      • T Offline
        thomthom
        last edited by 10 Mar 2013, 23:24

        @aerilius said:

        Looks good so far. I haven't seen anyone using ² in a module name (but if it works, though Unicode characters like ᚠᚢᚦᚨᚱᚲ are not supported in our version of Ruby in SketchUp, otherwise my plugins would be full of them).

        ² also exists in the ANSI set - so I could be a simple one byte character is he used that encoding.

        @aerilius said:

        Looks good so far. I haven't seen anyone using ² in a module name (but if it works, though Unicode characters like ᚠᚢᚦᚨᚱᚲ are not supported in our version of Ruby in SketchUp, otherwise my plugins would be full of them).

        I copied the example from this page: http://www.oreillynet.com/ruby/blog/2007/10/fun_with_unicode_1.html

        <span class="syntaxdefault"><br />module&nbsp;Kernel<br />&nbsp;&nbsp;&nbsp;alias&nbsp;λ&nbsp;proc<br /><br />&nbsp;&nbsp;&nbsp;def&nbsp;∑</span><span class="syntaxkeyword">(*</span><span class="syntaxdefault">args</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">sum&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;args</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">each</span><span class="syntaxkeyword">{&nbsp;|</span><span class="syntaxdefault">e</span><span class="syntaxkeyword">|&nbsp;</span><span class="syntaxdefault">sum&nbsp;</span><span class="syntaxkeyword">+=&nbsp;</span><span class="syntaxdefault">e&nbsp;</span><span class="syntaxkeyword">}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">sum<br />&nbsp;&nbsp;&nbsp;end<br /><br />&nbsp;&nbsp;&nbsp;def&nbsp;√</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">root</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">Math</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">sqrt</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">root</span><span class="syntaxkeyword">)<br />&nbsp;&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />end<br /></span>
        

        And it worked:
        ` # A real lambda
        λ { puts ‘Hello’ }.call => ‘Hello’

        Sigma - sum of all elements

        ∑(1,2,3) => 6

        Square root

        √ 49 => 7.0`

        You can also do this:

        <span class="syntaxdefault"><br />module&nbsp;MyTest<br />&nbsp;&nbsp;def&nbsp;self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">ᚠᚢᚦᚨᚱᚲ<br />&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;</span><span class="syntaxstring">'world'<br />&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />end<br /></span>
        

        But not this:

        <span class="syntaxdefault"><br />module&nbsp;ᚠᚢᚦᚨᚱᚲ<br />&nbsp;&nbsp;def&nbsp;self</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">hello<br />&nbsp;&nbsp;&nbsp;&nbsp;puts&nbsp;</span><span class="syntaxstring">'world'<br />&nbsp;&nbsp;</span><span class="syntaxdefault">end<br />end<br /></span>
        

        Return an error:
        Error: #<SyntaxError: (eval):516: compile error (eval):516: class/module name must be CONSTANT module ᚠᚢᚦᚨᚱᚲ; def self.hello; puts 'world'; end; end ^> (eval):516

        That seem to be related to ᚠ not being recognised as a capital letter.

        Because this works:

        <span class="syntaxdefault"><br />module&nbsp;Xᚠᚢᚦᚨᚱᚲ</span><span class="syntaxkeyword">;&nbsp;</span><span class="syntaxdefault">end<br /></span>
        

        Thomas Thomassen — SketchUp Monkey & Coding addict
        List of my plugins and link to the CookieWare fund

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

        Advertisement