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)); }
/// <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); }
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 )); }
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) )); }
/// <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)); }
public static Curve ToCurve(this DB.Arc value) { var rhino = RawDecoder.ToRhino(value); UnitConverter.Scale(rhino, UnitConverter.ToRhinoUnits); return(rhino); }
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); } }