static public ComplexCut Create(List <Vector2D> pointsList, float size)
    {
        ComplexCut cut = new ComplexCut();

        cut.size       = size;
        cut.pointsList = pointsList;
        return(cut);
    }
Exemple #2
0
    //Complex Cut Slice
    public static Slice2D Create(GameObject originGameObject, ComplexCut newSlice)
    {
        Slice2D slice2D = Create(originGameObject, Slice2DType.ComplexCut);

        slice2D.slice = new List <Vector2D>(newSlice.pointsList.ToVector2DList());

        return(slice2D);
    }
        public void Complex_GenerateCutMesh(List <Vector2D> complexSlicerPointsList, float cutSize, Transform transform, float lineWidth, float zPosition)
        {
            ComplexCut complexCutLine = ComplexCut.Create(complexSlicerPointsList, cutSize);

            foreach (Pair2 pair in Pair2.GetList(complexCutLine.GetPointsList(), true))
            {
                CreateLine(pair, transform.localScale, lineWidth, zPosition);
            }
        }
    public void Draw(Transform transform)
    {
        if (mouseDown)
        {
            complexCutLine = ComplexCut.Create(complexSlicerPointsList, cutSize);
            visuals.GenerateComplexCutMesh(complexSlicerPointsList, cutSize, transform);

            visuals.Draw();
        }
    }
Exemple #5
0
 static public void DestroyByComplexCutAll(ComplexCut complexCut, Destruction2DLayer layer = null)
 {
     if (layer == null)
     {
         layer = Destruction2DLayer.Create();
     }
     foreach (Destruction2D gObject in GetListLayer(layer))
     {
         gObject.DestroyByComplexCut(complexCut);
     }
 }
Exemple #6
0
        static public Mesh GenerateCutMesh(List <Vector2D> complexSlicerPointsList, float cutSize, Transform transform, float lineWidth, float zPosition)
        {
            Mesh2DMesh trianglesList = new Mesh2DMesh();

            ComplexCut complexCutLine = ComplexCut.Create(complexSlicerPointsList, cutSize);

            foreach (Pair2D pair in Pair2D.GetList(complexCutLine.GetPointsList(), true))
            {
                trianglesList.Add(Max2DMesh.CreateLine(pair, transform.localScale, lineWidth, zPosition));
            }

            return(Max2DMesh.Export(trianglesList));
        }
Exemple #7
0
    static public Mesh GenerateComplexCutMesh(List <Vector2D> complexSlicerPointsList, float cutSize, Transform transform, float lineWidth, float zPosition)
    {
        List <Mesh2DTriangle> trianglesList = new List <Mesh2DTriangle>();

        ComplexCut complexCutLine = ComplexCut.Create(complexSlicerPointsList, cutSize);

        foreach (Pair2D pair in Pair2D.GetList(complexCutLine.GetPointsList(), true))
        {
            trianglesList.Add(CreateLineNew(pair, transform, lineWidth, zPosition));
        }

        return(ExportMesh2(trianglesList));
    }
        public void Update(Vector2 pos)
        {
            float scroll     = UnityEngine.Input.GetAxis("Mouse ScrollWheel");
            float newCutSize = cutSize + scroll;

            if (newCutSize > 0.05f)
            {
                cutSize = newCutSize;
            }

            if (input.GetInputClicked())
            {
                pointsList.Clear();
                pointsList.Add(new Vector2D(pos));
            }

            if (pointsList.Count < 1)
            {
                return;
            }

            if (input.GetInputHolding())
            {
                Vector2 posMove   = pointsList.Last().ToVector2();
                int     loopCount = 0;
                while ((Vector2.Distance(posMove, pos) > minVertexDistance * visuals.visualScale))
                {
                    float direction = (float)Vector2D.Atan2(pos, posMove);
                    posMove = posMove.Push(direction, minVertexDistance * visuals.visualScale);

                    pointsList.Add(new Vector2D(posMove));

                    loopCount++;
                    if (loopCount > 150)
                    {
                        break;
                    }
                }
            }

            if (input.GetInputReleased())
            {
                ComplexCut complexCutLine = ComplexCut.Create(GetList(), cutSize * visuals.visualScale);

                Slicing.ComplexCutSliceAll(complexCutLine, sliceLayer);

                pointsList.Clear();
            }
        }
Exemple #9
0
    static public List <Slice2D> ComplexCutSliceAll(ComplexCut complexCut, Slice2DLayer layer)
    {
        List <Slice2D> result = new List <Slice2D> ();

        foreach (Slicer2D id in GetListLayer(layer))
        {
            Slice2D sliceResult = id.ComplexCutSlice(complexCut);
            if (sliceResult.gameObjects.Count > 0)
            {
                result.Add(sliceResult);
            }
        }

        return(result);
    }
