grasshopper中divide distance只能输入固定的一个数。如果想要根据自己的列表分割比如[1,1.2,1.5,1.1],相邻点的间隔是列表中的数据,怎么达到呢?
只能借助循环的插件或者代码
版主,能不能帮忙写一下输入一条crv和一个list,输出分割后的点序列的代码。我想学习一下,非常感谢。
谢谢月神,我也尝试写了一下,想利用简单的迭代,但运行不了,您看看逻辑有问题吗。cr1和list1是输入的曲线和数列,a接收得到的点序列。
是这个意思,非常感谢。
把代码发上来呀,懒得重写。
import rhinoscriptsyntax as rs
import Rhino.Geometry as rg
a=[]
pt0 = rs.CurveStartPoint(cr1)
def get_pt(n):
if n==0:
return pt0
cir = rs.AddCircle(get_pt(n-1),lt1[n-1])
return rs.IntersectBreps(cr1, cir)[-1]
for i in range(x):
a.append(get_pt(i))
你这个写的有点混乱了, rs.IntersectBreps是求曲线和多重曲面的,你应该使用 CurveCurveIntersection。
还有看你定义了一个函数,你在创建圆的时候调用了函数是想用递归?
import rhinoscriptsyntax as rs
import Rhino.Geometry as rg
#定义一个列表装生成的点
a=[]
#运行的次数
count = 0
curve_start = rs.CurveStartPoint(crv)
domain = rs.CurveDomain(crv)
a.append(curve_start)
while(True):
#判断取值索引是否超出列表
if(count>=len(dis)):count %=len(dis)
#创建圆
circle = rs.AddCircle(curve_start,dis[count])
#求交点
intersection_list = rs.CurveCurveIntersection(crv,circle)
#跳出循环的条件
if(intersection_list==None):break
#求曲线上的相交点和相交点参数t
curve_start,t = intersection_list[0][3],intersection_list[0][5]
a.append(curve_start)
#创建创建子曲线,进行循环
crv = rs.AddSubCrv(crv,t,domain[1])
count+=1
a.append(rs.CurveEndPoint(crv))
按列表等分曲线.gh (11.3 KB)
2 个赞
非常感谢。我确实想用递归,主要觉得代码方便,但不太行。我对rs和rg都还不太熟悉,还要学习。感谢月神的帮助。