c03删除问题修复
This commit is contained in:
parent
7f7e90f048
commit
d732c50b3d
|
@ -93,11 +93,19 @@ class DeletionManager:
|
|||
# 【修复】与Ruby版本保持一致:使用统一的删除逻辑
|
||||
# 删除zones(如果是uid或zid类型)
|
||||
if typ in ["uid", "zid"]:
|
||||
zones = self.data_manager.get_zones(data)
|
||||
zones_deleted = self._del_entities_by_type(
|
||||
zones, typ, oid, uid)
|
||||
deleted_count += zones_deleted
|
||||
logger.info(f"✅ 删除zones: {zones_deleted} 个")
|
||||
# 【修复】对于zid类型,使用完整的删除逻辑来删除子对象
|
||||
if typ == "zid":
|
||||
logger.info(f"🗑️ 删除区域: uid={uid}, zid={oid}")
|
||||
result = self._del_zone_complete(uid, oid)
|
||||
deleted_count += result if result is not None else 0
|
||||
logger.info(f"✅ 删除区域完成: {result} 个对象")
|
||||
else:
|
||||
# 对于uid类型,删除所有区域
|
||||
zones = self.data_manager.get_zones(data)
|
||||
zones_deleted = self._del_entities_by_type(
|
||||
zones, typ, oid, uid)
|
||||
deleted_count += zones_deleted
|
||||
logger.info(f"✅ 删除zones: {zones_deleted} 个")
|
||||
|
||||
# 删除parts
|
||||
parts = self.data_manager.get_parts(data)
|
||||
|
@ -190,9 +198,6 @@ class DeletionManager:
|
|||
|
||||
logger.info(f" Zone_{zid} 数据: uid={uid}, 元素数量={len(elements)}")
|
||||
|
||||
# 获取zones字典
|
||||
zones = self.data_manager.get_zones(data)
|
||||
|
||||
# 【修复】不再创建线框立方体,直接创建六个面组成Zone
|
||||
# 创建一个空的组对象作为Zone容器
|
||||
group = bpy.data.objects.new(f"Zone_{zid}", None)
|
||||
|
@ -267,8 +272,10 @@ class DeletionManager:
|
|||
unit_trans = self.data_manager.unit_trans[uid]
|
||||
group.matrix_world @= unit_trans
|
||||
|
||||
# 存储到zones字典
|
||||
zones[zid] = group
|
||||
# 【修复】使用data_manager.add_zone()方法存储数据,而不是直接操作字典
|
||||
self.data_manager.add_zone(uid, zid, group)
|
||||
logger.info(
|
||||
f"✅ 使用data_manager.add_zone()存储区域数据: uid={uid}, zid={zid}")
|
||||
|
||||
logger.info(
|
||||
f"✅ 区域创建完成: uid={uid}, zid={zid}, 面数={len(created_faces)}")
|
||||
|
@ -535,15 +542,20 @@ class DeletionManager:
|
|||
|
||||
deleted_count = 0
|
||||
|
||||
# 【修复2】使用属性匹配而不是名称匹配
|
||||
# 【修复2】使用属性匹配而不是名称匹配,同时检查命名格式
|
||||
zone_objects = []
|
||||
for obj in bpy.data.objects:
|
||||
try:
|
||||
# 检查属性匹配
|
||||
if (obj.get("sw_uid") == uid and
|
||||
obj.get("sw_zid") == zid and
|
||||
obj.get("sw_typ") == "zone"):
|
||||
zone_objects.append(obj)
|
||||
logger.info(f"🎯 找到Zone对象: {obj.name}")
|
||||
logger.info(f"🎯 找到Zone对象(属性匹配): {obj.name}")
|
||||
# 【修复】同时检查命名格式匹配
|
||||
elif obj.name == f"Zone_{zid}":
|
||||
zone_objects.append(obj)
|
||||
logger.info(f"🎯 找到Zone对象(命名匹配): {obj.name}")
|
||||
except Exception as e:
|
||||
logger.debug(f"检查对象属性时发生错误: {e}")
|
||||
continue
|
||||
|
@ -954,10 +966,16 @@ class DeletionManager:
|
|||
if not obj or not BLENDER_AVAILABLE:
|
||||
return False
|
||||
|
||||
# 【修复1】检查是否在主线程中
|
||||
if hasattr(bpy.app, 'is_job_running') and bpy.app.is_job_running():
|
||||
logger.warning("对象删除操作必须在主线程中执行")
|
||||
return False
|
||||
# 【修复1】检查是否在主线程中 - 修复is_job_running调用
|
||||
if hasattr(bpy.app, 'is_job_running'):
|
||||
try:
|
||||
# 检查是否有任何后台任务在运行
|
||||
if bpy.app.is_job_running('RENDER') or bpy.app.is_job_running('OBJECT_BAKE'):
|
||||
logger.warning("对象删除操作必须在主线程中执行")
|
||||
return False
|
||||
except Exception:
|
||||
# 如果检查失败,继续执行
|
||||
pass
|
||||
|
||||
# 【修复2】检查对象是否仍然有效
|
||||
if not self._is_object_valid(obj):
|
||||
|
|
Loading…
Reference in New Issue