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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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));
        }
Exemple #4
0
 public static global::Topologic.Face ToTopologic(Extrusion extrusion)
 {
     global::Rhino.Geometry.NurbsSurface ghNurbsSurface = extrusion?.ToNurbsSurface();
     return(ghNurbsSurface?.ToTopologic());
 }
Exemple #5
0
 public static global::Topologic.Face ToTopologic(this PlaneSurface planeSurface)
 {
     global::Rhino.Geometry.NurbsSurface ghNurbsSurface = planeSurface?.ToNurbsSurface();
     return(ghNurbsSurface?.ToTopologic());
 }