コード例 #1
0
        static public Mesh GenerateTrackerMesh(Vector2D pos, Dictionary <Slicer2D, SlicerTrackerObject> trackerList, Transform transform, float lineWidth, float zPosition, float squareSize, Slicer2DLineEndingType endingType, int edges)
        {
            Mesh2DMesh trianglesList = new Mesh2DMesh();

            float size = squareSize;

            GenerateSquare(trianglesList, pos, size, transform, lineWidth, zPosition, endingType, edges);

            trianglesList.Add(Max2DMesh.CreateLine(new Pair2D(pos, pos), transform.localScale, lineWidth, zPosition));

            foreach (KeyValuePair <Slicer2D, SlicerTrackerObject> trackerPair in trackerList)
            {
                SlicerTrackerObject tracker = trackerPair.Value;
                if (trackerPair.Key != null && tracker.tracking)
                {
                    List <Vector2D> pointListWorld = Vector2DList.PointsToWorldSpace(trackerPair.Key.transform, tracker.pointsList);

                    pointListWorld.Add(pos);

                    List <Pair2D> pairList = Pair2D.GetList(pointListWorld, false);

                    foreach (Pair2D pair in pairList)
                    {
                        trianglesList.Add(Max2DMesh.CreateLine(pair, transform.localScale, lineWidth, zPosition));
                    }
                }
            }

            return(Max2DMesh.Export(trianglesList));
        }
コード例 #2
0
        public void Complex_GenerateTrackerMesh(Vector2 pos, Dictionary <Slicer2D, SlicerTrackerObject> trackerList, Transform transform, float lineWidth, float zPosition, float squareSize, Slicer2DLineEndingType endingType, int edges)
        {
            float size = squareSize;

            GenerateSquare(pos, size, transform, lineWidth, zPosition, endingType, edges);

            CreateLine(new Pair2(pos, pos), transform.localScale, lineWidth, zPosition);

            foreach (KeyValuePair <Slicer2D, SlicerTrackerObject> trackerPair in trackerList)
            {
                SlicerTrackerObject tracker = trackerPair.Value;
                if (trackerPair.Key != null && tracker.tracking)
                {
                    List <Vector2D> pointListWorld = Vector2DList.PointsToWorldSpace(trackerPair.Key.transform, tracker.pointsList);

                    pointListWorld.Add(new Vector2D(pos));

                    List <Pair2> pairList = Pair2.GetList(pointListWorld, false);

                    foreach (Pair2 pair in pairList)
                    {
                        CreateLine(pair, transform.localScale, lineWidth, zPosition);
                    }
                }
            }
        }
コード例 #3
0
    public void Update(Vector2 position, float minVertexDistance = 1f)
    {
        List <Slicer2D> slicer2DList = Slicer2D.GetListCopy();

        Vector2D trackedPos;

        foreach (Slicer2D slicer in slicer2DList)
        {
            SlicerTrackerObject tracker = null;
            trackerList.TryGetValue(slicer, out tracker);

            if (tracker == null)
            {
                tracker = new SlicerTrackerObject();
                trackerList.Add(slicer, tracker);
            }

            trackedPos = new Vector2D(slicer.transform.transform.InverseTransformPoint(position));

            if (tracker.lastPosition != null)
            {
                if (slicer.shape.GetLocal().PointInPoly(trackedPos))
                {
                    if (tracker.tracking == false)
                    {
                        tracker.firstPosition = tracker.lastPosition;
                    }

                    tracker.tracking = true;
                }
                else if (tracker.tracking == true)
                {
                    tracker.tracking = false;

                    if (tracker.firstPosition != null)
                    {
                        tracker.lastPosition = trackedPos;

                        Pair2D slicePair = new Pair2D(new Vector2D(slicer.transform.TransformPoint(tracker.firstPosition.ToVector2())), new Vector2D(slicer.transform.TransformPoint(tracker.lastPosition.ToVector2())));

                        Slice2D slice = slicer.LinearSlice(slicePair);
                        if (slice.GetGameObjects().Count > 0)
                        {
                            CopyTracker(slice, slicer);
                        }
                        ;
                    }

                    trackerList.Remove(slicer);
                }
            }

            if (tracker != null)
            {
                tracker.lastPosition = trackedPos;
            }
        }
    }
