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)); }
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); } } } }
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; } } }
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); } } } }
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); } } } }
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)); }
// 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)); }
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); } } } } }
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; } } }
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; } } }