Exemple #10
0
    //Complex Cut Slice
    public static Slice2D Create(ComplexCut newSlice)
    {
        Slice2D slice2D = Create(Slice2DType.ComplexCut);

        slice2D.slice = new List <Vector2D>();

        if (newSlice.pointsList != null)
        {
            slice2D.slice = new List <Vector2D>(newSlice.pointsList);
        }
        else
        {
            Slicer2D.Debug.LogError("Null Linear Cut Slice");
        }

        return(slice2D);
    }
    static public Slice2D ComplexCutSlice(Polygon2D polygon, ComplexCut complexCut)
    {
        List <Vector2D> slice  = complexCut.GetPointsList();
        Slice2D         result = Slice2D.Create(complexCut);

        if (slice.Count < 1)
        {
            return(result);
        }

        if (Math2D.SliceIntersectItself(slice))
        {
            if (Slicer2D.Debug.enabled)
            {
                Debug.LogWarning("Slicer2D: Complex Cut Slicer intersected with itself!");
            }
            return(result);
        }

        Vector2D startPoint = null;

        foreach (Vector2D id in slice)
        {
            if (polygon.PointInPoly(id) == false)
            {
                startPoint = id;
                break;
            }
        }

        Polygon2D newPolygon = new Polygon2D(slice);

        slice = Vector2DList.GetListStartingPoint(slice, startPoint);
        slice.Add(startPoint);

        if (polygon.PolyInPoly(newPolygon))
        {
            polygon.AddHole(newPolygon);
            result.AddPolygon(polygon);
            return(result);
        }

        result = ComplexSlicer.Slice(polygon, slice);

        return(result);
    }
Exemple #12
0
    private void UpdateComplexCut(Vector2D pos)
    {
        if (Input.GetMouseButtonDown(0))
        {
            pointsList.Clear();
            pointsList.Add(pos);
            mouseDown = true;
        }

        if (pointsList.Count < 1)
        {
            return;
        }

        if (Input.GetMouseButton(0))
        {
            Vector2D posMove   = pointsList.Last().Copy();
            int      loopCount = 0;
            while ((Vector2D.Distance(posMove, pos) > minVertexDistance * visualScale))
            {
                float direction = (float)Vector2D.Atan2(pos, posMove);
                posMove.Push(direction, minVertexDistance * visualScale);

                pointsList.Add(posMove.Copy());

                loopCount++;
                if (loopCount > 150)
                {
                    break;
                }
            }
        }

        if (mouseDown == true && Input.GetMouseButton(0) == false)
        {
            ComplexCut complexCutLine = ComplexCut.Create(pointsList, cutSize * visualScale);
            Slicer2D.ComplexCutSliceAll(complexCutLine, sliceLayer);

            pointsList.Clear();
            mouseDown = false;
        }
    }
Exemple #13
0
    //Complex Cut Slice
    public static Slice2D Create(GameObject originGameObject, ComplexCut newSlice)
    {
        Slice2D slice2D = Create(originGameObject, Slice2DType.ComplexCut);

        slice2D.slice = new List <Vector2D>();

        if (newSlice.pointsList != null)
        {
            slice2D.slice = new List <Vector2D>(newSlice.pointsList);
        }
        else
        {
            if (Slicer2D.Debug.enabled)
            {
                Debug.LogWarning("SmartUtilities2D: Null Linear Cut Slice");
            }
        }

        return(slice2D);
    }
Exemple #14
0
        static public List <Slice2D> ComplexCutSliceAll(ComplexCut complexCut, Layer layer = null)
        {
            List <Slice2D> result = new List <Slice2D> ();

            if (layer == null)
            {
                layer = Layer.Create();
            }

            foreach (Sliceable2D id in Sliceable2D.GetListLayer(layer))
            {
                Slice2D sliceResult = id.ComplexCutSlice(complexCut);
                if (sliceResult.GetGameObjects().Count > 0)
                {
                    result.Add(sliceResult);
                }
            }

            return(result);
        }
    public Slice2D ComplexCutSlice(ComplexCut slice)
    {
        Slice2D slice2D = Slice2D.Create(slice);

        if (isActiveAndEnabled == false)
        {
            return(slice2D);
        }

        Polygon2D colliderPolygon = GetPolygonToSlice();

        if (colliderPolygon != null)
        {
            Polygon2D slicePoly = new Polygon2D(slice.GetPointsList(1.01f));

            if (Math2D.PolyInPoly(slicePoly, colliderPolygon) == true)
            {
                Destroy(gameObject);
                return(slice2D);
            }
            else
            {
                Slice2D sliceResult = Slicer2D.API.ComplexCutSlice(colliderPolygon, slice);

                foreach (Polygon2D poly in new List <Polygon2D> (sliceResult.polygons))
                {
                    if (Math2D.PolyInPoly(slicePoly, poly))
                    {
                        sliceResult.RemovePolygon(poly);
                    }
                }

                PerformResult(sliceResult.polygons, sliceResult);

                return(sliceResult);
            }
        }

        return(Slice2D.Create(slice));
    }
