public static global::Rhino.Geometry.NurbsSurface ToRhino_NurbsSurface(this global::Topologic.NurbsSurface nurbsSurface) { int uDegree = nurbsSurface.UDegree; int vDegree = nurbsSurface.VDegree; bool isRational = nurbsSurface.IsURational && nurbsSurface.IsVRational; int uCount = nurbsSurface.NumOfUControlVertices; int vCount = nurbsSurface.NumOfVControlVertices; global::Rhino.Geometry.NurbsSurface ghNurbsSurface = global::Rhino.Geometry.NurbsSurface.Create( 3, isRational, uDegree + 1, vDegree + 1, uCount, vCount ); int i = 0; for (int u = 0; u < uCount; ++u) { for (int v = 0; v < vCount; ++v) { global::Topologic.Vertex controlVertex = nurbsSurface.ControlVertex(u, v); ghNurbsSurface.Points.SetPoint(u, v, ToRhino(controlVertex)); ++i; } } List <double> uKnots = nurbsSurface.UKnots; uKnots = uKnots.GetRange(1, uKnots.Count - 2); for (int u = 0; u < uKnots.Count; u++) { ghNurbsSurface.KnotsU[u] = uKnots[u]; } List <double> vKnots = nurbsSurface.VKnots; vKnots = vKnots.GetRange(1, vKnots.Count - 2); for (int v = 0; v < vKnots.Count; v++) { ghNurbsSurface.KnotsV[v] = vKnots[v]; } if (!ghNurbsSurface.IsValid) { throw new Exception("A valid surface cannot be created from this Face."); } return(ghNurbsSurface); }
public static global::Topologic.Face ToTopologic(this global::Rhino.Geometry.Surface surface) { if (surface == null) { return(null); } SumSurface sumSurface = surface as SumSurface; if (sumSurface != null) { return(sumSurface.ToTopologic()); } RevSurface revSurface = surface as RevSurface; if (revSurface != null) { return(revSurface.ToTopologic()); } PlaneSurface planeSurface = surface as PlaneSurface; if (planeSurface != null) { return(planeSurface.ToTopologic()); } Extrusion ghExtrusion = surface as Extrusion; if (ghExtrusion != null) { return(ghExtrusion.ToTopologic()); } global::Rhino.Geometry.NurbsSurface ghNurbsSurface = surface as global::Rhino.Geometry.NurbsSurface; if (ghNurbsSurface != null) { return(ghNurbsSurface.ToTopologic()); } return(null); }
public static global::Topologic.Face ToTopologic(this global::Rhino.Geometry.NurbsSurface nurbsSurface) { if (nurbsSurface == null) { return(null); } int uDegree = nurbsSurface.Degree(0); int vDegree = nurbsSurface.Degree(1); bool isUPeriodic = nurbsSurface.IsPeriodic(0); bool isVPeriodic = nurbsSurface.IsPeriodic(1); bool isRational = nurbsSurface.IsRational; NurbsSurfaceKnotList ghUKnots = nurbsSurface.KnotsU; List <double> uKnots = ghUKnots.ToList(); NurbsSurfaceKnotList ghVKnots = nurbsSurface.KnotsV; List <double> vKnots = ghVKnots.ToList(); // OCCT-compatible uKnots.Insert(0, uKnots[0]); uKnots.Add(uKnots.Last()); vKnots.Insert(0, vKnots[0]); vKnots.Add(vKnots.Last()); NurbsSurfacePointList ghControlPoints = nurbsSurface.Points; List <IList <Vertex> > controlPoints = new List <IList <Vertex> >(); List <IList <double> > weights = new List <IList <double> >(); for (int i = 0; i < ghControlPoints.CountU; ++i) { List <Vertex> controlPoints1D = new List <Vertex>(); List <double> weights1D = new List <double>(); for (int j = 0; j < ghControlPoints.CountV; ++j) { ControlPoint ghControlPoint = ghControlPoints.GetControlPoint(i, j); controlPoints1D.Add(ghControlPoint.Location.ToTopologic()); weights1D.Add(ghControlPoint.Weight); } controlPoints.Add(controlPoints1D); weights.Add(weights1D); } return(global::Topologic.Face.ByNurbsParameters(controlPoints, weights, uKnots, vKnots, isRational, isUPeriodic, isVPeriodic, uDegree, vDegree)); }
public static global::Topologic.Face ToTopologic(Extrusion extrusion) { global::Rhino.Geometry.NurbsSurface ghNurbsSurface = extrusion?.ToNurbsSurface(); return(ghNurbsSurface?.ToTopologic()); }
public static global::Topologic.Face ToTopologic(this PlaneSurface planeSurface) { global::Rhino.Geometry.NurbsSurface ghNurbsSurface = planeSurface?.ToNurbsSurface(); return(ghNurbsSurface?.ToTopologic()); }