コード例 #4
0
        public void Linear_GenerateTrackerMesh(Vector2 pos, Dictionary <Slicer2D, SlicerTrackerObject> trackerList, Transform transform, float lineWidth, float zPosition, float size, Slicer2DLineEndingType endingType, int edges)
        {
            GenerateSquare(pos, size, transform, lineWidth, zPosition, endingType, edges);

            CreateLine(new Pair2(pos, pos), transform.localScale, lineWidth, zPosition);

            foreach (KeyValuePair <Slicer2D, SlicerTrackerObject> trackerPair in trackerList)
            {
                SlicerTrackerObject tracker = trackerPair.Value;
                if (trackerPair.Key != null && tracker.tracking)
                {
                    foreach (Pair2 pair in Pair2.GetList(Vector2DList.PointsToWorldSpace(trackerPair.Key.transform, tracker.GetLinearPoints()), false))
                    {
                        CreateLine(pair, transform.localScale, lineWidth, zPosition);
                    }
                }
            }
        }
コード例 #5
0
 public void Complex_GenerateTrackerMesh(Dictionary <Slicer2D, SlicerTrackerObject> trackerList, Transform transform, float lineWidth, float zPosition)
 {
     foreach (KeyValuePair <Slicer2D, SlicerTrackerObject> trackerPair in trackerList)
     {
         SlicerTrackerObject tracker = trackerPair.Value;
         if (trackerPair.Key != null && tracker.tracking)
         {
             if (tracker.firstPosition == null || tracker.lastPosition == null)
             {
                 continue;
             }
             List <Vector2D> points = Vector2DList.PointsToWorldSpace(trackerPair.Key.transform, tracker.GetLinearPoints());
             foreach (Pair2 pair in Pair2.GetList(points, false))
             {
                 CreateLine(pair, transform.localScale, lineWidth, zPosition);
             }
         }
     }
 }
コード例 #6
0
        static public Mesh GenerateTrackerMesh(Dictionary <Slicer2D, SlicerTrackerObject> trackerList, Transform transform, float lineWidth, float zPosition)
        {
            Mesh2DMesh trianglesList = new Mesh2DMesh();

            foreach (KeyValuePair <Slicer2D, SlicerTrackerObject> trackerPair in trackerList)
            {
                SlicerTrackerObject tracker = trackerPair.Value;
                if (trackerPair.Key != null && tracker.tracking)
                {
                    if (tracker.firstPosition == null || tracker.lastPosition == null)
                    {
                        continue;
                    }
                    List <Vector2D> points = Vector2DList.PointsToWorldSpace(trackerPair.Key.transform, tracker.GetLinearPoints());
                    foreach (Pair2D pair in Pair2D.GetList(points, false))
                    {
                        trianglesList.Add(Max2DMesh.CreateLine(pair, transform.localScale, lineWidth, zPosition));
                    }
                }
            }

            return(Max2DMesh.Export(trianglesList));
        }
コード例 #7
0
        // Duplicate
        static public Mesh GenerateTrackerMesh(Dictionary <Slicer2D, SlicerTrackerObject> trackerList, Transform transform, float lineWidth, float zPosition)
        {
            Mesh2DMesh trianglesList = new Mesh2DMesh();

            foreach (KeyValuePair <Slicer2D, SlicerTrackerObject> trackerPair in trackerList)
            {
                SlicerTrackerObject tracker = trackerPair.Value;
                if (trackerPair.Key != null && tracker.tracking)
                {
                    List <Vector2D> pointListWorld = Vector2DList.PointsToWorldSpace(trackerPair.Key.transform, tracker.pointsList);
                    pointListWorld.Add(new Vector2D(transform.TransformPoint(Vector2.zero)));

                    List <Pair2D> pairList = Pair2D.GetList(pointListWorld, false);

                    foreach (Pair2D pair in pairList)
                    {
                        trianglesList.Add(Max2DMesh.CreateLine(pair, transform.localScale, lineWidth, zPosition));
                    }
                }
            }

            return(Max2DMesh.Export(trianglesList));
        }
コード例 #8
0
        public void CopyTracker(Slice2D slice, Slicer2D slicer)
        {
            foreach (Slicer2DLinearTrackedController trackerComponent in Object.FindObjectsOfType <Slicer2DLinearTrackedController>())
            {
                if (trackerComponent.trackerObject == this)
                {
                    continue;
                }

                Dictionary <Slicer2D, SlicerTrackerObject> list = new Dictionary <Slicer2D, SlicerTrackerObject>(trackerComponent.trackerObject.trackerList);
                foreach (KeyValuePair <Slicer2D, SlicerTrackerObject> pair in list)
                {
                    if (pair.Key != slicer)
                    {
                        continue;
                    }
                    foreach (GameObject g in slice.GetGameObjects())
                    {
                        Slicer2D newSlicer = g.GetComponent <Slicer2D>();

                        SlicerTrackerObject t = null;
                        trackerList.TryGetValue(newSlicer, out t);

                        if (t == null)
                        {
                            t = new SlicerTrackerObject();

                            t.firstPosition = pair.Value.firstPosition;
                            t.lastPosition  = pair.Value.lastPosition;
                            t.tracking      = true;

                            trackerComponent.trackerObject.trackerList.Add(newSlicer, t);
                        }
                    }
                }
            }
        }