Exemple #16
0
    public void OnRenderObject()
    {
        Vector2D pos = GetMousePosition();

        if (drawSlicer == false)
        {
            return;
        }

        Max2D.SetBorder(true);
        Max2D.SetLineMode(Max2D.LineMode.Smooth);
        Max2D.SetLineWidth(lineWidth * .5f);
        Max2D.SetScale(visualScale);

        if (mouseDown)
        {
            Max2D.SetColor(slicerColor);

            switch (sliceType)
            {
            case SliceType.Complex:
                if (complexSlicerPointsList.Count > 0)
                {
                    if (startSliceIfPossible == false || startedSlice == true)
                    {
                        Max2D.SetColor(Color.black);
                        Max2D.DrawLineSquare(complexSlicerPointsList.Last(), 0.6f * visualScale, zPosition);
                        Max2D.DrawLineSquare(complexSlicerPointsList.First(), 0.6f * visualScale, zPosition);
                        Max2D.DrawLineSquare(complexSlicerPointsList.Last(), 0.4f * visualScale, zPosition);
                        Max2D.DrawLineSquare(complexSlicerPointsList.First(), 0.4f * visualScale, zPosition);

                        Max2D.SetColor(slicerColor);
                        Max2D.DrawStrippedLine(complexSlicerPointsList, minVertsDistance, zPosition);
                        Max2D.DrawLineSquare(complexSlicerPointsList.Last(), 0.5f * visualScale, zPosition);
                        Max2D.DrawLineSquare(complexSlicerPointsList.First(), 0.5f * visualScale, zPosition);
                    }
                }
                break;

            case SliceType.ComplexTracked:
                if (complexSlicerPointsList.Count > 0)
                {
                    Max2D.DrawLineSquare(pos, 0.5f * visualScale, zPosition);

                    foreach (ComplexSlicerTrackerObject tracker in complexTracker.trackerList)
                    {
                        if (tracker.slicer != null && tracker.tracking)
                        {
                            Max2D.DrawSlice(Vector2DList.ToWorldSpace(tracker.slicer.transform, tracker.pointsList), tracker.slicer.transform.position.z - 0.001f);
                        }
                    }
                }
                break;

            case SliceType.Create:
                if (createType == CreateType.Slice)
                {
                    if (complexSlicerPointsList.Count > 0)
                    {
                        Max2D.SetColor(Color.black);
                        Max2D.DrawLineSquare(complexSlicerPointsList.Last(), 0.4f * visualScale, zPosition);
                        Max2D.DrawLineSquare(complexSlicerPointsList.First(), 0.4f * visualScale, zPosition);
                        Max2D.DrawLineSquare(complexSlicerPointsList.Last(), 0.6f * visualScale, zPosition);
                        Max2D.DrawLineSquare(complexSlicerPointsList.First(), 0.6f * visualScale, zPosition);

                        Max2D.SetColor(slicerColor);
                        Max2D.DrawLineSquare(complexSlicerPointsList.Last(), 0.5f * visualScale, zPosition);
                        Max2D.DrawLineSquare(complexSlicerPointsList.First(), 0.5f * visualScale, zPosition);
                        Max2D.DrawStrippedLine(complexSlicerPointsList, minVertsDistance, zPosition, true);
                    }
                }
                else
                {
                    Max2D.DrawStrippedLine(Polygon2D.Create(polygonType, polygonSize).pointsList, minVertsDistance, zPosition, true, pos);
                }
                break;

            case SliceType.Linear:
                Max2D.SetColor(Color.black);
                Max2D.DrawLineSquare(linearPair.A, 0.6f * visualScale, zPosition);
                Max2D.DrawLineSquare(linearPair.B, 0.6f * visualScale, zPosition);
                Max2D.DrawLineSquare(linearPair.A, 0.4f * visualScale, zPosition);
                Max2D.DrawLineSquare(linearPair.B, 0.4f * visualScale, zPosition);

                Max2D.SetColor(slicerColor);
                Max2D.DrawLineSquare(linearPair.A, 0.5f * visualScale, zPosition);
                Max2D.DrawLineSquare(linearPair.B, 0.5f * visualScale, zPosition);

                Max2D.DrawLine(linearPair.A, linearPair.B, zPosition);
                break;

            case SliceType.LinearCut:
                linearCutLine = LinearCut.Create(linearPair, linearCutSize);
                Max2D.DrawStrippedLine(linearCutLine.GetPointsList(), 0, zPosition, true);
                break;

            case SliceType.ComplexCut:
                complexCutLine = ComplexCut.Create(complexSlicerPointsList, complexCutSize);
                Max2D.DrawStrippedLine(complexCutLine.GetPointsList(), 0, zPosition, true);
                break;

            case SliceType.Point:
                break;

            case SliceType.Explode:
                break;

            case SliceType.Polygon:
                slicePolygon = Polygon2D.Create(polygonType, polygonSize);
                Max2D.DrawStrippedLine(slicePolygon.pointsList, minVertsDistance, zPosition, true, pos);
                break;

            default:
                break;
            }
        }
        // Reset Graphics
        Max2D.SetScale(1f);
    }
 static public Slice2D ComplexCutSlice(Polygon2D polygon, ComplexCut complexCut)
 {
     return(ComplexSlicerExtended.ComplexCutSlice(polygon, complexCut));
 }
Exemple #18
0
    public void DestroyByComplexCut(ComplexCut complexCut)
    {
        EraseBrush erase = new EraseBrush(null, new Polygon2D(complexCut.GetPointsList()));

        DestroyByPolygon(erase);
    }