import rhinoscriptsyntax as rs
def FilletCurve(crv01, crv02, radius=100):
if rs.IsCurve(crv01) and rs.IsCurve(crv02):
crv_fillet = rs.AddFilletCurve( crv01, crv02, radius )
pts_fillet = rs.CurveFilletPoints( crv01, crv02, radius )
if pts_fillet:
return pts_fillet
def FilletPolyLine(p_crv, radius):
if rs.IsPolyline(p_crv):
#check for layer and/or create new one
if rs.IsLayer("Fillet_Curves")is False:
rs.AddLayer ("Fillet_Curves", (0, 255, 255))
layer = rs.CurrentLayer ("Fillet_Curves")
pts = []
pts.append(rs.CurveStartPoint(p_crv))
crvs = rs.ExplodeCurves(p_crv)
if crvs:
for i in range(len(crvs) - 1):
pts_fillet = FilletCurve( crvs[i], crvs[i+1], radius )
pts.append(pts_fillet[0])
pts.append(pts_fillet[1])
pts.append(rs.CurveEndPoint(p_crv))
for i in range( len(pts) - 1):
if i % 2 == 0:
rs.AddLine(pts[i], pts[i+1])
rs.DeleteObjects(crvs)
if ( __name__ == '__main__' ):
#current layer name
layer_current = rs.CurrentLayer()
#get user inputs
p_crv = rs.GetObject("select text curve", filter = rs.filter.curve)
radius = rs.GetReal("Enter fillet raduis", number = 40)
#function call
FilletPolyLine(p_crv, radius)
#reset current layer
rs.CurrentLayer (layer_current)