[英]TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
[英]TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType
我需要将 object 的边缘涂上颜色。 我知道 python 很差,但是我的老师给出了这个代码,这就是它发生的事情。
def triangleArea(half_edge):
a = len (half_edge)
b = len (half_edge.edge_next)
c = len (half_edge.edge_next.edge_next)
s = (a + b + c) / 2
area = math.sqrt(s * (s - a)*(s - b)*(s - c))
return area
def angle(half_edge):
v1 = half_edge.vertex
v2 = prev(half_edge).vertex
v3 = half_edge.edge_next.vertex
angle = math.acos(((v2.co.x - v1.co.x)*(v3.co.x - v1.co.x)+(v2.co.y - v1.co.y)*(v3.co.y - v1.co.y)+(v2.co.z - v1.co.z)*(v3.co.z -v1.co.z))/(len(prev(half_edge))*len(half_edge)))
if (angle > math.pi / 2):
print (">90")
return angle
def curvature(v):
anglesSum = 0
completeArea = 0
for e in h_edge_list:
if (v == e.vertex):
start_edge = e
anglesSum += angle(start_edge)
completeArea += triangleArea(start_edge)
half_edge = start_edge.edge_next
cur = (2*math.pi - anglesSum)/completeArea
color (half_edge, cur, 0.13, 0.29)#farbime z intervalu 0 az 2/3
return cur
for e in h_edge_list:
print (curvature(e.vertex))
bmesh.free() # free and prevent further access
S 运算符的最后几行代码出错 在此处输入图像描述
当此条件为 False 时,您的angle
function 返回None
if (angle > math.pi / 2):
print (">90")
return angle
这就是您当前angle
function 的return
方式
def angle(half_edge):
v1 = half_edge.vertex
v2 = prev(half_edge).vertex
v3 = half_edge.edge_next.vertex
angle = math.acos(((v2.co.x - v1.co.x)*(v3.co.x - v1.co.x)+(v2.co.y - v1.co.y)*(v3.co.y - v1.co.y)+(v2.co.z - v1.co.z)*(v3.co.z -v1.co.z))/(len(prev(half_edge))*len(half_edge)))
if (angle > math.pi / 2):
print (">90")
return angle
return None
如果(angle > math.pi / 2)
条件为False
,则返回 None
也许你想返回angle
值,无论条件是什么(这使得 if 语句变得不必要),通过减少它的缩进标签
def angle(half_edge):
v1 = half_edge.vertex
v2 = prev(half_edge).vertex
v3 = half_edge.edge_next.vertex
angle = math.acos(((v2.co.x - v1.co.x)*(v3.co.x - v1.co.x)+(v2.co.y - v1.co.y)*(v3.co.y - v1.co.y)+(v2.co.z - v1.co.z)*(v3.co.z -v1.co.z))/(len(prev(half_edge))*len(half_edge)))
if (angle > math.pi / 2):
print (">90")
return angle
如果此条件为False
,则此if
语句将返回None
if (angle > math.pi / 2):
print (">90")
return angle
您需要在角度 function 中至少添加一条else
语句。
如果不满足内部条件,则角度 function 将返回NoneType ,并且 += 运算符不能与 NoneType 值一起使用。 尝试返回 0。
if (angle > math.pi / 2):
print (">90")
return angle
else:
return 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.