python - 将 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() 的问题
解决方案
推荐阅读
- eclipse - Coverage As -> JUnit Test in Eclipse Oxygen 报告 NullPointerException
- c# - WinForms MultiSelectTreeView - EnsureVisible() 不工作
- javascript - 根据淘汰赛中另一个元素的值使一个元素可见
- xml - 未在 XML 中输出到 CSV 映射的 value-of 元素的值
- macos - 加载屏幕后虚拟框未加载
- spring - 如何在春季交易中涉及收藏?
- javascript - 如何在气泡图中定位文本?
- excel - 在 Excel 中更新 ListObject --> 错误访问数据库被阻止
- java - Swing JInternalFrame 中的重量级组件
- javascript - “已达到应用程序请求限制” - 但没有 API 使用图表,如何解决?