I’m currently using the BIM4Struc package to model few rebars in the walls. Find the snip below:
The issue is that, i cannot seem to modify the rebar which has already been modelled using this script. When i set the boolean value to False and run it, there are new set of rebars which are modelled which results in duplication of rebars in the element.
I tried to snoop in a bit into the custom node and this was the Python code used for creating/modifying the rebars.
import clr clr.AddReference('RevitAPI') from Autodesk.Revit.DB import * from Autodesk.Revit.DB.Structure import * clr.AddReference("System") from System.Collections.Generic import List clr.AddReference('RevitNodes') import Revit clr.ImportExtensions(Revit.GeometryConversion) clr.ImportExtensions(Revit.Elements) clr.AddReference('RevitServices') import RevitServices from RevitServices.Persistence import DocumentManager from RevitServices.Transactions import TransactionManager doc = DocumentManager.Instance.CurrentDBDocument #Preparing input from dynamo to revit host = UnwrapElement(IN) bartype = UnwrapElement(IN) vector=IN #Toggle that indicates if a new element has to be created new=IN TransactionManager.Instance.EnsureInTransaction(doc) # Get the host analytical profile whose curves will define the boundary of the the area reinforcement analytical = host.GetAnalyticalModel() if not analytical: rebar= "The selected element can't \nhost Area Reinforcement" else: #define the Major Direction of AreaReinforcement, #if there is no Major Direction given in the inputs, then take the direction of the first curve of the floor/wall sketch. if vector is None: curves = analytical.GetCurves(AnalyticalCurveType.ActiveCurves) firstLine = curves majorDirection = XYZ( firstLine.GetEndPoint(1).X - firstLine.GetEndPoint(0).X, firstLine.GetEndPoint(1).Y - firstLine.GetEndPoint(0).Y, firstLine.GetEndPoint(1).Z - firstLine.GetEndPoint(0).Z) #else use the given vector else: majorDirection=vector.ToXyz() #Obtain the default Area Reinforcement Type defaultAreaReinforcementTypeId = doc.GetDefaultElementTypeId(ElementTypeGroup.AreaReinforcementType) if str(defaultAreaReinforcementTypeId) == "-1": rebar= "There is no Area Reinforcement Family Type \ndefined in the Revit project" else: #Set the default Hook Type to none HookTypeId = ElementId.InvalidElementId try: rebar = AreaReinforcement.Create(doc, host, majorDirection, defaultAreaReinforcementTypeId, bartype.Id, HookTypeId).ToDSType(new); except: rebar= "The Area Reinforcement could \nnot be created" #Assign your output to the OUT variable TransactionManager.Instance.TransactionTaskDone() OUT=rebar
I am very new to Python and to me, It seems as though the modify condition has not been well defined in the python script?