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

Application Development Exploding Component Instances

Scheduled Pinned Locked Moved Developers' Forum
16 Posts 5 Posters 3.2k 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.
  • T Offline
    TNTDAVID
    last edited by 16 Jun 2017, 09:14

    Hello, ☀

    I want to explode a list of nested components inside groups or components through their definitions.

    m=Sketchup.active_model
    s=m.selection
    sel=m.definitions.each{|d|s.add d.instances if d.name=~/#{"Sophie"}/}
    sophie=ents.grep(Sketchup;;ComponentInstance)
    sophie.each{|e| e.explode }
    

    With this code I select all "Sophie" in my SketchUp models and explode all the "Parents" components of "Sophie".

    How to explode "Shophie" without modifying the parent components?

    And how to explode the definition "Chris" at the same time as "Shophie"?

    Thank you in advance for your help.

    David

    [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

    1 Reply Last reply Reply Quote 0
    • T Offline
      TIG Moderator
      last edited by 16 Jun 2017, 12:46

      As usual you are making it more complicated that it needs to be - and the reference 'ents' appears from nowhere too !
      Try this approach...

      name="Sophie" # or ="Chris" etc to make it reusable...
      model=Sketchup.active_model
      matches=model.definitions.each.find_all{|d| d.name =~ /#{name}/ }
      matches.each{|match| match.instances.each{|i| i.explode } }
      

      This matches "Sophie", "Sophie#1", "Sophie#2" etc
      But it'll also match "My_Sophie" !
      If you want just the start "Sophie" etc use d.name =~ /^#{name}/
      or d.name =~ /^#{name}$/ for exactly "Sophie".
      Although if you want an exact match use d.name == name
      or even simpler ?
      match=model.definitions[name] ### then use match.instances... if match

      It does not remove the now unused "Sophie" definition[s] from the model's definitions list !
      If you want to do this, then run your code inside a model.start_operation(... model.commit_operation block, and after exploding the instances of ' match' use
      use match.entities.clear! - this will 'empty' the definition and when thr operation is committed SketchUp's Garbage-Collection removes the empty definition from the model's list...

      TIG

      1 Reply Last reply Reply Quote 0
      • T Offline
        TNTDAVID
        last edited by 16 Jun 2017, 13:22

        Bonjour TIG,

        Avec votre code:

        name="Sophie"
        model=Sketchup.active_model
        matches=model.definitions.each.find_all{|d| d.name =~ /#{name}/ }
        matches.each{|match| match.instances.each{|i| i.explode } }
        

        j’obtiens le message d'erreur suivant dans la console ruby:

        Error; #<LocalJumpError; no block given>
        <main>;2;in `each'
        <main>;2;in `<main>'
        -e;1;in `eval'
        nil
        

        Comment corriger cette erreur ?

        Merci

        [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

        1 Reply Last reply Reply Quote 0
        • T Offline
          TIG Moderator
          last edited by 16 Jun 2017, 14:03

          Sorry, I hadn't tested it.
          Here is the corrected code:

          name="Sophie" # or ="Chris" etc to make it reusable...
          model=Sketchup.active_model
          matches=model.definitions.find_all{|d| d.name =~ /#{name}/ }
          matches.each{|match| match.instances.each{|i| i.explode } }
          

          I had an errant '.each' in it, when the '.find_all' was all that is needed...

          TIG

          1 Reply Last reply Reply Quote 0
          • T Offline
            TNTDAVID
            last edited by 16 Jun 2017, 14:41

            Wonderful it works very well! ☀

            To explode several definitions, I simply did this:

            name=['Sophie','CUBE']
            model=Sketchup.active_model
            matches=model.definitions.find_all{|d| d.name =~ /#{name}/ }
            matches.each{|match| match.instances.each{|i| i.explode } }
            

            [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

            1 Reply Last reply Reply Quote 0
            • D Offline
              driven
              last edited by 16 Jun 2017, 17:14

              sometime it's worth writing 'visual code' to see how the ruby works...

              click to see gif...
              to_go.gif

              this is based on Tigs example

              def explode_named(*args)       
              	model = Sketchup.active_model
              	defs = model.definitions
              	sel    = model.selection
              	view = model.active_view 
              	names = Regexp.union(args)
              	matches = defs.find_all{|d| d.name =~ names }
              	model.start_operation('Explode Inards')
              	matches.each{|match| 
                   match.instances.each{|i|
              		sel.add(i)
              		view.refresh
              		sleep 0.2
              		i.explode
              		}
              	}
                defs.purge_unused
                model.commit_operation #
              end
              
              
              

              to run

              explode_named("Sophie","Chris")
              

              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
              • T Offline
                TNTDAVID
                last edited by 17 Jun 2017, 20:57

                Really perfect your solution driven! 👍 👍 👍

                Thank you

                [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

                1 Reply Last reply Reply Quote 0
                • T Offline
                  TNTDAVID
                  last edited by 27 Jun 2017, 14:28

                  **Dirven, I chose to use your method that works well.

                  When components are exploded with dynamic materials, the textures will apply to the basic geometry.

                  Thus the rendering engines can easily manage the maping coordinates to make beautiful 3D renderings.

                  In the case of Click-Cuisine 2:

                  Each piece of furniture can contain between 10 and 50 components to explode, so for a kitchen with 25 modules it takes 2 minutes of loading.

                  I set the value "sleep", to "0" to go faster but that is insufficient.

                  Is it possible to execute code faster or activate the SketchUp progress bar?

                  Thank you**

                  [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

                  1 Reply Last reply Reply Quote 0
                  • D Offline
                    driven
                    last edited by 27 Jun 2017, 19:45

                    it's basically TIG's code + a couple of tweaks, I made it 'visualised' to help you 'see' what's happening because I find it useful myself...

                    none of these are needed at all and the code will run faster...

                    
                          sel.add(i)
                          view.refresh
                          sleep 0.2
                    

                    so either comment them out or delete them for 'production code'...

                    any 'progress bar' will add even more overhead and can only slow the progress more...

                    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
                    • T Offline
                      TNTDAVID
                      last edited by 1 Jul 2017, 12:21

                      The loading time decreased from 2 minutes to 4 seconds. 👍

                      Thanks Driven

                      [b:8wt9py2i]* Nouveau !!![/b:8wt9py2i] Découvrez notre nouveau Plugin [url=http://www.composant-dynamique.com/:8wt9py2i][color=#40FF00:8wt9py2i]C[/color:8wt9py2i][color=#77FF00:8wt9py2i]l[/color:8wt9py2i][color=#ADFF00:8wt9py2i]i[/color:8wt9py2i][color=#E4FF00:8wt9py2i]c[/color:8wt9py2i][color=#FFDB09:8wt9py2i]k[/color:8wt9py2i][color=#FF921B:8wt9py2i]-[/color:8wt9py2i][color=#FF492E:8wt9py2i]C[/color:8wt9py2i][color=#FF0040:8wt9py2i]u[/color:8wt9py2i][color=#ED2577:8wt9py2i]i[/color:8wt9py2i][color=#DA49AD:8wt9py2i]s[/color:8wt9py2i][color=#C86EE4:8wt9py2i]i[/color:8wt9py2i][color=#AD77FF:8wt9py2i]n[/color:8wt9py2i][color=#8965FF:8wt9py2i]e[/color:8wt9py2i] [color=#4040FF:8wt9py2i]2[/color:8wt9py2i][/url:8wt9py2i], pour créer vos cuisines 3D !

                      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