I’m working in Revit 2024 with Dynamo, and I’m trying to create a single 3D rebar like the one shown below (square zig-zag / inclined reinforcement).
I have already generated the complete 3D PolyCurve successfully in Dynamo. The geometry is correct, and the PolyCurve is continuous.
The problem is that I cannot create a native Revit rebar from it.
Is there any way to create one native Revit rebar from a non-planar 3D PolyCurve?
Hi , here’s an example with Rebar.CreateFreeForm
code Python (PythonNet3)
import sys
import clr
import System
clr.AddReference('RevitAPI')
import Autodesk
import Autodesk.Revit.DB as DB
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import*
from System.Collections.Generic import IList, List
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference("System.Core")
clr.ImportExtensions(System.Linq)
# dynamo curves as input
ds_curve = IN[0]
host = UnwrapElement(IN[1])
bar_type_name = IN[2]
bar_type = (
FilteredElementCollector(doc).OfClass(RebarBarType)
.WhereElementIsElementType()
.FirstOrDefault(System.Func[DB.Element, System.Boolean](lambda e_type : bar_type_name == e_type.Name))
)
if bar_type is not None:
TransactionManager.Instance.EnsureInTransaction(doc)
lstCLoop = List[CurveLoop]()
curve_loop = CurveLoop.Create(
List[Curve](
[c.ToRevitType() for c in ds_curve.Curves()]
)
)
lstCLoop.Add(curve_loop)
bar = Rebar.CreateFreeForm(doc, bar_type, host, lstCLoop, RebarStyle.Standard)
TransactionManager.Instance.TransactionTaskDone()
OUT = bar