Beispiel #1
0
        /// <summary>
        /// Get Grevit Curve Component
        /// </summary>
        /// <param name="curve"></param>
        /// <param name="referenceID"></param>
        /// <returns></returns>
        public static Component ToGrevitCurve(this Rhino.Geometry.Curve curve, string referenceID = "")
        {
            if (curve.IsArc(Rhino.RhinoMath.ZeroTolerance))
            {
                Rhino.Geometry.Arc a;
                if (curve.TryGetArc(out a))
                {
                    Curve3Points arc = new Curve3Points();
                    arc.a = curve.PointAtStart.ToGrevitPoint();
                    arc.b = curve.PointAt(0.5).ToGrevitPoint();
                    arc.c = curve.PointAtEnd.ToGrevitPoint();
                    arc.GID = referenceID;

                    return arc;
                }
            }
            else if (curve.IsPolyline())
            {
                Rhino.Geometry.Polyline pline;
                if (curve.TryGetPolyline(out pline))
                {
                    PLine arc = new PLine();
                    arc.points = new List<Grevit.Types.Point>();
                    foreach (Rhino.Geometry.Point3d pkt in pline)
                    {
                        arc.points.Add(pkt.ToGrevitPoint());
                    }
                    arc.closed = pline.IsClosed;
                    arc.GID = referenceID;
                    return arc;
                }
            }
            else if (curve.IsEllipse())
            {

                Curve3Points arc = new Curve3Points();
                arc.a = curve.PointAtStart.ToGrevitPoint();
                arc.b = curve.PointAt(0.5).ToGrevitPoint();
                arc.c = curve.PointAtEnd.ToGrevitPoint();
                arc.GID = referenceID;
                return arc;

            }
            else if (curve.GetType() == typeof(Rhino.Geometry.NurbsCurve))
            {
                Rhino.Geometry.NurbsCurve nc = (Rhino.Geometry.NurbsCurve)curve;
                Grevit.Types.Spline spline = new Grevit.Types.Spline();
                spline.controlPoints = new List<Grevit.Types.Point>();
                spline.weights = new List<double>();
                foreach (Rhino.Geometry.ControlPoint p in nc.Points)
                {
                    spline.controlPoints.Add(p.Location.ToGrevitPoint());
                    spline.weights.Add(p.Weight);
                }
                spline.degree = nc.Degree;
                spline.isClosed = nc.IsClosed;
                spline.isRational = nc.IsRational;
                spline.isPeriodic = nc.IsPeriodic;
                spline.GID = referenceID;
                spline.knots = new List<double>();
                foreach (double dbl in nc.Knots) spline.knots.Add(dbl);

                return spline;

            }
            else
            {
                Line arc = new Line();
                arc.from = curve.PointAtStart.ToGrevitPoint();
                arc.to = curve.PointAtEnd.ToGrevitPoint();
                arc.GID = referenceID;
                return arc;
            }

            return null;
        }
Beispiel #2
0
        /// <summary>
        /// Get Grevit Curve Component
        /// </summary>
        /// <param name="curve"></param>
        /// <param name="referenceID"></param>
        /// <returns></returns>
        public static Component ToGrevitCurve(this Rhino.Geometry.Curve curve, string referenceID = "")
        {
            if (curve.IsArc(Rhino.RhinoMath.ZeroTolerance))
            {
                Rhino.Geometry.Arc a;
                if (curve.TryGetArc(out a))
                {
                    Curve3Points arc = new Curve3Points();
                    arc.a   = curve.PointAtStart.ToGrevitPoint();
                    arc.b   = curve.PointAt(0.5).ToGrevitPoint();
                    arc.c   = curve.PointAtEnd.ToGrevitPoint();
                    arc.GID = referenceID;

                    return(arc);
                }
            }
            else if (curve.IsPolyline())
            {
                Rhino.Geometry.Polyline pline;
                if (curve.TryGetPolyline(out pline))
                {
                    PLine arc = new PLine();
                    arc.points = new List <Grevit.Types.Point>();
                    foreach (Rhino.Geometry.Point3d pkt in pline)
                    {
                        arc.points.Add(pkt.ToGrevitPoint());
                    }
                    arc.closed = pline.IsClosed;
                    arc.GID    = referenceID;
                    return(arc);
                }
            }
            else if (curve.IsEllipse())
            {
                Curve3Points arc = new Curve3Points();
                arc.a   = curve.PointAtStart.ToGrevitPoint();
                arc.b   = curve.PointAt(0.5).ToGrevitPoint();
                arc.c   = curve.PointAtEnd.ToGrevitPoint();
                arc.GID = referenceID;
                return(arc);
            }
            else if (curve.GetType() == typeof(Rhino.Geometry.NurbsCurve))
            {
                Rhino.Geometry.NurbsCurve nc     = (Rhino.Geometry.NurbsCurve)curve;
                Grevit.Types.Spline       spline = new Grevit.Types.Spline();
                spline.controlPoints = new List <Grevit.Types.Point>();
                spline.weights       = new List <double>();
                foreach (Rhino.Geometry.ControlPoint p in nc.Points)
                {
                    spline.controlPoints.Add(p.Location.ToGrevitPoint());
                    spline.weights.Add(p.Weight);
                }
                spline.degree     = nc.Degree;
                spline.isClosed   = nc.IsClosed;
                spline.isRational = nc.IsRational;
                spline.isPeriodic = nc.IsPeriodic;
                spline.GID        = referenceID;
                spline.knots      = new List <double>();
                foreach (double dbl in nc.Knots)
                {
                    spline.knots.Add(dbl);
                }

                return(spline);
            }
            else
            {
                Line arc = new Line();
                arc.from = curve.PointAtStart.ToGrevitPoint();
                arc.to   = curve.PointAtEnd.ToGrevitPoint();
                arc.GID  = referenceID;
                return(arc);
            }


            return(null);
        }