• Login
sketchucation logo sketchucation
  • Login
🤑 SketchPlus 1.3 | 44 Tools for $15 until June 20th Buy Now

[REQUEST] Convert single instance components to groups

Scheduled Pinned Locked Moved Plugins
5 Posts 3 Posters 1.5k Views
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.
  • J Offline
    jshal
    last edited by 25 Jul 2019, 09:14

    I was looking for quite while searching for the following problem:

    Importing (Revit) DWG data into Sketchup creates a lot of single instance components. The trouble is that when copying multiple of these files together that Sketchup slows down to a crawl because it is trying to match components that are similar. Usually I end up with sketchup files with hundreds of single component instances. Sketchup works faster when these single instances are in fact groups, making copying between sketchup files way faster. Normally I explode the selected instance and group these again, but with hundreds of these, this is too cumbersome.

    So what I need is the following:

    1. select all single instance components within my current SketchUp file (or current selection)
    2. convert these to standard groups

    I think this is quite useful for anybody working with imported files and want to keep on working quick.

    For number 2) I found the following code snippet from sdmitch (https://sketchucation.com/forums/viewtopic.php?f=323&t=17590&p=140679&hilit=single+instance+component#p623006)

    
    @mod = Sketchup.active_model
    @ent = @mod.active_entities
    @sel = @mod.selection
    @vue = @mod.active_view
    cmps = @sel.grep(Sketchup;;ComponentInstance)
    cmps.each{|ci|
     grp = @ent.add_group(ci)
     grp.name = ci.definition.name
     ci.explode
    }
    @mod.definitions.purge_unused
    
    

    [highlight=#ffffbf:39rhwwt6]Does anybody know how to realize part 1?[/highlight:39rhwwt6]

    Thanks in advance!

    1 Reply Last reply Reply Quote 0
    • T Offline
      TIG Moderator
      last edited by 25 Jul 2019, 10:35

      It's relatively straightforward...
      Here's 1 AND 2 combined...
      This code finds all components that have just one instance and makes a new group in place of the instance, containing its contents, using the same name/layer/material as the instance itself.
      The now unused definitions are deleted.
      It is one step undo-able

      model=Sketchup.active_model
      defns=model.definitions
      model.start_operation("ci2gp",true)
      defns.each{|defn|
        next if defn.group?
        next if defn.image?
        next unless defn.instances.length==1
        inst=defn.instances[0]
        name=defn.name
        layr=inst.layer
        matl=inst.material
        ents=inst.parent.entities
        tran=inst.transformation
        grp=ents.add_group()
        gents=grp.entities
        i=gents.add_instance(defn, tran)
        inst.erase!
        i.explode
        grp.name=name
        grp.layer=layr
        grp.material=matl
      }
      defns.purge_unused
      model.commit_operation
      
      

      TIG

      1 Reply Last reply Reply Quote 0
      • J Offline
        jshal
        last edited by 25 Jul 2019, 10:43

        Wow, TIG, you have saved my day(s) 😄 Big thanks!

        1 Reply Last reply Reply Quote 0
        • I Offline
          iMacThere4iAm
          last edited by 14 Sept 2022, 18:56

          @tig said:

          It's relatively straightforward...

          Sorry to dig up this old topic but your code above causes a bugsplat in Sketchup 2022. Any idea what could be the cause?

          1 Reply Last reply Reply Quote 0
          • T Offline
            TIG Moderator
            last edited by TIG 14 Sept 2022, 21:45

            It's a snippet of old code but it should work OK.
            It works for me on a PC - I don't have a suitable MAC to hand...
            Nothing different in v2022 as far as I can see...

            What exactly are you trying to do, are there any Ruby Console messages before the failure ?

            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