RhinoPython之渐变圆筒排列

这段代码展示了如何利用Python在Rhino 3D建模软件中生成三维网格,并对每个单元格的边界曲线进行缩放,最后通过Loft命令创建曲面。用户可以通过输入参数控制网格尺寸,并且可以调整缩放比例以影响最终的曲面形状。
摘要由CSDN通过智能技术生成
#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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值