Hi everyone,
I’m once again getting the same error linked here for rebar hook direction only when angle 90° is choosen (this issue has upset me and I don’t know it is due to what and how to find a solution!!??)
for more details, check my references below:
1st script: rebars curves
import sys
import clr
import math
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitNodes')
import Revit
from Revit.Elements import Element
element = IN[0]
cover = IN[1]
rebar_type = IN[2]
spacing = IN[3]
geo = element.Geometry()
surfaces = geo[0].Explode()
s_area = []
for i in surfaces:
s_area.append(i.Area)
S_area = ["%0.2f"%(round(i,2)) for i in s_area]
surf = []
surf_area = set()
for s, a in zip(surfaces, S_area):
if a not in surf_area and S_area.count(a) == 2:
surf.append(s)
surf_area.add(a)
out_V_crv = surf[1].GetIsoline(0, 1).Explode()[0]
out_direct = out_V_crv.Direction
iner_V_crv = surf[0].GetIsoline(0, 1).Explode()[0]
iner_direct = iner_V_crv.Direction
if out_direct.Z > 0 :
out_V_crv = out_V_crv
else:
out_V_crv = out_V_crv.reverse()
if iner_direct.Z > 0 :
iner_V_crv = iner_V_crv
else:
iner_V_crv = iner_V_crv.reverse()
vect = out_direct.Cross(Vector.ByCoordinates(0,1,0))
out_V_rebar = out_V_crv.Translate(vect, cover)
iner_V_rebar = iner_V_crv.Translate(vect.Reverse(), cover)
overlap_length = rebar_type.GetParameterValueByName("Diamètre de barre")*50/1000
out_path = surf[1].GetIsoline(1, 0).Explode()[0]
out_path = out_path.Offset(-cover)
rebar_count = math.ceil(out_path.Length/spacing)
out_V_rebar = out_V_rebar.ExtendEnd(overlap_length)
def rebar_rotation(circle, space):
sweepAngle = (space * 360) / (circle.Radius * 2 * math.pi)
return sweepAngle
angle = rebar_rotation(out_path, spacing)
count = int(math.ceil(360/angle))
out_rebar = []
out_vect = []
for i in range(0, count):
a= i*angle
rebar = out_V_rebar.Rotate(out_path.CenterPoint, Vector.ByCoordinates(0,0,1), a)
vect = rebar.Normal
vect = vect.Rotate(Vector.ByCoordinates(0,0,1), a)
out_rebar.append(rebar)
out_vect.append(vect)
iner_V_rebar = iner_V_rebar.ExtendEnd(overlap_length)
OUT = out_rebar, out_vect
2nd script: rebars
import sys
import clr
import math
import System
from System.Collections.Generic import IList, List
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
out_V_rebar = IN[0][0]
out_vect = IN[0][1]
cover = IN[1]/0.3048
rebar_type = UnwrapElement(IN[2])
Hook_type = UnwrapElement(IN[3])
host= UnwrapElement(IN[4])
spacing = IN[5]/0.3048
rebars = []
TransactionManager.Instance.EnsureInTransaction(doc)
for c, v in zip(out_V_rebar, out_vect):
crvs = List[Curve]()
crvs.Add(c.ToRevitType())
out_V_rebar = Rebar.CreateFromCurves(doc, RebarStyle.Standard, rebar_type, Hook_type, Hook_type, host, v.ToRevitType(), crvs, RebarHookOrientation.Left, RebarHookOrientation.Right, True, True)
rebars.append(out_V_rebar)
TransactionManager.Instance.TransactionTaskDone()
OUT = out_V_rebar
Shaft_rebar.dyn (15.8 KB)
Shaft_rebar.rvt (3.4 MB)
Thanks in advance for your help.