コード例 #1
0
        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);
        }
コード例 #2
0
        public void MoveToCentroid()
        {
            if (Vertices == null)
            {
                return;
            }

            if (Vertices.Count < 3)
            {
                return;
            }

            var centroid = TCameraUtility.CalCentroid(Vertices.ToArray());

            transform.position = centroid;
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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;
            }
        }
コード例 #6
0
        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]);
                }
            }
        }