Divide distance的功能

grasshopper中divide distance只能输入固定的一个数。如果想要根据自己的列表分割比如[1,1.2,1.5,1.1],相邻点的间隔是列表中的数据,怎么达到呢?

只能借助循环的插件或者代码

版主,能不能帮忙写一下输入一条crv和一个list,输出分割后的点序列的代码。我想学习一下,非常感谢。

试试 Shatter,看看这个是不是你要的结果,

前几天刚好在英文论坛看见过类似的问题,看看这个插件是不是你需要的效果。Divide Distance

2 个赞

前面是等弧长的,再提供一个等弦长参考思路, 需要用到循环插件 Anemone,

1 个赞

谢谢月神,我也尝试写了一下,想利用简单的迭代,但运行不了,您看看逻辑有问题吗。cr1和list1是输入的曲线和数列,a接收得到的点序列。
image

是这个意思,非常感谢。 :saluting_face:

把代码发上来呀,懒得重写。

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都还不太熟悉,还要学习。感谢月神的帮助。 :saluting_face: