|
From: Markus R. <rol...@us...> - 2007-06-13 13:20:28
|
Update of /cvsroot/simspark/simspark/contrib/rsgedit In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv24618 Modified Files: Tag: ROSIMPORTER_XLAB sparkglrender.cpp sparkglrender.h Log Message: - refactor RenderSelectedNode() - highlight connected bodies when a joint node is selected Index: sparkglrender.h =================================================================== RCS file: /cvsroot/simspark/simspark/contrib/rsgedit/sparkglrender.h,v retrieving revision 1.6 retrieving revision 1.6.4.1 diff -C2 -d -r1.6 -r1.6.4.1 *** sparkglrender.h 15 Apr 2007 12:19:12 -0000 1.6 --- sparkglrender.h 13 Jun 2007 13:20:22 -0000 1.6.4.1 *************** *** 44,47 **** --- 44,54 ---- class SparkGLRender { + protected: + struct RenderSelectionContext + { + RenderSelectionContext(boost::shared_ptr<oxygen::BaseNode> node); + ~RenderSelectionContext(); + }; + public: SparkGLRender(); Index: sparkglrender.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/contrib/rsgedit/sparkglrender.cpp,v retrieving revision 1.5 retrieving revision 1.5.4.1 diff -C2 -d -r1.5 -r1.5.4.1 *** sparkglrender.cpp 15 Apr 2007 12:19:12 -0000 1.5 --- sparkglrender.cpp 13 Jun 2007 13:20:22 -0000 1.5.4.1 *************** *** 20,23 **** --- 20,25 ---- #include "sparkglrender.h" #include <zeitgeist/logserver/logserver.h> + #include <oxygen/physicsserver/body.h> + #include <oxygen/physicsserver/joint.h> #include <oxygen/sceneserver/camera.h> #include <oxygen/sceneserver/sceneserver.h> *************** *** 36,39 **** --- 38,57 ---- using namespace kerosin; + // ---- SparkGLRender::RenderSelectionContext + + SparkGLRender::RenderSelectionContext::RenderSelectionContext(shared_ptr<BaseNode> node) + { + assert(node.get() != 0); + glPushMatrix(); + glMultMatrixf(node->GetWorldTransform().m); + } + + SparkGLRender::RenderSelectionContext::~RenderSelectionContext() + { + glPopMatrix(); + } + + // ---- SparkGLRender + SparkGLRender::SparkGLRender() { *************** *** 110,116 **** --- 128,136 ---- if (sMatNode.get() != 0) { + shared_ptr<Material> material = sMatNode->GetMaterial(); sMatNode->SetMaterial("matSelected"); + RenderSelectionContext context(sMatNode); sMatNode->RenderInternal(); *************** *** 128,138 **** if (renderNode.get() != 0) { renderNode->RenderInternal(); return; } const salt::AABB3& bb = node->GetWorldBoundingBox(); float size = std::max<float>(GLRENDER_MIN_AXIS_WIDTH, bb.GetRadius()); ! Axis::RenderAxis(size); } --- 148,193 ---- if (renderNode.get() != 0) { + RenderSelectionContext context(renderNode); renderNode->RenderInternal(); return; } + shared_ptr<Joint> jointNode = + shared_dynamic_cast<Joint>(node); + + if (jointNode.get() != 0) + { + for ( + int i=Joint::BI_FIRST; + i<=Joint::BI_SECOND; + ++i + ) + { + shared_ptr<Body> body = + jointNode->GetBody(static_cast<Joint::EBodyIndex>(i)); + + if (body.get() == 0) + { + continue; + } + + RenderNodeSelection(body); + } + + { + RenderSelectionContext context(jointNode); + Axis::RenderAxis(0.5); + } + + return; + } + const salt::AABB3& bb = node->GetWorldBoundingBox(); float size = std::max<float>(GLRENDER_MIN_AXIS_WIDTH, bb.GetRadius()); ! ! { ! RenderSelectionContext context(node); ! Axis::RenderAxis(size); ! } } *************** *** 150,158 **** glDisable(GL_DEPTH_TEST); - glPushMatrix(); - glMultMatrixf(node->GetWorldTransform().m); - RenderNodeSelection(node); - - glPopMatrix(); } --- 205,208 ---- |