/* * public static void DrawSelectedBrush(GeometryWireframe outline, Matrix4x4 transformation, Color wireframeColor, float thickness = -1) * { * Color selectedOuterColor = wireframeColor; * Color selectedInnerColor = wireframeColor * inner_factor; * Color selectedOuterOccludedColor = selectedOuterColor * occluded_factor; * Color selectedInnerOccludedColor = selectedInnerColor * occluded_factor; * * selectedOuterOccludedColor.a *= 0.5f; * selectedInnerOccludedColor.a *= 0.5f; * * CSGRenderer.DrawOutlines(outline, transformation, selectedOuterColor, selectedOuterOccludedColor, selectedInnerColor, selectedInnerOccludedColor, thickness); * }*/ //static readonly Color emptyColor = new Color(0, 0, 0, 0); public static void DrawSelectedBrush(Int32 brushNodeID, Shape shape, Matrix4x4 transformation, Color wireframeColor, int surfaceIndex, bool selectAllSurfaces, float thickness = -1) { if (selectAllSurfaces) { Color selectedOuterColor = wireframeColor; Color selectedInnerColor = wireframeColor; Color selectedOuterOccludedColor = selectedOuterColor * occluded_factor; Color selectedInnerOccludedColor = selectedInnerColor * occluded_factor; selectedOuterOccludedColor.a *= 0.5f; selectedInnerOccludedColor.a *= 0.5f; CSGRenderer.DrawOutlines(brushNodeID, transformation, selectedOuterColor, selectedOuterOccludedColor, selectedInnerColor, selectedInnerOccludedColor, thickness); } else { Color unselectedOuterColor = wireframeColor * unselected_factor; Color unselectedInnerColor = wireframeColor * (unselected_factor * inner_factor); Color selectedOuterColor = wireframeColor; Color selectedInnerColor = wireframeColor * inner_factor; Color unselectedOuterOccludedColor = unselectedOuterColor * occluded_factor; Color unselectedInnerOccludedColor = unselectedInnerColor * occluded_factor; // Color selectedOuterOccludedColor = selectedOuterColor * occluded_factor; // Color selectedInnerOccludedColor = selectedInnerColor * occluded_factor; unselectedOuterOccludedColor.a *= 0.5f; unselectedInnerOccludedColor.a *= 0.5f; if (surfaceIndex >= 0 && surfaceIndex < shape.Surfaces.Length) { CSGRenderer.DrawSurfaceOutlines(brushNodeID, shape, transformation, surfaceIndex, selectedOuterColor, selectedInnerColor); } CSGRenderer.DrawOutlines(brushNodeID, transformation, unselectedOuterColor, unselectedOuterOccludedColor, unselectedInnerColor, unselectedInnerOccludedColor, thickness); } }
protected void PaintSnapVisualisation() { if (visualSnappedEdges != null) { PaintUtility.DrawLines(visualSnappedEdges.ToArray(), GUIConstants.oldThickLineScale, ColorSettings.SnappedEdges); } var _origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; if (visualSnappedGrid != null) { PaintUtility.DrawDottedLines(visualSnappedGrid.ToArray(), ColorSettings.SnappedEdges); } if (visualSnappedBrush != null) { if (visualSnappedBrush.compareTransformation != null && visualSnappedBrush.ChildData != null && visualSnappedBrush.ChildData.ModelTransform) { var color = ColorSettings.HoverOutlines; var brush_transformation = visualSnappedBrush.compareTransformation.localToWorldMatrix; CSGRenderer.DrawOutlines(visualSnappedBrush.brushNodeID, brush_transformation, color, color, color, color, GUIConstants.oldThickLineScale); } } Handles.matrix = _origMatrix; }
protected void PaintSnapVisualisation() { if (visualSnappedEdges != null) { PaintUtility.DrawLines(visualSnappedEdges.ToArray(), ToolConstants.oldThickLineScale, ColorSettings.SnappedEdges); } var _origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; if (visualSnappedGrid != null) { PaintUtility.DrawDottedLines(visualSnappedGrid.ToArray(), ColorSettings.SnappedEdges); } if (visualSnappedBrush != null) { var brush_cache = InternalCSGModelManager.GetBrushCache(visualSnappedBrush); if (brush_cache != null && brush_cache.compareTransformation != null && brush_cache.childData != null && brush_cache.childData.ModelTransform != null && brush_cache.childData.ModelTransform) { var color = ColorSettings.HoverOutlines; var brush_translation = brush_cache.compareTransformation.modelLocalPosition + brush_cache.childData.ModelTransform.position; CSGRenderer.DrawOutlines(visualSnappedBrush.brushID, brush_translation, color, color, color, color, ToolConstants.oldThickLineScale); } } Handles.matrix = _origMatrix; }
//static readonly Color emptyColor = new Color(0, 0, 0, 0); public static void DrawSelectedBrush(Int32 brushID, Shape shape, Vector3 translation, Color wireframeColor, int texGenID, bool selectAllSurfaces, float thickness = -1) { if (selectAllSurfaces) { Color selectedOuterColor = wireframeColor; Color selectedInnerColor = wireframeColor; Color selectedOuterOccludedColor = selectedOuterColor * occluded_factor; Color selectedInnerOccludedColor = selectedInnerColor * occluded_factor; selectedOuterOccludedColor.a *= 0.5f; selectedInnerOccludedColor.a *= 0.5f; CSGRenderer.DrawOutlines(brushID, translation, selectedOuterColor, selectedOuterOccludedColor, selectedInnerColor, selectedInnerOccludedColor, thickness); } else { Color unselectedOuterColor = wireframeColor * unselected_factor; Color unselectedInnerColor = wireframeColor * (unselected_factor * inner_factor); Color selectedOuterColor = wireframeColor; Color selectedInnerColor = wireframeColor * inner_factor; Color unselectedOuterOccludedColor = unselectedOuterColor * occluded_factor; Color unselectedInnerOccludedColor = unselectedInnerColor * occluded_factor; // Color selectedOuterOccludedColor = selectedOuterColor * occluded_factor; // Color selectedInnerOccludedColor = selectedInnerColor * occluded_factor; unselectedOuterOccludedColor.a *= 0.5f; unselectedInnerOccludedColor.a *= 0.5f; if (texGenID >= 0 && texGenID < shape.TexGens.Length) { CSGRenderer.DrawTexGenOutlines(brushID, shape, translation, texGenID, selectedOuterColor, selectedInnerColor); } CSGRenderer.DrawOutlines(brushID, translation, unselectedOuterColor, unselectedOuterOccludedColor, unselectedInnerColor, unselectedInnerOccludedColor, thickness); } }
public static void DrawSelectedBrushes(LineMeshManager zTestLineMeshManager, LineMeshManager noZTestLineMeshManager, GeometryWireframe[] wireframes, Matrix4x4[] transformations, Color wireframeColor, float thickness = -1) { Color selectedOuterColor = wireframeColor; //selectedOuterColor.a = 1.0f; Color selectedInnerColor = selectedOuterColor * inner_factor; Color selectedOuterOccludedColor = selectedOuterColor * occluded_factor; Color selectedInnerOccludedColor = selectedInnerColor * occluded_factor; //selectedOuterOccludedColor.a *= 0.5f; //selectedInnerOccludedColor.a *= 0.5f; CSGRenderer.DrawOutlines(zTestLineMeshManager, noZTestLineMeshManager, wireframes, transformations, selectedOuterColor, selectedOuterOccludedColor, selectedInnerColor, selectedInnerOccludedColor, thickness); }
public static void DrawSelectedBrush(Int32 brushNodeID, Matrix4x4 transformation, Color wireframeColor, float thickness = -1) { Color selectedOuterColor = wireframeColor; //selectedOuterColor.a = 1.0f; Color selectedInnerColor = selectedOuterColor * inner_factor; Color selectedOuterOccludedColor = selectedOuterColor * occluded_factor; Color selectedInnerOccludedColor = selectedInnerColor * occluded_factor; selectedOuterOccludedColor.a *= 0.5f; selectedInnerOccludedColor.a *= 0.5f; CSGRenderer.DrawOutlines(brushNodeID, transformation, selectedOuterColor, selectedOuterOccludedColor, selectedInnerColor, selectedInnerOccludedColor, thickness); }
public static void DrawSelectedBrush(GeometryWireframe outline, Vector3 translation, Color wireframeColor, float thickness = -1) { Color selectedOuterColor = wireframeColor; Color selectedInnerColor = wireframeColor * inner_factor; Color selectedOuterOccludedColor = selectedOuterColor * occluded_factor; Color selectedInnerOccludedColor = selectedInnerColor * occluded_factor; selectedOuterOccludedColor.a *= 0.5f; selectedInnerOccludedColor.a *= 0.5f; CSGRenderer.DrawOutlines(outline, translation, selectedOuterColor, selectedOuterOccludedColor, selectedInnerColor, selectedInnerOccludedColor, thickness); }
public static void DrawSelectedBrushes(LineMeshManager zTestLineMeshManager, LineMeshManager noZTestLineMeshManager, Int32[] brushIDs, Vector3[] translations, Color wireframeColor, float thickness = -1) { Color selectedOuterColor = wireframeColor; //selectedOuterColor.a = 1.0f; Color selectedInnerColor = selectedOuterColor * inner_factor; Color selectedOuterOccludedColor = selectedOuterColor * occluded_factor; Color selectedInnerOccludedColor = selectedInnerColor * occluded_factor; selectedOuterOccludedColor.a *= 0.5f; selectedInnerOccludedColor.a *= 0.5f; var wireframes = BrushOutlineManager.GetBrushOutlines(brushIDs); CSGRenderer.DrawOutlines(zTestLineMeshManager, noZTestLineMeshManager, wireframes, translations, selectedOuterColor, selectedOuterOccludedColor, selectedInnerColor, selectedInnerOccludedColor, thickness); }
protected override void HandleEditShapeEvents(SceneView sceneView, Rect sceneRect) { var camera = sceneView.camera; if (!SceneDragToolManager.IsDraggingObjectInScene && Event.current.type == EventType.Repaint) { if (visualSnappedEdges != null) PaintUtility.DrawLines(visualSnappedEdges.ToArray(), GUIConstants.oldThickLineScale, ColorSettings.SnappedEdges); if (visualSnappedGrid != null) { var _origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; PaintUtility.DrawDottedLines(visualSnappedGrid.ToArray(), ColorSettings.SnappedEdges); Handles.matrix = _origMatrix; } if (visualSnappedBrush != null) { if (visualSnappedBrush.compareTransformation != null && visualSnappedBrush.ChildData != null && visualSnappedBrush.ChildData.ModelTransform) { var brush_transformation = visualSnappedBrush.compareTransformation.localToWorldMatrix; CSGRenderer.DrawOutlines(visualSnappedBrush.brushNodeID, brush_transformation, ColorSettings.SelectedOutlines, ColorSettings.SelectedOutlines, ColorSettings.SelectedOutlines, ColorSettings.SelectedOutlines); } } var origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; bool isValid; var realVertices = settings.GetVertices(buildPlane, worldPosition, gridTangent, gridBinormal, out isValid); if (editMode == EditMode.EditShape) shapeIsValid = isValid; var wireframeColor = ColorSettings.WireframeOutline; //var topWireframeColor = ColorSettings.BoundsEdgeHover; if (!shapeIsValid || !isValid) wireframeColor = Color.red; if (realVertices.Length > 0) { if (realVertices.Length >= 3) { var color = ColorSettings.ShapeDrawingFill; PaintUtility.DrawPolygon(MathConstants.identityMatrix, realVertices, color); } for (int i = 1; i < realVertices.Length; i++) { PaintUtility.DrawLine(realVertices[i - 1], realVertices[i], GUIConstants.oldLineScale, wireframeColor); PaintUtility.DrawDottedLine(realVertices[i - 1], realVertices[i], wireframeColor, 4.0f); } PaintUtility.DrawLine(realVertices[realVertices.Length - 1], realVertices[0], GUIConstants.oldLineScale, wireframeColor); PaintUtility.DrawDottedLine(realVertices[realVertices.Length - 1], realVertices[0], wireframeColor, 4.0f); /* if (editMode == EditMode.ExtrudeShape) { var delta = (base.extrusionPoints[1].Vertex - base.extrusionPoints[0].Vertex); for (int i = 1; i < realVertices.Length; i++) { PaintUtility.DrawLine(realVertices[i - 1] + delta, realVertices[i] + delta, GUIConstants.oldLineScale, topWireframeColor); PaintUtility.DrawDottedLine(realVertices[i - 1] + delta, realVertices[i] + delta, topWireframeColor, 4.0f); } for (int i = 0; i < realVertices.Length; i++) { PaintUtility.DrawLine(realVertices[i] + delta, realVertices[i], GUIConstants.oldLineScale, wireframeColor); PaintUtility.DrawDottedLine(realVertices[i] + delta, realVertices[i], wireframeColor, 4.0f); } PaintUtility.DrawLine(realVertices[realVertices.Length - 1] + delta, realVertices[0] + delta, GUIConstants.oldLineScale, topWireframeColor); PaintUtility.DrawDottedLine(realVertices[realVertices.Length - 1] + delta, realVertices[0] + delta, topWireframeColor, 4.0f); } */ PaintSquare(camera); PaintRadiusMessage(camera); } Handles.matrix = origMatrix; } var shapeType = Event.current.GetTypeForControl(shapeId); HandleKeyboard(shapeType); for (int i = 1; i < settings.vertices.Length; i++) { var id = settings.vertexIDs[i]; var point_type = Event.current.GetTypeForControl(id); switch (point_type) { case EventType.Repaint: { if (SceneDragToolManager.IsDraggingObjectInScene) break; bool isSelected = id == GUIUtility.keyboardControl; var temp = Handles.color; var origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; var rotation = camera.transform.rotation; if (isSelected) { Handles.color = ColorSettings.PointInnerStateColor[3]; } else if (HandleUtility.nearestControl == id) { Handles.color = ColorSettings.PointInnerStateColor[1]; } else { Handles.color = ColorSettings.PointInnerStateColor[0]; } float handleSize = CSG_HandleUtility.GetHandleSize(settings.vertices[i]); float scaledHandleSize = handleSize * GUIConstants.handleScale; PaintUtility.SquareDotCap(id, settings.vertices[i], rotation, scaledHandleSize); Handles.matrix = origMatrix; Handles.color = temp; break; } case EventType.Layout: { if ((Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan)) break; var origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; float handleSize = CSG_HandleUtility.GetHandleSize(settings.vertices[i]); float scaledHandleSize = handleSize * GUIConstants.handleScale; HandleUtility.AddControl(id, HandleUtility.DistanceToCircle(settings.vertices[i], scaledHandleSize)); Handles.matrix = origMatrix; break; } case EventType.ValidateCommand: case EventType.KeyDown: { if (GUIUtility.hotControl == id) { if (Keys.CancelActionKey.IsKeyPressed()) { Event.current.Use(); break; } } break; } case EventType.KeyUp: { if (GUIUtility.hotControl == id) { if (Keys.CancelActionKey.IsKeyPressed()) { GUIUtility.hotControl = 0; GUIUtility.keyboardControl = 0; EditorGUIUtility.editingTextField = false; Event.current.Use(); break; } } break; } case EventType.MouseDown: { if (!sceneRect.Contains(Event.current.mousePosition)) break; if (Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan) break; if (GUIUtility.hotControl == 0 && HandleUtility.nearestControl == id && Event.current.button == 0) { GUIUtility.hotControl = id; GUIUtility.keyboardControl = id; EditorGUIUtility.editingTextField = false; EditorGUIUtility.SetWantsMouseJumping(1); Event.current.Use(); break; } break; } case EventType.MouseDrag: { if (Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan) break; if (GUIUtility.hotControl == id && Event.current.button == 0) { Undo.RecordObject(this, "Modify shape"); var mouseRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); var alignedPlane = new CSGPlane(RealtimeCSG.CSGGrid.CurrentWorkGridPlane.normal, settings.vertices[0]); var worldPosition = buildPlane.Project(alignedPlane.RayIntersection(mouseRay)); if (float.IsInfinity(worldPosition.x) || float.IsNaN(worldPosition.x) || float.IsInfinity(worldPosition.y) || float.IsNaN(worldPosition.y) || float.IsInfinity(worldPosition.z) || float.IsNaN(worldPosition.z)) worldPosition = settings.vertices[i]; ResetVisuals(); if (snapFunction != null) { CSGBrush snappedOnBrush; worldPosition = snapFunction(camera, worldPosition, buildPlane, ref base.visualSnappedEdges, out snappedOnBrush, generatedBrushes, ignoreAllBrushes: true); } base.visualSnappedGrid = RealtimeCSG.CSGGrid.FindAllGridEdgesThatTouchPoint(camera, worldPosition); settings.vertices[i] = worldPosition; UpdateBaseShape(true); GUI.changed = true; Event.current.Use(); break; } break; } case EventType.MouseUp: { if (GUIUtility.hotControl != id) break; if (Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan) break; if (Event.current.button == 0) { GUIUtility.hotControl = 0; GUIUtility.keyboardControl = 0; EditorGUIUtility.editingTextField = false; EditorGUIUtility.SetWantsMouseJumping(0); Event.current.Use(); ResetVisuals(); if (SphereRadius == 0) { Cancel(); } break; } break; } } } }
protected override void HandleEditShapeEvents(SceneView sceneView, Rect sceneRect) { var camera = sceneView.camera; if (settings.vertices.Length < 2) { if (editMode == EditMode.ExtrudeShape || editMode == EditMode.EditShape) editMode = EditMode.CreatePlane; } if (!SceneDragToolManager.IsDraggingObjectInScene && Event.current.type == EventType.Repaint) { if (visualSnappedEdges != null) PaintUtility.DrawLines(visualSnappedEdges.ToArray(), GUIConstants.oldThickLineScale, ColorSettings.SnappedEdges); if (visualSnappedGrid != null) { var _origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; PaintUtility.DrawDottedLines(visualSnappedGrid.ToArray(), ColorSettings.SnappedEdges); Handles.matrix = _origMatrix; } if (visualSnappedBrush != null) { if (visualSnappedBrush.compareTransformation != null && visualSnappedBrush.ChildData != null && visualSnappedBrush.ChildData.ModelTransform) { var brush_transformation = visualSnappedBrush.compareTransformation.localToWorldMatrix; CSGRenderer.DrawOutlines(visualSnappedBrush.brushNodeID, brush_transformation, ColorSettings.SelectedOutlines, ColorSettings.SelectedOutlines, ColorSettings.SelectedOutlines, ColorSettings.SelectedOutlines); } } var origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; PaintBounds(camera); Handles.matrix = origMatrix; } HandleHeightHandles(sceneView, sceneRect, false); for (int i = 0; i < settings.vertices.Length; i++) { var id = settings.vertexIDs[i]; var point_type = Event.current.GetTypeForControl(id); switch (point_type) { case EventType.Repaint: { if (SceneDragToolManager.IsDraggingObjectInScene) break; bool isSelected = id == GUIUtility.keyboardControl; var temp = Handles.color; var origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; var rotation = camera.transform.rotation; if (isSelected) { Handles.color = ColorSettings.PointInnerStateColor[3]; } else if (HandleUtility.nearestControl == id) { Handles.color = ColorSettings.PointInnerStateColor[1]; } else { Handles.color = ColorSettings.PointInnerStateColor[0]; } float handleSize = CSG_HandleUtility.GetHandleSize(settings.vertices[i]); float scaledHandleSize = handleSize * GUIConstants.handleScale; PaintUtility.SquareDotCap(id, settings.vertices[i], rotation, scaledHandleSize); Handles.matrix = origMatrix; Handles.color = temp; break; } case EventType.Layout: { if ((Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan)) break; var origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; float handleSize = CSG_HandleUtility.GetHandleSize(settings.vertices[i]); float scaledHandleSize = handleSize * GUIConstants.handleScale; HandleUtility.AddControl(id, HandleUtility.DistanceToCircle(settings.vertices[i], scaledHandleSize)); Handles.matrix = origMatrix; break; } case EventType.ValidateCommand: case EventType.KeyDown: { if (GUIUtility.hotControl == id) { if (Keys.CancelActionKey.IsKeyPressed()) { Event.current.Use(); break; } } break; } case EventType.KeyUp: { if (GUIUtility.hotControl == id) { if (Keys.CancelActionKey.IsKeyPressed()) { GUIUtility.hotControl = 0; GUIUtility.keyboardControl = 0; EditorGUIUtility.editingTextField = false; Event.current.Use(); break; } } break; } case EventType.MouseDown: { if (!sceneRect.Contains(Event.current.mousePosition)) break; if (Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan) break; if (GUIUtility.hotControl == 0 && HandleUtility.nearestControl == id && Event.current.button == 0) { GUIUtility.hotControl = id; GUIUtility.keyboardControl = id; EditorGUIUtility.editingTextField = false; EditorGUIUtility.SetWantsMouseJumping(1); Event.current.Use(); break; } break; } case EventType.MouseDrag: { if (Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan) break; if (GUIUtility.hotControl == id && Event.current.button == 0) { Undo.RecordObject(this, "Modify shape"); var mouseRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); RealtimeCSG.CSGGrid.SetForcedGrid(camera, buildPlane); var alignedPlane = new CSGPlane(RealtimeCSG.CSGGrid.CurrentWorkGridPlane.normal, settings.vertices[0]); var worldPosition = buildPlane.Project(alignedPlane.RayIntersection(mouseRay)); if (float.IsInfinity(worldPosition.x) || float.IsNaN(worldPosition.x) || float.IsInfinity(worldPosition.y) || float.IsNaN(worldPosition.y) || float.IsInfinity(worldPosition.z) || float.IsNaN(worldPosition.z)) worldPosition = settings.vertices[i]; ResetVisuals(); if (snapFunction != null) { CSGBrush snappedOnBrush; worldPosition = snapFunction(camera, worldPosition, buildPlane, ref base.visualSnappedEdges, out snappedOnBrush, generatedBrushes); } base.visualSnappedGrid = RealtimeCSG.CSGGrid.FindAllGridEdgesThatTouchPoint(camera, worldPosition); settings.vertices[i] = worldPosition; CenterExtrusionPoints(buildPlane); UpdateBaseShape(); if (editMode == EditMode.ExtrudeShape) { StartExtrudeMode(camera); UpdateBaseShape(); } UpdateExtrudedShape(); GUI.changed = true; Event.current.Use(); break; } break; } case EventType.MouseUp: { if (GUIUtility.hotControl != id) break; if (Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan) break; if (Event.current.button == 0) { GUIUtility.hotControl = 0; GUIUtility.keyboardControl = 0; EditorGUIUtility.editingTextField = false; EditorGUIUtility.SetWantsMouseJumping(0); Event.current.Use(); ResetVisuals(); //if (Length == 0 || Width == 0) //{ // Cancel(); //} break; } break; } } } }
protected override void HandleEditShapeEvents(Rect sceneRect) { if (!SceneDragToolManager.IsDraggingObjectInScene && Event.current.type == EventType.Repaint) { if (visualSnappedEdges != null) { PaintUtility.DrawLines(visualSnappedEdges.ToArray(), ToolConstants.oldThickLineScale, ColorSettings.SnappedEdges); } if (visualSnappedGrid != null) { var _origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; PaintUtility.DrawDottedLines(visualSnappedGrid.ToArray(), ColorSettings.SnappedEdges); Handles.matrix = _origMatrix; } if (visualSnappedBrush != null) { var brush_cache = InternalCSGModelManager.GetBrushCache(visualSnappedBrush); if (brush_cache != null && brush_cache.compareTransformation != null && brush_cache.childData != null && brush_cache.childData.ModelTransform != null && brush_cache.childData.ModelTransform) { var brush_translation = brush_cache.compareTransformation.modelLocalPosition + brush_cache.childData.ModelTransform.position; CSGRenderer.DrawOutlines(visualSnappedBrush.brushID, brush_translation, ColorSettings.SelectedOutlines, ColorSettings.SelectedOutlines, ColorSettings.SelectedOutlines, ColorSettings.SelectedOutlines); } } var origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; /* * bool isValid; * var realVertices = settings.GetVertices(buildPlane, worldPosition, gridTangent, gridBinormal, out isValid); * if (editMode == EditMode.EditShape) * shapeIsValid = isValid; * * if (realVertices.Length > 0)*/ { PaintSquare(); PaintRadiusMessage(); } Handles.matrix = origMatrix; } HandleHeightHandles(sceneRect, false); for (int i = 1; i < settings.vertices.Length; i++) { var id = settings.vertexIDs[i]; var point_type = Event.current.GetTypeForControl(id); switch (point_type) { case EventType.Repaint: { if (SceneDragToolManager.IsDraggingObjectInScene) { break; } bool isSelected = id == GUIUtility.keyboardControl; var temp = Handles.color; var origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; var rotation = Camera.current.transform.rotation; if (isSelected) { Handles.color = ColorSettings.PointInnerStateColor[3]; } else if (HandleUtility.nearestControl == id) { Handles.color = ColorSettings.PointInnerStateColor[1]; } else { Handles.color = ColorSettings.PointInnerStateColor[0]; } float handleSize = CSG_HandleUtility.GetHandleSize(settings.vertices[i]); float scaledHandleSize = handleSize * ToolConstants.handleScale; PaintUtility.SquareDotCap(id, settings.vertices[i], rotation, scaledHandleSize); Handles.matrix = origMatrix; Handles.color = temp; break; } case EventType.Layout: { if ((Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan)) { break; } var origMatrix = Handles.matrix; Handles.matrix = MathConstants.identityMatrix; float handleSize = CSG_HandleUtility.GetHandleSize(settings.vertices[i]); float scaledHandleSize = handleSize * ToolConstants.handleScale; HandleUtility.AddControl(id, HandleUtility.DistanceToCircle(settings.vertices[i], scaledHandleSize)); Handles.matrix = origMatrix; break; } case EventType.ValidateCommand: case EventType.KeyDown: { if (GUIUtility.hotControl == id) { if (Keys.CancelActionKey.IsKeyPressed()) { Event.current.Use(); break; } } break; } case EventType.KeyUp: { if (GUIUtility.hotControl == id) { if (Keys.CancelActionKey.IsKeyPressed()) { GUIUtility.hotControl = 0; GUIUtility.keyboardControl = 0; EditorGUIUtility.editingTextField = false; Event.current.Use(); break; } } break; } case EventType.MouseDown: { if (!sceneRect.Contains(Event.current.mousePosition)) { break; } if (Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan) { break; } if (GUIUtility.hotControl == 0 && HandleUtility.nearestControl == id && Event.current.button == 0) { GUIUtility.hotControl = id; GUIUtility.keyboardControl = id; EditorGUIUtility.editingTextField = false; EditorGUIUtility.SetWantsMouseJumping(1); Event.current.Use(); break; } break; } case EventType.MouseDrag: { if (Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan) { break; } if (GUIUtility.hotControl == id && Event.current.button == 0) { Undo.RecordObject(this, "Modify shape"); var mouseRay = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); var alignedPlane = new CSGPlane(RealtimeCSG.CSGGrid.CurrentWorkGridPlane.normal, settings.vertices[0]); var worldPosition = buildPlane.Project(alignedPlane.Intersection(mouseRay)); if (float.IsInfinity(worldPosition.x) || float.IsNaN(worldPosition.x) || float.IsInfinity(worldPosition.y) || float.IsNaN(worldPosition.y) || float.IsInfinity(worldPosition.z) || float.IsNaN(worldPosition.z)) { worldPosition = settings.vertices[i]; } ResetVisuals(); if (snapFunction != null) { CSGBrush snappedOnBrush; worldPosition = snapFunction(worldPosition, buildPlane, ref base.visualSnappedEdges, out snappedOnBrush, generatedBrushes); } base.visualSnappedGrid = RealtimeCSG.CSGGrid.FindAllGridEdgesThatTouchPoint(worldPosition); settings.vertices[i] = worldPosition; if (editMode == EditMode.ExtrudeShape) { StartExtrudeMode(); } UpdateBaseShape(); UpdateExtrudedShape(); GUI.changed = true; Event.current.Use(); break; } break; } case EventType.MouseUp: { if (GUIUtility.hotControl != id) { break; } if (Tools.viewTool != ViewTool.None && Tools.viewTool != ViewTool.Pan) { break; } if (Event.current.button == 0) { GUIUtility.hotControl = 0; GUIUtility.keyboardControl = 0; EditorGUIUtility.editingTextField = false; EditorGUIUtility.SetWantsMouseJumping(0); Event.current.Use(); ResetVisuals(); if (RadiusA == 0) { Cancel(); } break; } break; } } } }