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!
    ⚠️ Update | Sketchucation Tools 5.0.8 released with licensing improvements and bugfixes Download

    [Plugin][WIP] Layers Panel - Dev

    Scheduled Pinned Locked Moved Developers' Forum
    45 Posts 11 Posters 12.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.
    • thomthomT
      thomthom
      last edited by

      @jiminy-billy-bob said:

      @thomthom said:

      Safest thing is to keep everything in your own namespace.

      It thought I did. Can you show what piece of code is wrong ?
      The snippet that modified Sketchup::Layer .

      @jiminy-billy-bob said:

      @thomthom said:

      (note I flipped the quotes)

      Is there a reason for that ? It's better that way ?

      Because with double quoted strings you can do interpolation - like this "Hello #{some_variable}" where as in single quoted you cannot.

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

      1 Reply Last reply
      Reply Quote 0
      • jiminy-billy-bobJ
        jiminy-billy-bob
        last edited by

        @thomthom said:

        The snippet that modified Sketchup::Layer

        Ho, ok. I assumed TIG's work was clean. But this snippet is actually 4 years old, I guess he wasn't aware of that back then.

        Thanks !

        25% off Skatter for SketchUcation Premium Members

        1 Reply Last reply
        Reply Quote 0
        • thomthomT
          thomthom
          last edited by

          Basically, any modification of the Ruby or SketchUp API classes is bad practice. So are global variables.
          There's some old code lingering around from the days before people started to figure out what best practices where.

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

          1 Reply Last reply
          Reply Quote 0
          • jiminy-billy-bobJ
            jiminy-billy-bob
            last edited by

            If I understand ruby classes correctly, I have to rewrite the code, right ?
            I can't have something like layer.delete() while keeping it in my own namespace. Am I right ?

            25% off Skatter for SketchUcation Premium Members

            1 Reply Last reply
            Reply Quote 0
            • thomthomT
              thomthom
              last edited by

              Correct. Make a method under your own namespace that takes the layer as an argument.

              Not as pretty, but it'll work and it will be safe from clashing with anything else.

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

              1 Reply Last reply
              Reply Quote 0
              • jiminy-billy-bobJ
                jiminy-billy-bob
                last edited by

                Ok, here is a new version.

                • Added Toolbar and menu item (Window > Layers Panel), with toggle
                • Change things you TT told me : Undo, +operator, filename...
                • Deleting layers now work properly. The method is wrapped in my namespace. When a layer has geometry, you are promped to choose to delete the content or move it to the default layer.
                • Added a menu for some options. For now you can only purge layers.
                • I also don't have bugsplats anymore. Don't know why exactly... If people get some, please tell me.

                Still no saving, I'm getting used to ruby before attacking this big piece.

                Also, I can't get my WebDialog callbacks to work if the dialog is not in a global variable. I tried local, instance, and class variables, nothing works. What am I doing wrong ?


                Layers Panel 0.02.rbz

                25% off Skatter for SketchUcation Premium Members

                1 Reply Last reply
                Reply Quote 0
                • jiminy-billy-bobJ
                  jiminy-billy-bob
                  last edited by

                  Hmm, so a class variable in a class ? That makes sense ^^
                  Thanks for the tip, I'll try that.

                  25% off Skatter for SketchUcation Premium Members

                  1 Reply Last reply
                  Reply Quote 0
                  • renderizaR
                    renderiza
                    last edited by

                    I hope that naming the Class "TEST" didn't confuse you since the class name doesn't have anything to do with the variables (var test = true) in html. 😕

                    I guess what i am trying to say is that the "var test" in html has nothing to do with "Class TEST" in ruby.

                    Not sure if you are confusing them both but just in case. 💚

                    Note: Will edit the name of the class on my last post to "PLUG".

                    [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

                    1 Reply Last reply
                    Reply Quote 0
                    • renderizaR
                      renderiza
                      last edited by

                      Hi,

                      @jiminy-billy-bob said:

                      Also, I can't get my WebDialog callbacks to work if the dialog is not in a global variable. I tried local, instance, and class variables, nothing works. What am I doing wrong ?

                      If you want to change something from ruby to web-dialog you can do this...

                      In Html & Javascript:

                      
                      <html>
                         <head>
                            <title>Example</title>	
                         </head>
                      
                         <body onLoad="startup(), stopwatch(this.value);">
                      
                         </body>	
                      </html>
                      
                      <script>
                      var delay = 1000/5 ; #this will update 5 frames per second
                      var timerID = false ; 
                      
                      var test = true ;  #this is the value you will change from ruby
                      
                      
                      function startup() {
                      nextFrame();
                      }
                      
                      function stopwatch() {
                      SD=window.setTimeout("stopwatch();", 100);
                      }
                      
                      
                      function nextFrame() {
                      
                         try {
                      
                            test = test
                      
                      
                            setFrame() ;
                      
                            top.timerID = self.setTimeout("nextFrame()", delay) ;
                      
                         } //try
                      
                         catch (e) { 
                            alert("push_frame; " + e) ; 
                         }
                      
                      } //nextFrame()
                      
                      
                      function setFrame() {
                      url = 'skp;push_frame@' ;
                      
                         url += '&test=' + test;
                      
                      window.location.href = url ;
                      }
                      
                      </script>
                      

                      In Ruby:

                      
                      module SU_PLUG
                         class PLUG
                      
                            @@model = Sketchup.active_model ;
                            @@dir = File.dirname(__FILE__) # this plugin's folder
                            @@path = File.join(@@dir, '/Folder/')
                            @@dlg = "test.html" ;
                            @@test_dlg = nil ;
                      
                      
                            def initialize()
                               @test_1_file =  File.join(@@path, @@dlg) 
                      
                               if @@test_dlg == nil
                                   @@test_dlg = UI;;WebDialog.new("Test", false, "Test", 300, 600, 70, 95, true) ;
                      
                                  @@test_dlg.add_action_callback("push_frame") do |d,p| 
                                     push_frame(d,p) 
                                  end
                               end
                      
                               @@test_dlg.set_size(300, 600) ;
                               @@test_dlg.set_file(@test_1_file) ;
                               @@test_dlg.show() ;
                      
                            end #def 
                      
                      
                            def push_frame(dialog,data)
                                params = query_to_hash(data) ;  # parse state information 
                      
                                if params['test'].to_s == "true"  #Example of a  condition.
                      
                                   change = false
                      
                                   script = "top.test= " + change.to_s + ";"    #this sets test=true to test=false
                                   dialog.execute_script(script);   #this execute it
                                end
                            end #def
                      
                      
                            def unescape(string)
                            if string != nil
                            string = string.gsub(/\+/, ' ').gsub(/((?;%[0-9a-fA-F]{2})+)/n) do
                            [$1.delete('%')].pack('H*')
                            end
                            end
                            return string
                            end #def
                      
                            def query_to_hash(query)
                            param_pairs = query.split('&')
                            param_hash = {}
                            for param in param_pairs
                            name, value = param.split('=')
                            name = unescape(name)
                            value = unescape(value)
                            param_hash[name] = value
                            end
                            return param_hash
                            end #def
                      
                      
                         end #class
                      	
                      end #module
                      

                      Hope this helps and again very good plugin!

                      [url=https://www.sketchupcode.com/:z3kqsidd]My Extensions ...[/url:z3kqsidd]

                      1 Reply Last reply
                      Reply Quote 0
                      • Dan RathbunD
                        Dan Rathbun
                        last edited by

                        Ruby uses 2 space indentation. HTML & Javascript 4 space indentation.
                        NOTHING uses 3 or odd number spaced indents !

                        I'm not here much anymore.

                        1 Reply Last reply
                        Reply Quote 0
                        • Dan RathbunD
                          Dan Rathbun
                          last edited by

                          @jiminy-billy-bob said:

                          Also, I can't get my WebDialog callbacks to work if the dialog is not in a global variable. I tried local, instance, and class variables, nothing works. What am I doing wrong ?

                          See this other post: Re: Webdialog scripting issues

                          Use local vars INSIDE methods as temporary variables. They get garbage collected when the method ends.

                          Use @@vars INSIDE modules or for class-wide access.

                          Use @vars in class instance methods (define and init them inside the initialize method.)

                          💭

                          I'm not here much anymore.

                          1 Reply Last reply
                          Reply Quote 0
                          • jiminy-billy-bobJ
                            jiminy-billy-bob
                            last edited by

                            Thanks a lot, I'll try that.

                            25% off Skatter for SketchUcation Premium Members

                            1 Reply Last reply
                            Reply Quote 0
                            • thomthomT
                              thomthom
                              last edited by

                              @dan rathbun said:

                              Ruby uses 2 space indentation. HTML & Javascript 4 space indentation.
                              NOTHING uses 3 or odd number spaced indents !

                              Only Python require a certain indentation - Ruby, HTML and JS doesn't care. It's just coding convention within the team/project you're working with.

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

                              1 Reply Last reply
                              Reply Quote 0
                              • I
                                iannuzzi
                                last edited by

                                Please, don't ever give up on this plugin, it'd save my life! I wish I could help

                                1 Reply Last reply
                                Reply Quote 0
                                • jiminy-billy-bobJ
                                  jiminy-billy-bob
                                  last edited by

                                  I won't give up ! 😄 I just don't have time curently. I will at the end of july.
                                  No worries

                                  25% off Skatter for SketchUcation Premium Members

                                  1 Reply Last reply
                                  Reply Quote 0
                                  • KrisidiousK
                                    Krisidious
                                    last edited by

                                    just posting so I'll get updates on this thread.

                                    By: Kristoff Rand
                                    Home DesignerUnique House Plans

                                    1 Reply Last reply
                                    Reply Quote 0
                                    • jiminy-billy-bobJ
                                      jiminy-billy-bob
                                      last edited by

                                      I made another thread to discuss the behaviour of the plugin : http://sketchucation.com/forums/viewtopic.php?f=323&t=52225

                                      Feel free to participate 😄

                                      25% off Skatter for SketchUcation Premium Members

                                      1 Reply Last reply
                                      Reply Quote 0
                                      • L
                                        Litchi
                                        last edited by

                                        Thanks for your present!This is a great plugin, but I have a problem,I created a layer group,which contains a number of layers,but when I restart the plugin Panel,everything was back to the way they were,the group disappeared, the new layer still exist。

                                        1 Reply Last reply
                                        Reply Quote 0
                                        • jiminy-billy-bobJ
                                          jiminy-billy-bob
                                          last edited by

                                          Yep, it doesn't save anything yet ^^
                                          See the first post :

                                          @jiminy-billy-bob said:

                                          ToDo :

                                          • **Saving ! For now, every time you refresh the webdialog, or exit SU, the sorting/nesting disappears.**So it's useless as is.

                                          It will come. Just not now 😄
                                          It's obviously at the top of my todo list.

                                          25% off Skatter for SketchUcation Premium Members

                                          1 Reply Last reply
                                          Reply Quote 0
                                          • D
                                            driven
                                            last edited by

                                            hi

                                            I just wondered if you had ever seen this, it has some nice ideas, to take forward

                                            404 Not Found

                                            favicon

                                            (sketchucation.com)

                                            I did some work on the mac version, but Chris and Jim had already done the tricky bits...

                                            john

                                            learn from the mistakes of others, you may not live long enough to make them all yourself...

                                            1 Reply Last reply
                                            Reply Quote 0

                                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                            With your input, this post could be even better 💗

                                            Register Login
                                            • 1
                                            • 2
                                            • 3
                                            • 2 / 3
                                            • First post
                                              Last post
                                            Buy SketchPlus
                                            Buy SUbD
                                            Buy WrapR
                                            Buy eBook
                                            Buy Modelur
                                            Buy Vertex Tools
                                            Buy SketchCuisine
                                            Buy FormFonts

                                            Advertisement