首页 > 解决方案 > 将 mesh.vertices 与 python 脚本合并时,Blender 崩溃

问题描述

我创建了一个简化器,它循环通过节点并计算它们之间的距离。如果两个节点之间的距离低于阈值,则它们在中心合并。有时它可以工作,但在第三次或第四次运行脚本时,blender 崩溃了,我得到了这个错误:

Writing: /tmp/ico.crash.txt Violación de segmento (core' generado) (它是西班牙语,但它基本上是一个段违规核心错误)

我已经简化了代码,直到它只合并两个节点并停止,所以我有点不知所措。这是简化的代码:

import bpy
from math import sqrt

max_distance = 1

# Aunque no exista interfaz, debemos cambiar el modo a "objeto" o
# "edicion" según corresponderia en la i.gráfica.
bpy.ops.object.mode_set(mode = 'OBJECT')
# El script está pensado para ser usado en complemento a la i.gráfica.
# Por tanto se selecciona el objeto seleccionado por el usuario:
obj = bpy.context.selected_objects[0]
verts = obj.data.vertices

i = 0
for vertice in verts: #Iteramos la distancia de cada vértice con el resto.
    i += 1
    bpy.ops.object.mode_set(mode = 'EDIT') 
    bpy.ops.mesh.select_mode(type='VERT')
    bpy.ops.mesh.select_all(action = 'DESELECT')
    bpy.ops.object.mode_set(mode = 'OBJECT') 
    vertice.select = True
    for vertice2 in verts[i:]: #Con el rango optimizamos la iteración.
        distance = sqrt( #función de distancia
            (vertice.co[0] - vertice2.co[0])**2
            + (vertice.co[1] - vertice2.co[1])**2
            + (vertice.co[2] - vertice2.co[2])**2
        )
        print(distance)
        if distance < max_distance:
            vertice2.select = True
            bpy.ops.object.mode_set(mode = 'EDIT')
            bpy.ops.mesh.merge()
            break

另一方面,当我通过用鼠标手动选择节点并将它们合并在中心进行完全相同的合并时,代码不会崩溃,所以这不是 bpy.ops.mesh.merge() 的问题

标签: pythonscriptingblender

解决方案


推荐阅读