Changeset 515


Ignore:
Timestamp:
08/25/10 12:36:02 (18 months ago)
Author:
ddangelo
Message:

getAbsoluteTransform calculation function splitted into two functions. The old one always traverses up to the root node, and the added one stops at a given node. The default parameters introduced in commit 514 caused some problems with function overloading in boost::python.

Location:
trunk/avango-osg
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/avango-osg/include/avango/osg/Node.h

    r514 r515  
    9090       * to call evaluate on all nodes on the traversal to the root node. 
    9191       */ 
    92       ::osg::Matrix getAbsoluteTransform(av::FieldContainer* caller = 0, av::osg::Node * haltTraversalAtNode = 0) const; 
     92      ::osg::Matrix getAbsoluteTransform(av::FieldContainer* caller = 0) const; 
     93 
     94      ::osg::Matrix getAbsoluteTransformHaltAtNode(av::FieldContainer* caller = 0, av::osg::Node * haltTraversalAtNode = 0) const; 
    9395 
    9496    protected: 
  • trunk/avango-osg/python/avango/osg/OSGNode.cpp

    r482 r515  
    7272  .def("get_bounding_sphere", &av::osg::Node::getBoundingSphere) 
    7373  .def("get_absolute_transform", &av::osg::Node::getAbsoluteTransform) 
     74  .def("get_absolute_transform_halt_at_node", &av::osg::Node::getAbsoluteTransformHaltAtNode) 
    7475  ; 
    7576 
  • trunk/avango-osg/src/avango/osg/Node.cpp

    r514 r515  
    7878 
    7979::osg::Matrix 
    80 av::osg::Node::getAbsoluteTransform(av::FieldContainer* caller, av::osg::Node * haltTraversalAtNode) const 
     80av::osg::Node::getAbsoluteTransform(av::FieldContainer* caller) const 
     81{ 
     82  ::osg::Node *osg_node = getOsgNode(); 
     83 
     84  // traverse to the root node and trigger evaluate() if a caller was given 
     85  while(osg_node != 0) 
     86  { 
     87    ::osg::Node::ParentList parent_list = osg_node->getParents(); 
     88 
     89    if (parent_list.size() > 0) 
     90    { 
     91      Link<av::osg::Node> av_node = av::osg::get_from_osg_object<av::osg::Node>(parent_list[0]); 
     92 
     93      if (av_node.isValid()) 
     94      { 
     95        if (caller != 0) 
     96          caller->evaluateDependency(*av_node); 
     97        osg_node = av_node->getOsgNode(); 
     98      } 
     99      else 
     100        break; 
     101    } 
     102    else 
     103      break; 
     104  } 
     105 
     106  ::osg::Matrix abs_mat; 
     107  ::osg::MatrixList abs_mat_list = getOsgNode()->getWorldMatrices(osg_node); 
     108  if (abs_mat_list.size() > 0u) 
     109    abs_mat = abs_mat_list[0]; 
     110 
     111  return abs_mat; 
     112} 
     113 
     114 
     115::osg::Matrix 
     116av::osg::Node::getAbsoluteTransformHaltAtNode(av::FieldContainer* caller, av::osg::Node * haltTraversalAtNode) const 
    81117{ 
    82118  ::osg::Node *osg_node = getOsgNode(); 
     
    117153} 
    118154 
     155 
    119156/* virtual */ void 
    120157av::osg::Node::getParentsCB(const av::osg::MFGroup::GetValueEvent& event) 
Note: See TracChangeset for help on using the changeset viewer.