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); } }
internal static List <(FamilyInstance, RevitPlacmenElement)> PlaceRevitFamilies(List <RevitPlacmenElement> RevitPlacmentPoints, UIDocument uiDoc, string FamilyPath, string TypeName, ElementTransformParams transform) { List <(FamilyInstance, RevitPlacmenElement)> CreatedInstances = new List <(FamilyInstance, RevitPlacmenElement)>(); string FamilyName = string.Empty; RevitPlacmentPoints = RevitPlacmentPoints.Distinct(new ComparePlacmentPoints()).ToList(); RevitPlacmentPoints.Sort(delegate(RevitPlacmenElement c1, RevitPlacmenElement c2) { return(c1.Station.CompareTo(c2.Station)); }); using (Transaction T = new Transaction(uiDoc.Document, "Place Objects")) { T.Start(); try { uiDoc.Document.LoadFamily(FamilyPath); FamilyName = System.IO.Path.GetFileNameWithoutExtension(FamilyPath); } catch (Exception) { } try { FamilySymbol Fam = new FilteredElementCollector(uiDoc.Document).OfClass(typeof(FamilySymbol)).Cast <FamilySymbol>().FirstOrDefault(F => F.Name == TypeName && F.FamilyName == FamilyName); Fam.Activate(); if (transform.StationToStartFrom != default(double)) { RevitPlacmentPoints.RemoveAll(E => E.Station < transform.StationToStartFrom); } if (transform.StationToEndAt != default(double)) { RevitPlacmentPoints.RemoveAll(E => E.Station > transform.StationToEndAt); } for (int i = 0; i < RevitPlacmentPoints.Count; i++) { FamilyInstance FamIns = uiDoc.Document.Create.NewFamilyInstance(RevitPlacmenElement.ConvertPointToInternal(RevitPlacmentPoints[i].PlacementPoint), Fam, Autodesk.Revit.DB.Structure.StructuralType.NonStructural); RevitPlacmentPoints[i].FillAttributes(FamIns); CreatedInstances.Add((FamIns, RevitPlacmentPoints[i]));
public RevitPlacmenElement GetPointAtStation(double StationToStudy) { RevitPlacmenElement PointElement = null; if (this.AlignmentSegmentElement is Line) { XYZ Point = (this.RevitSegmentElement as Autodesk.Revit.DB.Line).Evaluate(StationToStudy - Station, false); XYZ NextPoint = (this.RevitSegmentElement as Autodesk.Revit.DB.Line).Evaluate(StationToStudy + 0.0001 - Station, false); double AngleToXAxis = ExtractAngleInX(Point, NextPoint); XYZ AxisRotationPoint = (this.RevitSegmentElement as Autodesk.Revit.DB.Line).Evaluate(StationToStudy + 0.01 - Station, false); var SimplfiedAxis = Autodesk.Revit.DB.Line.CreateBound(Point, AxisRotationPoint); PointElement = new RevitPlacmenElement(Point, StationToStudy, this.Alignment, AngleToXAxis, SimplfiedAxis); } if (this.AlignmentSegmentElement is IrregularLine) { // XYZ Point = (this.RevitSegmentElement as Autodesk.Revit.DB.Line).Evaluate(StationToStudy - Station, false); // PointElement = new RevitPlacmenElement(Point, StationToStudy, this.Alignment); } if (this.AlignmentSegmentElement is Curve) { double StationParam; StationParam = 1 - (((StationToStudy - this.Station)) / this.GetLength()); XYZ Point = (this.RevitSegmentElement as Autodesk.Revit.DB.Arc).Evaluate(StationParam, true); var NextStationParam = 1 - (((StationToStudy + 0.0001 - this.Station)) / this.GetLength()); var NextPoint = (this.RevitSegmentElement as Autodesk.Revit.DB.Arc).Evaluate(NextStationParam, true); double AngleToXAxis = ExtractAngleInX(Point, NextPoint); var AxisStationParam = 1 - (((StationToStudy + 0.01 - this.Station)) / this.GetLength()); var AxisRotationPoint = (this.RevitSegmentElement as Autodesk.Revit.DB.Arc).Evaluate(AxisStationParam, true); var SimplfiedAxis = Autodesk.Revit.DB.Line.CreateBound(Point, AxisRotationPoint); PointElement = new RevitPlacmenElement(Point, StationToStudy, this.Alignment, AngleToXAxis, SimplfiedAxis); } if (this.AlignmentSegmentElement is Spiral) { double StationParam = (StationToStudy - this.Station) / this.GetLength(); XYZ Point = (this.RevitSegmentElement as NurbSpline).Evaluate((StationToStudy - this.Station), false); double StationParamNext = (StationToStudy + 0.0001 - this.Station) / this.GetLength(); XYZ NextPoint = (this.RevitSegmentElement as NurbSpline).Evaluate(StationParamNext, false); double AngleToXAxis = ExtractAngleInX(Point, NextPoint); double AxisStationParam = (StationToStudy + 0.01 - this.Station) / this.GetLength(); XYZ AxisPoint = (this.RevitSegmentElement as NurbSpline).Evaluate(AxisStationParam, false); var SimplfiedAxis = Autodesk.Revit.DB.Line.CreateBound(Point, AxisPoint); PointElement = new RevitPlacmenElement(Point, StationToStudy, this.Alignment, AngleToXAxis, SimplfiedAxis); } if (this.AlignmentSegmentElement is Chain) { //Review //return ExtractPoint((this.AlignmentElement as Chain).Text); } return(PointElement); }