Hi Paul, Does that work on your compiler? I tried that as well, but I got the following error:
error C2440: 'initializing' : cannot convert from 'class osg::Object *' to 'class osg::ref_ptr<class osg::Node>' No constructor could take the source type, or constructor overload resolution was ambiguous So then I tried using the parent of the node which is a group and create a group from that using the deep copy: osg::Ref_Ptr<osg::Group> CopyAParent = new osg::Group(*AParent, osg::CopyOp::DEEP_COPY_ALL); but it still doesn't have any nodes in the list: osg::Node *test = m_CopyAParent ->getChild(0); findNodeVisitor nv1(FINDNODETYPE_NODETYPE|FINDNODETYPE_FINDALL, "Geode"); test->accept(nv1); std::vector<osg::Node*> nodeList = nv1.getNodeList(); int length = nodeList.size(); here length is 0. Thanks, Judie On Apr 16, 6:47 pm, "Paul Martz" <[EMAIL PROTECTED]> wrote: > Ha! What a coincidence. I just encountered this exact same thing today. > > When you call "new Node", you get a Node. Nodes don't have children, only > Groups have children. So you don't want to use the copy constructor if you > want to copy a whole subtree. > > I discovered that OSG offers an alternative to the copy constructor to get > around just this very issue. Use the clone() method. So, instead, your code > should look like this: > > osg::ref_ptr<osg::Node> copyA = A->clone( osg::CopyOp::DEEP_COPY_ALL ); > > "copyA" will be a ref_ptr to a Node, but the actual type of the object > pointed to will be a clone of A, so if A is a Group (with children), then > copyA will also be a Group. > > Later, > -Paul > > > > > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] On Behalf Of Judie > > Sent: Wednesday, April 16, 2008 2:21 PM > > To: [EMAIL PROTECTED] > > Subject: [osg-users] Using a visitor after a DEEP_COPY_ALL > > doesn't returnanything > > > HI, > > > I want to make a copy of an existing node and all it's > > children, and then find all the geometry and make it transparent. > > > I do something like > > > osg::ref_ptr<osg::Node> copyA = new osg::Node(*A, > > osg::CopyOp::DEEP_COPY_ALL); > > > where A is the original Node tree. > > > If I try to use the findNodeVisitor: > > > findNodeVisitor nv(FINDNODETYPE_NODETYPE|FINDNODETYPE_FINDALL, > > "Geode"); > > copyA->accept(nv); > > std::vector<osg::Node*> nodeList = nv.getNodeList(); int > > length = nodeList.size(); > > > then length is 0. > > > If I do the same with the original node: > > > findNodeVisitor nv(FINDNODETYPE_NODETYPE|FINDNODETYPE_FINDALL, > > "Geode"); > > A->accept(nv); > > std::vector<osg::Node*> nodeList = nv.getNodeList(); int > > length = nodeList.size(); > > > then length is 32. > > > Also if I try to cast the copyA to a osg::Group* I get a null pointer: > > > osg::Group* temp = dynamic_cast<osg::Group*>(copyA); > > > temp is a null pointer. > > > So did I miss a step somewhere? > > > Judie > > > _______________________________________________ > > osg-users mailing list > > [EMAIL PROTECTED] > >http://lists.openscenegraph.org/listinfo.cgi/osg-users-opensce > > negraph.org > > _______________________________________________ > osg-users mailing list > [EMAIL > PROTECTED]://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph...- > Hide quoted text - > > - Show quoted text - _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org