#coding:utf-8
import rhinoscriptsyntax as rs
import random as rnd
def ptMtx(XMAX,YMAX,ZMAX):
ptDict={}
for i in range(XMAX):
for j in range(YMAX):
for k in range(ZMAX):
x=i*8
y=j*10
z=k*10
ptDict[(i,j,k)]=(x,y,z)
for i in range (XMAX):
for j in range(YMAX):
for k in range(ZMAX):
if i>0 and j>0 and k>0:
#创建闭合多段线作为frontCrv,末尾的阶数设置为1
frontCrv=rs.AddCurve((ptDict[(i,j,k)],ptDict[(i,j,k-1)],
ptDict[(i,j-1,k-1)],ptDict[(i,j-1,k)],ptDict[(i,j,k)]),1)
#创建backSrf
backSrf=rs.AddSrfPt([ptDict[(i-1,j,k)],ptDict[(i-1,j,k-1)],
ptDict[(i-1,j-1,k-1)],ptDict[(i-1,j-1,k)]])
#将backSrf重建为三阶四点,并获取backSrf上的点
rs.RebuildSurface(backSrf,(3,3),(4,4))
pts=rs.SurfacePoints(backSrf)
rs.DeleteObject(backSrf)
quadnum=rnd.randint(1,9)
if quadnum==1:
backCrv=rs.AddCurve((pts[0],pts[4],pts[5],pts[1],pts[0]),1)
sweepline=rs.AddLine(pts[0],ptDict[(i,j,k)])
if quadnum==2:
backCrv=rs.AddCurve((pts[1],pts[5],pts[6],pts[2],pts[1]),1)
sweepline=rs.AddLine(pts[1],ptDict[(i,j,k)])
if quadnum==3:
backCrv=rs.AddCurve((pts[2],pts[6],pts[7],pts[3],pts[2]),1)
sweepline=rs.AddLine(pts[2],ptDict[(i,j,k)])
if quadnum==4:
backCrv=rs.AddCurve((pts[4],pts[8],pts[9],pts[5],pts[4]),1)
sweepline=rs.AddLine(pts[4],ptDict[(i,j,k)])
if quadnum==5:
backCrv=rs.AddCurve((pts[5],pts[9],pts[10],pts[6],pts[5]),1)
sweepline=rs.AddLine(pts[5],ptDict[(i,j,k)])
if quadnum==6:
backCrv=rs.AddCurve((pts[6],pts[10],pts[11],pts[7],pts[6]),1)
sweepline=rs.AddLine(pts[6],ptDict[(i,j,k)])
if quadnum==7:
backCrv=rs.AddCurve((pts[8],pts[12],pts[13],pts[9],pts[8]),1)
sweepline=rs.AddLine(pts[8],ptDict[(i,j,k)])
if quadnum==8:
backCrv=rs.AddCurve((pts[9],pts[13],pts[14],pts[10],pts[9]),1)
sweepline=rs.AddLine(pts[9],ptDict[(i,j,k)])
if quadnum==9:
backCrv=rs.AddCurve((pts[10],pts[14],pts[15],pts[11],pts[10]),1)
sweepline=rs.AddLine(pts[10],ptDict[(i,j,k)])
rs.AddSweep2([backCrv,frontCrv],[sweepline])
def main():
xmax=rs.GetInteger("input number in x direction",10)
ymax=rs.GetInteger("input number in y direction",10)
zmax=rs.GetInteger("input number in z direction",10)
#添加下面一行代码,可使得在Rhino的运行速度变开,但不改变运行结果。
rs.EnableRedraw(False)
ptMtx(xmax,ymax,zmax)
main()
RhinoPython创建矩形开孔立面
最新推荐文章于 2024-07-31 23:55:47 发布