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]));
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); } }