- # -*- coding:UTF8 -*-
- import rhinoscriptsyntax as rs
- Srf = rs.GetObject("select Surface",8) # 选择一个曲面
- U = rs.SurfaceDomain(Srf,0) # 取得UV
- V = rs.SurfaceDomain(Srf,1) #
- print U
- print V
- arrpts = {} #创建一个叫arrpts字典
- arrMidPts2 = {} #创建一个叫arrMidPts2字典`
- arrParam = [0,0] #创建个列表
- nRows = rs.GetInteger("SubDivs in U?",20,5,100) # 限制用户必须输入整数 输入U和V的参数
- nColumns = rs.GetInteger("SubDivs in V?",20,5,100) #设置行和列
- for m in range(0,nRows+1): #根据U,V参数的一个嵌套for循环,从0开始
- arrParam[0] = (U[0]+(((U[1]-U[0])/nRows)*m))#
- for n in range(0,nColumns+1):
- arrParam[1] = (V[0]+(((V[1]-V[0])/nColumns)*n))
- arrpts[(m,n)] = rs.EvaluateSurface(Srf,arrParam[0],arrParam[1]) #计算在表面的U,V参数
- arrMidPts = rs.EvaluateSurface(Srf,arrParam[0]+((U[1]-U[0])/nRows)/2,arrParam[1]+((V[1]-V[0])/nColumns)/2)#计算在表面的U,V参数
- param = arrParam[0]+((U[1]-U[0])/nRows)/2,arrParam[1]+((V[1]-V[0])/nColumns)/2
- arrSrfNor = rs.SurfaceNormal(Srf,param)
- arrMidPts2[(m+1/2),(n+1/2)] = arrMidPts+arrSrfNor
- for i in range(0,nRows):
- for j in range(0,nColumns):
- midPt = arrMidPts2[(i+1/2),(j+1/2)]
- pt1,pt2,pt3,pt4 = arrpts[i,j],arrpts[i+1,j],arrpts[i+1,j+1],arrpts[i,j+1]
- arrRiPts = [pt2,midPt,pt3]
- arrRiCrv = rs.AddCurve(arrRiPts)
- arrMidPts = [pt1,midPt,pt3]
- arrMidCrv = rs.AddCurve(arrMidPts)
- arrRiSrf = rs.AddLoftSrf([arrRiCrv,arrMidCrv])
- rs.DeleteObjects([arrRiCrv,arrMidCrv])
- rs.DeleteObject(Srf)
复制代码
|
举报