private Arc CreateArc(XYZ PointStart, XYZ PointEnd, double radius, bool largeSagitta)
        {
            XYZ midPointChord = 0.5 * (PointStart + PointEnd);

            XYZ v = null;

            if (!(bool)this.GetArcRotationAntiClockWise())
            {
                v = PointEnd - PointStart;
            }
            else
            {
                v = PointStart - PointEnd;
            }
            double d = 0.5 * v.GetLength(); // half chord length

            // Small and large circle sagitta:
            // http://www.mathopenref.com/sagitta.html

            double s = largeSagitta
              ? radius + Math.Sqrt(radius * radius - d * d)  // sagitta large
              : radius - Math.Sqrt(radius * radius - d * d); // sagitta small

            var PX          = Transform.CreateRotation(XYZ.BasisZ, 0.5 * Math.PI);
            var PX2         = v.Normalize();
            var PX3         = v.Normalize().Multiply(s);
            XYZ midPointArc = midPointChord + Transform.CreateRotation(XYZ.BasisZ, 0.5 * Math.PI).OfVector(v.Normalize().Multiply(s));


            return(Arc.Create(PointEnd, PointStart, midPointArc));
        }
Exemple #2
0
        /// <summary>
        /// Private constructor that creates a new Element every time
        /// </summary>
        /// <param name="arc"></param>
        private Grid(Autodesk.Revit.DB.Arc arc)
        {
            // Changing the underlying curve requires destroying the Grid
            TransactionManager.Instance.EnsureInTransaction(Document);

            Autodesk.Revit.DB.Grid g = Document.Create.NewGrid(arc);
            InternalSetGrid(g);

            TransactionManager.Instance.TransactionTaskDone();

            ElementBinder.CleanupAndSetElementForTrace(Document, this.InternalElement);
        }
Exemple #3
0
 public static ArcCurve ToRhino(DB.Arc arc)
 {
     return(arc.IsBound ?
            new ArcCurve
            (
                new Arc(AsPoint3d(arc.GetEndPoint(0)), AsPoint3d(arc.Evaluate(0.5, true)), AsPoint3d(arc.GetEndPoint(1))),
                arc.GetEndParameter(0),
                arc.GetEndParameter(1)
            ) :
            new ArcCurve
            (
                new Circle(new Plane(AsPoint3d(arc.Center), AsVector3d(arc.XDirection), AsVector3d(arc.YDirection)), arc.Radius),
                0.0,
                2.0 * Math.PI
            ));
 }
Exemple #4
0
 public static ArcCurve ToRhino(this DB.Arc arc)
 {
     return(arc.IsBound ?
            new ArcCurve
            (
                new Arc(arc.GetEndPoint(0).ToRhino(), arc.Evaluate(0.5, true).ToRhino(), arc.GetEndPoint(1).ToRhino()),
                arc.GetEndParameter(0),
                arc.GetEndParameter(1)
            ) :
            new ArcCurve
            (
                new Circle(new Plane(arc.Center.ToRhino(), new Vector3d(arc.XDirection.ToRhino()), new Vector3d(arc.YDirection.ToRhino())), arc.Radius),
                arc.GetEndParameter(0),
                arc.GetEndParameter(1)
            ));
 }
Exemple #5
0
 /// <summary>
 /// Convert a Revit arc to a Nucleus one
 /// </summary>
 /// <param name="arc">The arc to convert</param>
 /// <returns></returns>
 public static FB.Arc Convert(AD.Arc arc)
 {
     if (arc.IsCyclic)
     {
         return(new FB.Arc(
                    new Circle(
                        arc.Radius,
                        new CylindricalCoordinateSystem(
                            Convert(arc.Center),
                            Convert(arc.XDirection, 1),
                            Convert(arc.YDirection, 1)))));
     }
     else
     {
         return(new FB.Arc(
                    Convert(arc.GetEndPoint(0)),
                    Convert(arc.Evaluate(0.5, true)),
                    Convert(arc.GetEndPoint(1))));
     }
 }
        public static Arc CreateArcFromCircCurve(XYZ PointStart, XYZ PointEnd, double radius, bool largeSagitta)
        {
            PointStart = new XYZ(PointStart.X, PointStart.Z, 0);
            PointEnd   = new XYZ(PointEnd.X, PointEnd.Z, 0);

            XYZ midPointChord = 0.5 * (PointStart + PointEnd);

            XYZ v = null;

            //if (!(bool)this.GetArcRotationAntiClockWise())
            //{
            //    v = PointEnd - PointStart;
            //}
            //else
            //{
            v = PointStart - PointEnd;
            //}            //}
            double d = 0.5 * v.GetLength(); // half chord length

            // Small and large circle sagitta:
            // http://www.mathopenref.com/sagitta.html

            double s = largeSagitta
              ? radius + Math.Sqrt(radius * radius - d * d)  // sagitta large
              : radius - Math.Sqrt(radius * radius - d * d); // sagitta small

            var PX          = Transform.CreateRotation(XYZ.BasisZ, 0.5 * Math.PI);
            var PX2         = v.Normalize();
            var PX3         = v.Normalize().Multiply(s);
            XYZ midPointArc = midPointChord + Transform.CreateRotation(XYZ.BasisZ, 0.5 * Math.PI).OfVector(v.Normalize().Multiply(s));

            var PointARcEnd   = new XYZ(PointEnd.X, PointEnd.Z, PointEnd.Y);
            var PointArcStart = new XYZ(PointStart.X, PointStart.Z, PointStart.Y);
            var PointArcMid   = new XYZ(midPointArc.X, midPointArc.Z, midPointArc.Y);

            return(Arc.Create(PointARcEnd, PointArcStart, PointArcMid));
        }
