HairyPlotterTriangle RaycastTriangle() { // This transform from GUI space to scene camera ray Ray r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); // Iterate over each triangle in plotter for (int i = 0; i < plotter.TriangleCount; ++i) { // Grab triangle HairyPlotterTriangle triangle = plotter.GetTriangle(i); // Intersect ray if (HairyPlotter.RayIntersectsTriangle( r, triangle.GetVertex(0).Position, triangle.GetVertex(1).Position, triangle.GetVertex(2).Position )) { // Found! plotter.CurrentAction = HairyPlotterActions.None; // Destroy triangle return(triangle); } } return(null); }
HairyPlotterTriangle RaycastTriangle() { // This transform from GUI space to scene camera ray Ray r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); Transform t = plotter.transform; // this for position gizmo vertices and triangles according parent game object world coordinates // Iterate over each triangle in plotter for (int i = 0; i < plotter.TriangleCount; ++i) { // Grab triangle HairyPlotterTriangle triangle = plotter.GetTriangle(i); // Intersect ray if (HairyPlotter.RayIntersectsTriangle( r, t.TransformPoint(triangle.GetVertex(0).Position), t.TransformPoint(triangle.GetVertex(1).Position), t.TransformPoint(triangle.GetVertex(2).Position) )) { // Found! plotter.CurrentAction = HairyPlotterActions.None; return(triangle); } } return(null); }
public void DestroyTriangle(HairyPlotterTriangle triangle) { if (triangle != null) { // Mark dirty Dirty = true; // Clear hover state if (triangleHover == triangle) { triangleHover = null; } // Remove selection triangleSelection.Remove(triangle); // Remove triangle from mesh triangles.Remove(triangle); // Remove triangle from it's three vertices triangle.GetVertex(0).RemoveTriangle(triangle); triangle.GetVertex(1).RemoveTriangle(triangle); triangle.GetVertex(2).RemoveTriangle(triangle); // Clear link between triangle and vertices triangle.ClearVertices(); // Update UpdateVertexIndexes(); } }
void DrawTriangles() { if (plotter.HoveredTriangle != null) { HairyPlotterTriangle tri = plotter.HoveredTriangle; highlightMaterial.SetPass(0); GL.Begin(GL.TRIANGLES); GL.Color(TriangleHoverColor); GL.Vertex(tri.GetVertex(0).Position); GL.Vertex(tri.GetVertex(1).Position); GL.Vertex(tri.GetVertex(2).Position); GL.End(); } List <HairyPlotterTriangle> selectedTriangles = plotter.SelectedTriangles; if (selectedTriangles.Count > 0) { GL.Begin(GL.TRIANGLES); GL.Color(TriangleSelectedColor); for (int i = 0; i < selectedTriangles.Count; ++i) { HairyPlotterTriangle tri = selectedTriangles[i]; GL.Vertex(tri.GetVertex(0).Position); GL.Vertex(tri.GetVertex(1).Position); GL.Vertex(tri.GetVertex(2).Position); } GL.End(); } }
void DrawTriangles() { if (plotter.HoveredTriangle != null) { HairyPlotterTriangle tri = plotter.HoveredTriangle; Transform t = plotter.transform; // this for position gizmo vertices and triangles according parent game object world coordinates highlightMaterial.SetPass(0); GL.Begin(GL.TRIANGLES); GL.Color(TriangleHoverColor); GL.Vertex(t.TransformPoint(tri.GetVertex(0).Position)); GL.Vertex(t.TransformPoint(tri.GetVertex(1).Position)); GL.Vertex(t.TransformPoint(tri.GetVertex(2).Position)); GL.End(); } List <HairyPlotterTriangle> selectedTriangles = plotter.SelectedTriangles; if (selectedTriangles.Count > 0) { GL.Begin(GL.TRIANGLES); GL.Color(TriangleSelectedColor); Transform t = plotter.transform; // this for position gizmo vertices and triangles according parent game object world coordinates for (int i = 0; i < selectedTriangles.Count; ++i) { HairyPlotterTriangle tri = selectedTriangles[i]; GL.Vertex(t.TransformPoint(tri.GetVertex(0).Position)); GL.Vertex(t.TransformPoint(tri.GetVertex(1).Position)); GL.Vertex(t.TransformPoint(tri.GetVertex(2).Position)); } GL.End(); } }
public void RemoveSelection(HairyPlotterTriangle triangle) { if (triangle == null) { return; } triangleSelection.Remove(triangle); }
public HairyPlotterTriangle CreateTriangle(HairyPlotterVertex v0, HairyPlotterVertex v1, HairyPlotterVertex v2) { // Create tri HairyPlotterTriangle triangle = new HairyPlotterTriangle(this); // Set vertices for triangle triangle.SetVertices(v0, v1, v2); // Add to triangle list triangles.Add(triangle); // Return return(triangle); }
public void AddSelection(HairyPlotterTriangle triangle) { if (triangle == null) { return; } if (triangleHover == triangle) { triangleHover = null; } triangleSelection.Add(triangle); }
public bool ToggleSelected(HairyPlotterTriangle triangle) { if (triangle == null) return false; if (IsSelected(triangle)) { RemoveSelection(triangle); } else { AddSelection(triangle); } return true; }
void OnSceneGUI() { if (!plotter) { return; } plotter.InitEditing(); if (plotter.CurrentAction == HairyPlotterActions.None) { plotter.SetTriangleHover(HoverTriangle()); if (plotter.ToggleSelected(PickTriangle())) { Repaint(); } if (plotter.HoveredTriangle != null) { SceneView.lastActiveSceneView.Repaint(); } } if (plotter.CurrentAction == HairyPlotterActions.TriangleSwitch) { HairyPlotterTriangle triangle = PickTriangle(); if (triangle != null) { List <HairyPlotterVertex> vertices = plotter.SelectedVertices; if (vertices.Count == 2) { triangle.SwitchVertices(vertices[0], vertices[1]); plotter.ClearVertexSelection(); } else { Debug.LogWarning("Switch In Triangle requires exactly two selected vertices"); } } } DrawTriangles(); }
public bool ToggleSelected(HairyPlotterTriangle triangle) { if (triangle == null) { return(false); } if (IsSelected(triangle)) { RemoveSelection(triangle); } else { AddSelection(triangle); } return(true); }
public void AddTriangle(HairyPlotterTriangle triangle) { triangles.Add(triangle); }
public void ClearTriangles() { triangles.Clear(); triangleHover = null; Dirty = true; }
public void DestroyTriangle(HairyPlotterTriangle triangle) { if (triangle != null) { // Mark dirty Dirty = true; // Clear hover state if (triangleHover == triangle) triangleHover = null; // Remove selection triangleSelection.Remove(triangle); // Remove triangle from mesh triangles.Remove(triangle); // Remove triangle from it's three vertices triangle.GetVertex(0).RemoveTriangle(triangle); triangle.GetVertex(1).RemoveTriangle(triangle); triangle.GetVertex(2).RemoveTriangle(triangle); // Clear link between triangle and vertices triangle.ClearVertices(); // Update UpdateVertexIndexes(); } }
public HairyPlotterTriangle CreateTriangle(HairyPlotterVertex v0, HairyPlotterVertex v1, HairyPlotterVertex v2) { // Create tri HairyPlotterTriangle triangle = new HairyPlotterTriangle(this); // Set vertices for triangle triangle.SetVertices(v0, v1, v2); // Add to triangle list triangles.Add(triangle); // Return return triangle; }
public void SetTriangleHover(HairyPlotterTriangle triangle) { triangleHover = triangle; }
public void RemoveSelection(HairyPlotterTriangle triangle) { if (triangle == null) return; triangleSelection.Remove(triangle); }
public void AddTriangle(HairyPlotterTriangle triangle) { triangles.Add(triangle); }
public bool IsSelected(HairyPlotterTriangle triangle) { return triangle != null && triangleSelection.Contains(triangle); }
public void SetTriangleHover(HairyPlotterTriangle triangle) { triangleHover = triangle; }
void OnSceneGUI() { if (!plotter) { return; } plotter.InitEditing(); if (plotter.CurrentAction == HairyPlotterActions.None) { // don't hover triangle when moving vertices if (allowMoveVerts) { plotter.SetTriangleHover(null); } else { plotter.SetTriangleHover(HoverTriangle()); } if (plotter.ToggleSelected(PickTriangle()) && !allowMoveVerts) { Repaint(); } if (plotter.HoveredTriangle != null) { SceneView.lastActiveSceneView.Repaint(); } // detect if dragging a single vertex or selected vertices and update position/s according mouse position if (Event.current.button == 0) { KeyCode _keyCode = Event.current.keyCode; EventType _type = Event.current.type; if (_type == EventType.MouseDown) { // pick selected vertices? if (_keyCode == KeyCode.LeftShift || _keyCode == KeyCode.RightShift) { // use plotter.SelectedVertices } // or pick single vertex else { hoveredVertex = PickVertex(); } // set flag for allow moving vertices allowMoveVerts = true; } // on mouse up finish the edition else if (_type == EventType.MouseUp) { allowMoveVerts = false; hoveredVertex = null; } // while dragging mouse update vertex position else if (_type == EventType.MouseDrag && allowMoveVerts) { Ray r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); Transform t = plotter.transform; // this for position gizmo vertices and triangles according parent game object world coordinates Vector2 p = t.InverseTransformPoint(r.origin); // use inverse trasnform because then we transform again for displaying // moving selected vertices? if (_keyCode == KeyCode.LeftShift || _keyCode == KeyCode.RightShift) { for (int i = 0, c = plotter.SelectedVertices.Count; i < c; ++i) { plotter.SelectedVertices[i].Position.x = p.x; plotter.SelectedVertices[i].Position.y = p.y; if (HairyPlotterEditor.KeepUVOnVertsMove) { plotter.SelectedVertices[i].Uv.x = 0.5f + p.x; plotter.SelectedVertices[i].Uv.y = 0.5f + p.y; } } } // or single vertex? else if (hoveredVertex != null) { hoveredVertex.Position.x = p.x; hoveredVertex.Position.y = p.y; if (HairyPlotterEditor.KeepUVOnVertsMove) { hoveredVertex.Uv.x = 0.5f + p.x; hoveredVertex.Uv.y = 0.5f + p.y; } } plotter.Dirty = true; plotter.ResetSelectionPosition(); } } } if (plotter.CurrentAction == HairyPlotterActions.TriangleSwitch) { HairyPlotterTriangle triangle = PickTriangle(); if (triangle != null) { List <HairyPlotterVertex> vertices = plotter.SelectedVertices; if (vertices.Count == 2) { triangle.SwitchVertices(vertices[0], vertices[1]); plotter.ClearVertexSelection(); } else { Debug.LogWarning("Switch In Triangle requires exactly two selected vertices"); } } } DrawTriangles(); }
public bool IsSelected(HairyPlotterTriangle triangle) { return(triangle != null && triangleSelection.Contains(triangle)); }
public void ClearTriangles() { triangles.Clear(); triangleHover = null; Dirty = true; }
public void RemoveTriangle(HairyPlotterTriangle triangle) { triangles.Remove(triangle); }
public void AddSelection(HairyPlotterTriangle triangle) { if (triangle == null) return; if (triangleHover == triangle) { triangleHover = null; } triangleSelection.Add(triangle); }
public void RemoveTriangle(HairyPlotterTriangle triangle) { triangles.Remove(triangle); }