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

    How to add entities to a nested group?

    Scheduled Pinned Locked Moved Developers' Forum
    32 Posts 4 Posters 1.5k Views 4 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.
    • D Offline
      draftomatic
      last edited by

      Okay, you're just confusing me now, and what you're describing doesn't work for my situation. groupGroup already exists, and rootGroup already exists. I'm only creating them again in my example so that it can stand alone. So doing anything like groupGroup=newGroup.entities.add_group(faceGroup) isn't acceptable, because groupGroup is ALREADY THERE.

      Look TIG, can we get a bit simpler? Can you look quickly at test_group_bug.rb? I just simply don't understand why this line:
      LINE 49: newGroupGroup = rootGroup.entities().add_group(groupGroup, faceGroup)
      is breaking my code. As far as I can see, this is EXACTLY what you've told me to do. The contexts of groupGroup and faceGroup are identical (faceGroup.parent = rootGroup, and groupGroup.parent = rootGroup... I've checked).

      Moreover, the SAME CODE works several lines up, when I do the SAME THING, except in model.entities instead of in rootGroup. I'm very confused, and I need a straightforward answer. What EXACTLY is wrong about that line of code?

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

        The 'groupGroup' group DOESN'T really exist... except that you have made an empty group [too early] with that reference.
        Adding that empty group so early on into the mix and then trying to 'move' it into another group only confuses things.
        IF you already have a non-empty group with that reference then it's OK... but if not only make it when you need it otherwise.

        If you still can't get your head around this then please post a simple before and after set of uniquely named objects with their hierarchy - e.g.

        modelEntities=model.active_entities

        CONTAINING [at least] groupX [an existing group that isn't empty] and face [a face]

        OR ANY OTHER entities set with common objects you are to 'group' ?

        groupX > modelEntities
        face > modelEntities

        WHICH BECOMES faceGroup = modelEntities.add_group(face)

        face > faceGroup > modelEntities

        THEN group1 = modelEntities.add_group(faceGroup, groupX)

        face > faceGroup > group1 > modelEntities
        groupX > group1 > modelEntities

        THEN group2 = group1.entities.add_group(faceGroup, groupX)

        face > faceGroup > group2 > group1 > modelEntities
        groupX > group2 > group1 > modelEntities

        THEN group3 = group2.entities.add_group(groupX)

        face > faceGroup > group2 > group1 > modelEntities [STILL THE SAME AS BEFORE]
        groupX > group3 > group2 > group1 > modelEntities

        TO SEPARATE THE ENTITIES INTO SEPARATE GROUPS ETC ETC...

        YOU CAN GO ON AND ON...

        This has no 'names' just references to groups etc - you can add those later...

        TIG

        1 Reply Last reply Reply Quote 0
        • D Offline
          draftomatic
          last edited by

          @tig said:

          The 'groupGroup' group DOESN'T really exist... except that you have made an empty group [too early] with that reference.
          Adding that empty group so early on into the mix and then trying to 'move' it into another group only confuses things.
          IF you already have a non-empty group with that reference then it's OK... but if not only make it when you need it otherwise.

          In my real code, there is already a CPoint inside "groupGroup." If you think it's a problem that groupGroup is empty, then fine, I just tried adding a CPoint to groupGroup in my example script. Still broken.

          @tig said:

          If you still can't get your head around this

          Sir, my head is wrapped around this problem about 9 times already. I feel like you think I don't understand, but I do. I understand every word you have written, and I keep telling you, "I'm doing that, I'm doing that. Look at my code, look at my code."

          @tig said:

          please post a simple before and after set of uniquely named objects with their hierarchy - e.g.

          I did this already. Look at my script!!! Look at my screenshots!!! I am creating rootGroup and groupGroup. That is my hierarchy.

          I'm going to repeat my question again. What is wrong with line 49 of my previous example script? I COMPLETELY understand EVERYTHING you're telling me, and I believe I'm doing it, but it's still broken, and I don't see why!!!!!!!!!!

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

            Aaargh... in your sample code you 'magick' a group out of 'thin air' [groupGroup] and then you add it into a group within a nested group. IF that does exists it certainly isn't inside the 'newRootGroup' [retitled 'rootGroup'] entities as you've just created that - so it will ultimately splat - you ARE cross-threading entities.

            Please try recasting your code [ignoring names and reusing references [variables] as it's getting confusing] in a way I outlined...

            TIG

            1 Reply Last reply Reply Quote 0
            • D Offline
              draftomatic
              last edited by

              I think TIG gave up on me... 😳

              1 Reply Last reply Reply Quote 0
              • D Offline
                draftomatic
                last edited by

                @tig said:

                Aaargh...
                Please try recasting your code [ignoring names and reusing references [variables] as it's getting confusing] in a way I outlined...

                Argh indeed!

                Here it is - as simple as I can make it. This is 14 lines of code. Now tell me, what is wrong?

                The heirarchy is: model.entities -> group1 -> group2
                After the code finishes, it should be: model.entities -> group1 -> group2 -> faceGroup -> face+edges

                You can see that I'm creating these groups here, so there's no "magick!"

                ` # Testing group nesting

                model = Sketchup.active_model
                modelEntities = model.active_entities

                Create a face

                pts = []
                pts[0] = [0, 0, 0]
                pts[1] = [100, 0, 0]
                pts[2] = [100, 100, 0]
                pts[3] = [0, 100, 0]
                face = modelEntities.add_face(pts)

                Create root group

                group1 = modelEntities.add_group()

                Nest group2 inside group1

                group2 = group1.entities.add_group()

                Create group for faceGroup

                faceGroup = modelEntities.add_group(face)

                Nest in the first level

                newGroup1 = modelEntities.add_group(group1, faceGroup)
                group1.explode()

                Repeat to get it to the second level deep

                newGroup2 = newGroup1.entities.add_group(group2, faceGroup)

                group2.explode() # This crashes SketchUp`

                1 Reply Last reply Reply Quote 0
                • Chris FullmerC Offline
                  Chris Fullmer
                  last edited by

                  You are exploding group1 though. That does seem right to me. I can't look at it right now, but I probably can try later tonight.

                  Seems like you should make a group and add the face data to it. Then make a group and add the facegroup to it. Then make a new group and add the other group to that. I'm sure that is exactly what you've already tried. I'll see if I can write up a fully working sample (unless someone else beats me to it).

                  Chris

                  Lately you've been tan, suspicious for the winter.
                  All my Plugins I've written

                  1 Reply Last reply Reply Quote 0
                  • D Offline
                    draftomatic
                    last edited by

                    Thank you very much Chris. And thanks to TIG too, even though I'm pretty sure he's moved on to bigger and better threads than this =D

                    1 Reply Last reply Reply Quote 0
                    • D Offline
                      draftomatic
                      last edited by

                      Check it out. I have all these groups (group2 - groupN), under a root group (group1). And then I have faces, which I want to group with edges (faceGroup), and place in a nested group (group2 - groupN). There could potentially be many faceGroups, as shown in the picture...

                      HOWEVER... my example script 2 posts up is a simplified version of this, with only one nested group (group2), which is initially empty.

                      Clear enough? πŸ˜ƒ


                      su grouping bug storyboard.JPG

                      1 Reply Last reply Reply Quote 0
                      • thomthomT Offline
                        thomthom
                        last edited by

                        I'm confused by all this...
                        Why are you not creating the entities directly into the appropriate group instead of trying to move them from group to group?

                        Thomas Thomassen β€” SketchUp Monkey & Coding addict
                        List of my plugins and link to the CookieWare fund

                        1 Reply Last reply Reply Quote 0
                        • D Offline
                          draftomatic
                          last edited by

                          @thomthom said:

                          I'm confused by all this...
                          Why are you not creating the entities directly into the appropriate group instead of trying to move them from group to group?

                          Because, my "real" code gets the faces by way of the user clicking a context menu on an existing face and clicking my plugin's option. So, the face is already there, but my example script is emulating this by creating a face inside of model.entities first...

                          1 Reply Last reply Reply Quote 0
                          • thomthomT Offline
                            thomthom
                            last edited by

                            ok...

                            What about:

                            1. user pick face
                            2. group the face ( group1)
                            3. get the definition of the group ( group1.entities.parent)
                            4. add a new instance of the group into the group you want it
                            5. erase group1

                            When you have the group instance you can use entities.add_instance to add a copy of the group.
                            It might avoid the problems if using .add_group with entities as argument and exploding.

                            Thomas Thomassen β€” SketchUp Monkey & Coding addict
                            List of my plugins and link to the CookieWare fund

                            1 Reply Last reply Reply Quote 0
                            • D Offline
                              draftomatic
                              last edited by

                              @thomthom said:

                              ok...

                              What about:

                              1. user pick face
                              2. group the face ( group1)
                              3. get the definition of the group ( group1.entities.parent)
                              4. add a new instance of the group into the group you want it
                              5. erase group1

                              When you have the group instance you can use entities.add_instance to add a copy of the group.
                              It might avoid the problems if using .add_group with entities as argument and exploding.

                              Oh... tricky. I'll try that tomorrow.

                              1 Reply Last reply Reply Quote 0
                              • thomthomT Offline
                                thomthom
                                last edited by

                                
                                # picked_face is the face the user selected
                                # group2 is the destination group
                                group1 = picked_face.parent.entities.add_group( picked_face.all_connected )
                                group_def = group1.entities.parent
                                group2.entities.add_instance( group_def, group2.transformation.inverse * group1.transformation )
                                group1.erase!
                                
                                

                                Thomas Thomassen β€” SketchUp Monkey & Coding addict
                                List of my plugins and link to the CookieWare fund

                                1 Reply Last reply Reply Quote 0
                                • D Offline
                                  draftomatic
                                  last edited by

                                  YAY! Thanks a ton thomthom, your solution works.

                                  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