Revit Dynamo提供错误数据插值python脚本

2024-06-26 17:41:00 发布

您现在位置:Python中文网/ 问答频道 /正文

Interpolate Date- Catmull 我得到以下错误:TypeError:无法将序列与类型为'float'的非int相乘

Interpolate Date-Linear 我得到以下错误:未扩展的令牌“v3”

我是Python的新手,不知道我在这段代码中犯了什么错误。 谢谢 下面是D和t的输入

IN[0]
-1.075000
-0.885818
-0.688475
-0.483791
-0.301645
-0.114591
0.077063
0.273042
0.473106
0.677038
1.025973
1.306626
1.592869
1.884406
2.363634
2.597338
2.833636
3.072438
3.313663
3.557232
3.803073
4.051116
4.301297
4.807834
5.069212
5.349055
5.649760
5.971703

IN[1]
0.000000
0.055556
0.111111
0.166667
0.222222
0.277778
0.333333
0.388889
0.444444
0.500000
0.555556
0.611111
0.666667
0.722222
0.777778
0.833333
0.888889
0.944444
1
0.000000
0.027778
0.055556
0.083333
0.111111
0.138889
0.166667
0.194444
0.222222
0.250000
0.277778
0.305556
0.333333
0.361111
0.388889
0.416667
0.444444
0.472222
0.500000
0.527778
0.555556
0.583333
0.611111
0.638889
0.666667
0.694444
0.722222
0.750000
0.777778
0.805556
0.833333
0.861111
0.888889
0.916667
0.944444
0.972222
1

D=IN[0]  
t=IN[1]  
a=[]

def SampleLinear(v0, v1, t):  
    value = v0 * (1.0 - t) + v1 * t  
    return value

def Interpolate (values, parameter):  
    num = len(values) - 1  
    num2 = parameter * float(num)  
    num3 = int((float(floor(num2)))  
    v3 = values[num3]  
    v4 = values[num3]  
    value = SampleLinear(v3, v4, num2 - float(num3))  
    return value  

for i in t:  
    a.append(Interpolate(D,i))

OUT = a

D=IN[0]  
t=IN[1]  
a=[]  



        def SampleCatmull(v00,v0,v1,v11,t):  
           num = -0.5 * v00 + 1.5 * v0 - 1.5 * v1 + 0.5 * v11 
            num2 = v00 - 2.5 * v0 + 2.0 * v1 - 0.5 * v11  
            num3 = -0.5 * v00 + 0.5 * v1  
            value = num * (t * t * t) + num2 * (t * t) + num3 * t + v0  
            return value  



    def Interpolate(values, parameter):  
        num = len(values) - 1  
        num2 = parameter * float(num)  
        num3 = float(floor(num2))  
        num6 = values[num3]  
        v7 = 0  
        v8 = 0  
        num7 = values[num3]  
        if num3 <= 0:  
            v7 = num6 - (num7 - num6)  
        else:  

            v7 = values[num3 - 1]  

        if num3 >= num - 1:  
            v8 = num7 - (num6 - num7)  
        else:  

            v8 = values[num3 + 2]  

        value = SampleCatmull(v7, num6, num7, v8, num2 - float(num3))  

        return value  


    for i in t:  
        a.append(Interpolate(D, i))  

    OUT = a

Tags: inreturnparametervaluedeffloatnumv1
2条回答

因此,@arthur给出的上述答案是正确的,您正试图将float传递到需要整数的列表索引查询中。改变那条线对我来说解决了问题。下面是来自Dynamo的实际图像/代码片段。你知道吗

您遇到的另一个问题是将浮动0.00001与列表1中的整数混合。保持一致。你知道吗

另外,关于缩进的问题,我想说,Dynamo,它的设置方式,需要你选择一种风格。要么是空格,要么是制表符,最好保持一致。我以前(偶然)把它们混在一起时遇到了一些麻烦。我重新格式化了你的代码,它可以很好地与所有标签。你知道吗

enter image description here

代码:

import clr
import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
sys.path.append(pyt_path)
from math import floor

def SampleCatmull(v00,v0,v1,v11,t):
    num = -0.5 * v00 + 1.5 * v0 - 1.5 * v1 + 0.5 * v11
    num2 = v00 - 2.5 * v0 + 2.0 * v1 - 0.5 * v11
    num3 = -0.5 * v00 + 0.5 * v1
    value = num * (t * t * t) + num2 * (t * t) + num3 * t + v0
    return value

def Interpolate(values, parameter):
    num = len(values) - 1
    num2 = parameter * float(num)
    num3 = (int)(floor(num2))
    num6 = values[num3] #num3 has to be an index (int)
    v7 = 0
    v8 = 0
    num7 = values[num3]
    if num3 <= 0:
        v7 = num6 - (num7 - num6)
    else:
        v7 = values[num3 - 1]
    if num3 >= num - 1:
        v8 = num7 - (num6 - num7)
    else:
        v8 = values[num3 + 2]
    value = SampleCatmull(v7, num6, num7, v8, num2 - float(num3))
    return value

D=IN[0]
t=IN[1]
a=[]

for i in t:
    a.append(Interpolate(D, i))  
#Assign your output to the OUT variable.
OUT = a

这是另一个:

import clr
import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
sys.path.append(pyt_path)
from math import floor

def SampleLinear(v0, v1, t):
    value = v0 * (1.0 - t) + v1 * t
    return value

def Interpolate (values, parameter):
    num = len(values) - 1
    num2 = parameter * float(num)
    num3 = (int)(floor(num2))
    v3 = values[num3]
    v4 = values[num3]
    value = SampleLinear(v3, v4, num2 - float(num3))
    return value  

D=IN[0]
t=IN[1]
a=[]

for i in t:
    a.append(Interpolate(D,i))
#Assign your output to the OUT variable.
OUT = a
  • 在插值日期中:

你忘记了第num3 = int((float(floor(num2)))行的括号 应该是:num3 = int((float(floor(num2))))

  • 在你的插入日期-卡特穆尔:

当您这样做时:

num3 = float(floor(num2)) # num3 is of type float, should be int 
num6 = values[num3]

您正试图通过索引(num3)访问values列表中的元素,因此索引必须是整数,在您的情况下,将其更改为:num3 = int(floor(num2))

相关问题 更多 >