1.保存场景中的模型显示隐藏状态
2.修复3d_image保存size与重新加载项目后size不一致问题
This commit is contained in:
parent
0c25623606
commit
8b29bc8fc1
@ -791,7 +791,7 @@ class GUIManager:
|
||||
traceback.print_exc()
|
||||
return None
|
||||
|
||||
def createGUI3DImage(self, pos=(0, 0, 0), image_path=None, size=1.0):
|
||||
def createGUI3DImage(self, pos=(0, 0, 0), image_path=None, size=(1.0,1.0,1.0)):
|
||||
"""创建3D空间图片"""
|
||||
try:
|
||||
|
||||
@ -823,7 +823,7 @@ class GUIManager:
|
||||
# 参数类型检查和转换
|
||||
if isinstance(size, (list, tuple)):
|
||||
if len(size) >= 2:
|
||||
x_size, y_size = float(size[0]), float(size[1])
|
||||
x_size, y_size = float(size[0]), float(size[2])
|
||||
else:
|
||||
x_size = y_size = float(size[0]) if size else 1.0
|
||||
else:
|
||||
@ -831,7 +831,7 @@ class GUIManager:
|
||||
|
||||
# 创建卡片
|
||||
cm = CardMaker('gui_3d_image')
|
||||
cm.setFrame(-x_size / 2, x_size / 2, -y_size / 2, y_size / 2)
|
||||
cm.setFrame(-x_size, x_size, -y_size, y_size)
|
||||
|
||||
# 创建3D图像节点
|
||||
# image_node = self.world.render.attachNewNode(cm.generate())
|
||||
|
||||
@ -1186,6 +1186,12 @@ class SceneManager:
|
||||
node.setTag("transform_scale", str(node.getScale()))
|
||||
print(f"保存节点 {node.getName()} 的变换信息")
|
||||
|
||||
# 保存可见性信息
|
||||
user_visible = node.getPythonTag("user_visible")
|
||||
if user_visible is not None:
|
||||
node.setTag("user_visible", str(user_visible).lower())
|
||||
print(f"保存节点 {node.getName()} 的可见性信息: {user_visible}")
|
||||
|
||||
# 保存父子关系信息 - 关键修改
|
||||
parent = node.getParent()
|
||||
if parent and not parent.isEmpty() and parent != self.world.render:
|
||||
@ -1547,7 +1553,23 @@ class SceneManager:
|
||||
nodePath.setScale(scale)
|
||||
print(f"{indent}恢复缩放: {scale}")
|
||||
|
||||
nodePath.show()
|
||||
# 恢复可见性状态
|
||||
user_visible = True
|
||||
if nodePath.hasTag("user_visible"):
|
||||
user_visible = nodePath.getTag("user_visible").lower() == "true"
|
||||
|
||||
# 设置用户可见性标记
|
||||
nodePath.setPythonTag("user_visible", user_visible)
|
||||
|
||||
# 应用可见性状态
|
||||
if hasattr(self.world, 'property_panel'):
|
||||
self.world.property_panel._syncEffectiveVisibility(nodePath)
|
||||
else:
|
||||
# 如果没有属性面板,直接应用可见性
|
||||
if user_visible:
|
||||
nodePath.show()
|
||||
else:
|
||||
nodePath.hide()
|
||||
|
||||
if nodePath.hasTag("has_scripts") and nodePath.getTag("has_scripts") == "true":
|
||||
if hasattr(self.world,'script_manager') and self.world.script_manager:
|
||||
@ -1962,12 +1984,14 @@ class SceneManager:
|
||||
elif gui_type == "3d_image" and hasattr(gui_manager, 'createGUI3DImage'):
|
||||
# 处理3D图像
|
||||
# 根据缩放值的数量处理尺寸
|
||||
size = (absolute_scale[0] * 0.2, absolute_scale[1] * 0.2, absolute_scale[2] * 0.2)
|
||||
# 修复:不使用 absolute_scale,因为 createGUI3DImage 中已经处理了尺寸
|
||||
# 而是在创建后通过 setScale 设置缩放
|
||||
size = (1.0, 1.0, 1.0) # 使用默认尺寸创建
|
||||
|
||||
new_element = gui_manager.createGUI3DImage(
|
||||
pos=tuple(absolute_position),
|
||||
image_path=image_path,
|
||||
size=size
|
||||
size=size # 使用默认尺寸
|
||||
)
|
||||
elif gui_type == "video_screen" and hasattr(gui_manager, 'createVideoScreen'):
|
||||
print(f"重建的3d视频屏幕视频地址是{video_path}")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user