使用python脚本合并mesh.Vertex时混合器崩溃

2024-09-27 00:23:18 发布

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

我正在创建一个简化器,它通过节点循环并计算节点之间的距离。如果两个节点之间的距离小于阈值,它们将在中心合并。有时它可以工作,但在第三次或第四次运行脚本时,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()的问题


Tags: 节点objectmodedeselectellaops

热门问题