import rhinoscriptsyntax as rs
import ghpythonlib.treehelpers as th
def find_midPt(pt1,pt2):
pt1=rs.PointCoordinates(pt1)
pt2=rs.PointCoordinates(pt2)
mid=((pt1[0]+pt2[0])/2,(pt1[1]+pt2[1])/2, (pt1[2]+pt2[2])/2)
return mid
def create_list(x):
y=th.tree_to_list(x,lambda x:x)
pts=[]
#len(y)求取的应该为列表中分支的个数,在此处为分组的数量。
for i in range(len(y)):
#len(y[i])在此处应为第i个分支中Item的数量,即每一组中点的个数。
if len(y[i])==7:
pts.append(y[i])
return pts
def generate_shape(pts):
surfaces=[]
for i in range(len(pts)):
bottom=rs.AddCurve(pts[i],1)
center=find_midPt(pts[i][0],pts[i][3])
top=rs.ScaleObject(bottom,center,(0.8,0.8,0.8),True)
#六边形上挑选三个点来近似代表该曲面所在的平面plane
plane=rs.PlaneFromPoints(pts[i][0], pts[i][2], pts[i][4])
#这一句中plane[3]代表的是提取平面plane的第三项坐标轴,也就是Z方向,也就是法线方向。
translate=rs.VectorScale(plane[3],4)
top=rs.MoveObject(top,translate)
topPt=rs.EvaluateCurve(top,0)
rail=rs.AddLine(pts[i][0],topPt)
#构建完成bottom和top两条断面线和扫掠路径rail之后,进行双轨扫掠。
surface=rs.AddSweep2([bottom,top],[rail],False)
surfaces.append(surface)
return surfaces
pts=create_list(x)
shape=generate_shape(pts)
a=th.list_to_tree(shape,source=[])