Browse Source

3D picking

Josh Engebretson 10 years ago
parent
commit
d5088600a4

+ 29 - 7
Source/AtomicEditor/Source/Editors/SceneEditor3D/SceneView3D.cpp

@@ -175,17 +175,11 @@ void SceneView3D::HandlePostRenderUpdate(StringHash eventType, VariantMap& event
     // Visualize the currently selected nodes
     if (selectedNode_.NotNull())
     {
-
-    }
-    //for (uint i = 0; i < selectedNodes.length; ++i)
         DrawNodeDebug(selectedNode_, debugRenderer_);
 
-    // Visualize the currently selected components
-    //for (uint i = 0; i < selectedComponents.length; ++i)
-    //    selectedComponents[i].DrawDebugGeometry(debug, false);
+    }
 
     Ray camRay  = GetCameraRay();
-
     PODVector<RayQueryResult> result;
     RayOctreeQuery query(result, camRay, RAY_TRIANGLE, camera_->GetFarClip(), DRAWABLE_ANY, 0x7fffffff);
     octree_->RaycastSingle(query);
@@ -209,6 +203,34 @@ void SceneView3D::SelectNode(Node* node)
     selectedNode_ = node;
 }
 
+bool SceneView3D::OnEvent(const TBWidgetEvent &ev)
+{
+    if (ev.type == EVENT_TYPE_CLICK)
+    {
+        Ray camRay  = GetCameraRay();
+        PODVector<RayQueryResult> result;
+        RayOctreeQuery query(result, camRay, RAY_TRIANGLE, camera_->GetFarClip(), DRAWABLE_ANY, 0x7fffffff);
+        octree_->RaycastSingle(query);
+
+        if (query.result_.Size())
+        {
+            const RayQueryResult& r = result[0];
+
+            if (r.drawable_)
+            {
+
+                VariantMap neventData;
+                neventData[EditorActiveNodeChange::P_NODE] = r.drawable_->GetNode();
+                SendEvent(E_EDITORACTIVENODECHANGE, neventData);
+
+            }
+        }
+    }
+
+    return false;
+}
+
+
 void SceneView3D::HandleUpdate(StringHash eventType, VariantMap& eventData)
 {
 

+ 2 - 0
Source/AtomicEditor/Source/Editors/SceneEditor3D/SceneView3D.h

@@ -38,6 +38,8 @@ public:
 
     Ray GetCameraRay();
 
+    bool OnEvent(const TBWidgetEvent &ev);
+
 private:
 
     void HandleUpdate(StringHash eventType, VariantMap& eventData);

+ 1 - 1
Source/AtomicEditor/Source/UI/UIView3D.h

@@ -78,7 +78,7 @@ public:
 
     const IntVector2& GetSize() const { return size_; }
 
-    bool OnEvent(const TBWidgetEvent &ev);
+    virtual bool OnEvent(const TBWidgetEvent &ev);
 
 protected: