private bool DrawBoneSelection() { if (viewModel.PreviousModelFactory == null) { return(false); } NPVoxBoneModel previewModel = viewModel.EditorModelFactory.GetProduct() as NPVoxBoneModel; if (previewModel == null) { return(false); } if (!viewModel.IsBoneSelectionActive()) { return(false); } NPVoxToUnity npVoxToUnity = new NPVoxToUnity(previewModel, viewModel.Animation.MeshFactory.VoxelSize); // affected area picker if (Event.current.isMouse && Event.current.type == EventType.MouseDown && Event.current.button == 0) { // NPVoxCoord someCoord = NPVoxCoord.INVALID; float mouseScale = NPVoxHandles.GetMouseScale(SceneView.currentDrawingSceneView.camera); Camera cam = SceneView.currentDrawingSceneView.camera; Ray r = SceneView.currentDrawingSceneView.camera.ScreenPointToRay( new Vector3(Event.current.mousePosition.x * mouseScale, -Event.current.mousePosition.y * mouseScale + Camera.current.pixelHeight) ); NPVoxRayCastHit raycastHit = npVoxToUnity.Raycast(r, ((NPVoxAnimationEditorSession)target).previewFilter.transform, 20); if (raycastHit.IsHit) { uint boneMask = previewModel.GetBoneMask(raycastHit.Coord); if (boneMask != 0) { if (Event.current.control || Event.current.command) { viewModel.ToggleBoneMask(boneMask, Event.current.shift); } else { viewModel.SetBoneMask(boneMask, Event.current.shift); } } } } return(true); }
public static NPVoxCoord VoxelPicker(NPVoxToUnity npVoxToUnity, NPVoxCoord previousSelectedCoord, int buttonNum, Transform transform) { if (npVoxToUnity == null) { return(NPVoxCoord.INVALID); } int controlID = GUIUtility.GetControlID(FocusType.Passive); EventType eventType = Event.current.GetTypeForControl(controlID); Vector3 voxelCenter = new Vector3(); NPVoxCoord impactCoord = NPVoxCoord.INVALID; // Vector3 offset = SceneView.currentDrawingSceneView.position; // Vector3 mp = Event.current.mousePosition - offset; float mouseScale = GetMouseScale(SceneView.currentDrawingSceneView.camera); Ray r = SceneView.currentDrawingSceneView.camera.ScreenPointToRay( new Vector3(Event.current.mousePosition.x * mouseScale, -Event.current.mousePosition.y * mouseScale + Camera.current.pixelHeight) ); NPVoxRayCastHit raycastHit = npVoxToUnity.Raycast(r, transform, 20); if (raycastHit.IsHit) { impactCoord = raycastHit.Coord; voxelCenter = npVoxToUnity.ToUnityPosition(impactCoord); // if (isMouseDown) { Handles.color = Color.yellow; Handles.CubeCap(controlID, voxelCenter, Quaternion.identity, npVoxToUnity.VoxeSize.x * 2.0f); // SceneView.currentDrawingSceneView.Repaint(); } } else { return(previousSelectedCoord); } switch (eventType) { case EventType.Layout: mouseStartPos = Event.current.mousePosition; // if (raycastHit.IsHit) { HandleUtility.AddControl( controlID, HandleUtility.DistanceToCircle(voxelCenter, npVoxToUnity.VoxeSize.x * 0.25f) ); } break; case EventType.MouseDown: if (HandleUtility.nearestControl == controlID && Event.current.button == buttonNum) { mouseStartPos = Event.current.mousePosition; GUIUtility.hotControl = controlID; Event.current.Use(); } break; case EventType.MouseUp: if (GUIUtility.hotControl == controlID) { GUI.changed = true; GUIUtility.hotControl = 0; Event.current.Use(); return(impactCoord); } break; case EventType.MouseDrag: if (GUIUtility.hotControl == controlID) { Event.current.Use(); } break; } return(previousSelectedCoord); }