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

    Trying to sort scenes by alphabetical order..Need Help!

    Scheduled Pinned Locked Moved Developers' Forum
    14 Posts 5 Posters 615 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.
    • renderizaR Offline
      renderiza
      last edited by

      Hi,

      So far I am trying the following but when I sort them by name they all merge together into one name and I can't then iterate using .each. How I can I solve this...thanks!

      
      model = Sketchup.active_model ;
      pages = model.pages ;
      
      data = [] ;
      org = [] ;
      
      pages.each do |page|
        data << page.name ;   
      end ;#Pages.each
      
      org << data.sort do |a,b| a <=> b end ;
      
      num = pages.count ;
      
      org.each do |e|
      UI.messagebox e ; 
      end ;
      

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

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

        org = pages.map{|pg| pg.name }.sort!
        
        

        cna replace all this:

        data = []
        org = []
        
        pages.each do |page|
          data << page.name ;   
        end ;#Pages.each
        
        org = data.sort do |a,b| a <=> b end
        
        

        PS: why are you putting ; at the end of each line ?

        I'm not here much anymore.

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

          BTW.. the API does not expose the moving of a page to a new location.

          You have to clone the page (incl. all it's properties,) to the new location, and then delete the old page.

          When you use pages.add the API uses the current selected page as the "mold".

          I'm not here much anymore.

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

            Hi,

            Thanks yet again!

            @dan rathbun said:

            PS: why are you putting ; at the end of each line ?

            I though that was good practice πŸ˜•

            Keep in mind I never took a programming class in my life so I am very thankful for people steping in and pointing something that it shouldn't be done. πŸ‘

            So no need to put ";" ?

            @dan rathbun said:

            BTW.. the API does not expose the moving of a page to a new location.

            You have to clone the page (incl. all it's properties,) to the new location, and then delete the old page.

            When you use pages.add the API uses the current selected page as the "mold".

            Yes I was thinking of doing what you just suggested.

            Again Thanks a lot!

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

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

              @renderiza said:

              So no need to put ";" ?

              only if more than 1 statement per line (like in the console.)

              Otherwise you just make your files larger, and make the interpreter read an extra character each line.

              I'm not here much anymore.

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

                Thanks that is good to know!

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

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

                  Hi, here is my progress so far...

                  
                  model = Sketchup.active_model 
                  pages = model.pages 
                  page_num = 0 
                  org = pages.map{|pg| pg.name }.sort!
                  num = pages.count 
                  amount = 0 
                  times = 0 
                  
                  begin
                      pages.each { |page|
                          page.transition_time=0 
                          if page.name == "#{org[amount]}"
                              pages.selected_page = model.pages[page_num] 
                              break
                          end 
                          page_num+=1 
                                    
                      } #pages.each
                  	
                  page_num = 0 
                  amount += 1 if amount < num
                  
                  pages.add "#{org[amount-1]}" 
                  
                  end while amount < num
                  
                  
                  begin
                  pages.selected_page = model.pages[0] 
                  Sketchup.send_action(CMD_PAGE_DELETE)
                  times += 1
                  end while times < num
                  

                  The above code will reorganize your scenes by name. The only thing I wish it would change is if it didn't have to prompt a message before deleting unwanted scenes but other than that I am happy with results!

                  If anyone have any suggestions in making my code fancier and better written please let me know.

                  Again Thanks!

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

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

                    Hi,

                    Here is little code sniped for renaming all scenes and add number...

                    model = Sketchup.active_model 
                    pages = model.pages 
                    @page_name = "Name" 
                    @page_num = 1 
                    
                    pages.each do |page| 
                        page.name = "#{@page_name}#{@page_num}"
                        @page_num = @page_num + 1
                    end ;#Pages.each
                    

                    Cheers!

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

                    1 Reply Last reply Reply Quote 0
                    • Chris FullmerC Offline
                      Chris Fullmer
                      last edited by

                      @renderiza said:

                      The only thing I wish it would change is if it didn't have to prompt a message before deleting unwanted scenes but other than that I am happy with results!

                      Instead of:

                      pages.selected_page = model.pages[0] 
                      Sketchup.send_action(CMD_PAGE_DELETE)
                      

                      use:

                      my_page = model.pages[0] 
                      model.pages.erase( my_page )
                      

                      That will delete the page without issuing a warning to the user.

                      Lately you've been tan, suspicious for the winter.
                      All my Plugins I've written

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

                        #You are over complicating it somewhat.
                        #Also it's a bit clearer if you use {}, for the new 'sorted' pages:
                        ` model = Sketchup.active_model
                        pages = model.pages
                        selpage = pages.selected_page.name
                        opages = pages.map**{**[/b] |pg| pg.name }.sort
                        num = opages.length

                        opages.each**{** |page|
                        optt = pages[page].transition_time #***
                        pages[page].transition_time = 0

                        fix delay_time too***

                        opdt = pages[page].delay_time #***
                        pages[page].delay_time = 0
                        pages.selected_page = pages[page]
                        newp = pages.add(page)
                        newp.transition_time = optt
                        newp.delay_time = opdt
                        }#***Good idea to store the original page.transition_time& delay_timeetc and reapply them to the new page... #Then similarly for removing the unsorted pages use {}... num.times**{** pages.erase(model.pages[0]) }#to erase all of the original pages. #then to restore the originally selected page by name, add... pages.selected_page = pages[selpage]`
                        πŸ˜„

                        TIG

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

                          Thank you both very much!

                          This was the best feedback I could hope for! 😍

                          Cheers!

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

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

                            @renderiza said:

                            ... The only thing I wish it would change is if it didn't have to prompt a message before deleting unwanted scenes ...

                            replace:
                            Sketchup.send_action(CMD_PAGE_DELETE)

                            with:
                            pages.erase *some_page_object_ref*

                            πŸ’­

                            I'm not here much anymore.

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

                              Following this thread, I wonder whether the OP would be better off just caching each Scene in a convenient format and simply filling the existing Scenes as 'buckets' - rather than creating and destroying objects all the time.

                              So simply set attributes, names, camera etc etc for each.

                              Adam

                              Developer of LightUp Click for website

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

                                Hi,

                                I updated [Re]Scene to include the feature to reorganize all scenes by alphabetical order. Thanks for all the help!

                                New Web-Dialog:

                                http://s15.postimg.org/ycqlsebaj/dlg_1.jpg

                                Plugin Page: http://sketchucation.com/forums/viewtopic.php?f=323&t=52203

                                Cheers! πŸ‘

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

                                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