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

    Select all geometry

    Scheduled Pinned Locked Moved Developers' Forum
    29 Posts 6 Posters 1.7k Views 6 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.
    • L Offline
      Laxmarsk
      last edited by

      Thanks.

      I am kind of new to ruby scripting so I am not sure of what you mean!

      You suggest that I set up a kind of loop that goes through the model and selects all the components?

      Can you suggest a method for doing this?

      1 Reply Last reply Reply Quote 0
      • Didier BurD Offline
        Didier Bur
        last edited by

        Hi,
        If you want to collect all compos instances and groups in your model and select them:

        
        def select_comps
        @sel=Sketchup.active_model.selection
        @sel.clear #prevents any wrong previous selection
        Sketchup.active_model.active_entities.each { |ent|
           @sel.add ent if (ent.typename == "ComponentInstance") or (ent.typename == "Group")
        }
        end
        

        There are other ways to do this (yeld method for instance) but this one may be more understandable.
        Use "select_comps" at the beginning of your script and all instances will be ready in @sel variable for further action(s):

        def my_script
        select_comps
        ...
        end

        Hope this helps,

        DB

        1 Reply Last reply Reply Quote 0
        • L Offline
          Laxmarsk
          last edited by

          Hi Didier

          Thank you very much. It works perfectly!

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

            In one line:

            
            Sketchup.active_model.selection.add(Sketchup.active_model.entities.to_a)
            
            

            No need to clear it first.

            Todd

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

              @laxmarsk said:

              I am working on a little script that is moving groups or components based on offset values read from a txt file and saving the files again at the new location.

              Script is working but now I want to get things done without having to manually "select all".

              What I meant is that you do not need to select entities to perform your 'move' operations. Sketchup.active_model.active_entitiescontains all the entities of the model, and you can then apply your transformation to this list.

              For instance, if you want to move all objects of the model by an offset offset_vector (which you'll read from a file), then all you have to write is

              
              all_entities = Sketchup.active_model.active_entities   #all entities of the models
              t = Geom;;Transformation.translation offset_vector
              all_entities.transform_entities t, all_entities
              
              

              Now, if your problem is about the selection, Todd's and Didier's code will make it as a Select All.

              1 Reply Last reply Reply Quote 0
              • N Offline
                N Lindenthal
                last edited by

                @unknownuser said:

                In one line:

                
                > Sketchup.active_model.selection.add(Sketchup.active_model.entities.to_a)
                > 
                

                Please, Todd, tell me how to select my object »Stein«, but not all entities.

                1 Reply Last reply Reply Quote 0
                • Didier BurD Offline
                  Didier Bur
                  last edited by

                  Hi,
                  In select_all function, replace

                  @sel.add ent if (ent.typename == "ComponentInstance")
                  

                  with:

                  @sel.add Sketchup.active_model.definitions["Stein"].instances
                  

                  assuming that you want to select all instances of the "Stein" component, I guess.

                  If I had to code such a function, I'll write this:

                  
                  def select_comp_by_name(comp_name)
                  @sel = Sketchup.active_model.selection
                  @sel.clear!
                  @sel.add Sketchup.active_model.definitions[comp_name].instances
                  @sel
                  end
                  
                  

                  Function call example in the script:

                  
                  ...
                  stones=select_comp_by_name("Stein")
                  
                  

                  Hope this helps,

                  ...

                  DB

                  1 Reply Last reply Reply Quote 0
                  • N Offline
                    N Lindenthal
                    last edited by

                    @Didier

                    
                    def select_comp_by_name(comp_name)
                    @sel = Sketchup.active_model.selection
                    @sel.clear!
                    @sel.add Sketchup.active_model.definitions[comp_name].instances
                    @sel
                    end
                    
                    

                    From this I made a text file "Aar_select_comp_by_name.rb" in the Plugins folder. Restart SU.

                    
                    stones=select_comp_by_name("Stein")
                    
                    

                    This I wrote in the ruby console line.

                    Then comes the following error:

                    @unknownuser said:

                    stones=select_comp_by_name("Stein")
                    Error: #<NoMethodError: undefined method `clear!' for #Sketchup::Selection:0x1afaa3b0>
                    (eval):11
                    (eval):11

                    How to select an object by name?

                    1 Reply Last reply Reply Quote 0
                    • N Offline
                      N Lindenthal
                      last edited by

                      Unfortunately I don’t know, what to type in the Ruby console line (I am Ruby beginner).

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

                        Just remove the exclamation mark to @sel.clear

                        1 Reply Last reply Reply Quote 0
                        • N Offline
                          N Lindenthal
                          last edited by

                          @unknownuser said:

                          Just remove the exclamation mark to @sel.clear

                          Then come the following error:
                          @unknownuser said:

                          stones=select_comp_by_name("Stein")
                          Error: #<NoMethodError: undefined method `instances' for nil:NilClass>
                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:4
                          (eval):197

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

                            First, I would make a test on the return value of Sketchup.active_model.definitions[comp_name], because if there is no such component definition*<comp_name>*, it will return <nil>, and applying the method instanceswill provoke an error.

                            Otherwise, your code seems correct to me.

                            The issue is maybe that there is no such component "Stein" in your model. You should check with the Component window.

                            1 Reply Last reply Reply Quote 0
                            • N Offline
                              N Lindenthal
                              last edited by

                              @Fredo6

                              @unknownuser said:

                              Sketchup.active_model.definitions[comp_name]
                              Error: #<NameError: undefined local variable or method `comp_name' for main:Object>
                              (eval):197

                              This comes from ruby console.

                              I had an object named "Stein". And your question to a component named ”Stein" let me make also a component named "Stein". Same error.

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

                                When you call it from the console, use "stein" not comp_name, which is the name of the variable. So:

                                Sketchup.active_model.definitions["stein"]
                                
                                

                                Your code looks correct. Here it is with the test on existence of the component

                                
                                def select_comp_by_name(comp_name)
                                   model = Sketchup.active_model
                                   sel = model.selection
                                   sel.clear
                                   compdef = model.definitions[comp_name]
                                   if compdef  #There is a component
                                      sel.clear
                                      sel.add compdef.instances
                                   else
                                      UI.beep
                                   end
                                end
                                
                                

                                Are you sure you have a component called "stein" in your model? Check with the Windows>Components. By the way, I wonder what you call "an Object named "stein"", as in Sketchup, you only give a name to Components or Groups, but there is nothing like an 'object'.

                                Note also that Sketchup is not case sensitive with the name of components.

                                Fredo

                                1 Reply Last reply Reply Quote 0
                                • N Offline
                                  N Lindenthal
                                  last edited by

                                  @unknownuser said:

                                  …
                                  I wonder what you call "an Object named "stein"", as in Sketchup, you only give a name to Components or Groups, but there is nothing like an 'object'.
                                  …

                                  Please excuse me, I have a group named "Stein", no object.

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

                                    Then, this is the source of your error.
                                    You must have a Component, not a Group for your Ruby code to work.
                                    In Sketchup, use the command Make Component(shortcut 'G') instead of Make Group

                                    1 Reply Last reply Reply Quote 0
                                    • N Offline
                                      N Lindenthal
                                      last edited by

                                      @Fredo6
                                      Now my model has no group "Stein", but one component "Stein". But I have no luck. To select my component "Stein" by script in ruby console does not work. Did you try your script lines and you could select your component by name?

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

                                        Which error do you get?

                                        1 Reply Last reply Reply Quote 0
                                        • N Offline
                                          N Lindenthal
                                          last edited by

                                          @Fredo6

                                          This is my ruby script »Aar_Select_comp_by_name.rb« in the Plugins folder:

                                          @unknownuser said:

                                          def select_comp_by_name(comp_name)
                                             model = Sketchup.active_model
                                             sel = model.selection
                                             sel.clear
                                             compdef = model.definitions[comp_name]
                                             if compdef  #There is a component
                                                sel.clear
                                                sel.add compdef.instances
                                             else
                                                UI.beep
                                             end
                                          end
                                          #def select_comp_by_name(comp_name)
                                          #@sel = Sketchup.active_model.selection
                                          #@sel.clear
                                          #@sel.add Sketchup.active_model.definitions[comp_name].instances
                                          #@sel
                                          #end

                                          If I repeat loading by ruby console:

                                          load "Aar_Select_comp_by_name.rb"
                                          

                                          then come the following notes
                                          @unknownuser said:

                                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:6: warning: parenthesize argument(s) for future version
                                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:7: warning: parenthesize argument(s) for future version
                                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:7: warning: parenthesize argument(s) for future version
                                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:8: warning: parenthesize argument(s) for future version
                                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:8: warning: parenthesize argument(s) for future version
                                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:8: warning: parenthesize argument(s) for future version
                                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:10: warning: parenthesize argument(s) for future version
                                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:10: warning: parenthesize argument(s) for future version
                                          true
                                          … but also »true«.

                                          Now with ruby script line

                                          Sketchup.active_model.definitions["Stein"]
                                          

                                          I get
                                          @unknownuser said:

                                          nil

                                          and with

                                          > select_comp_by_name("Stein")
                                          

                                          @unknownuser said:

                                          Error: #<NoMethodError: undefined method ` ' for main:Object>
                                          /Library/Application Support/Google SketchUp 6/SketchUp/Plugins/Aar_Select_comp_by_name.rb:2
                                          (eval):197

                                          … nothing is selected.

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

                                            Hi !
                                            Your script works fine here... Be careful with case of the definition name... I found no error in your script...
                                            Perhaps some parenthesis

                                            sel.add(compdef.instances)
                                            

                                            and unnecessary duplication

                                            sel.clear
                                            

                                            Erase the second duplication.
                                            😄

                                            Frenglish at its best !
                                            My scripts

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

                                            Advertisement