protected bool IgnoreDepthForRayCasts(Camera camera) { return(CSGSettings.Assume2DView(camera)); }
protected bool IgnoreDepthForRayCasts(SceneView sceneview) { return(CSGSettings.Assume2DView(sceneview)); }
protected void GrabHeightHandle(int index, bool ignoreFirstMouseUp = false) { var sceneView = SceneView.currentDrawingSceneView; //(SceneView.currentDrawingSceneView != null) ? SceneView.currentDrawingSceneView : SceneView.lastActiveSceneView; var camera = (sceneView == null) ? null : sceneView.camera; if (camera == null) { return; } var assume2DView = CSGSettings.Assume2DView(sceneView); firstClick = ignoreFirstMouseUp; editMode = EditMode.ExtrudeShape; GUIUtility.hotControl = extrusionPoints[index].ID; GUIUtility.keyboardControl = extrusionPoints[index].ID; EditorGUIUtility.editingTextField = false; EditorGUIUtility.SetWantsMouseJumping(1); var surfaceDirection = buildPlane.normal; var closestAxisForward = GeometryUtility.SnapToClosestAxis(-camera.transform.forward); var closestAxisArrow = GeometryUtility.SnapToClosestAxis(surfaceDirection); Vector3 tangent, normal; float dot = Mathf.Abs(Vector3.Dot(closestAxisForward, closestAxisArrow)); if (dot != 1) { Vector3 v1, v2; if (closestAxisForward.x == 0 && closestAxisForward.y == 0) { v1 = new Vector3(1, 0, 0); v2 = new Vector3(0, 1, 0); } else if (closestAxisForward.x == 0 && closestAxisForward.z == 0) { v1 = new Vector3(1, 0, 0); v2 = new Vector3(0, 0, 1); } else //if (closestAxisForward.y == 0 && closestAxisForward.z == 0) { v1 = new Vector3(0, 1, 0); v2 = new Vector3(0, 0, 1); } var backward = -camera.transform.forward; float dot1 = Vector3.Dot(backward, v1); float dot2 = Vector3.Dot(backward, v2); if (dot1 < dot2) { tangent = v1; } else { tangent = v2; } } else { tangent = GeometryUtility.SnapToClosestAxis(Vector3.Cross(surfaceDirection, -camera.transform.forward)); } normal = Vector3.Cross(surfaceDirection, tangent); if (assume2DView) { normal = -camera.transform.forward; } if (normal == MathConstants.zeroVector3) { normal = GeometryUtility.SnapToClosestAxis(-camera.transform.forward); } movePlane = new CSGPlane(normal, extrusionPoints[index].Position); if (!assume2DView && Mathf.Abs(movePlane.Distance(camera.transform.position)) < 2.0f) { var new_tangent = Vector3.Cross(normal, closestAxisForward); if (new_tangent != MathConstants.zeroVector3) { tangent = new_tangent; normal = Vector3.Cross(surfaceDirection, tangent); movePlane = new CSGPlane(normal, extrusionPoints[index].Position); } } movePolygonDirection = haveForcedDirection ? forcedDirection : buildPlane.normal; if (!isFinished) { RealtimeCSG.CSGGrid.SetForcedGrid(movePlane); } var plane = new CSGPlane(buildPlane.normal, extrusionPoints[index].Position); heightPosition = Event.current.mousePosition; heightHandleOffset = (plane.Distance(GetHeightHandlePosition(extrusionPoints[index].Position)) * movePolygonDirection); if (float.IsInfinity(heightHandleOffset.x) || float.IsNaN(heightHandleOffset.x) || float.IsInfinity(heightHandleOffset.y) || float.IsNaN(heightHandleOffset.y) || float.IsInfinity(heightHandleOffset.z) || float.IsNaN(heightHandleOffset.z)) { heightHandleOffset = Vector3.zero; } }