bool TransformTool::onMouseMove(int x, int y) { if (!mActive) return false; mMousePosition.set(x, y); if (!mGizmo.onMouseMove(x, y)) { if (mMouseDown) { Point2I delta = mMousePosition - mMouseDownPosition; F32 dist = delta.len(); if (dist > 5.0f) mBoxSelection = true; } } return false; }
bool TransformTool::onMouseLeftUp(int x, int y) { if (!mActive) return false; if (!mGizmo.onMouseLeftUp(x, y)) { Point2I delta = mMousePosition - mMouseDownPosition; F32 dist = delta.len(); if (mBoxSelection && mMousePosition.x != mMouseDownPosition.x && mMousePosition.y != mMouseDownPosition.y) { //mDebugBoxSelection = true; Torque::Rendering.screenToWorld(Point2I(mMouseDownPosition.x, mMouseDownPosition.y), mBoxNearPoint, mBoxFarPoint[0]); Torque::Rendering.screenToWorld(Point2I(mMousePosition.x, mMouseDownPosition.y), mBoxNearPoint, mBoxFarPoint[1]); Torque::Rendering.screenToWorld(Point2I(mMouseDownPosition.x, mMousePosition.y), mBoxNearPoint, mBoxFarPoint[2]); Torque::Rendering.screenToWorld(Point2I(mMousePosition.x, mMousePosition.y), mBoxNearPoint, mBoxFarPoint[3]); PlaneF planes[4]; planes[0].set(mBoxNearPoint, mBoxFarPoint[2], mBoxFarPoint[0]); planes[1].set(mBoxNearPoint, mBoxFarPoint[1], mBoxFarPoint[3]); planes[2].set(mBoxNearPoint, mBoxFarPoint[0], mBoxFarPoint[1]); planes[3].set(mBoxNearPoint, mBoxFarPoint[3], mBoxFarPoint[2]); PlaneSetF planeSet(planes, 4); Vector<Scene::SceneObject*> objects = Torque::Scene.boxSearch(planeSet); if (objects.size() > 0) { wxTorqueObjectEvent evt(0, wxTORQUE_SELECT_OBJECT); for (S32 n = 0; n < objects.size(); ++n) evt.AddObject(objects[n]); if (mShiftDown) { if (mSelectedObject != NULL) evt.AddObject(mSelectedObject); for (S32 n = 0; n < mSelectedObjects.size(); ++n) evt.AddObject(mSelectedObjects[n]); if (mSelectedComponent != NULL) evt.AddObject(mSelectedComponent); } // Broadcast the selections. mEditorManager->postEvent(evt); } } else { Torque::Rendering.screenToWorld(Point2I(x, y), mLastRayStart, mLastRayEnd); Point3F editorPos = mEditorManager->mEditorCamera.getWorldPosition(); //mDebugWorldRay = true; Scene::SceneObject* hit = Torque::Scene.raycast(mLastRayStart, mLastRayEnd); if (mSelectedObject != hit) { if (hit) { wxTorqueObjectEvent evt(0, wxTORQUE_SELECT_OBJECT); evt.AddObject(hit); if (mShiftDown) { if ( mSelectedObject != NULL ) evt.AddObject(mSelectedObject); for (S32 n = 0; n < mSelectedObjects.size(); ++n) evt.AddObject(mSelectedObjects[n]); if (mSelectedComponent != NULL) evt.AddObject(mSelectedComponent); } // Broadcast the hit. mEditorManager->postEvent(evt); } } } } mMouseDown = false; mBoxSelection = false; return false; }