c03删除问题修复

This commit is contained in:
libtxixi 2025-07-19 11:23:07 +08:00
parent 7f7e90f048
commit d732c50b3d
1 changed files with 34 additions and 16 deletions

View File

@ -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):