internal BeamPlaneCut(AdvanceSteel.Nodes.SteelDbObject element, Point3d cutPoint, Vector3d normal, List <Property> beamFeatureProperties) { lock (access_obj) { using (var ctx = new SteelServices.DocContext()) { List <Property> defaultData = beamFeatureProperties.Where(x => x.Level == ".").ToList <Property>(); List <Property> postWriteDBData = beamFeatureProperties.Where(x => x.Level == "Z_PostWriteDB").ToList <Property>(); string existingFeatureHandle = SteelServices.ElementBinder.GetHandleFromTrace(); string elementHandle = element.Handle; FilerObject obj = Utils.GetObject(elementHandle); BeamShortening beamFeat = null; if (obj != null && (obj.IsKindOf(FilerObject.eObjectType.kBeam))) { if (string.IsNullOrEmpty(existingFeatureHandle) || Utils.GetObject(existingFeatureHandle) == null) { AtomicElement atomic = obj as AtomicElement; beamFeat = new BeamShortening(); atomic.AddFeature(beamFeat); beamFeat.Set(cutPoint, normal); if (defaultData != null) { Utils.SetParameters(beamFeat, defaultData); } atomic.AddFeature(beamFeat); if (postWriteDBData != null) { Utils.SetParameters(beamFeat, postWriteDBData); } } else { beamFeat = Utils.GetObject(existingFeatureHandle) as BeamShortening; if (beamFeat != null && beamFeat.IsKindOf(FilerObject.eObjectType.kBeamShortening)) { beamFeat.Set(cutPoint, normal); if (defaultData != null) { Utils.SetParameters(beamFeat, defaultData); } if (postWriteDBData != null) { Utils.SetParameters(beamFeat, postWriteDBData); } } else { throw new System.Exception("Not a Beam Shorting Feature"); } } } else { throw new System.Exception("No Input Element found"); } Handle = beamFeat.Handle; SteelServices.ElementBinder.CleanupAndSetElementForTrace(beamFeat); } } }
internal BeamPlaneCut(AdvanceSteel.Nodes.SteelDbObject element, int end, double shorteningLength, List <Property> beamFeatureProperties) { lock (access_obj) { using (var ctx = new SteelServices.DocContext()) { List <Property> defaultData = beamFeatureProperties.Where(x => x.Level == ".").ToList <Property>(); List <Property> postWriteDBData = beamFeatureProperties.Where(x => x.Level == "Z_PostWriteDB").ToList <Property>(); string existingFeatureHandle = SteelServices.ElementBinder.GetHandleFromTrace(); string elementHandle = element.Handle; FilerObject obj = Utils.GetObject(elementHandle); BeamShortening beamFeat = null; if (obj != null && (obj.IsKindOf(FilerObject.eObjectType.kBeam))) { Matrix3d matrixAtPointOnBeam = null; Point3d shortPt = null; Point3d cutPoint = null; Vector3d normal = null; if (obj.IsKindOf(FilerObject.eObjectType.kBentBeam)) { BentBeam actObj = obj as BentBeam; switch (end) { case 0: //Start shortPt = actObj.GetPointAtStart(shorteningLength); break; case 1: //End shortPt = actObj.GetPointAtEnd(shorteningLength); break; } matrixAtPointOnBeam = actObj.GetCSAtPoint(shortPt); } else { Beam actObj = obj as Beam; switch (end) { case 0: //Start shortPt = actObj.GetPointAtStart(shorteningLength); break; case 1: //End shortPt = actObj.GetPointAtEnd(shorteningLength); break; } matrixAtPointOnBeam = actObj.GetCSAtPoint(shortPt); } Point3d orgin = null; Vector3d xV = null; Vector3d xY = null; Vector3d xZ = null; matrixAtPointOnBeam.GetCoordSystem(out orgin, out xV, out xY, out xZ); cutPoint = orgin; normal = (end == 0 ? xV : xV.Negate()); if (string.IsNullOrEmpty(existingFeatureHandle) || Utils.GetObject(existingFeatureHandle) == null) { AtomicElement atomic = obj as AtomicElement; beamFeat = new BeamShortening(); atomic.AddFeature(beamFeat); beamFeat.Set(cutPoint, normal); if (defaultData != null) { Utils.SetParameters(beamFeat, defaultData); } atomic.AddFeature(beamFeat); if (postWriteDBData != null) { Utils.SetParameters(beamFeat, postWriteDBData); } } else { beamFeat = Utils.GetObject(existingFeatureHandle) as BeamShortening; if (beamFeat != null && beamFeat.IsKindOf(FilerObject.eObjectType.kBeamShortening)) { beamFeat.Set(cutPoint, normal); if (defaultData != null) { Utils.SetParameters(beamFeat, defaultData); } if (postWriteDBData != null) { Utils.SetParameters(beamFeat, postWriteDBData); } } else { throw new System.Exception("Not a Beam Shorting Feature"); } } } else { throw new System.Exception("No Input Element found"); } Handle = beamFeat.Handle; SteelServices.ElementBinder.CleanupAndSetElementForTrace(beamFeat); } } }
/// <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 virtual Result Execute(ExternalCommandData commandData , ref string message, ElementSet elements) { // Get the document from external command data. UIDocument activeDoc = commandData.Application.ActiveUIDocument; Autodesk.Revit.DB.Document doc = activeDoc.Document; if (null == doc) { return(Result.Failed); } try { // Start detailed steel modeling transaction using (FabricationTransaction trans = new FabricationTransaction(doc, false, "Create shortening")) { Reference eRef = activeDoc.Selection.PickObject(ObjectType.Element, "Pick a beam to add shortening on it"); Element elem = null; if (eRef != null && eRef.ElementId != ElementId.InvalidElementId) { elem = (doc.GetElement(eRef.ElementId)); } if (null == elem) { return(Result.Failed); } // adding fabrication information, if the element doesn't already have it. SteelElementProperties cell = SteelElementProperties.GetSteelElementProperties(elem); if (null == cell) { List <ElementId> elemsIds = new List <ElementId>(); elemsIds.Add(elem.Id); SteelElementProperties.AddFabricationInformationForRevitElements(doc, elemsIds); } // Create the modifier using AdvanceSteel API. // For more details, please consult http://www.autodesk.com/adv-steel-api-walkthroughs-2019-enu FilerObject filerObj = Utilities.Functions.GetFilerObject(doc, eRef); if (null != filerObj) { if (!(filerObj is Beam)) { return(Result.Failed); } Beam beam = filerObj as Beam; Beam.eEnd end = Utilities.Functions.CalculateBeamEnd(beam, new XYZ(10, 20, 20)); BeamShortening beamShort = new BeamShortening(end, 150.0); beam.AddFeature(beamShort); } trans.Commit(); } } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return(Result.Cancelled); } return(Result.Succeeded); }