/// <summary> /// Calculates the start hook angle for a rebar. /// </summary> /// <param name="exporterIFC">The ExporterIFC object.</param> /// <param name="extrusionCreationData">The IFCExtrusionCreationData.</param> /// <param name="element">The element to calculate the value.</param> /// <param name="elementType">The element type.</param> /// <returns> /// True if the operation succeed, false otherwise. /// </returns> public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType) { RebarBendData bendData = null; if (element is Rebar) { bendData = (element as Rebar).GetBendData(); } else if (element is RebarInSystem) { bendData = (element as RebarInSystem).GetBendData(); } if (bendData != null) { if (bendData.HookLength0 > MathUtil.Eps()) { ElementId hookAtStartTypeId; if (ParameterUtil.GetElementIdValueFromElement(element, BuiltInParameter.REBAR_ELEM_HOOK_START_TYPE, out hookAtStartTypeId) != null) { RebarHookType rebarHookType = element.Document.GetElement(hookAtStartTypeId) as RebarHookType; if (rebarHookType != null) { //HookAngle is measured in radians, so scale directly. m_Angle = rebarHookType.HookAngle * 180 / Math.PI; return(true); } } } } return(false); }
/// <summary> /// Calculates the start hook angle for a rebar. /// </summary> /// <param name="exporterIFC">The ExporterIFC object.</param> /// <param name="extrusionCreationData">The IFCExtrusionCreationData.</param> /// <param name="element">The element to calculate the value.</param> /// <param name="elementType">The element type.</param> /// <returns> /// True if the operation succeed, false otherwise. /// </returns> public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType) { RebarBendData bendData = null; if (element is Rebar) { bendData = (element as Rebar).GetBendData(); } else if (element is RebarInSystem) { bendData = (element as RebarInSystem).GetBendData(); } if (bendData != null) { if (bendData.HookLength0 > MathUtil.Eps()) { // HookAngle0 is already in degress, so convert to radians and then scale. double hookAngleInRadians = bendData.HookAngle0 * (Math.PI / 180.0); m_Angle = UnitUtil.ScaleAngle(hookAngleInRadians); return(true); } } return(false); }
/// <summary> /// Get the bar diameter from the rebar object. /// </summary> /// <param name="element">The rebar object.</param> /// <returns>The returned bar diameter from the rebar, or a default value.</returns> static double GetBarDiameter(object element) { double bendDiameter = 0.0; if (element is RebarContainerItem) { RebarBendData bendData = (element as RebarContainerItem).GetBendData(); if (bendData != null) { bendDiameter = UnitUtil.ScaleLength(bendData.BarDiameter); } } else if (element is Element) { Element rebarElement = element as Element; Document doc = rebarElement.Document; ElementId typeId = rebarElement.GetTypeId(); RebarBarType elementType = doc.GetElement(rebarElement.GetTypeId()) as RebarBarType; if (elementType != null) { bendDiameter = UnitUtil.ScaleLength(elementType.BarDiameter); } } if (bendDiameter < MathUtil.Eps()) { return(UnitUtil.ScaleLength(1.0 / 12.0)); } return(bendDiameter); }
/// <summary> /// Calculates the start hook angle for a rebar. /// </summary> /// <param name="exporterIFC">The ExporterIFC object.</param> /// <param name="extrusionCreationData">The IFCExtrusionCreationData.</param> /// <param name="element">The element to calculate the value.</param> /// <param name="elementType">The element type.</param> /// <returns> /// True if the operation succeed, false otherwise. /// </returns> public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType) { if (element is Rebar) { Rebar rebar = element as Rebar; if (rebar.CanBeMatchedWithMultipleShapes()) { return(false); // In case of the Bent free form the hook angle should be obtain from subelement } } RebarBendData bendData = null; if (element is Rebar) { bendData = (element as Rebar).GetBendData(); } else if (element is RebarInSystem) { bendData = (element as RebarInSystem).GetBendData(); } if (bendData != null) { if (bendData.HookLength0 > MathUtil.Eps()) { // HookAngle0 is already in degress, so convert to radians and then scale. double hookAngleInRadians = bendData.HookAngle0 * (Math.PI / 180.0); m_Angle = UnitUtil.ScaleAngle(hookAngleInRadians); return(true); } } return(false); }
//TFEND private void Stream(ArrayList data, RebarBendData rbcm) { data.Add(new Snoop.Data.ClassSeparator(typeof(RebarBendData))); data.Add(new Snoop.Data.Double("BarDiameter", rbcm.BarDiameter)); data.Add(new Snoop.Data.Double("BendRadius", rbcm.BendRadius)); data.Add(new Snoop.Data.Int("HookAngle0", rbcm.HookAngle0)); data.Add(new Snoop.Data.Int("HookAngle1", rbcm.HookAngle1)); data.Add(new Snoop.Data.Double("HookBendRadius", rbcm.HookBendRadius)); data.Add(new Snoop.Data.Double("HookLength0", rbcm.HookLength0)); data.Add(new Snoop.Data.Double("HookLength1", rbcm.HookLength1)); data.Add(new Snoop.Data.String("HookOrient0", rbcm.HookOrient0.ToString())); data.Add(new Snoop.Data.String("HookOrient1", rbcm.HookOrient1.ToString())); }
/// <summary> /// Calculates the bending radius for a rebar. /// </summary> /// <param name="exporterIFC">The ExporterIFC object.</param> /// <param name="extrusionCreationData">The IFCExtrusionCreationData.</param> /// <param name="element">The element to calculate the value.</param> /// <param name="elementType">The element type.</param> /// <returns> /// True if the operation succeed, false otherwise. /// </returns> public override bool Calculate(ExporterIFC exporterIFC, IFCExtrusionCreationData extrusionCreationData, Element element, ElementType elementType) { RebarBendData bendData = null; if (element is Rebar) { bendData = (element as Rebar).GetBendData(); } else if (element is RebarInSystem) { bendData = (element as RebarInSystem).GetBendData(); } if (bendData != null) { m_Radius = UnitUtil.ScaleLength(bendData.BendRadius); if (m_Radius > MathUtil.Eps()) { return(true); } } return(false); }
/// <summary> /// Get the bar diameters (model and nominal) from the rebar object. /// </summary> /// <param name="element">The rebar object.</param> /// <out param name="nominalDiameter">The nominal diameter.</param> /// <out param name="modelDiameter">The model diameter</param> static void GetBarDiameters(object element, out double nominalDiameter, out double modelDiameter) { nominalDiameter = 0.0; modelDiameter = 0.0; if (element is RebarContainerItem) { RebarBendData bendData = (element as RebarContainerItem).GetBendData(); if (bendData != null) { nominalDiameter = UnitUtil.ScaleLength(bendData.BarNominalDiameter); modelDiameter = UnitUtil.ScaleLength(bendData.BarModelDiameter); } } else if (element is Element) { Element rebarElement = element as Element; Document doc = rebarElement.Document; ElementId typeId = rebarElement.GetTypeId(); RebarBarType elementType = doc.GetElement(rebarElement.GetTypeId()) as RebarBarType; if (elementType != null) { nominalDiameter = UnitUtil.ScaleLength(elementType.BarNominalDiameter); modelDiameter = UnitUtil.ScaleLength(elementType.BarModelDiameter); } } if (nominalDiameter < MathUtil.Eps()) { nominalDiameter = UnitUtil.ScaleLength(1.0 / 12.0); } if (modelDiameter < MathUtil.Eps()) { modelDiameter = UnitUtil.ScaleLength(1.0 / 12.0); } }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { Document doc = commandData.Application.ActiveUIDocument.Document; Selection sel = commandData.Application.ActiveUIDocument.Selection; if (sel.GetElementIds().Count == 0) { message = "Выберите арматурные стержни"; return(Result.Failed); } Rebar bar = doc.GetElement(sel.GetElementIds().First()) as Rebar; if (bar == null) { message = "Выберите арматурные стержни"; return(Result.Failed); } #if R2017 XYZ normal = bar.Normal; #else RebarShapeDrivenAccessor acc = bar.GetShapeDrivenAccessor(); XYZ normal = acc.Normal; #endif RebarBarType barType = doc.GetElement(bar.GetTypeId()) as RebarBarType; int rebarStyleNumber = bar.get_Parameter(BuiltInParameter.REBAR_ELEM_HOOK_STYLE).AsInteger(); RebarStyle rebarStyle = (RebarStyle)rebarStyleNumber; RebarHookType hookTypeStart = null; ElementId hookStartTypeId = bar.get_Parameter(BuiltInParameter.REBAR_ELEM_HOOK_START_TYPE).AsElementId(); if (hookStartTypeId != null) { hookTypeStart = doc.GetElement(hookStartTypeId) as RebarHookType; } RebarHookType hookTypeEnd = null; ElementId hookEndTypeId = bar.get_Parameter(BuiltInParameter.REBAR_ELEM_HOOK_END_TYPE).AsElementId(); if (hookEndTypeId != null) { hookTypeEnd = doc.GetElement(hookEndTypeId) as RebarHookType; } RebarBendData rbd = bar.GetBendData(); RebarHookOrientation hookOrient0 = rbd.HookOrient0; RebarHookOrientation hookOrient1 = rbd.HookOrient1; Element host = doc.GetElement(bar.GetHostId()); List <Curve> curves = bar.GetCenterlineCurves(false, true, true, MultiplanarOption.IncludeOnlyPlanarCurves, 0).ToList(); int barsCount = bar.NumberOfBarPositions; List <ElementId> newRebarIds = new List <ElementId>(); using (Transaction tr = new Transaction(doc)) { tr.Start("Explode rebar set"); for (int i = 0; i < barsCount; i++) { #if R2017 Transform barOffset = bar.GetBarPositionTransform(i); #else Transform barOffset = acc.GetBarPositionTransform(i); #endif XYZ offset = barOffset.Origin; Rebar newRebar = Rebar.CreateFromCurves(doc, rebarStyle, barType, hookTypeStart, hookTypeEnd, host, normal, curves, hookOrient0, hookOrient1, true, false); doc.Regenerate(); ElementTransformUtils.MoveElement(doc, newRebar.Id, offset); newRebarIds.Add(newRebar.Id); } doc.Delete(bar.Id); tr.Commit(); } sel.SetElementIds(newRebarIds); 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.BoundarySegment boundSeg = e.ObjToSnoop as Autodesk.Revit.DB.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; } RebarContainerItem rbcontItem = e.ObjToSnoop as RebarContainerItem; if (rbcontItem != null) { Stream(snoopCollector.Data(), rbcontItem); return; } //TFEND RebarBendData bendData = e.ObjToSnoop as RebarBendData; if (bendData != null) { Stream(snoopCollector.Data(), bendData); return; } if (Utils.IsSupportedType(e.ObjToSnoop) && e.ObjToSnoop != null) { Utils.StreamWithReflection(snoopCollector.Data(), e.ObjToSnoop.GetType(), e.ObjToSnoop); } }