Hi Jonstantin,

Thanks for the patch.  Could you post the whole modified file as this
is the most reliable way to submit changes for review.

Thanks,
Robert.

On Thu, Mar 12, 2009 at 10:54 AM, Konstantin Sinitsyn
<[email protected]> wrote:
> Good day!
>
> At this moment, I just introducing to OSG. When I reviewing optimizer code,
> I find a mistake in Optimizer::RemoveLoadedProxyNodesVisitor, as it seems.
> This optimizer removes proxy nodes that fully loaded and in some cases
> attach their childs to parrents directly (without creating of group). I dont
> understand how this works, because if proxy node doesn't have any attributes
> such as name, description, node mask and any callbacks, then new group does
> not created to hold proxy node childs. And code below trying to attach their
> children to all parents but seems like only first child beeing attached to
> all parents correctly.
>
> // take a copy of parents list since subsequent removes will modify the
> original one.
> osg::Node::ParentList parents = group->getParents();
> for(unsigned int i=0;i<group->getNumChildren();++i)
> {
>     osg::Node* child = group->getChild(i);
>     for(osg::Node::ParentList::iterator pitr=parents.begin();
>         pitr!=parents.end();
>         ++pitr)
>     {
>         (*pitr)->replaceChild(group.get(),child);
>     }
> }
>
> With best regards,
>    Konstantin Sinitsyn!
>
> Index: Optimizer.cpp
> ===================================================================
> --- Optimizer.cpp       (revision 9914)
> +++ Optimizer.cpp       (working copy)
> @@ -1506,14 +1506,15 @@
>                 // take a copy of parents list since subsequent removes will
> modify the original one.
>                 osg::Node::ParentList parents = group->getParents();
>
> -                for(unsigned int i=0;i<group->getNumChildren();++i)
> +                for(osg::Node::ParentList::iterator pitr=parents.begin();
> +                    pitr!=parents.end();
> +                    ++pitr)
>                 {
> -                    osg::Node* child = group->getChild(i);
> -                    for(osg::Node::ParentList::iterator
> pitr=parents.begin();
> -                        pitr!=parents.end();
> -                        ++pitr)
> +                    (*pitr)->removeChild(group.get());
> +                    for(unsigned int i=0;i<group->getNumChildren();++i)
>                     {
> -                        (*pitr)->replaceChild(group.get(),child);
> +                        osg::Node* child = group->getChild(i);
> +                        (*pitr)->addChild(child);
>                     }
>
>                 }
>
> _______________________________________________
> osg-submissions mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>
>
_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to