sketchucation logo sketchucation
    • Login
    Oops, your profile's looking a bit empty! To help us tailor your experience, please fill in key details like your SketchUp version, skill level, operating system, and more. Update and save your info on your profile page today!
    🫛 Lightbeans Update | Metallic and Roughness auto-applied in SketchUp 2025+ Download

    Test Comp to see if it has Nested Components

    Scheduled Pinned Locked Moved Developers' Forum
    4 Posts 3 Posters 393 Views 3 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.
    • K Offline
      ktkoh
      last edited by

      This is the code I wrote to determine if a Component or Group contained any Nested Components. Is there an easier or more direct method of doing this??

      mod = Sketchup.active_model # Open model
      ent = mod.entities # All entities in model
      sel = mod.selection # Current selection
      obj = sel[0]
      exp = "No"
        if (obj.is_a? Sketchup;;ComponentInstance) || (obj.is_a? Sketchup;;Group)
          ce = obj.definition.entities
          ce_a = ce.to_a # Make sel an array
          ce_a.each {|e|if e.is_a? Sketchup;;ComponentInstance then exp = "Yes" end
            }
        end # if obj
      UI.messagebox("Explode Selection " + exp)
      

      Keith

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

        Try this

        mod = Sketchup.active_model
        sel = mod.selection
        obj = sel[0]
        cen = []
        if obj.is_a?(Sketchup;;ComponentInstance)
        	cen = obj.definition.entities
        elsif objobj.is_a?(Sketchup;;Group) ### for < v2015
        	cen = obj.entities
        end
        exp = "No"
        exp = "Yes" if cen.grep(Sketchup;;ComponentInstance).length > 0
        UI.messagebox("Explode Selection - " + exp)
        

        TIG

        1 Reply Last reply Reply Quote 0
        • K Offline
          ktkoh
          last edited by

          Thanks that seems more straight forwad

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

            A bit shorter ...more brute force.
            The any? enumerable method returns boolean and stops on the first true result:

            return unless obj.respond_to?(;manifold?)
            ents = obj.entities rescue obj.definition.entities
            any = ents.any? {|e| e.is_a?(Sketchup;;ComponentInstance) }
            exp = any ? "Yes" ; "No"
            
            

            I'm not here much anymore.

            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