|
From: Markus R. <rol...@us...> - 2007-04-15 12:19:20
|
Update of /cvsroot/simspark/simspark/contrib/rsgedit In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv31715 Modified Files: sparkglrender.cpp sparkglrender.h Log Message: - render selected BaseNodes with axis lines. This allows highlighting of everything derived from BaseNode (Transform, Body, etc.) Index: sparkglrender.h =================================================================== RCS file: /cvsroot/simspark/simspark/contrib/rsgedit/sparkglrender.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** sparkglrender.h 15 Apr 2007 10:31:05 -0000 1.5 --- sparkglrender.h 15 Apr 2007 12:19:12 -0000 1.6 *************** *** 34,37 **** --- 34,38 ---- class Camera; class SceneServer; + class BaseNode; } *************** *** 51,54 **** --- 52,56 ---- protected: + void RenderNodeSelection(boost::shared_ptr<oxygen::BaseNode> node); void RenderSelection(); Index: sparkglrender.cpp =================================================================== RCS file: /cvsroot/simspark/simspark/contrib/rsgedit/sparkglrender.cpp,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** sparkglrender.cpp 15 Apr 2007 10:31:04 -0000 1.4 --- sparkglrender.cpp 15 Apr 2007 12:19:12 -0000 1.5 *************** *** 25,29 **** --- 25,31 ---- #include <kerosin/renderserver/rendernode.h> #include <kerosin/sceneserver/singlematnode.h> + #include <kerosin/sceneserver/axis.h> #include <kerosin/materialserver/material.h> + #include "constants.h" #include "simspark.h" #include "sparkcontext.h" *************** *** 96,102 **** } void SparkGLRender::RenderSelection() { ! shared_ptr<RenderNode> node = shared_dynamic_cast<RenderNode> (SparkContext::GetInstance().GetSelection().lock()); --- 98,143 ---- } + void SparkGLRender::RenderNodeSelection(shared_ptr<BaseNode> node) + { + if (node.get() == 0) + { + return; + } + + shared_ptr<SingleMatNode> sMatNode = + shared_dynamic_cast<SingleMatNode>(node); + + if (sMatNode.get() != 0) + { + shared_ptr<Material> material = sMatNode->GetMaterial(); + sMatNode->SetMaterial("matSelected"); + + sMatNode->RenderInternal(); + + if (material.get() != 0) + { + sMatNode->SetMaterial(material->GetName()); + } + + return; + } + + shared_ptr<RenderNode> renderNode = + shared_dynamic_cast<RenderNode>(node); + + 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); + } + void SparkGLRender::RenderSelection() { ! shared_ptr<BaseNode> node = shared_dynamic_cast<BaseNode> (SparkContext::GetInstance().GetSelection().lock()); *************** *** 112,133 **** glMultMatrixf(node->GetWorldTransform().m); ! shared_ptr<SingleMatNode> sMatNode = ! shared_dynamic_cast<SingleMatNode>(node); ! ! if (sMatNode.get() != 0) ! { ! shared_ptr<Material> material = sMatNode->GetMaterial(); ! sMatNode->SetMaterial("matSelected"); ! ! node->RenderInternal(); ! ! if (material.get() != 0) ! { ! sMatNode->SetMaterial(material->GetName()); ! } ! } else ! { ! node->RenderInternal(); ! } glPopMatrix(); --- 153,157 ---- glMultMatrixf(node->GetWorldTransform().m); ! RenderNodeSelection(node); glPopMatrix(); |