Python - TypeError: tipos de operandos no admitidos para +=:, int y, NoneType

CorePress2024-01-25  355

Necesito que los bordes del objeto estén pintados de color. Conozco muy poco Python, pero mi profesor me dio este código y esto es lo que pasó con él.

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

error en las últimas líneas de código con el operador S ingrese la descripción de la imagen aquí

3

Su función de ángulo devuelve Ninguno a veces. ¿Quizás esa sea la fuente del error?

- Samsagaz

28/03/2021 a las 17:47



------------------------------------

Su función de ángulo devuelve Ninguno cuando esta condición es Falsa

if (angle > math.pi / 2):
   print (">90")
   return angle

Así es como se ve el retorno en tu función de ángulo actual

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

Devuelve Ninguno si la condición (ángulo > math.pi / 2) es Falsa

Tal vez quieras devolver el valor del ángulo, cualquiera que sea la condición (esto hace que la declaración if sea innecesaria), reduciendo su pestaña de sangría

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



------------------------------------

Esta declaración if no devolverá Ninguno si esta condición es Falsa

if (angle > math.pi / 2):
   print (">90")
   return angle

Querrás agregar al menos una declaración else a tu función de ángulo.



------------------------------------

La función de ángulo devuelve NingunoTipo si la condición interna no se cumple y el operador += no se puede usar con valores NingunoTipo. Intente devolver 0 en su lugar.

if (angle > math.pi / 2):
    print (">90")
    return angle
else:
    return 0

0

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare