MCPcopy Create free account
hub / github.com/codereader/DarkRadiant / revertGroupToWorldSpawn

Function revertGroupToWorldSpawn

radiantcore/selection/algorithm/Group.cpp:38–79  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

36}
37
38void revertGroupToWorldSpawn(const cmd::ArgumentList& args)
39{
40 UndoableCommand cmd("revertToWorldspawn");
41
42 GroupNodeCollector walker;
43 GlobalSelectionSystem().foreachSelected(walker);
44
45 if (walker.getList().empty())
46 {
47 return; // nothing to do!
48 }
49
50 // Deselect all, the children get selected after reparenting
51 GlobalSelectionSystem().setSelectedAll(false);
52
53 // Get the worldspawn node
54 scene::INodePtr worldspawnNode = GlobalMapModule().findOrInsertWorldspawn();
55
56 Entity* worldspawn = Node_getEntity(worldspawnNode);
57
58 if (!worldspawn)
59 {
60 return; // worldspawn not an entity?
61 }
62
63 for (const scene::INodePtr& groupNode : walker.getList())
64 {
65 Entity* parent = Node_getEntity(groupNode);
66
67 if (!parent) continue; // not an entity
68
69 ParentPrimitivesToEntityWalker reparentor(worldspawnNode);
70 groupNode->traverseChildren(reparentor);
71
72 // Perform the reparenting, this also checks for empty parent nodes
73 // being left behind after this operation
74 reparentor.reparent();
75
76 // Select the reparented primitives after moving them to worldspawn
77 reparentor.selectReparentedPrimitives();
78 }
79}
80
81void ParentPrimitivesToEntityWalker::reparent()
82{

Callers

nothing calls this directly

Calls 7

Node_getEntityFunction · 0.85
reparentMethod · 0.80
foreachSelectedMethod · 0.45
emptyMethod · 0.45
setSelectedAllMethod · 0.45
traverseChildrenMethod · 0.45

Tested by

no test coverage detected