Esempio n. 1
0
    public void Paint(Vector3 startPosition, Vector3 endPosition)
    {
        if (tree.IsReady == true && painter.IsReady == true)
        {
            var start = lockedGameObject.transform.InverseTransformPoint(startPosition);
            var end   = lockedGameObject.transform.InverseTransformPoint(endPosition);

            if (passThrough == true)
            {
                var results = tree.FindBetweenAll(start, end);

                for (var i = results.Count - 1; i >= 0; i--)
                {
                    Paint(results[i].GetUV(currentCoord));
                }
            }
            else
            {
                var result = tree.FindBetweenNearest(start, end);

                if (result != null)
                {
                    Paint(result.GetUV(currentCoord));
                }
            }
        }
    }
Esempio n. 2
0
    // This paints the nearest triangles between the input positions
    // NOTE: This method requires you to call SetMesh first
    public void PaintBetweenNearest(Vector3 startPosition, Vector3 endPosition, P3D_CoordType coord = P3D_CoordType.UV1)
    {
        if (CanMeshPaint == true)
        {
            startPosition = transform.InverseTransformPoint(startPosition);
            endPosition   = transform.InverseTransformPoint(endPosition);

            Paint(tree.FindBetweenNearest(startPosition, endPosition), coord);
        }
    }
Esempio n. 3
0
    public static void ScenePaintBetweenNearest(P3D_Brush brush, Vector3 startPosition, Vector3 endPosition, int layerMask = -1, int groupMask = -1)
    {
        float num = Vector3.Distance(startPosition, endPosition);

        if (num != 0f)
        {
            P3D_Paintable paintable = null;
            P3D_Result    result    = null;
            for (int i = AllPaintables.Count - 1; i >= 0; i--)
            {
                P3D_Paintable paintable2 = AllPaintables[i];
                if (P3D_Helper.IndexInMask(paintable2.gameObject.layer, layerMask))
                {
                    P3D_Tree tree = paintable2.GetTree();
                    if (tree != null)
                    {
                        Transform  transform  = paintable2.transform;
                        Vector3    startPoint = transform.InverseTransformPoint(startPosition);
                        P3D_Result result2    = tree.FindBetweenNearest(startPoint, startPoint + ((transform.InverseTransformPoint(endPosition) - startPoint).normalized * num));
                        if (result2 != null)
                        {
                            paintable = paintable2;
                            result    = result2;
                            num      *= result2.Distance01;
                        }
                    }
                }
            }
            if ((paintable != null) && (result != null))
            {
                paintable.Paint(brush, result, groupMask);
            }
        }
    }
Esempio n. 4
0
    // This will paint the first surface between the start and end positions in world space
    public void PaintBetweenNearest(P3D_Brush brush, Vector3 startPosition, Vector3 endPosition, int groupMask = -1)
    {
        if (CheckTree() == true)
        {
            var start   = transform.InverseTransformPoint(startPosition);
            var end     = transform.InverseTransformPoint(endPosition);
            var results = tree.FindBetweenNearest(start, end);

            Paint(brush, results, groupMask);
        }
    }
Esempio n. 5
0
    public static void ScenePaintBetweenNearestRaycast(P3D_Brush brush, Vector3 startPosition, Vector3 endPosition, int layerMask = -1, int groupMask = -1)
    {
        float maxDistance = Vector3.Distance(startPosition, endPosition);

        if (maxDistance != 0f)
        {
            P3D_Paintable component = null;
            RaycastHit    hitInfo   = new RaycastHit();
            P3D_Result    result    = null;
            if (Physics.Raycast(startPosition, endPosition - startPosition, out hitInfo, maxDistance, layerMask))
            {
                component   = hitInfo.collider.GetComponent <P3D_Paintable>();
                maxDistance = hitInfo.distance;
            }
            for (int i = AllPaintables.Count - 1; i >= 0; i--)
            {
                P3D_Paintable paintable2 = AllPaintables[i];
                if (P3D_Helper.IndexInMask(paintable2.gameObject.layer, layerMask))
                {
                    P3D_Tree tree = paintable2.GetTree();
                    if (tree != null)
                    {
                        Transform  transform  = paintable2.transform;
                        Vector3    startPoint = transform.InverseTransformPoint(startPosition);
                        P3D_Result result2    = tree.FindBetweenNearest(startPoint, startPoint + ((transform.InverseTransformPoint(endPosition) - startPoint).normalized * maxDistance));
                        if (result2 != null)
                        {
                            component    = paintable2;
                            result       = result2;
                            maxDistance *= result2.Distance01;
                        }
                    }
                }
            }
            if (component != null)
            {
                if (result != null)
                {
                    component.Paint(brush, result, groupMask);
                }
                else
                {
                    component.Paint(brush, hitInfo, groupMask);
                }
            }
        }
    }