微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 mesh.vertices 与 python 脚本合并时,Blender 崩溃

如何解决将 mesh.vertices 与 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 的问题()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。