protected static bool TryGetClockwiseOrderLoop(TVertex[] vertices, int step = 0) { if (step == 3) { return(TCameraUtility.IsPositiveOrder(book)); } for (int i = 0; i < vertices.Length; i++) { var vertex = vertices[i]; if (book2.ContainsKey(vertex)) { continue; } book[step] = vertex; book2[vertex] = true; step++; if (TryGetClockwiseOrderLoop(vertices, step)) { return(true); } book2.Remove(vertex); step--; } return(false); }
public void MoveToCentroid() { if (Vertices == null) { return; } if (Vertices.Count < 3) { return; } var centroid = TCameraUtility.CalCentroid(Vertices.ToArray()); transform.position = centroid; }
protected override bool TrangleCheckAndProcess(TTrangle tri) { var vertices = tri.Vertices.ToArray(); float[] weight; if (TCameraUtility.IsInsideTrangle(vertices, Target.position, out weight)) { if (PowerOn) { if (CurrentTrangle != tri) { var etri = tri as TEventTrangle; if (!etri.AnyRelationship(CurrentTrangle as TEventTrangle)) { tri.OnEnterTrangle(); } } } return(true); } return(false); }
protected override bool TrangleCheckAndProcess(TTrangle tri) { var vertices = tri.Vertices.ToArray(); float[] weight; if (TCameraUtility.IsInsideTrangle(vertices, Target.position, out weight)) { if (PowerOn) { var tVertices = tri.vertices; var eulerAngles = (tVertices[0] as TCameraVertex).EularAngle * weight[0] + (tVertices[1] as TCameraVertex).EularAngle * weight[1] + (tVertices[2] as TCameraVertex).EularAngle * weight[2]; var pivotPosition = (tVertices[0] as TCameraVertex).PivotPosition * weight[0] + (tVertices[1] as TCameraVertex).PivotPosition * weight[1] + (tVertices[2] as TCameraVertex).PivotPosition * weight[2]; //Add Other args if (OnPositionChanged != null) { OnPositionChanged.Invoke(eulerAngles, pivotPosition); } if (OnPositionChangedWithSplitArgs != null) { OnPositionChangedWithSplitArgs.Invoke(eulerAngles.x, eulerAngles.y, eulerAngles.z); } if (OnComplexEvent != null) { OnComplexEvent.Invoke(eulerAngles, pivotPosition, weight); } } return(true); } return(false); }
void OnDrawGizmos() { if (!GizmosOn) { return; } if (TCameraTrangles.Count < 1) { return; } for (int i = 0; i < TCameraTrangles.Count; i++) { var tri = TCameraTrangles[i]; if (tri == null) { break; } if (tri.Vertices.Count < 3) { break; } if (tempMesh == null) { tempMesh = new Dictionary <TTrangle, Mesh>(); } Mesh mesh = null; if (!tempMesh.ContainsKey(tri)) { tempMesh[tri] = new Mesh(); } mesh = tempMesh[tri]; mesh.vertices = tri.Vertices.ToArray(); mesh.triangles = new int[] { 0, 1, 2 }; mesh.RecalculateNormals(); mesh.RecalculateBounds(); Gizmos.color = Color.red; if (Target != null) { if (TCameraUtility.IsInsideTrangleS2(mesh.vertices, Target.position)) { Gizmos.color = Color.green; Gizmos.DrawMesh(mesh); } } Gizmos.color = Color.white; if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D11 || SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D12) { Gizmos.DrawWireMesh(mesh); } else { Gizmos.DrawLine(mesh.vertices[0], mesh.vertices[1]); Gizmos.DrawLine(mesh.vertices[0], mesh.vertices[2]); Gizmos.DrawLine(mesh.vertices[1], mesh.vertices[2]); } } for (int i = 0; i < TCameraTrangles.Count; i++) { var tri = TCameraTrangles[i] as TEventTrangle; if (!tri.transform.parent) { continue; } if (!tri.transform.parent.GetComponent <TEventTrangle>()) { continue; } Gizmos.color = Color.yellow; Gizmos.DrawLine(tri.transform.position, tri.transform.parent.position); Gizmos.color = Color.white; //UnityEditor.SceneView.currentDrawingSceneView.camera.TODO: relationShip with camera zoom Handles.color = Color.yellow; var dir2This = tri.transform.position - tri.transform.parent.position; var rot = Quaternion.LookRotation(dir2This.normalized); Handles.ConeHandleCap(10, tri.transform.position - dir2This * PosOffset, rot, ConeGizmoSize, EventType.Repaint); Gizmos.color = Color.white; } for (int i = 0; i < TCameraTrangles.Count; i++) { var tri = TCameraTrangles[i] as TEventTrangle; if (tri.transform.childCount <= 0) { continue; } Handles.color = new Color(1, 0.5423231f, 0); var dir2This = tri.transform.position - tri.transform.parent.position; var rot = Quaternion.Euler(90, 0, 0); Handles.ConeHandleCap(11, tri.transform.position + Vector3.up * YOffset, rot, ConeGizmoSize * 1.2f, EventType.Repaint); Gizmos.color = Color.white; } }
void OnDrawGizmos() { if (!GizmosOn) { return; } if (TCameraTrangles.Count < 1) { return; } for (int i = 0; i < TCameraTrangles.Count; i++) { var tri = TCameraTrangles[i]; if (tri == null) { break; } if (tri.Vertices.Count < 3) { break; } if (tempMesh == null) { tempMesh = new Dictionary <TTrangle, Mesh>(); } Mesh mesh = null; if (!tempMesh.ContainsKey(tri)) { tempMesh[tri] = new Mesh(); } mesh = tempMesh[tri]; mesh.vertices = tri.Vertices.ToArray(); mesh.triangles = new int[] { 0, 1, 2 }; mesh.RecalculateNormals(); mesh.RecalculateBounds(); Gizmos.color = Color.red; if (Target != null) { if (TCameraUtility.IsInsideTrangleS2(mesh.vertices, Target.position)) { Gizmos.color = Color.green; } } Gizmos.DrawMesh(mesh); Gizmos.color = Color.white; if (SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D11 || SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Direct3D12) { Gizmos.DrawWireMesh(mesh); } else { Gizmos.DrawLine(mesh.vertices[0], mesh.vertices[1]); Gizmos.DrawLine(mesh.vertices[0], mesh.vertices[2]); Gizmos.DrawLine(mesh.vertices[1], mesh.vertices[2]); } } }