コード例 #9
0
    public void Update(Vector2 position, float minVertexDistance = 1f)
    {
        List <Slicer2D> slicer2DList = Slicer2D.GetListCopy();

        Vector2D trackedPos;

        foreach (Slicer2D slicer in slicer2DList)
        {
            SlicerTrackerObject tracker = null;
            trackerList.TryGetValue(slicer, out tracker);

            if (tracker == null)
            {
                tracker = new SlicerTrackerObject();
                trackerList.Add(slicer, tracker);
            }

            trackedPos = new Vector2D(slicer.transform.transform.InverseTransformPoint(position));

            if (tracker.lastPosition != null)
            {
                if (slicer.shape.GetLocal().PointInPoly(trackedPos))
                {
                    if (tracker.tracking == false)
                    {
                        tracker.pointsList.Add(tracker.lastPosition);
                    }

                    tracker.tracking = true;

                    if (tracker.pointsList.Count < 1 || (Vector2D.Distance(trackedPos, tracker.pointsList.Last()) > minVertexDistance / 4f))
                    {
                        tracker.pointsList.Add(trackedPos);
                    }
                }
                else if (tracker.tracking == true)
                {
                    tracker.tracking = false;
                    tracker.pointsList.Add(trackedPos);

                    List <Vector2D> slicePoints = new List <Vector2D>();
                    foreach (Vector2D point in tracker.pointsList)
                    {
                        slicePoints.Add(new Vector2D(slicer.transform.TransformPoint(point.ToVector2())));
                    }

                    Slice2D slice = slicer.ComplexSlice(slicePoints);
                    if (slice.GetGameObjects().Count > 0)
                    {
                        CopyTracker(slice, slicer);
                    }
                    ;

                    trackerList.Remove(slicer);
                }
            }

            if (tracker != null)
            {
                tracker.lastPosition = trackedPos;
            }
        }
    }
コード例 #10
0
        public void Update(Vector2 position, float minVertexDistance = 1f)
        {
            List <Slicer2D> slicer2DList = Slicer2D.GetListCopy();

            Vector2D trackedPos;

            foreach (Slicer2D slicer in slicer2DList)
            {
                SlicerTrackerObject tracker = null;
                trackerList.TryGetValue(slicer, out tracker);

                if (tracker == null)
                {
                    tracker = new SlicerTrackerObject();
                    trackerList.Add(slicer, tracker);
                }

                trackedPos = new Vector2D(slicer.transform.transform.InverseTransformPoint(position));

                if (tracker.lastPosition != null)
                {
                    if (slicer.shape.GetLocal().PointInPoly(trackedPos))
                    {
                        if (tracker.tracking == false)
                        {
                            tracker.pointsList.Add(tracker.lastPosition);
                        }

                        tracker.tracking = true;

                        if (tracker.pointsList.Count < 1 || (Vector2D.Distance(trackedPos, tracker.pointsList.Last()) > minVertexDistance / 4f))
                        {
                            tracker.pointsList.Add(trackedPos);
                        }
                    }
                    else if (tracker.tracking == true)
                    {
                        tracker.tracking = false;

                        /*
                         *
                         * Vector2D posA = new Vector2D(tracker.pointsList.Last());
                         * Vector2D posB = new Vector2D(trackedPos);
                         *
                         * float rot = (floatVector2D.Atan2(posB, posA);
                         *
                         * posB.Push(rot, 1);
                         *
                         * tracker.pointsList.Add(posB);
                         */

                        tracker.pointsList.Add(trackedPos);



                        // Test


                        List <Vector2D> slicePoints = new List <Vector2D>();
                        foreach (Vector2D point in tracker.pointsList)
                        {
                            slicePoints.Add(new Vector2D(slicer.transform.TransformPoint(point.ToVector2())));
                        }

                        Slice2D slice = slicer.ComplexSlice(slicePoints);
                        if (slice.GetGameObjects().Count > 0)
                        {
                            CopyTracker(slice, slicer);
                        }
                        ;

                        trackerList.Remove(slicer);
                    }
                    else
                    {
                        if (tracker.tracking == false && tracker.lastPosition != null)
                        {
                            if (trackedPos.x != tracker.lastPosition.x && trackedPos.y != tracker.lastPosition.y)
                            {
                                bool collision = Math2D.LineIntersectPoly(new Pair2D(trackedPos, tracker.lastPosition), slicer.shape.GetLocal());

                                if (collision)
                                {
                                    tracker.firstPosition = tracker.lastPosition;

                                    tracker.tracking = true;
                                }
                            }
                        }
                    }
                }

                if (tracker != null)
                {
                    tracker.lastPosition = trackedPos;
                }
            }
        }