/// <summary> /// Implement this method as an external command for Revit. /// </summary> /// <param name="commandData">An object that is passed to the external application /// which contains data related to the command, /// such as the application object and active view.</param> /// <param name="message">A message that can be set by the external application /// which will be displayed if a failure or cancellation is returned by /// the external command.</param> /// <param name="elements">A set of elements to which the external application /// can add elements that are to be highlighted in case of failure or cancellation.</param> /// <returns>Return the status of the external command. /// A result of Succeeded means that the API external method functioned as expected. /// Cancelled can be used to signify that the user cancelled the external operation /// at some point. Failure should be returned if the application is unable to proceed with /// the operation.</returns> public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { Autodesk.Revit.ApplicationServices.Application app = commandData.Application.Application; Document doc = commandData.Application.ActiveUIDocument.Document; Transaction transaction = new Transaction(doc, "PointsOnCurve"); transaction.Start(); XYZ start = new XYZ(0, 0, 0); XYZ end = new XYZ(50, 50, 0); Autodesk.Revit.DB.Line line = Autodesk.Revit.DB.Line.CreateBound(start, end); Plane geometryPlane = Plane.CreateByNormalAndOrigin(XYZ.BasisZ, start); SketchPlane skplane = SketchPlane.Create(doc, geometryPlane); ModelCurve modelcurve = doc.FamilyCreate.NewModelCurve(line, skplane); for (double i = 0.1; i <= 1; i = i + 0.1) { PointLocationOnCurve locationOnCurve = new PointLocationOnCurve(PointOnCurveMeasurementType.NormalizedCurveParameter, i, PointOnCurveMeasureFrom.Beginning); PointOnEdge poe = app.Create.NewPointOnEdge(modelcurve.GeometryCurve.Reference, locationOnCurve); ReferencePoint rp2 = doc.FamilyCreate.NewReferencePoint(poe); } transaction.Commit(); return(Result.Succeeded); }
/// <summary> /// Initialize a ReferencePoint element /// </summary> /// <param name="curveReference"></param> /// <param name="parameter"></param> /// <param name="measurementType"></param> /// <param name="measureFrom"></param> private void InitReferencePoint(Reference curveReference, double parameter, PointOnCurveMeasurementType measurementType, PointOnCurveMeasureFrom measureFrom) { //Phase 1 - Check to see if the object exists and should be rebound var oldRefPt = ElementBinder.GetElementFromTrace <Autodesk.Revit.DB.ReferencePoint>(Document); //There was a point, rebind to that, and adjust its position if (oldRefPt != null) { InternalSetReferencePoint(oldRefPt); InternalSetPointOnCurve(curveReference, parameter, measurementType, measureFrom); return; } //Phase 2- There was no existing point, create one TransactionManager.Instance.EnsureInTransaction(Document); var plc = new PointLocationOnCurve(measurementType, parameter, measureFrom); var edgePoint = Document.Application.Create.NewPointOnEdge(curveReference, plc); InternalSetReferencePoint(Document.FamilyCreate.NewReferencePoint(edgePoint)); TransactionManager.Instance.TransactionTaskDone(); ElementBinder.SetElementForTrace(InternalElement); }
/// <summary> /// Set the positions of the InternalFamilyInstace from an array of parameters and curve /// </summary> /// <param name="parms"></param> /// <param name="c"></param> private void InternalSetParamsAndCurve(double[] parms, Autodesk.Revit.DB.Reference c) { TransactionManager.Instance.EnsureInTransaction(Document); var placePointIds = AdaptiveComponentInstanceUtils.GetInstancePlacementPointElementRefIds(InternalFamilyInstance); if (placePointIds.Count() != parms.Length) { throw new Exception("The input list of parameters does not have the same number of values required by the adaptive component."); } // Set the position of each placement point int i = 0; foreach (ElementId id in placePointIds) { var t = parms[i]; var point = Document.GetElement(id) as Autodesk.Revit.DB.ReferencePoint; var ploc = new PointLocationOnCurve(PointOnCurveMeasurementType.NormalizedCurveParameter, t, PointOnCurveMeasureFrom.Beginning); var peref = Document.Application.Create.NewPointOnEdge(c, ploc); point.SetPointElementReference(peref); i++; } TransactionManager.Instance.TransactionTaskDone(); }
private void InternalSetPointOnCurve(Reference curveReference, double parameter, PointOnCurveMeasurementType measurementType, PointOnCurveMeasureFrom measureFrom) { TransactionManager.Instance.EnsureInTransaction(Document); var plc = new PointLocationOnCurve(measurementType, parameter, measureFrom); var edgePoint = Document.Application.Create.NewPointOnEdge(curveReference, plc); InternalReferencePoint.SetPointElementReference(edgePoint); TransactionManager.Instance.TransactionTaskDone(); }
public override Value Evaluate(FSharpList <Value> args) { var inputItem = ((Value.Container)args[0]).Item; Reference r = (inputItem is Reference) ? (Reference)inputItem : ((CurveElement)inputItem).GeometryCurve.Reference; double len = ((Value.Number)args[1]).Item; bool isNormalized = ((Value.Number)args[2]).Item == 1; bool isBeginning = ((Value.Number)args[3]).Item == 1; PointLocationOnCurve plc = new PointLocationOnCurve(isNormalized ? PointOnCurveMeasurementType.NormalizedSegmentLength : PointOnCurveMeasurementType.SegmentLength, len, isBeginning ? PointOnCurveMeasureFrom.Beginning : PointOnCurveMeasureFrom.End); PointElementReference edgePoint = this.UIDocument.Application.Application.Create.NewPointOnEdge(r, plc); ReferencePoint p; if (this.Elements.Any()) { Element e; if (dynUtils.TryGetElement(this.Elements[0], typeof(ReferencePoint), out e)) { p = e as ReferencePoint; p.SetPointElementReference(edgePoint); } else { p = this.UIDocument.Document.FamilyCreate.NewReferencePoint(edgePoint); this.Elements[0] = p.Id; } } else { p = this.UIDocument.Document.FamilyCreate.NewReferencePoint(edgePoint); this.Elements.Add(p.Id); } return(Value.NewContainer(p)); }
public override Value Evaluate(FSharpList <Value> args) { Reference r = ((CurveElement)((Value.Container)args[0]).Item).GeometryCurve.Reference; double t = ((Value.Number)args[1]).Item; //Autodesk.Revit.DB..::.PointElementReference //Autodesk.Revit.DB..::.PointOnEdge //Autodesk.Revit.DB..::.PointOnEdgeEdgeIntersection //Autodesk.Revit.DB..::.PointOnEdgeFaceIntersection //Autodesk.Revit.DB..::.PointOnFace //Autodesk.Revit.DB..::.PointOnPlane PointLocationOnCurve plc = new PointLocationOnCurve(PointOnCurveMeasurementType.NormalizedCurveParameter, t, PointOnCurveMeasureFrom.Beginning); PointElementReference edgePoint = this.UIDocument.Application.Application.Create.NewPointOnEdge(r, plc); ReferencePoint p; if (this.Elements.Any()) { Element e; if (dynUtils.TryGetElement(this.Elements[0], typeof(ReferencePoint), out e)) { p = e as ReferencePoint; p.SetPointElementReference(edgePoint); } else { p = this.UIDocument.Document.FamilyCreate.NewReferencePoint(edgePoint); this.Elements[0] = p.Id; } } else { p = this.UIDocument.Document.FamilyCreate.NewReferencePoint(edgePoint); this.Elements.Add(p.Id); } return(Value.NewContainer(p)); }
Stream(ArrayList data, PointLocationOnCurve ptLocOnCurve) { data.Add(new Snoop.Data.String("Measurement Type", ptLocOnCurve.MeasurementType.ToString())); data.Add(new Snoop.Data.String("Measure From", ptLocOnCurve.MeasureFrom.ToString())); data.Add(new Snoop.Data.Double("Measurement Value", ptLocOnCurve.MeasurementValue)); }
public override Value Evaluate(FSharpList <Value> args) { if (!args[0].IsList) { throw new Exception("A list of UVs is required to place the Adaptive Component."); } FSharpList <Value> parameters = ((Value.List)args[0]).Item; var curveRef = ((Value.Container)args[1]).Item as Reference; var c = curveRef == null ? (Curve)((Value.Container)args[1]).Item : (Curve)dynRevitSettings.Doc.Document.GetElement(curveRef.ElementId).GetGeometryObjectFromReference(curveRef); var fs = (FamilySymbol)((Value.Container)args[2]).Item; FamilyInstance ac = null; //if the adapative component already exists, then move the points if (Elements.Any()) { //...we attempt to fetch it from the document... if (dynUtils.TryGetElement(this.Elements[0], out ac)) { ac.Symbol = fs; } else { //create ac = AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance(dynRevitSettings.Doc.Document, fs); Elements[0] = ac.Id; } } else { //create ac = AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance(dynRevitSettings.Doc.Document, fs); Elements.Add(ac.Id); } if (ac == null) { throw new Exception("An adaptive component could not be found or created."); } IList <ElementId> placePointIds = new List <ElementId>(); placePointIds = AdaptiveComponentInstanceUtils.GetInstancePlacementPointElementRefIds(ac); if (placePointIds.Count() != parameters.Count()) { throw new Exception("The input list of UVs does not have the same number of values required by the adaptive component."); } // Set the position of each placement point int i = 0; foreach (ElementId id in placePointIds) { var t = ((Value.Number)parameters.ElementAt(i)).Item; var point = dynRevitSettings.Doc.Document.GetElement(id) as ReferencePoint; var ploc = new PointLocationOnCurve(PointOnCurveMeasurementType.NonNormalizedCurveParameter, t, PointOnCurveMeasureFrom.Beginning); var peref = dynRevitSettings.Revit.Application.Create.NewPointOnEdge(c.Reference, ploc); point.SetPointElementReference(peref); i++; } return(Value.NewContainer(ac)); }
/// <summary> /// Set the positions of the InternalFamilyInstace from an array of parameters and curve /// </summary> /// <param name="parms"></param> /// <param name="c"></param> private void InternalSetParamsAndCurve(double[] parms, Autodesk.Revit.DB.Reference c) { TransactionManager.Instance.EnsureInTransaction(Document); var placePointIds = AdaptiveComponentInstanceUtils.GetInstancePlacementPointElementRefIds(InternalFamilyInstance); if (placePointIds.Count() != parms.Length) throw new Exception("The input list of parameters does not have the same number of values required by the adaptive component."); // Set the position of each placement point int i = 0; foreach (ElementId id in placePointIds) { var t = parms[i]; var point = Document.GetElement(id) as Autodesk.Revit.DB.ReferencePoint; var ploc = new PointLocationOnCurve(PointOnCurveMeasurementType.NormalizedCurveParameter, t, PointOnCurveMeasureFrom.Beginning); var peref = Document.Application.Create.NewPointOnEdge(c, ploc); point.SetPointElementReference(peref); i++; } TransactionManager.Instance.TransactionTaskDone(); }
/// <summary> /// Implement this method as an external command for Revit. /// </summary> /// <param name="commandData">An object that is passed to the external application /// which contains data related to the command, /// such as the application object and active view.</param> /// <param name="message">A message that can be set by the external application /// which will be displayed if a failure or cancellation is returned by /// the external command.</param> /// <param name="elements">A set of elements to which the external application /// can add elements that are to be highlighted in case of failure or cancellation.</param> /// <returns>Return the status of the external command. /// A result of Succeeded means that the API external method functioned as expected. /// Cancelled can be used to signify that the user cancelled the external operation /// at some point. Failure should be returned if the application is unable to proceed with /// the operation.</returns> public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { Autodesk.Revit.ApplicationServices.Application app = commandData.Application.Application; Document doc = commandData.Application.ActiveUIDocument.Document; XYZ start = app.Create.NewXYZ(0, 0, 0); XYZ end = app.Create.NewXYZ(50, 50, 0); Autodesk.Revit.DB.Line line = app.Create.NewLine(start, end, true); Plane geometryPlane = app.Create.NewPlane(XYZ.BasisZ, start); SketchPlane skplane = doc.FamilyCreate.NewSketchPlane(geometryPlane); ModelCurve modelcurve = doc.FamilyCreate.NewModelCurve(line, skplane); for (double i = 0; i <= 1; i = i + 0.1) { PointLocationOnCurve locationOnCurve = new PointLocationOnCurve(PointOnCurveMeasurementType.NormalizedCurveParameter, i, PointOnCurveMeasureFrom.Beginning); PointOnEdge poe = app.Create.NewPointOnEdge(modelcurve.GeometryCurve.Reference, locationOnCurve); ReferencePoint rp2 = doc.FamilyCreate.NewReferencePoint(poe); } return Result.Succeeded; }
CollectEvent(object sender, CollectorEventArgs e) { // cast the sender object to the SnoopCollector we are expecting Collector snoopCollector = sender as Collector; if (snoopCollector == null) { Debug.Assert(false); // why did someone else send us the message? return; } // see if it is a type we are responsible for Color color = e.ObjToSnoop as Color; if (color != null) { Stream(snoopCollector.Data(), color); return; } LayoutRule layoutRule = e.ObjToSnoop as LayoutRule; if (layoutRule != null) { Stream(snoopCollector.Data(), layoutRule); return; } FormatOptions formatOptions = e.ObjToSnoop as FormatOptions; if (formatOptions != null) { Stream(snoopCollector.Data(), formatOptions); return; } CurtainGrid curtainGrid = e.ObjToSnoop as CurtainGrid; if (curtainGrid != null) { Stream(snoopCollector.Data(), curtainGrid); return; } CurtainCell curtainCell = e.ObjToSnoop as CurtainCell; if (curtainCell != null) { Stream(snoopCollector.Data(), curtainCell); return; } RebarHostData rebarHostData = e.ObjToSnoop as RebarHostData; if (rebarHostData != null) { Stream(snoopCollector.Data(), rebarHostData); return; } Leader leader = e.ObjToSnoop as Leader; if (leader != null) { Stream(snoopCollector.Data(), leader); return; } AreaVolumeSettings areaSettings = e.ObjToSnoop as AreaVolumeSettings; if (areaSettings != null) { Stream(snoopCollector.Data(), areaSettings); return; } ViewSheetSetting viewSheetSetting = e.ObjToSnoop as ViewSheetSetting; if (viewSheetSetting != null) { Stream(snoopCollector.Data(), viewSheetSetting); return; } Autodesk.Revit.UI.Events.DialogBoxData dlgBoxData = e.ObjToSnoop as Autodesk.Revit.UI.Events.DialogBoxData; if (dlgBoxData != null) { Stream(snoopCollector.Data(), dlgBoxData); return; } Construction construct = e.ObjToSnoop as Construction; if (construct != null) { Stream(snoopCollector.Data(), construct); return; } FamilyElementVisibility famElemVisib = e.ObjToSnoop as FamilyElementVisibility; if (famElemVisib != null) { Stream(snoopCollector.Data(), famElemVisib); return; } FamilyManager famManager = e.ObjToSnoop as FamilyManager; if (famManager != null) { Stream(snoopCollector.Data(), famManager); return; } FamilyParameter famParam = e.ObjToSnoop as FamilyParameter; if (famParam != null) { Stream(snoopCollector.Data(), famParam); return; } FamilyType famType = e.ObjToSnoop as FamilyType; if (famType != null) { Stream(snoopCollector.Data(), famType); return; } MEPSpaceConstruction mepSpaceConstuct = e.ObjToSnoop as MEPSpaceConstruction; if (mepSpaceConstuct != null) { Stream(snoopCollector.Data(), mepSpaceConstuct); return; } BuildingSiteExportOptions bldSiteExpOptions = e.ObjToSnoop as BuildingSiteExportOptions; if (bldSiteExpOptions != null) { Stream(snoopCollector.Data(), bldSiteExpOptions); return; } DGNExportOptions dgnExpOptions = e.ObjToSnoop as DGNExportOptions; if (dgnExpOptions != null) { Stream(snoopCollector.Data(), dgnExpOptions); return; } DWFExportOptions dwfExpOptions = e.ObjToSnoop as DWFExportOptions; if (dwfExpOptions != null) { Stream(snoopCollector.Data(), dwfExpOptions); return; } DWGExportOptions dwgExpOptions = e.ObjToSnoop as DWGExportOptions; if (dwgExpOptions != null) { Stream(snoopCollector.Data(), dwgExpOptions); return; } DWGImportOptions dwgImpOptions = e.ObjToSnoop as DWGImportOptions; if (dwgImpOptions != null) { Stream(snoopCollector.Data(), dwgImpOptions); return; } FBXExportOptions fbxExpOptions = e.ObjToSnoop as FBXExportOptions; if (fbxExpOptions != null) { Stream(snoopCollector.Data(), fbxExpOptions); return; } TrussMemberInfo trussInfo = e.ObjToSnoop as TrussMemberInfo; if (trussInfo != null) { Stream(snoopCollector.Data(), trussInfo); return; } VertexIndexPair vertIndPair = e.ObjToSnoop as VertexIndexPair; if (vertIndPair != null) { Stream(snoopCollector.Data(), vertIndPair); return; } PointElementReference ptElemRef = e.ObjToSnoop as PointElementReference; if (ptElemRef != null) { Stream(snoopCollector.Data(), ptElemRef); return; } Autodesk.Revit.DB.Architecture.BoundarySegment boundSeg = e.ObjToSnoop as Autodesk.Revit.DB.Architecture.BoundarySegment; if (boundSeg != null) { Stream(snoopCollector.Data(), boundSeg); return; } PointLocationOnCurve ptLocOnCurve = e.ObjToSnoop as PointLocationOnCurve; if (ptLocOnCurve != null) { Stream(snoopCollector.Data(), ptLocOnCurve); return; } Entity entity = e.ObjToSnoop as Entity; if (entity != null) { Stream(snoopCollector.Data(), entity); return; } Field field = e.ObjToSnoop as Field; if (field != null) { Stream(snoopCollector.Data(), field); return; } ExtensibleStorageField storeagefield = e.ObjToSnoop as ExtensibleStorageField; if (storeagefield != null) { Stream(snoopCollector.Data(), storeagefield); return; } IList <Autodesk.Revit.DB.BoundarySegment> boundSegs = e.ObjToSnoop as IList <Autodesk.Revit.DB.BoundarySegment>; if (boundSegs != null) { Stream(snoopCollector.Data(), boundSegs); return; } if (e.ObjToSnoop is KeyValuePair <String, String> ) { KeyValuePair <String, String> stringspair = (KeyValuePair <String, String>)e.ObjToSnoop; Stream(snoopCollector.Data(), stringspair); return; } Schema schema = e.ObjToSnoop as Schema; if (schema != null) { Stream(snoopCollector.Data(), schema); return; } ElementId elemId = e.ObjToSnoop as ElementId; if (elemId != null) { Stream(snoopCollector.Data(), elemId); return; } PlanViewRange plvr = e.ObjToSnoop as PlanViewRange; if (plvr != null) { Stream(snoopCollector.Data(), plvr); return; } //TF RebarConstraintsManager rbcm = e.ObjToSnoop as RebarConstraintsManager; if (rbcm != null) { Stream(snoopCollector.Data(), rbcm); return; } RebarConstrainedHandle rbch = e.ObjToSnoop as RebarConstrainedHandle; if (rbch != null) { Stream(snoopCollector.Data(), rbch); return; } RebarConstraint rbc = e.ObjToSnoop as RebarConstraint; if (rbc != null) { Stream(snoopCollector.Data(), rbc); return; } //TFEND if (Utils.IsSupportedType(e.ObjToSnoop) && e.ObjToSnoop != null) { Utils.StreamWithReflection(snoopCollector.Data(), e.ObjToSnoop.GetType(), e.ObjToSnoop); } }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { var doc = commandData.Application.ActiveUIDocument.Document; //Collect all adaptive component family symbols with more than 1 placement point var collector = new FilteredElementCollector(doc); var filter = new ElementClassFilter(typeof(FamilySymbol)); var adaptiveComponents = from fs in collector.WherePasses(filter).Cast <FamilySymbol>() where AdaptiveComponentFamilyUtils.IsAdaptiveComponentFamily(fs.Family) && AdaptiveComponentFamilyUtils.GetNumberOfPlacementPoints(fs.Family) > 1 select fs; //Display dialog and prompt for selection FormFamilySymbolSelector selector = new FormFamilySymbolSelector(adaptiveComponents); selector.ShowDialog(); //select edge reference Reference hostEdge = commandData.Application.ActiveUIDocument.Selection.PickObject(ObjectType.Edge, "Select edge:"); var selectedId = hostEdge.ElementId; Element e = doc.GetElement(selectedId); //get the selected family var selectedFamilySymbol = selector.SelectedElement(); //activate familySymbol selectedFamilySymbol.Activate(); using (TransactionGroup transGroup = new TransactionGroup(doc)) { transGroup.Start("Place Dimensions"); //hack join the element to a wall ElementId wallId = null; if (e is FamilyInstance & JoinGeometryUtils.GetJoinedElements(doc, e).Count < 1) { using (Transaction transaction = new Transaction(doc)) { transaction.Start("Create wall"); //////setup a failure handler to handle any warnings ////FailureHandlingOptions failOpts = transaction.GetFailureHandlingOptions(); ////failOpts.SetFailuresPreprocessor(new WarningSwallower()); ////transaction.SetFailureHandlingOptions(failOpts); wallId = Utils.CreateJoinedWall(doc, wallId, e as FamilyInstance); doc.Regenerate(); transaction.Commit(); } } using (Transaction transaction = new Transaction(doc)) { transaction.Start("Create Family"); //get number of placement point var numberOfPoints = AdaptiveComponentFamilyUtils.GetNumberOfPlacementPoints(selectedFamilySymbol.Family); double numberOfSpaces = numberOfPoints - 1; //create family var familyInstance = AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance(doc, selectedFamilySymbol); //adjust placment point locations var placementPoints = AdaptiveComponentInstanceUtils.GetInstancePlacementPointElementRefIds(familyInstance); for (int i = 0; i < placementPoints.Count; i++) { double interval = i / numberOfSpaces; var location = new PointLocationOnCurve(PointOnCurveMeasurementType.NormalizedCurveParameter, interval, PointOnCurveMeasureFrom.Beginning); var pointOnEdge = doc.Application.Create.NewPointOnEdge(hostEdge, location); var p = doc.GetElement(placementPoints[i]) as ReferencePoint; p.SetPointElementReference(pointOnEdge); } transaction.Commit(); } transGroup.Assimilate(); } return(Result.Succeeded); }
/// <summary> /// Internal constructor for ReferencePoint Elements that a persistent relationship to a Curve /// </summary> /// <param name="curveReference"></param> /// <param name="parameter"></param> /// <param name="measurementType"></param> /// <param name="measureFrom"></param> private ReferencePoint(Reference curveReference, double parameter, PointOnCurveMeasurementType measurementType, PointOnCurveMeasureFrom measureFrom) { //Phase 1 - Check to see if the object exists and should be rebound var oldRefPt = ElementBinder.GetElementFromTrace<Autodesk.Revit.DB.ReferencePoint>(Document); //There was a point, rebind to that, and adjust its position if (oldRefPt != null) { InternalSetReferencePoint(oldRefPt); InternalSetPointOnCurve(curveReference, parameter, measurementType, measureFrom); return; } //Phase 2- There was no existing point, create one TransactionManager.Instance.EnsureInTransaction(Document); var plc = new PointLocationOnCurve(measurementType, parameter, measureFrom); var edgePoint = Document.Application.Create.NewPointOnEdge(curveReference, plc); InternalSetReferencePoint(Document.FamilyCreate.NewReferencePoint(edgePoint)); TransactionManager.Instance.TransactionTaskDone(); ElementBinder.SetElementForTrace(this.InternalElement); }
public override Value Evaluate(FSharpList<Value> args) { if (!args[0].IsList) throw new Exception("A list of UVs is required to place the Adaptive Component."); FSharpList<Value> parameters = ((Value.List)args[0]).Item; var curveRef = ((Value.Container)args[1]).Item as Reference; var c = curveRef == null ? (Curve)((Value.Container)args[1]).Item : (Curve)dynRevitSettings.Doc.Document.GetElement(curveRef.ElementId).GetGeometryObjectFromReference(curveRef); var fs = (FamilySymbol)((Value.Container)args[2]).Item; FamilyInstance ac = null; //if the adapative component already exists, then move the points if (Elements.Any()) { //...we attempt to fetch it from the document... if (dynUtils.TryGetElement(this.Elements[0], out ac)) { ac.Symbol = fs; } else { //create ac = AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance(dynRevitSettings.Doc.Document, fs); Elements[0] = ac.Id; } } else { //create ac = AdaptiveComponentInstanceUtils.CreateAdaptiveComponentInstance(dynRevitSettings.Doc.Document, fs); Elements.Add(ac.Id); } if (ac == null) throw new Exception("An adaptive component could not be found or created."); IList<ElementId> placePointIds = new List<ElementId>(); placePointIds = AdaptiveComponentInstanceUtils.GetInstancePlacementPointElementRefIds(ac); if (placePointIds.Count() != parameters.Count()) throw new Exception("The input list of UVs does not have the same number of values required by the adaptive component."); // Set the position of each placement point int i = 0; foreach (ElementId id in placePointIds) { var t = ((Value.Number)parameters.ElementAt(i)).Item; var point = dynRevitSettings.Doc.Document.GetElement(id) as ReferencePoint; var ploc = new PointLocationOnCurve(PointOnCurveMeasurementType.NonNormalizedCurveParameter, t, PointOnCurveMeasureFrom.Beginning); var peref = dynRevitSettings.Revit.Application.Create.NewPointOnEdge(c.Reference, ploc); point.SetPointElementReference(peref); i++; } return Value.NewContainer(ac); }
public override Value Evaluate(FSharpList<Value> args) { Reference r = ((CurveElement)((Value.Container)args[0]).Item).GeometryCurve.Reference; double t = ((Value.Number)args[1]).Item; //Autodesk.Revit.DB..::.PointElementReference //Autodesk.Revit.DB..::.PointOnEdge //Autodesk.Revit.DB..::.PointOnEdgeEdgeIntersection //Autodesk.Revit.DB..::.PointOnEdgeFaceIntersection //Autodesk.Revit.DB..::.PointOnFace //Autodesk.Revit.DB..::.PointOnPlane PointLocationOnCurve plc = new PointLocationOnCurve(PointOnCurveMeasurementType.NormalizedCurveParameter, t, PointOnCurveMeasureFrom.Beginning); PointElementReference edgePoint = this.UIDocument.Application.Application.Create.NewPointOnEdge(r, plc); ReferencePoint p; if (this.Elements.Any()) { if (dynUtils.TryGetElement(Elements[0], out p)) { p.SetPointElementReference(edgePoint); } else { p = this.UIDocument.Document.FamilyCreate.NewReferencePoint(edgePoint); this.Elements[0] = p.Id; } } else { p = this.UIDocument.Document.FamilyCreate.NewReferencePoint(edgePoint); this.Elements.Add(p.Id); } return Value.NewContainer(p); }
public override Value Evaluate(FSharpList<Value> args) { var inputItem = ((Value.Container)args[0]).Item; Reference r = (inputItem is Reference) ? (Reference)inputItem : ((CurveElement)inputItem).GeometryCurve.Reference; double len = ((Value.Number)args[1]).Item; bool isNormalized = ((Value.Number)args[2]).Item == 1; bool isBeginning = ((Value.Number)args[3]).Item == 1; PointLocationOnCurve plc = new PointLocationOnCurve(isNormalized ? PointOnCurveMeasurementType.NormalizedSegmentLength : PointOnCurveMeasurementType.SegmentLength, len, isBeginning ? PointOnCurveMeasureFrom.Beginning : PointOnCurveMeasureFrom.End); PointElementReference edgePoint = this.UIDocument.Application.Application.Create.NewPointOnEdge(r, plc); ReferencePoint p; if (this.Elements.Any()) { if (dynUtils.TryGetElement(this.Elements[0], out p)) { p.SetPointElementReference(edgePoint); } else { p = this.UIDocument.Document.FamilyCreate.NewReferencePoint(edgePoint); this.Elements[0] = p.Id; } } else { p = this.UIDocument.Document.FamilyCreate.NewReferencePoint(edgePoint); this.Elements.Add(p.Id); } return Value.NewContainer(p); }