#coding:utf-8
import rhinoscriptsyntax as rs
import random as rnd
def ptMtx(XMAX,YMAX,ZMAX):
ptDict={}
ptList=[]
for i in range(XMAX):
for j in range(YMAX):
for k in range(ZMAX):
x=i*5
y=j*5
z=k*5
ptDict[(i,j,k)]=(x,y,z)
def randRadius():
radius=rnd.random()*5
if radius<0.75:
radius=0.75
elif radius>4:
radius=4
else:
radius=radius
return radius
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=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)]),3)
backCrv=rs.AddCurve((ptDict[(i-1,j,k)],ptDict[(i-1,j,k-1)],
ptDict[(i-1,j-1,k-1)],ptDict[(i-1,j-1,k)],ptDict[(i-1,j,k)]),3)
#找到前后两条线的中心点
frontcenter=findMidPt(ptDict[(i,j,k)],ptDict[(i,j-1,k-1)])
backcenter=findMidPt(ptDict[(i-1,j,k)],ptDict[(i-1,j-1,k-1)])
#对原有线条进行缩放
aimScale=(j*k/YMAX/ZMAX,j*k/YMAX/ZMAX,j*k/YMAX/ZMAX)
frontCrv=rs.ScaleObject(frontCrv,frontcenter,aimScale)
backCrv=rs.ScaleObject(backCrv,backcenter,aimScale)
#Loft命令做出曲面
rs.AddLoftSrf([frontCrv,backCrv])
def findMidPt(pt1,pt2):
midPt=((pt1[0]+pt2[0])/2,
(pt1[1]+pt2[1])/2,
(pt1[2]+pt2[2])/2)
return midPt
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之渐变圆筒排列
最新推荐文章于 2023-02-22 00:33:43 发布
这段代码展示了如何利用Python在Rhino 3D建模软件中生成三维网格,并对每个单元格的边界曲线进行缩放,最后通过Loft命令创建曲面。用户可以通过输入参数控制网格尺寸,并且可以调整缩放比例以影响最终的曲面形状。
摘要由CSDN通过智能技术生成