Exemple #7
0
 public static Curve ToCurve(this DB.Arc value)
 {
     var rhino = RawDecoder.ToRhino(value); UnitConverter.Scale(rhino, UnitConverter.ToRhinoUnits); return(rhino);
 }
Exemple #8
0
 public static ArcCurve ToRhino(this DB.Arc arc) => RawDecoder.ToRhino(arc);
        private void CreateRevitElement()
        {
            if (this.AlignmentSegmentElement is Line)
            {
                Autodesk.Revit.DB.Line L = Autodesk.Revit.DB.Line.CreateBound(this.GetStartPoint(), this.GetEndPoint());
                RevitSegmentElement = L;

                if ((bool)ObjectPlacement.TransForm.CreateAlignment)
                {
                    try
                    {
                        var ConvertedPointStart             = RevitPlacmenElement.ConvertPointToInternal(this.GetStartPoint());
                        var ConvertedEndPoint               = RevitPlacmenElement.ConvertPointToInternal(this.GetEndPoint());
                        Autodesk.Revit.DB.Line ConvrtedLine = Autodesk.Revit.DB.Line.CreateBound(ConvertedPointStart, ConvertedEndPoint);
                        CreateRevitElementInRevit(ConvrtedLine);
                    }
                    catch (Exception)
                    {
                    }
                    // Create a ModelArc element using the created geometry arc and sketch plane
                }
            }
            if (this.AlignmentSegmentElement is IrregularLine)
            {
                // Autodesk.Revit.DB.Line L = Autodesk.Revit.DB.Line.CreateBound(this.GetStartPoint().PlacementPoint, this.GetEndPoint().PlacementPoint);
                //  RevitSegmentElement = L;
            }
            if (this.AlignmentSegmentElement is Curve)
            {
                var StartPoint = this.GetStartPoint();
                var EndPoint   = this.GetEndPoint();
                var Radius     = this.GetCurveRadius();

                Arc C = CreateArc(StartPoint, EndPoint, Radius, (bool)false);
                RevitSegmentElement = C;

                if ((bool)ObjectPlacement.TransForm.CreateAlignment)
                {
                    try
                    {
                        var ConvertedPointStart = RevitPlacmenElement.ConvertPointToInternal(this.GetStartPoint());
                        var ConvertedEndPoint   = RevitPlacmenElement.ConvertPointToInternal(this.GetEndPoint());
                        var ConvertedRadius     = RevitPlacmenElement.ConvertDoubleToInternal(Radius);
                        Arc ConcertedCurve      = CreateArc(ConvertedPointStart, ConvertedEndPoint, ConvertedRadius, (bool)false);
                        CreateRevitElementInRevit(ConcertedCurve);
                    }
                    catch (Exception)
                    {
                    }
                    // Create a ModelArc element using the created geometry arc and sketch plane
                }
            }
            if (this.AlignmentSegmentElement is Spiral)
            {
                var Sp          = (this.AlignmentSegmentElement as Spiral);
                var NurbsSpline = CreateaSpiral(Sp);
                RevitSegmentElement = NurbsSpline;

                if ((bool)ObjectPlacement.TransForm.CreateAlignment)
                {
                    try
                    {
                        List <XYZ> ConvertedPoints = new List <XYZ>();
                        foreach (XYZ item in NurbsSpline.CtrlPoints)
                        {
                            var ConvertedPointStart = RevitPlacmenElement.ConvertPointToInternal(item);

                            ConvertedPoints.Add(ConvertedPointStart);
                        }
                        List <double> Weights             = Enumerable.Repeat(1.0, ConvertedPoints.Count).ToList();
                        var           ConvertedNurbsCurve = NurbSpline.CreateCurve(ConvertedPoints, Weights);
                        CreateRevitElementInRevit(ConvertedNurbsCurve);
                    }
                    catch (Exception)
                    {
                    }
                    // Create a ModelArc element using the created geometry arc and sketch plane
                }
            }
            if (this.AlignmentSegmentElement is Chain)
            {
                //Review
                //return ExtractPoint((this.AlignmentElement as Chain).Text);
            }
        }