How to add entities to a nested group?
-
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...
-
I think TIG gave up on me...
-
@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+edgesYou can see that I'm creating these groups here, so there's no "magick!"
` # Testing group nesting
model = Sketchup.active_model
modelEntities = model.active_entitiesCreate 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`
-
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
-
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
-
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?
-
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? -
@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...
-
ok...
What about:
- user pick face
- group the face (
group1
) - get the definition of the group (
group1.entities.parent
) - add a new instance of the group into the group you want it
- 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. -
@thomthom said:
ok...
What about:
- user pick face
- group the face (
group1
) - get the definition of the group (
group1.entities.parent
) - add a new instance of the group into the group you want it
- 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.
-
# 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!
-
YAY! Thanks a ton thomthom, your solution works.
Advertisement