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

    Cloning components and grouped objects

    Scheduled Pinned Locked Moved SketchUp Discussions
    sketchup
    13 Posts 2 Posters 1.8k Views 2 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.
    • TIGT Online
      TIG Moderator
      last edited by

      It's easy enough to do with the native tools...
      Select and Edit>Copy, then Edit>Paste-in-Place - now its copy is overlaid on the original.
      Use the Outliner to select the one copy of the component-instance.
      You can then use make-unique [context-menu] to separate its definition from the original, and then using Entity Info you can rename it and assign a different layer [tag] as desired...

      TIG

      1 Reply Last reply Reply Quote 0
      • P Offline
        petropix
        last edited by

        Yes. Of course! I understand all that. Have been doing it for years. I'm just looking for a more efficient way on how to make a new component instance without all those moves.

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

          If you had a custom tool to do this you still need to give it a name [unless you're happy with "compo#123"] and to assign it to a new layer [tag].
          So the automated tool just skips the make-unique part, and perhaps also selecting it cleanly...
          This one short code does it that for you...

          m=Sketchup.active_model
          es=m.active_entities
          ss=m.selection
          if ss.length==1 && ss[0].is_a?(Sketchup;;ComponentInstance)
            UI.add_context_menu_handler{|menu|
              i=ss[0]
              menu.add_item("Copy Unique Instance..."){
                ii=es.add_instance(i.definition, i.transformation)
                ii.make_unique
                ss.clear
                ss.add(ii)
              }
            }
          end
          

          It adds an item to the context-menu, only if you have selected one component-instance.
          When it's done only the new copy is selected and it is listed in Entity Info - where you can assign it a different layer and a new name as desired...

          TIG

          1 Reply Last reply Reply Quote 0
          • P Offline
            petropix
            last edited by

            @tig said:

            If you had a custom tool to do this you still need to give it a name [unless you're happy with "compo#123"] and to assign it to a new layer [tag].
            So the automated tool just skips the make-unique part, and perhaps also selecting it cleanly...
            This one short code does it that for you...

            m=Sketchup.active_model
            > es=m.active_entities
            > ss=m.selection
            > if ss.length==1 && ss[0].is_a?(Sketchup;;ComponentInstance)
            >   UI.add_context_menu_handler{|menu|
            >     i=ss[0]
            >     menu.add_item("Copy Unique Instance..."){
            >       ii=es.add_instance(i.definition, i.transformation)
            >       ii.make_unique
            >       ss.clear
            >       ss.add(ii)
            >     }
            >   }
            > end
            

            It adds an item to the context-menu, only if you have selected one component-instance.
            When it's done only the new copy is selected and it is listed in Entity Info - where you can assign it a different layer and a new name as desired...

            Many thanks! In retrospect, I see that the native tool method is not so bad after all. That is because OUTLINER makes it manageable. I tend to forget to use this tool a lot-- probably one of the most under-rated or least discussed in Skp.

            While I'm at this. Is there a tool for PUT ALL ON LAYER..(XYZ), similar to MAKE ALL UNIQUE?

            I do a lot of mechanical drawings with objects that contain multiple groupings of sub-components and need to show progression of movement. MAKE ALL UNIQUE is essential to make the progression of movement possible because without it the original component grouping/instance is compromised. Some of the sub-component assemblies are often nested deep into the main object. They need to be toggled onto different layers. This is problematic because each time you create a new INSTANCE to show the next progression, ALL the components within the main grouping MUST be on the same layer (Layer 0). Invariably, a tiny element in a deeply nested grouping can get stuck on an overlooked layer and that creates mayhem. A PUT ALL ON LAYER in combination with MAKE ALL UNIQUE would be a blessing.

            Sorry for convoluted explanation. Perhaps this best discussed as a separate topic. (?)

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

              My LayerWatcher tool in the PluginStore does [in addition to other things] something like that - ensuring that all selected faces/edges [including those nested inside] get Layer0 [Untaggd]
              But nested 'containers' do not get reassigned.

              This reassigns EVERYTHING inside the selected 'containers' to the default [Layer0 or Untagged]

              # encoding; UTF-8
              module TIG
                module ReAssign0
                  #menu
                  unless @loaded
                    if Sketchup.active_model.selection.grep(Sketchup;;ComponentInstance) || Sketchup.active_model.selection.grep(Sketchup;;Group)
                      UI.add_context_menu_handler{|menu| menu.add_item("ReAssign0..."){ self.do() } }
                    end#menu
                    @loaded=true
                  end
                  ###
                  def self.do()
                    m=Sketchup.active_model
                    s=m.selection
                    is=s.grep(Sketchup;;ComponentInstance)
                    gs=s.grep(Sketchup;;Group)
                    cs=is+gs
                    m.start_operation('ReAssign0',true)
                    cs.each{|c| self.process(c) }
                    m.commit_operation
                  end#do
                  def self.process(cc=nil)
                    return unless cc
                    cc.definition.entities.each{|e| e.layer=nil }
                    is=cc.definition.entities.grep(Sketchup;;ComponentInstance)
                    gs=cc.definition.entities.grep(Sketchup;;Group)
                    cs=is+gs
                    cs.each{|c| self.process(c) }
                  end#process
                end#module
              end#module
              
              

              Copy paste into a plain-text file file named ReAssign0.rb in your Plugins folder.
              It should load a context-menu item when SketchUp starts and there's a suitable selection of instance[s]/group[s]...

              TIG

              1 Reply Last reply Reply Quote 0
              • P Offline
                petropix
                last edited by

                Terrific! Much appreciated. This has been a bother for years, much relieved and can now say that this just about makes my workflow near-perfect when drawing progressive movements using component instances and multiple scenes.

                For those of you doing similar work, an invaluable plug-in is: CMD Auto-Invisible Layer (plugin store). In native mode, Skp includes and SHOWS all material placed on a newly created layer on all the UPSTREAM SCENES. You must then manually cycle through each scene and toggle OFF the 'down stream' layer to prevent multiple objects showing and clashing with each other. A huge pain! CMD Auto-Invisible Layer is a gem. Also, by CMD, Isolate/Reveal is such a nice touch.

                I'm set to go for at least another five years!

                PS. TIG, apologies if your 'MyLayerWatcher' does what CMD's does πŸ˜„

                1 Reply Last reply Reply Quote 0
                • P Offline
                  petropix
                  last edited by

                  Oops.. spoke too soon.. I get a loading error:

                  no such file to load -- ./offset.rb Error Loading File ReAssign0.rb

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

                    Because the code I gave makes no reference to ./offset.rb I suspect you are conflating two issues.
                    Provided that you copy/pasted my code into a plain-text file exactly as I explained, then there should be no problem.
                    Note that it MUST be a plain-text file... use NotePad++ exe...

                    There are a few old scripts which called that kind of file...
                    I haven't managed to grep many !

                    If you temporarily removed your new RB file do you still get that error ?
                    Not having access to your Plugins folder, then I can't be sure...

                    One thought offset.rb is a Smustard.com plugin used by some of its much older scripts - e.g. clf_greeble, multi_face_scale_offset, windowizer[4] etc... or a few older scripts like WhiteOutPlane, multi-face-offset etc... which also required it ?
                    If you have inadvertently disabled it in the SketchUcation>Plugin-Manager - despite warnings ! - enable it and restart...
                    Or have you tried simply reinstalling it from Smustard.com ?

                    TIG

                    1 Reply Last reply Reply Quote 0
                    • P Offline
                      petropix
                      last edited by

                      Okay. A small confession: I still use SKP 8 (and the way things are going with Trimble, will likely do so until the end of time) πŸ˜„

                      Here is the start-up dialog with all the loading errors. Lazy as I am, I just live with it.
                      I think 'private method' refers to the short 'make unique' script you gave me previously which I had entered in Ruby console. For some reason I did it twice-- returned 'nil' but other time it was '41' or '43' ... forget. The script did work once. Hope I haven't screwed things up..

                      Error Loading File __loader.rb
                      uninitialized constant TraductorError Loading File attributes.rb
                      undefined method GetString' for nil:NilClassError Loading File crate.rb no such file to load -- ./offset.rbError Loading File holes(1).rb no such file to load -- ./offset.rbError Loading File holes.rb no such file to load -- ./offset.rbError Loading File ReAssign0.rb undefined local variable or method ο»Ώ' for main:ObjectError Loading File shapes.rb
                      no such file to load -- mesh_additions.rbError Loading File su2pov35Toolbar.rb
                      private method `split' called for nil:NilClass

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

                        That's probably not the whole message.
                        You can scroll the dialog and click at the start then scroll to the end, hold shift and click the end, then Ctrl+C to copy all that's selected...

                        The errors seem to have nothing to do with what you've just added [incidentally you can make separate RB files from the two pieces of code as explained before].

                        The "TraductorError" error is to do with Fredo's extensions.
                        You need the latest version of his Lib as well as the extensions themselves... however, note that the most recent RBZ files do not suit <v2017 - Fredo has made legacy versions available -https://sketchucation.com/pluginstore?pln=PRIOR_SU2017_LibFredo6
                        Search for others...

                        Scripts like crate.rb and so on might need ofset.rb...

                        The error relating to your script ReAssign0.rb seems to be separate and revolves around a typo.
                        When you copied the whole of my text from the code box, did you paste it into a plain-text Notepad++ file and name it ReAssign0.rb ?
                        The reference to throwing an error suggests you didn't as my code didn't have a in it ! just ' or "

                        Here's a version of the code [with a few improvements too - like making it undoable etc] as two RB files... Put those in your Plugins folder and restart SketchUp, they should load OK. Then you need to fix the other unrelated errors if they persist...


                        CopyUniqueInstance.rb


                        ReAssign0.rb

                        TIG

                        1 Reply Last reply Reply Quote 0
                        • P Offline
                          petropix
                          last edited by

                          Goodness-- you go beyond the call of duty, Tig-- a big thank you! (donation on the way).

                          Both scripts work-- what a relief. And I did some house cleaning to boot. Got rid of offset.rb -- I can do without the stuff that requires it. Oddly, both crate.rb and hole.rb work, but the system is still looking for offset.rb. Curious. Thought hole.rb to be redundant given 'push-pull' but just now discover it will make holes from multiple circle selections on a surface-- whoa! Instant Swiss cheese! πŸ˜„

                          cheers!

                          Error Loading File crate.rb
                          no such file to load -- ./offset.rbError Loading File holes.rb
                          no such file to load -- ./offset.rb

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

                            Download offset.rb from Smustart.com and install it.
                            Then all of the error messages should go !
                            http://www.smustard.com/thanks/Offset

                            TIG

                            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