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)); }
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); }
public void Validate() { _res = ParseSegmentSide(Text); }