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();
|