84{
85
86 SoGroup * newgroup(0);
87 if (
g->getTypeId().isDerivedFrom(SoSeparator::getClassTypeId()) &&
88 !
g->getTypeId().isDerivedFrom(SoSelection::getClassTypeId()) ) {
89 SoSeparator *
sep =
new SoSeparator;
90 SoSeparator * origsep =
static_cast<SoSeparator*
>(
g);
91 sep->renderCaching.setValue(origsep->renderCaching.getValue());
92 sep->boundingBoxCaching.setValue(origsep->boundingBoxCaching.getValue());
93 sep->renderCulling.setValue(origsep->renderCulling.getValue());
94 sep->pickCulling.setValue(origsep->pickCulling.getValue());
96 }
else if (
g->getTypeId().isDerivedFrom(SoSelection::getClassTypeId()) ) {
97 SoSelection *
sel =
new SoSelection;
98 SoSelection * origsel =
static_cast<SoSelection*
>(
g);
99 sel->renderCaching.setValue(origsel->renderCaching.getValue());
100 sel->boundingBoxCaching.setValue(origsel->boundingBoxCaching.getValue());
101 sel->renderCulling.setValue(origsel->renderCulling.getValue());
102 sel->pickCulling.setValue(origsel->pickCulling.getValue());
103 sel->policy.setValue(origsel->policy.getValue());
105 }
else if (
g->getTypeId().isDerivedFrom(SoSwitch::getClassTypeId()) ) {
106 SoSwitch *sw = new SoSwitch;
107 sw->whichChild.setValue(static_cast<SoSwitch*>(g)->whichChild.getValue());
108 newgroup = sw;
109 } else {
110
111 newgroup = new SoGroup;
112 }
113
114
115 newgroup->setName(
g->getName());
116
117
118 if (transferChildren)
119 for (
int i = 0;
i<
g->getNumChildren();++
i)
120 newgroup->addChild(
g->getChild(i));
121
122 return newgroup;
123}