import rhinoscriptsyntax as rs
import random, math
from ghpythonlib import components as comp
def mapFromAToB( t, A, B):
(startA,endA) = A
(startB,endB) = B
return comp.RemapNumbers( t,
comp.ConstructDomain(startA,endA),
comp.ConstructDomain(startB,endB) )[0]
def getPointByParameter( line, t ):
(p0,p1) = line
ghP0 = comp.ConstructPoint(p0[0],p0[1],p0[2])
ghP1 = comp.ConstructPoint(p1[0],p1[1],p1[2])
ghLine = comp.Line( ghP0,ghP1 )
# return a point 3d
return comp.EvaluateCurve(ghLine, t)[0]
def getRandom(offset):
return random.uniform(-offset, offset)
# 在line0与line1之间均匀的画num根线
def drawLerpLines( line0,line1, num):
res = []
for i in range(num+1):
t0= mapFromAToB(i, (0, num), (0, 1))
p0 = getPointByParameter( line0, t0 )
t1 = mapFromAToB(i, (0, num), (0, 1))
p1 = getPointByParameter( line1, t1 )
res.append(rs.AddLine( p0,p1 ))
return res
###############################主要代码#########################################
numX = 19
numY = 20
xStep = 50.0
yStep = 50.0
zStep = 50.0
xOffset = xStep/2.0
yOffset = yStep/2.0
zOffset = zStep/2.0
ary = []
############################## method 2d #######################################
myLines_2d = []
for i in range(numY):
myLines_2d.append([])
for j in range(numX):
myLines_2d[i].append(None)
#创建直线
for i in range(numY):
for j in range(numX):
#aryB.append(rs.AddTextDot( "i"+ str(i)+",j"+str(j), (xStep*j, yStep*i) ))
p0 = ( xStep*j-xOffset + getRandom(xOffset),
yStep*i + getRandom(yOffset),
0 + getRandom(zOffset) )#0
p1 = ( xStep*j+xOffset + getRandom(xOffset),
yStep*i + getRandom(yOffset),
0 + getRandom(zOffset) )#0
myLines_2d[i][j]=(p0,p1)
for i in range(numY):
if i%2 == 0:
continue
for j in range(numX):
if j%2 == 0:
continue
#ary.append(rs.AddLine( myLines_2d[i][j][0],myLines_2d[i][j][1] ))
if i != 0:
# (1,12)
lerpLinesNum = 8 #int( mapFromAToB(i, (0, numY), (0, numY)) )#1,12
#print (lerpLinesNum)
ary.extend(drawLerpLines( myLines_2d[i-1][j], myLines_2d[i][j],lerpLinesNum))
a = ary
Grasshopper 生成(二)
最新推荐文章于 2024-08-14 19:45:00 发布