第一种方法如下:
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()
效果相同。