@@ -485,43 +485,6 @@ static void invertOSGTransform(osg::Vec3d& trans, osg::Quat& quat,
485
485
std::swap (source_frame, target_frame);
486
486
}
487
487
488
- static void makeRoot (osg::Node& _transformer,
489
- osg::ref_ptr<osg::PositionAttitudeTransform> desiredRoot,
490
- std::set<osg::Node*> ancestors)
491
- {
492
- PositionAttitudeTransform* transformer = getTransform (&_transformer);
493
-
494
- osg::Vec3d trans = osg::Vec3d (0 , 0 , 0 );
495
- osg::Quat rot = osg::Quat (0 , 0 , 0 , 1 );
496
-
497
- ref_ptr<PositionAttitudeTransform> currentNode (desiredRoot);
498
- ref_ptr<PositionAttitudeTransform> lastNode (transformer);
499
- while (currentNode != transformer && !ancestors.count (currentNode))
500
- {
501
- osg::Vec3d nextTrans = currentNode->getPosition ();
502
- osg::Quat nextRot = currentNode->getAttitude ();
503
- currentNode->setPosition (trans);
504
- currentNode->setAttitude (rot);
505
- rot = nextRot.inverse ();
506
- trans = -(rot * nextTrans);
507
-
508
- ref_ptr<PositionAttitudeTransform> parent (getTransform (currentNode->getParent (0 )));
509
- parent->removeChild (currentNode);
510
- lastNode->addChild (currentNode);
511
- lastNode = currentNode;
512
- currentNode = parent;
513
- }
514
- }
515
-
516
- void TransformerGraph::makeRoot (osg::Node& _transformer, std::string const & frame)
517
- {
518
- ref_ptr<PositionAttitudeTransform> desiredRoot (FindFrame::find (_transformer, frame));
519
- if (!desiredRoot)
520
- return ;
521
-
522
- return ::makeRoot (_transformer, desiredRoot, std::set<osg::Node*>());
523
- }
524
-
525
488
bool TransformerGraph::setTransformation (osg::Node &transformer,const std::string &_source_frame,const std::string &_target_frame,
526
489
const osg::Quat &_quat, const osg::Vec3d &_trans)
527
490
{
@@ -549,36 +512,14 @@ bool TransformerGraph::setTransformation(osg::Node &transformer,const std::strin
549
512
}
550
513
else if (target->getParent (0 ) != source)
551
514
{
552
- if (target == &transformer || (source-> getParent ( 0 ) == &transformer && target-> getParent ( 0 ) != &transformer) )
515
+ if (target == &transformer)
553
516
{
554
517
invertOSGTransform (trans, quat, source, target, source_frame, target_frame);
555
518
}
556
519
557
- if (target->getParent (0 ) != &transformer)
558
- {
559
- std::set<osg::Node*> ancestors;
560
- osg::ref_ptr<osg::Node> sourceAncestor = source;
561
- while (sourceAncestor != &transformer)
562
- {
563
- ancestors.insert (sourceAncestor);
564
- if (sourceAncestor->getParent (0 ) == target)
565
- {
566
- target->removeChild (sourceAncestor);
567
- getTransform (&transformer)->addChild (sourceAncestor);
568
- ancestors.clear ();
569
- break ;
570
- }
571
- else
572
- sourceAncestor = sourceAncestor->getParent (0 );
573
- }
574
-
575
- ::makeRoot (transformer, getTransform(target), ancestors);
576
-
577
- }
578
-
579
- osg::ref_ptr<osg::Node> node = target; // insures that node is not deleted
580
- removeFrame (transformer,target_frame);
581
- source->addChild (node);
520
+ osg::ref_ptr<osg::Node> node = target; // insures that node is not deleted
521
+ target->getParent (0 )->removeChild (target);
522
+ source->addChild (target);
582
523
}
583
524
584
525
target->setAttitude (quat);
0 commit comments