コード例 #1
0
        public static NurbsCurve ToRhino(this DB.Ellipse ellipse)
        {
            var plane      = new Plane(ellipse.Center.ToRhino(), new Vector3d(ellipse.XDirection.ToRhino()), new Vector3d(ellipse.YDirection.ToRhino()));
            var e          = new Ellipse(plane, ellipse.RadiusX, ellipse.RadiusY);
            var nurbsCurve = e.ToNurbsCurve();

            return(ellipse.IsBound ?
                   nurbsCurve.Trim(ellipse.GetEndParameter(0), ellipse.GetEndParameter(1)) as NurbsCurve :
                   nurbsCurve);
        }
コード例 #2
0
        public static NurbsCurve ToRhino(this DB.Ellipse ellipse)
        {
            var plane      = new Plane(ellipse.Center.ToRhino(), new Vector3d(ellipse.XDirection.ToRhino()), new Vector3d(ellipse.YDirection.ToRhino()));
            var e          = new Ellipse(plane, ellipse.RadiusX, ellipse.RadiusY);
            var nurbsCurve = e.ToNurbsCurve();

            if (ellipse.IsBound)
            {
                nurbsCurve.ClosestPoint(ellipse.GetEndPoint(0).ToRhino(), out var param0);
                nurbsCurve.ClosestPoint(ellipse.GetEndPoint(1).ToRhino(), out var param1);
                nurbsCurve        = nurbsCurve.Trim(param0, param1) as NurbsCurve;
                nurbsCurve.Domain = new Interval(ellipse.GetEndParameter(0), ellipse.GetEndParameter(1));
            }

            return(nurbsCurve);
        }
コード例 #3
0
        private static Autodesk.DesignScript.Geometry.Curve Convert(Autodesk.Revit.DB.Ellipse crv)
        {
            var isComplete = !crv.IsBound ||
                             Math.Abs(Math.Abs(crv.GetEndParameter(1) - crv.GetEndParameter(0)) - 2 * Math.PI) < 1e-6;

            if (!isComplete)
            {
                var pl = Plane.ByOriginXAxisYAxis(crv.Center.ToPoint(),
                                                  crv.XDirection.ToVector(), crv.YDirection.ToVector());

                var s = crv.GetEndParameter(0).ToDegrees();
                var e = crv.GetEndParameter(1).ToDegrees();

                return(EllipseArc.ByPlaneRadiiStartAngleSweepAngle(pl, crv.RadiusX, crv.RadiusY, s, e - s));
            }

            return(Autodesk.DesignScript.Geometry.Ellipse.ByOriginVectors(crv.Center.ToPoint(),
                                                                          (crv.XDirection * crv.RadiusX).ToVector(), (crv.YDirection * crv.RadiusY).ToVector()));
        }
コード例 #4
0
        public static NurbsCurve ToRhino(DB.Ellipse ellipse)
        {
            var plane      = new Plane(AsPoint3d(ellipse.Center), AsVector3d(ellipse.XDirection), AsVector3d(ellipse.YDirection));
            var e          = new Ellipse(plane, ellipse.RadiusX, ellipse.RadiusY);
            var nurbsCurve = e.ToNurbsCurve();

            if (ellipse.IsBound)
            {
                nurbsCurve.ClosestPoint(AsPoint3d(ellipse.GetEndPoint(0)), out var param0);
                if (!nurbsCurve.ChangeClosedCurveSeam(param0))
                {
                    nurbsCurve.Domain = new Interval(param0, param0 + nurbsCurve.Domain.Length);
                }

                nurbsCurve.ClosestPoint(AsPoint3d(ellipse.GetEndPoint(1)), out var param1);
                nurbsCurve        = nurbsCurve.Trim(param0, param1) as NurbsCurve;
                nurbsCurve.Domain = new Interval(ellipse.GetEndParameter(0), ellipse.GetEndParameter(1));
            }

            return(nurbsCurve);
        }
コード例 #5
0
        private static Autodesk.DesignScript.Geometry.Curve Convert(Autodesk.Revit.DB.Ellipse crv)
        {
            var isFullEllipse = !crv.IsBound ||
                                Math.Abs(Math.Abs(crv.GetEndParameter(1) - crv.GetEndParameter(0)) - 2 * Math.PI) < 1e-6;

            if (isFullEllipse)
            {
                return
                    (Autodesk.DesignScript.Geometry.Ellipse.ByOriginVectors(
                         crv.Center.ToPoint(false),
                         (crv.XDirection * crv.RadiusX).ToVector(false),
                         (crv.YDirection * crv.RadiusY).ToVector(false)));
            }
            double startParam;

            var span = Math.Abs(crv.GetEndParameter(0) - crv.GetEndParameter(1)).ToDegrees();

            startParam = crv.GetEndParameter(0).ToDegrees();
            using (var pl = Plane.ByOriginXAxisYAxis(crv.Center.ToPoint(false), crv.XDirection.ToVector(), crv.YDirection.ToVector()))
            {
                return(EllipseArc.ByPlaneRadiiAngles(pl, crv.RadiusX, crv.RadiusY, startParam, span));
            }
        }
コード例 #6
0
        private static Autodesk.DesignScript.Geometry.Curve Convert(Autodesk.Revit.DB.Ellipse crv)
        {
            var isFullEllipse = !crv.IsBound ||
                                Math.Abs(Math.Abs(crv.GetEndParameter(1) - crv.GetEndParameter(0)) - 2 * Math.PI) < 1e-6;

            if (isFullEllipse)
            {
                return
                    (Autodesk.DesignScript.Geometry.Ellipse.ByOriginVectors(
                         crv.Center.ToPoint(false),
                         (crv.XDirection * crv.RadiusX).ToVector(false),
                         (crv.YDirection * crv.RadiusY).ToVector(false)));
            }

            // We need to define the major and minor axis as the curve
            // will be trimmed starting from the major axis (not the xaxis)
            var major = Math.Max(crv.RadiusX, crv.RadiusY);
            var minor = Math.Min(crv.RadiusX, crv.RadiusY);

            Vector majorAxis;
            Vector minorAxis;

            double startParam;

            var span = Math.Abs(crv.GetEndParameter(0) - crv.GetEndParameter(1)).ToDegrees();

            if (crv.RadiusX > crv.RadiusY)
            {
                majorAxis  = crv.XDirection.ToVector();
                minorAxis  = crv.YDirection.ToVector();
                startParam = crv.GetEndParameter(0).ToDegrees();
            }
            else
            {
                majorAxis  = crv.YDirection.ToVector().Reverse();
                minorAxis  = crv.XDirection.ToVector();
                startParam = crv.GetEndParameter(0).ToDegrees() + 90;
            }

            using (var pl = Plane.ByOriginXAxisYAxis(crv.Center.ToPoint(false), majorAxis, minorAxis))
            {
                return(EllipseArc.ByPlaneRadiiStartAngleSweepAngle(pl, major, minor, startParam, span));
            }
        }