コード例 #1
0
ファイル: Line.cs プロジェクト: roki512/FriendlyLines
        IEnumerable <Vector2> _genJointCircle(Vector2 p0, Vector2 p1, Vector2 p2)
        {
            List <Vector2> triangles = new List <Vector2>();

            Vector2 line1 = (p1 - p0).normalized;
            Vector2 line2 = (p2 - p1).normalized;

            Vector2 n1 = new Vector2(-line1.y, line1.x).normalized;
            Vector2 n2 = new Vector2(-line2.y, line2.x).normalized;

            float scalar = Vector2.Dot(n1, n2);

            Vector2 r;

            if (Vector2.Dot(n1, line2) < 0)
            {
                r = n1 * _thickness;
            }
            else
            {
                r = -n2 * _thickness;
            }

            float angle = Mathf.Acos(scalar);

            if (angle == 0f)
            {
                // No filling needed, lines are perfectly parallel
                return(triangles);
            }

            triangles.AddRange(GraphicsProvider.GetCircleTriangles(p1, r, angle, Color.red, _circleDensity, -1f, _defaultZ));

            return(triangles);
        }
コード例 #2
0
ファイル: Line.cs プロジェクト: roki512/FriendlyLines
        public void OnRenderObject()
        {
            UpdateThickness();
            UpdateColor();

            GraphicsProvider.DrawTriangles(transform, _color, _defaultZ, _triangleVertices);

            if (_verticesAdded.Count > 0 && (_verticesAdded[0] != _verticesAdded[_verticesAdded.Count - 1] || _verticesAdded.Count == 1))
            {
                _drawCircles();
            }
        }
コード例 #3
0
ファイル: Line.cs プロジェクト: roki512/FriendlyLines
        void _drawCircles()
        {
            if (_verticesAdded.Count == 0)
            {
                return;
            }

            if (_verticesAdded.Count < 2)
            {
                Vector2 p = _verticesAdded[0];
                Vector2 v = new Vector2(0f, _thickness);

                GraphicsProvider.DrawCircle(transform, p, v, 2 * Mathf.PI, _color, _circleDensity, 1f, _defaultZ);
            }
            else
            {
                Vector2 p0 = _verticesAdded[0];
                Vector2 p1 = _verticesAdded[1];

                Vector2 line = (p0 - p1).normalized;
                Vector2 n    = new Vector2(-line.y, line.x).normalized;

                Vector2 p = p0;
                Vector2 v = n * _thickness;

                GraphicsProvider.DrawCircle(transform, p, v, Mathf.PI, _color, _circleDensity, -1f, _defaultZ);

                p0 = _verticesAdded[_verticesAdded.Count - 1];
                p1 = _verticesAdded[_verticesAdded.Count - 2];

                line = (p0 - p1).normalized;
                n    = new Vector2(-line.y, line.x).normalized;

                p = p0;
                v = n * _thickness;

                GraphicsProvider.DrawCircle(transform, p, v, Mathf.PI, _color, _circleDensity, -1f, _defaultZ);
            }
        }