/// <summary> /// Create a Rebar from an existing reference /// </summary> /// <param name="rebar"></param> /// <param name="isRevitOwned"></param> /// <returns></returns> internal static RebarContainer FromExisting(Autodesk.Revit.DB.Structure.RebarContainer rebar, bool isRevitOwned) { return(new RebarContainer(rebar) { // Cannot access base classes internal bool IsRevitOwned //IsRevitOwned = isRevitOwned }); }
/// <summary> /// Set Solid In View /// </summary> /// <param name="rebarContainer">Rebar Container</param> /// <param name="view">3D View</param> /// <param name="solid">Solid</param> public static void SetSolidInView(RebarContainer rebarContainer, Revit.Elements.Views.View3D view, bool solid) { Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(document); Autodesk.Revit.DB.Structure.RebarContainer rebarElement = (Autodesk.Revit.DB.Structure.RebarContainer)rebarContainer.InternalElement; Autodesk.Revit.DB.View3D viewElement = (Autodesk.Revit.DB.View3D)view.InternalElement; rebarElement.SetSolidInView(viewElement, solid); TransactionManager.Instance.TransactionTaskDone(); }
/// <summary> /// Hide a specific item in a rebar container /// </summary> /// <param name="rebarContainer">Rebar Container</param> /// <param name="view">Revit View</param> /// <param name="itemIndex">Item Index</param> /// <param name="hide">Hide setting</param> public static void SetItemHiddenStatus(Element rebarContainer, Revit.Elements.Views.View3D view, int itemIndex, bool hide) { Autodesk.Revit.DB.Structure.RebarContainer bar = rebarContainer.InternalElement as Autodesk.Revit.DB.Structure.RebarContainer; if (bar != null) { Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(document); Autodesk.Revit.DB.View3D viewElement = (Autodesk.Revit.DB.View3D)view.InternalElement; bar.SetItemHiddenStatus(viewElement, itemIndex, hide); TransactionManager.Instance.TransactionTaskDone(); } }
/// <summary> /// Set unobscured in specified View /// </summary> /// <param name="rebarContainer">Rebar Container</param> /// <param name="view">View</param> /// <param name="unobscured">Unobscured</param> public static void SetUnobscuredInView(Element rebarContainer, Revit.Elements.Views.View view, bool unobscured) { Autodesk.Revit.DB.Structure.RebarContainer bar = rebarContainer.InternalElement as Autodesk.Revit.DB.Structure.RebarContainer; if (bar != null) { Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument; TransactionManager.Instance.EnsureInTransaction(document); Autodesk.Revit.DB.View viewElement = (Autodesk.Revit.DB.View)view.InternalElement; bar.SetUnobscuredInView(viewElement, unobscured); TransactionManager.Instance.TransactionTaskDone(); } }
/// <summary> /// Cuts a set of Rebars by Plane /// </summary> /// <param name="plane">Plane to cut by</param> /// <param name="rebarContainerElement">Rebar Container</param> /// <param name="firstPart">Return the first or the last part of the splitted elements</param> public static void Cut(Surface plane, Revit.Elements.Element rebarContainerElement, bool firstPart) { // Get Rebar Container Element Autodesk.Revit.DB.Structure.RebarContainer rebarContainer = (Autodesk.Revit.DB.Structure.RebarContainer)rebarContainerElement.InternalElement; // Get the active Document Autodesk.Revit.DB.Document document = DocumentManager.Instance.CurrentDBDocument; // Open a new Transaction TransactionManager.Instance.EnsureInTransaction(document); // Get all single Rebar elements from the container List <Autodesk.Revit.DB.Structure.RebarContainerItem> rebars = rebarContainer.ToList(); // Walk through all rebar elements foreach (Autodesk.Revit.DB.Structure.RebarContainerItem rebar in rebars) { // Buffer Rebar properties for recreation RVT.Structure.RebarBarType barType = (RVT.Structure.RebarBarType)document.GetElement(rebar.BarTypeId); RVT.Structure.RebarHookType hookTypeStart = (RVT.Structure.RebarHookType)document.GetElement(rebar.GetHookTypeId(0)); RVT.Structure.RebarHookType hookTypeEnd = (RVT.Structure.RebarHookType)document.GetElement(rebar.GetHookTypeId(1)); RVT.Structure.RebarHookOrientation hookOrientationStart = rebar.GetHookOrientation(0); RVT.Structure.RebarHookOrientation hookOrientationEnd = rebar.GetHookOrientation(1); // create a list to store the remaining part of the curve after cutting it List <RVT.Curve> result = new List <RVT.Curve>(); // get the center line curves of the rebar elements foreach (RVT.Curve curve in rebar.GetCenterlineCurves(false, true, true)) { // if the curve is a line or an arc consider it being valid if (curve.GetType() == typeof(RVT.Line) || curve.GetType() == typeof(RVT.Arc)) { // Get a DesignScript Curve from the Revit curve Curve geocurve = curve.ToProtoType(); // Intersect the selected plane with the curve foreach (Geometry geometry in plane.Intersect(geocurve)) { // if the intersection is a point if (geometry.GetType() == typeof(Point)) { // Get the closest point to the intersection on the curve Point p = geocurve.ClosestPointTo((Point)geometry); // Split the curve at this point Curve[] curves = geocurve.ParameterSplit(geocurve.ParameterAtPoint(p)); // If the curve has been split into two parts if (curves.Length == 2) { // return the first or the second part of the splitted curve if (firstPart) { result.Add(curves[0].ToRevitType()); } else { result.Add(curves[1].ToRevitType()); } } } } } } // If the result has some elements, create a new rebar container from those curves // using the same properties as the initial one. if (result.Count > 0) { rebar.SetFromCurves(RVT.Structure.RebarStyle.Standard, barType, hookTypeStart, hookTypeEnd, rebar.Normal, result, hookOrientationStart, hookOrientationEnd, true, false); } } // Commit and Dispose the transaction TransactionManager.Instance.TransactionTaskDone(); }
/// <summary> /// Create from an existing Revit Element /// </summary> /// <param name="rebar"></param> private RebarContainer(Autodesk.Revit.DB.Structure.RebarContainer rebar) { SafeInit(() => InitRebarContainer(rebar)); }
/// <summary> /// Set the internal Element, ElementId, and UniqueId /// </summary> /// <param name="rebar"></param> private void InternalSetRebarContainer(Autodesk.Revit.DB.Structure.RebarContainer rebar) { InternalRebarContainer = rebar; InternalElementId = rebar.Id; InternalUniqueId = rebar.UniqueId; }
/// <summary> /// Initialize a Rebar element /// </summary> /// <param name="rebar"></param> private void InitRebarContainer(Autodesk.Revit.DB.Structure.RebarContainer rebar) { InternalSetRebarContainer(rebar); }
/// <summary> /// Set the internal Element, ElementId, and UniqueId /// </summary> /// <param name="rebar"></param> private void InternalSetRebarContainer(Autodesk.Revit.DB.Structure.RebarContainer rebar) { InternalRebarContainer = rebar; InternalElementId = rebar.Id; InternalUniqueId = rebar.UniqueId; }