Hello,

i want to move an vrml-node with all its childs if i click it.
I implemented 3 methods:


first one: adds and Transformation node and the vrml-nodes as a child(s) 
(the result is added to the graph):

OSG::NodePtr createSceneObject(CSceneObject object)
{
OSG::NodePtr nVrml = OSG::SceneFileHandler::the().read(object.filename);

if (nVrml != OSG::NullFC)
{
// Transformation und Rotation
OSG::TransformPtr cTransform = OSG::Transform::create();
beginEditCP(cTransform , OSG::Transform::MatrixFieldMask);
object.m.setIdentity();
object.m.setTranslate(object.posX, object.posY, object.posZ);
object.m.setRotate(OSG::Quaternion(OSG::Vec3f(1,0,0), object.rotX));
object.m.setRotate(OSG::Quaternion(OSG::Vec3f(0,1,0), object.rotY));
object.m.setRotate(OSG::Quaternion(OSG::Vec3f(0,0,1), object.rotZ));
object.m.setScale(object.scaleX, object.scaleY, object.scaleZ);
cTransform->setMatrix(object.m);
OSG::setName(cTransform, "OBJEKTTRANSFORM");
endEditCP(cTransform, OSG::Transform::MatrixFieldMask);

OSG::NodePtr nTransform = OSG::Node::create();
beginEditCP(nTransform, OSG::Node::CoreFieldMask | 
OSG::Node::ChildrenFieldMask);
nTransform->setCore(cTransform);
nTransform->addChild(nVrml);
OSG::setName(nTransform, "OBJEKTTRANSFORM");
endEditCP(nTransform, OSG::Node::CoreFieldMask | 
OSG::Node::ChildrenFieldMask);
return nTransform;

}
else
{
logger.logDebug("Datei konnte nicht geladen werden");
return OSG::NullFC;
}
}

second one: gives a node upwards to the parents:

OSG::NodePtr getParentNodeWithName(OSG::NodePtr n, char* str)
{
//int parents = n->getParent();
bool found = false;

if(getName(n))
if(getName(n) == std::string(str))
{
found = true;
return n;
}
else
{
return getParentNodeWithName(n->getParent(), str);
}
}


third one: here is the problem: the parent-core-type seems not to be 
derived from OSG::Transform.

OSG::NodePtr C3DEngine::selectObject(int x, int y)
{
OSG::Line ray = mgr->calcViewRay(x, y);
OSG::IntersectAction *iAct = OSG::IntersectAction::create();

iAct->setLine(ray);
iAct->apply(mgr->getRoot());

if (iAct->didHit())
{
OSG::NodePtr n = iAct->getHitObject();
currentObject = n;
mgr->setHighlight(n);
mgr->setHeadlight(true);

OSG::NodePtr parent;
parent = getParentNodeWithName(n,"OBJEKTTRANSFORM"); //gives a parent
if(parent != OSG::NullFC)
{
if(parent->getCore()->getType().isDerivedFrom( 
OSG::Transform::getClassType())) //gives not the right type
{
OSG::TransformPtr cTransform = OSG::TransformPtr::dcast(parent->getCore());
OSG::Matrix m = cTransform->getMatrix();
m.setTranslate(10, 0, 0);
cTransform->setMatrix(m);
}
}
return n;
}
else
{
return OSG::NullFC;
}

}

i can“t find my fault :-/


thanks
Daniel




-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to