Ejemplo n.º 1
0
        private bool ShouldCloseSegment(Segment segment, SegmentSide side)
        {
            if (IsInverted)
            {
                side = side == SegmentSide.Left ? SegmentSide.Right : SegmentSide.Left;
            }

            if (m_mesh.SplitWhenDifferent && (side == SegmentSide.Left && segment.Direction != segment.PrevDirection || (side == SegmentSide.Right && segment.Direction != segment.NextDirection)))
            {
                return(true);
            }

            var angle = side == SegmentSide.Left ? segment.AngleWithPrev : segment.AngleWithNext;

            if (angle < m_mesh.SplitCornersThreshold || angle > (360 - m_mesh.SplitCornersThreshold))
            {
                return(true);
            }

            return(angle == 180 && !(side == SegmentSide.Left ? segment.Prev.HasValue : segment.Next.HasValue));
        }
Ejemplo n.º 2
0
        private void DrawCap(Rect rect, SegmentSide side, Vector top, Vector bottom, double zOffset)
        {
            var capUv     = m_mesh.UvMapping.ToUv(rect);
            var capOffset = (bottom - top).Normal() * capUv.Size.Width * CalculateUnitsPerEdgeUv().X;

            var otherTop    = side == SegmentSide.Left ? top - capOffset : top + capOffset;
            var otherBottom = side == SegmentSide.Left ? bottom - capOffset : bottom + capOffset;

            if (side == SegmentSide.Left)
            {
                Utils.Swap(ref top, ref otherTop);
                Utils.Swap(ref bottom, ref otherBottom);
            }

            MeshEdgeData.AddQuad(
                new Point3D(bottom.X, bottom.Y, zOffset),
                new Point3D(top.X, top.Y, zOffset),
                new Point3D(otherTop.X, otherTop.Y, zOffset),
                new Point3D(otherBottom.X, otherBottom.Y, zOffset),
                capUv.BottomLeft, capUv.TopLeft, capUv.TopRight, capUv.BottomRight);
        }
Ejemplo n.º 3
0
 public void Validate()
 {
     _res = ParseSegmentSide(Text);
 }