RhinoPython创建变形圆阵列

 第一种方法如下:

import rhinoscriptsyntax as rs

ptMtx={}

imax=rs.GetInteger("input number in x direction",10)
jmax=rs.GetInteger("input number in y direction",10)

for i in range(imax):
    for j in range(jmax):
        x=i+i**2
        y=j+j**2
        z=0
        ptMtx[(i,j)]=(x,y,z)

# for id in ptMtx:
#     rs.AddPoint(ptMtx[id])

for i in range(imax):
    for j in range(jmax):
        if i>0 and j>0:
            rs.AddCurve((ptMtx[i,j],ptMtx[i,j-1],
            ptMtx[i-1,j-1],ptMtx[i-1,j],ptMtx[i,j]),3)

第二种方法如下:

#coding:utf-8
import rhinoscriptsyntax as rs

ptMtx={}

imax=rs.GetInteger("input number in x direction",10)
jmax=rs.GetInteger("input number in y direction",10)

for i in range(imax):
    for j in range(jmax):
        x=i+i**2
        y=j+j**2
        z=0
        ptMtx[(i,j)]=(x,y,z)

# for id in ptMtx:
#     rs.AddPoint(ptMtx[id])

for i in range(imax):
    for j in range(jmax):
        if i>0 and j>0:
            circle=rs.AddCurve((ptMtx[i,j],ptMtx[i,j-1],
            ptMtx[i-1,j-1],ptMtx[i-1,j],ptMtx[i,j]),3)
            centroid=rs.CurveAreaCentroid(circle)[0]
            rs.ScaleObject(circle,centroid,(0.5,0.5,0.5))

            #将两侧的角点与中心点进行连线,构成三阶曲线。
            rs.AddCurve((ptMtx[(i,j)],centroid,ptMtx[(i,j-1)]))
            rs.AddCurve((ptMtx[(i,j-1)],centroid,ptMtx[(i-1,j-1)]))
            rs.AddCurve((ptMtx[(i-1,j-1)],centroid,ptMtx[(i-1,j)]))
            rs.AddCurve((ptMtx[(i-1,j)],centroid,ptMtx[(i,j)]))

            #直接讲两侧的角点进行连线,构成直线。
            rs.AddCurve((ptMtx[(i,j)],ptMtx[(i,j-1)]),1)
            rs.AddCurve((ptMtx[(i,j-1)],ptMtx[(i-1,j-1)]),1)
            rs.AddCurve((ptMtx[(i-1,j-1)],ptMtx[(i-1,j)]),1)
            rs.AddCurve((ptMtx[(i-1,j)],ptMtx[(i,j)]),1)

第二种方法的代码进行函数封装:

#coding:utf-8

import rhinoscriptsyntax as rs

def pointFunc(IMAX,JMAX):
    #创建一个空字典
    ptMtx={}

    #通过循环的方法对字典进行赋值
    for i in range(IMAX):
        for j in range(JMAX):
            x=i+i**2
            y=j+j**2
            z=0
            ptMtx[(i,j)]=(x,y,z)

    # for id in ptMtx:
    #     rs.AddPoint(ptMtx[id])

    for i in range(IMAX):
        for j in range(JMAX):
            if i>0 and j>0:
                circle=rs.AddCurve((ptMtx[i,j],ptMtx[i,j-1],
                ptMtx[i-1,j-1],ptMtx[i-1,j],ptMtx[i,j]),3)
                centroid=rs.CurveAreaCentroid(circle)[0]
                rs.ScaleObject(circle,centroid,(0.5,0.5,0.5))

                #将两侧的角点与中心点进行连线,构成三阶曲线。
                rs.AddCurve((ptMtx[(i,j)],centroid,ptMtx[(i,j-1)]))
                rs.AddCurve((ptMtx[(i,j-1)],centroid,ptMtx[(i-1,j-1)]))
                rs.AddCurve((ptMtx[(i-1,j-1)],centroid,ptMtx[(i-1,j)]))
                rs.AddCurve((ptMtx[(i-1,j)],centroid,ptMtx[(i,j)]))

                #直接将两侧的角点进行连线,构成直线。
                rs.AddCurve((ptMtx[(i,j)],ptMtx[(i,j-1)]),1)
                rs.AddCurve((ptMtx[(i,j-1)],ptMtx[(i-1,j-1)]),1)
                rs.AddCurve((ptMtx[(i-1,j-1)],ptMtx[(i-1,j)]),1)
                rs.AddCurve((ptMtx[(i-1,j)],ptMtx[(i,j)]),1)

#构建主体函数
def main():
    imax=rs.GetInteger("input number in x direction",10)
    jmax=rs.GetInteger("input number in y direction",10)

    pointFunc(imax,jmax)

main()

效果相同。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值