internal static AM_RegionBoundary Create(NurbsCurve crv, double space, bool forceToOpened) { bool is_closed = crv.IsClosed; bool boundary_closed = is_closed; if (forceToOpened) { boundary_closed = false; } AM_RegionBoundary b = new AM_RegionBoundary(boundary_closed); Point3d p0 = crv.PointAtStart; Point3d p1 = crv.PointAtEnd; b.m_Vertexes.Add(new AM_RegionVertex(new Point2d(p0.X, p0.Y), space)); b.m_Curves.Add(crv); if (!is_closed) { b.m_Vertexes.Add(new AM_RegionVertex(new Point2d(p1.X, p1.Y), space)); } else if (is_closed && forceToOpened) { b.m_Vertexes.Add(new AM_RegionVertex(new Point2d(p1.X, p1.Y), space)); } b.m_GenPoint = new List <Point4d> [b.NumVertexes]; return(b); }
bool AddNurbsCurve(NurbsCurve nurbs_crv, double space, bool forceToOpened) { var b = AM_RegionBoundary.Create(nurbs_crv, space, forceToOpened); if (b != null) { m_Loops.Add(b); return(true); } return(true); }
bool AddPolycurve(PolyCurve pc, double space, bool forceToOpened) { var b = AM_RegionBoundary.Create(pc, space, forceToOpened); if (b != null) { m_Loops.Add(b); return(true); } return(true); }
internal static AM_RegionBoundary Create(PolylineCurve polyline, double space, bool forceToOpened) { bool is_closed = polyline.IsClosed; bool boundary_closed = is_closed; if (forceToOpened) { boundary_closed = false; } AM_RegionBoundary b = new AM_RegionBoundary(boundary_closed); for (int iSegm = 0; iSegm < polyline.SpanCount; iSegm++) { Point3d p0 = polyline.Point(iSegm); Point3d p1 = polyline.Point((iSegm + 1) % polyline.SpanCount); if (!is_closed && iSegm == polyline.SpanCount - 1) { p1 = polyline.Point(iSegm + 1); } b.m_Vertexes.Add(new AM_RegionVertex(new Point2d(p0.X, p0.Y), space)); b.m_Curves.Add(new LineCurve(p0, p1)); if (!is_closed && iSegm == polyline.SpanCount - 1) { b.m_Vertexes.Add(new AM_RegionVertex(new Point2d(p1.X, p1.Y), space)); } else if (is_closed && forceToOpened && iSegm == polyline.SpanCount - 1) { b.m_Vertexes.Add(new AM_RegionVertex(new Point2d(p1.X, p1.Y), space)); } } b.m_GenPoint = new List <Point4d> [polyline.SpanCount]; return(b); }
internal static AM_RegionBoundary Create(PolyCurve pc, double space, bool forceToOpened) { bool is_closed = pc.IsClosed; bool boundary_closed = is_closed; if (forceToOpened) { boundary_closed = false; } AM_RegionBoundary b = new AM_RegionBoundary(boundary_closed); for (int iCrv = 0; iCrv < pc.SegmentCount; iCrv++) { var crv = pc.SegmentCurve(iCrv); Point3d p0 = crv.PointAtStart; b.m_Vertexes.Add(new AM_RegionVertex(new Point2d(p0.X, p0.Y), space)); b.m_Curves.Add(crv); if (!is_closed && iCrv == pc.SegmentCount - 1) { Point3d p1 = crv.PointAtEnd; b.m_Vertexes.Add(new AM_RegionVertex(new Point2d(p1.X, p1.Y), space)); } else if (is_closed && forceToOpened && iCrv == pc.SegmentCount - 1) { Point3d p1 = crv.PointAtEnd; b.m_Vertexes.Add(new AM_RegionVertex(new Point2d(p1.X, p1.Y), space)); } } b.m_GenPoint = new List <Point4d> [b.NumVertexes]; return(b); }