EG/ui/panels/panel_delegates.py
2026-04-21 15:57:20 +08:00

1032 lines
43 KiB
Python

"""Delegated panel/runtime methods for MyWorld."""
class PanelDelegates:
def _node_is_valid(self, node, require_attached=False):
if node is None:
return False
try:
if node.is_empty():
return False
except Exception:
try:
if node.isEmpty():
return False
except Exception:
return False
if require_attached:
try:
# Add debug output
return bool(node.has_parent() if hasattr(node, "has_parent") else node.hasParent())
except Exception as e:
print(f"[PanelDelegates] Error in has_parent: {e}")
return False
return True
def _get_selection_node(self):
"""Return the current editor selection, preferring the active SSBO state."""
ssbo_editor = getattr(self, "ssbo_editor", None)
if ssbo_editor and hasattr(ssbo_editor, "has_active_selection") and ssbo_editor.has_active_selection():
ssbo_node = ssbo_editor.get_selection_scene_node()
if ssbo_node and self._node_is_valid(ssbo_node, require_attached=False):
return ssbo_node
fallback_model = getattr(ssbo_editor, "model", None)
if fallback_model and self._node_is_valid(fallback_model, require_attached=False):
return fallback_model
return None
selection = getattr(self, "selection", None)
if selection and hasattr(selection, "getSelectedNode"):
node = selection.getSelectedNode()
else:
node = getattr(selection, "selectedNode", None) if selection else None
try:
if selection and hasattr(selection, "_resolve_scene_model_owner"):
node = selection._resolve_scene_model_owner(node)
except Exception:
pass
return node if self._node_is_valid(node, require_attached=False) else None
def _get_selection_source_node(self):
ssbo_editor = getattr(self, "ssbo_editor", None)
if ssbo_editor and hasattr(ssbo_editor, "has_active_selection") and ssbo_editor.has_active_selection():
if getattr(ssbo_editor, "is_flat_selection_mode", lambda: False)():
runtime_node = getattr(ssbo_editor, "get_selection_scene_node", lambda: None)()
if runtime_node and self._node_is_valid(runtime_node, require_attached=False):
return runtime_node
source_node = getattr(ssbo_editor, "get_selection_source_node", lambda: None)()
if source_node and self._node_is_valid(source_node, require_attached=False):
return source_node
return self._get_selection_node()
def _get_selection_material_node(self):
"""Return the node that material editing should target."""
ssbo_editor = getattr(self, "ssbo_editor", None)
if ssbo_editor and hasattr(ssbo_editor, "has_active_selection") and ssbo_editor.has_active_selection():
source_node = getattr(ssbo_editor, "get_selection_source_material_node", lambda: None)()
if source_node and self._node_is_valid(source_node, require_attached=False):
return source_node
runtime_node = getattr(ssbo_editor, "get_selection_runtime_material_node", lambda: None)()
if runtime_node and self._node_is_valid(runtime_node, require_attached=False):
return runtime_node
return self._get_selection_source_node()
def _get_script_target_node(self):
"""
Return the runtime-visible node that scripts should mount to.
In SSBO mode, mounting to source tree nodes (e.g. ssbo_source_scene_root)
won't affect the visible runtime scene. Prefer dynamic runtime object/proxy/model.
"""
ssbo_editor = getattr(self, "ssbo_editor", None)
if ssbo_editor and hasattr(ssbo_editor, "has_active_selection") and ssbo_editor.has_active_selection():
controller = getattr(ssbo_editor, "controller", None)
selected_ids = list(getattr(ssbo_editor, "selected_ids", []) or [])
# Single selection: prefer the exact dynamic runtime object.
if controller and len(selected_ids) == 1:
try:
obj_np = (getattr(controller, "id_to_object_np", {}) or {}).get(selected_ids[0])
except Exception:
obj_np = None
if obj_np and self._node_is_valid(obj_np, require_attached=False):
return obj_np
# Multi-selection proxy (if exists) should drive runtime edits.
group_proxy = getattr(ssbo_editor, "_group_proxy", None)
if group_proxy and self._node_is_valid(group_proxy, require_attached=False):
return group_proxy
# Fallback scene node, but skip source-tree nodes.
scene_node = getattr(ssbo_editor, "get_selection_scene_node", lambda: None)()
if scene_node and self._node_is_valid(scene_node, require_attached=False):
try:
is_source = bool(getattr(ssbo_editor, "is_source_tree_node", lambda *_: False)(scene_node))
except Exception:
is_source = False
if not is_source:
return scene_node
# Last fallback: runtime root model (still visible), not source root.
runtime_model = getattr(ssbo_editor, "model", None)
if runtime_model and self._node_is_valid(runtime_model, require_attached=False):
return runtime_model
return self._get_selection_node()
def _get_selection_key(self):
ssbo_editor = getattr(self, "ssbo_editor", None)
if ssbo_editor and hasattr(ssbo_editor, "has_active_selection") and ssbo_editor.has_active_selection():
return getattr(ssbo_editor, "get_selection_key", lambda: None)()
return None
def _get_ssbo_selection_summary(self):
ssbo_editor = getattr(self, "ssbo_editor", None)
if not ssbo_editor or not hasattr(ssbo_editor, "has_active_selection"):
return None
if not ssbo_editor.has_active_selection():
return None
return ssbo_editor.get_selection_summary()
def _draw_menu_bar(self):
self.editor_panels.draw_menu_bar()
def _draw_toolbar(self):
self.editor_panels.draw_toolbar()
def _draw_scene_tree(self, *args, **kwargs):
return self.editor_panels._draw_scene_tree(*args, **kwargs)
def _build_scene_tree(self, *args, **kwargs):
return self.editor_panels._build_scene_tree(*args, **kwargs)
def _draw_scene_node(self, *args, **kwargs):
return self.editor_panels._draw_scene_node(*args, **kwargs)
def _show_node_context_menu(self, *args, **kwargs):
return self.editor_panels._show_node_context_menu(*args, **kwargs)
def _draw_resource_manager(self, *args, **kwargs):
return self.editor_panels._draw_resource_manager(*args, **kwargs)
def _draw_property_panel(self, *args, **kwargs):
return self.editor_panels._draw_property_panel(*args, **kwargs)
def _draw_web_panel(self, *args, **kwargs):
return self.editor_panels._draw_web_panel(*args, **kwargs)
def _draw_node_properties(self, *args, **kwargs):
return self.editor_panels._draw_node_properties(*args, **kwargs)
def _getActor(self, *args, **kwargs):
return self.animation_tools._getActor(*args, **kwargs)
def _getModelFormat(self, *args, **kwargs):
return self.animation_tools._getModelFormat(*args, **kwargs)
def _processAnimationNames(self, *args, **kwargs):
return self.animation_tools._processAnimationNames(*args, **kwargs)
def _isLikelyBoneGroup(self, *args, **kwargs):
return self.animation_tools._isLikelyBoneGroup(*args, **kwargs)
def _analyzeAnimationQuality(self, *args, **kwargs):
return self.animation_tools._analyzeAnimationQuality(*args, **kwargs)
def _playAnimation(self, *args, **kwargs):
return self.animation_tools._playAnimation(*args, **kwargs)
def _pauseAnimation(self, *args, **kwargs):
return self.animation_tools._pauseAnimation(*args, **kwargs)
def _stopAnimation(self, *args, **kwargs):
return self.animation_tools._stopAnimation(*args, **kwargs)
def _loopAnimation(self, *args, **kwargs):
return self.animation_tools._loopAnimation(*args, **kwargs)
def _setAnimationSpeed(self, *args, **kwargs):
return self.animation_tools._setAnimationSpeed(*args, **kwargs)
def _clear_animation_cache(self, *args, **kwargs):
return self.animation_tools._clear_animation_cache(*args, **kwargs)
def _get_node_type_from_node(self, node):
"""从节点判断其类型"""
# 检查是否为GUI元素
if hasattr(node, 'getPythonTag') and node.getPythonTag('gui_element'):
return "GUI元素"
try:
if node.hasTag("tree_item_type"):
tree_item_type = str(node.getTag("tree_item_type") or "").strip().upper()
if tree_item_type == "CAMERA_NODE":
return "相机"
if tree_item_type in {"LIGHT_NODE", "SPOT_LIGHT_NODE", "POINT_LIGHT_NODE"}:
return "光源"
if node.hasTag("light_type"):
return "光源"
except Exception:
pass
try:
panda_node = node.node() if hasattr(node, "node") else None
if panda_node is not None and hasattr(panda_node, "getClassType"):
class_name = panda_node.getClassType().getName() or ""
class_name_lower = class_name.lower()
if "camera" in class_name_lower:
return "相机"
if "light" in class_name_lower:
return "光源"
except Exception:
pass
node_name = node.getName() or ""
node_name_lower = node_name.lower()
# 检查是否为光源
if "light" in node_name_lower:
return "光源"
# 检查是否为相机
if "camera" in node_name_lower:
return "相机"
# 检查是否为模型
try:
if hasattr(self, "_resolve_animation_owner_model"):
owner = self._resolve_animation_owner_model(node)
if owner and not owner.isEmpty() and owner != node:
return "模型"
except Exception:
pass
try:
if hasattr(self, "animation_tools") and hasattr(self.animation_tools, "_resolve_ssbo_source_owner"):
source_owner = self.animation_tools._resolve_ssbo_source_owner(node)
if source_owner and not source_owner.isEmpty():
return "模型"
except Exception:
pass
try:
model_tag_names = ("model_path", "original_path", "saved_model_path")
if any(node.hasTag(tag_name) and bool(node.getTag(tag_name)) for tag_name in model_tag_names):
return "模型"
if node.hasTag("is_model_root") and node.getTag("is_model_root") == "1":
return "模型"
if node.hasTag("tree_item_type") and node.getTag("tree_item_type") == "IMPORTED_MODEL_NODE":
return "模型"
if node.hasTag("has_animations") and node.getTag("has_animations").lower() == "true":
return "模型"
cached_anim = node.getPythonTag("animation") if hasattr(node, "getPythonTag") else None
if cached_anim is True:
return "模型"
except Exception:
pass
if hasattr(self, 'scene_manager') and self.scene_manager:
if hasattr(self.scene_manager, 'models') and node in self.scene_manager.models:
return "模型"
# 默认为几何体
return "几何体"
def _draw_status_badges(self, *args, **kwargs):
return self.editor_panels._draw_status_badges(*args, **kwargs)
def _draw_transform_properties(self, *args, **kwargs):
return self.editor_panels._draw_transform_properties(*args, **kwargs)
def _draw_gui_properties(self, *args, **kwargs):
return self.editor_panels._draw_gui_properties(*args, **kwargs)
def _draw_light_properties(self, *args, **kwargs):
return self.editor_panels._draw_light_properties(*args, **kwargs)
def _draw_model_properties(self, *args, **kwargs):
return self.editor_panels._draw_model_properties(*args, **kwargs)
def _draw_animation_properties(self, *args, **kwargs):
return self.editor_panels._draw_animation_properties(*args, **kwargs)
def _draw_collision_properties(self, *args, **kwargs):
return self.editor_panels._draw_collision_properties(*args, **kwargs)
def _draw_shape_specific_parameters(self, *args, **kwargs):
return self.editor_panels._draw_shape_specific_parameters(*args, **kwargs)
def _draw_sphere_parameters(self, *args, **kwargs):
return self.editor_panels._draw_sphere_parameters(*args, **kwargs)
def _draw_box_parameters(self, *args, **kwargs):
return self.editor_panels._draw_box_parameters(*args, **kwargs)
def _draw_capsule_parameters(self, *args, **kwargs):
return self.editor_panels._draw_capsule_parameters(*args, **kwargs)
def _draw_plane_parameters(self, *args, **kwargs):
return self.editor_panels._draw_plane_parameters(*args, **kwargs)
def _draw_property_actions(self, *args, **kwargs):
return self.editor_panels._draw_property_actions(*args, **kwargs)
def _draw_appearance_properties(self, *args, **kwargs):
return self.editor_panels._draw_appearance_properties(*args, **kwargs)
def _draw_material_properties(self, *args, **kwargs):
return self.editor_panels._draw_material_properties(*args, **kwargs)
def _draw_shading_model_panel(self, *args, **kwargs):
return self.editor_panels._draw_shading_model_panel(*args, **kwargs)
def _apply_gui_font(self, *args, **kwargs):
return self.property_helpers._apply_gui_font(*args, **kwargs)
def _apply_gui_font_size(self, *args, **kwargs):
return self.property_helpers._apply_gui_font_size(*args, **kwargs)
def _apply_gui_font_style(self, *args, **kwargs):
return self.property_helpers._apply_gui_font_style(*args, **kwargs)
def _has_collision(self, *args, **kwargs):
return self.property_helpers._has_collision(*args, **kwargs)
def _get_current_collision_shape(self, *args, **kwargs):
return self.property_helpers._get_current_collision_shape(*args, **kwargs)
def _get_current_collision_shape_type(self, *args, **kwargs):
return self.property_helpers._get_current_collision_shape_type(*args, **kwargs)
def _capture_collision_snapshot(self, *args, **kwargs):
return self.property_helpers._capture_collision_snapshot(*args, **kwargs)
def _collision_snapshots_equal(self, *args, **kwargs):
return self.property_helpers._collision_snapshots_equal(*args, **kwargs)
def _apply_collision_snapshot(self, *args, **kwargs):
return self.property_helpers._apply_collision_snapshot(*args, **kwargs)
def _get_collision_position_offset(self, *args, **kwargs):
return self.property_helpers._get_collision_position_offset(*args, **kwargs)
def _is_collision_visible(self, *args, **kwargs):
return self.property_helpers._is_collision_visible(*args, **kwargs)
def _add_collision_to_node(self, *args, **kwargs):
return self.property_helpers._add_collision_to_node(*args, **kwargs)
def _remove_collision_from_node(self, *args, **kwargs):
return self.property_helpers._remove_collision_from_node(*args, **kwargs)
def _toggle_collision_visibility(self, *args, **kwargs):
return self.property_helpers._toggle_collision_visibility(*args, **kwargs)
def _update_collision_position(self, *args, **kwargs):
return self.property_helpers._update_collision_position(*args, **kwargs)
def _get_shape_type_from_name(self, *args, **kwargs):
return self.property_helpers._get_shape_type_from_name(*args, **kwargs)
def _get_sphere_radius(self, *args, **kwargs):
return self.property_helpers._get_sphere_radius(*args, **kwargs)
def _update_sphere_radius(self, *args, **kwargs):
return self.property_helpers._update_sphere_radius(*args, **kwargs)
def _get_box_size(self, *args, **kwargs):
return self.property_helpers._get_box_size(*args, **kwargs)
def _update_box_size(self, *args, **kwargs):
return self.property_helpers._update_box_size(*args, **kwargs)
def _get_capsule_radius(self, *args, **kwargs):
return self.property_helpers._get_capsule_radius(*args, **kwargs)
def _update_capsule_radius(self, *args, **kwargs):
return self.property_helpers._update_capsule_radius(*args, **kwargs)
def _get_capsule_height(self, *args, **kwargs):
return self.property_helpers._get_capsule_height(*args, **kwargs)
def _update_capsule_height(self, *args, **kwargs):
return self.property_helpers._update_capsule_height(*args, **kwargs)
def _get_plane_normal(self, *args, **kwargs):
return self.property_helpers._get_plane_normal(*args, **kwargs)
def _update_plane_normal(self, *args, **kwargs):
return self.property_helpers._update_plane_normal(*args, **kwargs)
def _manual_collision_detection(self, *args, **kwargs):
return self.property_helpers._manual_collision_detection(*args, **kwargs)
def _update_node_name(self, *args, **kwargs):
return self.property_helpers._update_node_name(*args, **kwargs)
def _get_light_color(self, *args, **kwargs):
return self.property_helpers._get_light_color(*args, **kwargs)
def _apply_light_color(self, *args, **kwargs):
return self.property_helpers._apply_light_color(*args, **kwargs)
def _capture_light_snapshot(self, *args, **kwargs):
return self.property_helpers._capture_light_snapshot(*args, **kwargs)
def _light_snapshots_equal(self, *args, **kwargs):
return self.property_helpers._light_snapshots_equal(*args, **kwargs)
def _apply_light_snapshot(self, *args, **kwargs):
return self.property_helpers._apply_light_snapshot(*args, **kwargs)
def _get_material_base_color(self, *args, **kwargs):
return self.property_helpers._get_material_base_color(*args, **kwargs)
def _capture_node_material_snapshot(self, *args, **kwargs):
return self.property_helpers._capture_node_material_snapshot(*args, **kwargs)
def _material_snapshots_equal(self, *args, **kwargs):
return self.property_helpers._material_snapshots_equal(*args, **kwargs)
def _apply_node_material_snapshot(self, *args, **kwargs):
return self.property_helpers._apply_node_material_snapshot(*args, **kwargs)
def _get_node_materials(self, *args, **kwargs):
return self.property_helpers._get_node_materials(*args, **kwargs)
def _ensure_material_for_node(self, *args, **kwargs):
return self.property_helpers._ensure_material_for_node(*args, **kwargs)
def _get_material_surface_type(self, *args, **kwargs):
return self.property_helpers._get_material_surface_type(*args, **kwargs)
def _set_material_surface_type(self, *args, **kwargs):
return self.property_helpers._set_material_surface_type(*args, **kwargs)
def _refresh_pipeline_material_mode(self, *args, **kwargs):
return self.property_helpers._refresh_pipeline_material_mode(*args, **kwargs)
def _get_material_opacity(self, *args, **kwargs):
return self.property_helpers._get_material_opacity(*args, **kwargs)
def _set_material_opacity(self, *args, **kwargs):
return self.property_helpers._set_material_opacity(*args, **kwargs)
def _apply_material_surface_state(self, *args, **kwargs):
return self.property_helpers._apply_material_surface_state(*args, **kwargs)
def _set_material_base_color(self, *args, **kwargs):
return self.property_helpers._set_material_base_color(*args, **kwargs)
def _apply_material_to_geom_states(self, *args, **kwargs):
return self.property_helpers._apply_material_to_geom_states(*args, **kwargs)
def _sync_material_node_runtime(self, *args, **kwargs):
return self.property_helpers._sync_material_node_runtime(*args, **kwargs)
def _update_material_base_color(self, *args, **kwargs):
return self.property_helpers._update_material_base_color(*args, **kwargs)
def _update_material_roughness(self, *args, **kwargs):
return self.property_helpers._update_material_roughness(*args, **kwargs)
def _update_material_metallic(self, *args, **kwargs):
return self.property_helpers._update_material_metallic(*args, **kwargs)
def _update_material_ior(self, *args, **kwargs):
return self.property_helpers._update_material_ior(*args, **kwargs)
def _apply_material_preset(self, *args, **kwargs):
return self.property_helpers._apply_material_preset(*args, **kwargs)
def _apply_material_to_node(self, *args, **kwargs):
return self.property_helpers._apply_material_to_node(*args, **kwargs)
def _reset_material(self, *args, **kwargs):
return self.property_helpers._reset_material(*args, **kwargs)
def _select_texture_for_material(self, *args, **kwargs):
return self.property_helpers._select_texture_for_material(*args, **kwargs)
def _apply_texture_to_material(self, *args, **kwargs):
return self.property_helpers._apply_texture_to_material(*args, **kwargs)
def _clear_all_textures(self, *args, **kwargs):
return self.property_helpers._clear_all_textures(*args, **kwargs)
def _display_current_textures(self, *args, **kwargs):
return self.property_helpers._display_current_textures(*args, **kwargs)
def _update_shading_model(self, *args, **kwargs):
return self.property_helpers._update_shading_model(*args, **kwargs)
def _update_transparency(self, *args, **kwargs):
return self.property_helpers._update_transparency(*args, **kwargs)
def _draw_texture_file_dialog(self, *args, **kwargs):
return self.property_helpers._draw_texture_file_dialog(*args, **kwargs)
def start_transform_monitoring(self, *args, **kwargs):
return self.property_helpers.start_transform_monitoring(*args, **kwargs)
def stop_transform_monitoring(self, *args, **kwargs):
return self.property_helpers.stop_transform_monitoring(*args, **kwargs)
def _update_last_transform_values(self, *args, **kwargs):
return self.property_helpers._update_last_transform_values(*args, **kwargs)
def _check_transform_changes(self, *args, **kwargs):
return self.property_helpers._check_transform_changes(*args, **kwargs)
def update_transform_monitoring(self, *args, **kwargs):
return self.property_helpers.update_transform_monitoring(*args, **kwargs)
def show_color_picker(self, *args, **kwargs):
return self.property_helpers.show_color_picker(*args, **kwargs)
def _draw_color_picker(self, *args, **kwargs):
return self.property_helpers._draw_color_picker(*args, **kwargs)
def _apply_color_selection(self, *args, **kwargs):
return self.property_helpers._apply_color_selection(*args, **kwargs)
def _draw_color_button(self, *args, **kwargs):
return self.property_helpers._draw_color_button(*args, **kwargs)
def _refresh_available_fonts(self, *args, **kwargs):
return self.property_helpers._refresh_available_fonts(*args, **kwargs)
def show_font_selector(self, *args, **kwargs):
return self.property_helpers.show_font_selector(*args, **kwargs)
def _draw_font_selector(self, *args, **kwargs):
return self.property_helpers._draw_font_selector(*args, **kwargs)
def _apply_font_selection(self, *args, **kwargs):
return self.property_helpers._apply_font_selection(*args, **kwargs)
def _draw_font_selector_button(self, *args, **kwargs):
return self.property_helpers._draw_font_selector_button(*args, **kwargs)
def _draw_console(self, *args, **kwargs):
return self.script_panels._draw_console(*args, **kwargs)
def _draw_script_panel(self, *args, **kwargs):
return self.script_panels._draw_script_panel(*args, **kwargs)
def _draw_script_status_group(self, *args, **kwargs):
return self.script_panels._draw_script_status_group(*args, **kwargs)
def _draw_create_script_group(self, *args, **kwargs):
return self.script_panels._draw_create_script_group(*args, **kwargs)
def _draw_available_scripts_group(self, *args, **kwargs):
return self.script_panels._draw_available_scripts_group(*args, **kwargs)
def _draw_script_mounting_group(self, *args, **kwargs):
return self.script_panels._draw_script_mounting_group(*args, **kwargs)
def _toggle_hot_reload(self, *args, **kwargs):
return self.app_actions._toggle_hot_reload(*args, **kwargs)
def _set_hot_reload_enabled(self, *args, **kwargs):
return self.app_actions._set_hot_reload_enabled(*args, **kwargs)
def _create_new_script(self, *args, **kwargs):
return self.app_actions._create_new_script(*args, **kwargs)
def _refresh_scripts_list(self, *args, **kwargs):
return self.app_actions._refresh_scripts_list(*args, **kwargs)
def _reload_all_scripts(self, *args, **kwargs):
return self.app_actions._reload_all_scripts(*args, **kwargs)
def _on_script_selected(self, *args, **kwargs):
return self.app_actions._on_script_selected(*args, **kwargs)
def _edit_script(self, *args, **kwargs):
return self.app_actions._edit_script(*args, **kwargs)
def _mount_script_to_selected(self, *args, **kwargs):
return self.app_actions._mount_script_to_selected(*args, **kwargs)
def _unmount_script_from_selected(self, *args, **kwargs):
return self.app_actions._unmount_script_from_selected(*args, **kwargs)
def _on_new_project(self, *args, **kwargs):
return self.app_actions._on_new_project(*args, **kwargs)
def _on_open_project(self, *args, **kwargs):
return self.app_actions._on_open_project(*args, **kwargs)
def _on_save_project(self, *args, **kwargs):
return self.app_actions._on_save_project(*args, **kwargs)
def _on_save_as_project(self, *args, **kwargs):
return self.app_actions._on_save_as_project(*args, **kwargs)
def _on_build_project(self, *args, **kwargs):
return self.app_actions._on_build_project(*args, **kwargs)
def _on_build_webgl_package(self, *args, **kwargs):
return self.app_actions._on_build_webgl_package(*args, **kwargs)
def _execute_webgl_package(self, *args, **kwargs):
return self.app_actions._execute_webgl_package(*args, **kwargs)
def _build_project_impl(self, *args, **kwargs):
return self.app_actions._build_project_impl(*args, **kwargs)
def _show_about_dialog(self, *args, **kwargs):
return self.app_actions._show_about_dialog(*args, **kwargs)
def _open_documentation(self, *args, **kwargs):
return self.app_actions._open_documentation(*args, **kwargs)
def _on_exit(self, *args, **kwargs):
return self.app_actions._on_exit(*args, **kwargs)
def _on_ctrl_pressed(self, *args, **kwargs):
return self.app_actions._on_ctrl_pressed(*args, **kwargs)
def _on_ctrl_released(self, *args, **kwargs):
return self.app_actions._on_ctrl_released(*args, **kwargs)
def _on_alt_pressed(self, *args, **kwargs):
return self.app_actions._on_alt_pressed(*args, **kwargs)
def _on_alt_released(self, *args, **kwargs):
return self.app_actions._on_alt_released(*args, **kwargs)
def _on_n_pressed(self, *args, **kwargs):
return self.app_actions._on_n_pressed(*args, **kwargs)
def _on_o_pressed(self, *args, **kwargs):
return self.app_actions._on_o_pressed(*args, **kwargs)
def _on_f4_pressed(self, *args, **kwargs):
return self.app_actions._on_f4_pressed(*args, **kwargs)
def _on_delete_pressed(self, *args, **kwargs):
return self.app_actions._on_delete_pressed(*args, **kwargs)
def _on_escape_pressed(self, *args, **kwargs):
return self.app_actions._on_escape_pressed(*args, **kwargs)
def _on_wheel_up(self, *args, **kwargs):
return self.app_actions._on_wheel_up(*args, **kwargs)
def _on_wheel_down(self, *args, **kwargs):
return self.app_actions._on_wheel_down(*args, **kwargs)
def _is_mouse_over_imgui(self, *args, **kwargs):
return self.app_actions._is_mouse_over_imgui(*args, **kwargs)
def processImGuiMouseClick(self, *args, **kwargs):
return self.app_actions.processImGuiMouseClick(*args, **kwargs)
def add_message(self, *args, **kwargs):
return self.app_actions.add_message(*args, **kwargs)
def add_success_message(self, *args, **kwargs):
return self.app_actions.add_success_message(*args, **kwargs)
def add_error_message(self, *args, **kwargs):
return self.app_actions.add_error_message(*args, **kwargs)
def add_warning_message(self, *args, **kwargs):
return self.app_actions.add_warning_message(*args, **kwargs)
def add_info_message(self, *args, **kwargs):
return self.app_actions.add_info_message(*args, **kwargs)
def _on_undo(self, *args, **kwargs):
return self.app_actions._on_undo(*args, **kwargs)
def _on_redo(self, *args, **kwargs):
return self.app_actions._on_redo(*args, **kwargs)
def _on_copy(self, *args, **kwargs):
return self.app_actions._on_copy(*args, **kwargs)
def _on_cut(self, *args, **kwargs):
return self.app_actions._on_cut(*args, **kwargs)
def _on_paste(self, *args, **kwargs):
return self.app_actions._on_paste(*args, **kwargs)
def _on_delete(self, *args, **kwargs):
return self.app_actions._on_delete(*args, **kwargs)
def _delete_node(self, *args, **kwargs):
return self.app_actions._delete_node(*args, **kwargs)
def _perform_node_cleanup(self, *args, **kwargs):
return self.app_actions._perform_node_cleanup(*args, **kwargs)
def _create_new_project(self, *args, **kwargs):
return self.app_actions._create_new_project(*args, **kwargs)
def _open_project_path(self, *args, **kwargs):
return self.app_actions._open_project_path(*args, **kwargs)
def _save_project_impl(self, *args, **kwargs):
return self.app_actions._save_project_impl(*args, **kwargs)
def _open_project_impl(self, *args, **kwargs):
return self.app_actions._open_project_impl(*args, **kwargs)
def _create_new_project_impl(self, *args, **kwargs):
return self.app_actions._create_new_project_impl(*args, **kwargs)
def _save_project_as_impl(self, *args, **kwargs):
return self.app_actions._save_project_as_impl(*args, **kwargs)
def _update_window_title(self, *args, **kwargs):
return self.app_actions._update_window_title(*args, **kwargs)
def _import_model_for_runtime(self, *args, **kwargs):
return self.app_actions._import_model_for_runtime(*args, **kwargs)
def _on_import_model(self, *args, **kwargs):
return self.app_actions._on_import_model(*args, **kwargs)
def _import_model(self, *args, **kwargs):
return self.app_actions._import_model(*args, **kwargs)
def _import_model_with_menu_logic(self, *args, **kwargs):
return self.app_actions._import_model_with_menu_logic(*args, **kwargs)
def _draw_new_project_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_new_project_dialog(*args, **kwargs)
def _draw_open_project_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_open_project_dialog(*args, **kwargs)
def _draw_save_as_project_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_save_as_project_dialog(*args, **kwargs)
def _draw_build_project_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_build_project_dialog(*args, **kwargs)
def _draw_path_browser(self, *args, **kwargs):
return self.dialog_panels._draw_path_browser(*args, **kwargs)
def _draw_import_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_import_dialog(*args, **kwargs)
def _refresh_path_browser(self, *args, **kwargs):
return self.dialog_panels._refresh_path_browser(*args, **kwargs)
def _apply_selected_path(self, *args, **kwargs):
return self.dialog_panels._apply_selected_path(*args, **kwargs)
def _draw_spot_light_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_spot_light_dialog(*args, **kwargs)
def _draw_point_light_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_point_light_dialog(*args, **kwargs)
def _draw_terrain_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_terrain_dialog(*args, **kwargs)
def _draw_script_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_script_dialog(*args, **kwargs)
def _draw_script_browser(self, *args, **kwargs):
return self.dialog_panels._draw_script_browser(*args, **kwargs)
def _refresh_script_browser(self, *args, **kwargs):
return self.dialog_panels._refresh_script_browser(*args, **kwargs)
def _draw_heightmap_browser(self, *args, **kwargs):
return self.dialog_panels._draw_heightmap_browser(*args, **kwargs)
def _refresh_heightmap_browser(self, *args, **kwargs):
return self.dialog_panels._refresh_heightmap_browser(*args, **kwargs)
def _draw_about_dialog(self, *args, **kwargs):
return self.dialog_panels._draw_about_dialog(*args, **kwargs)
def setup_drag_drop_support(self):
"""初始化拖拽支持。"""
return self.model_drag_drop.setup_drag_drop_support()
def _is_point_in_resource_manager(self, drop_pos):
"""判断投放坐标是否命中资源管理器窗口。"""
return self.model_drag_drop.is_point_in_resource_manager(drop_pos)
def _resolve_resource_drop_target_dir(self, drop_pos):
"""根据投放坐标解析资源管理器中的目标目录。"""
return self.model_drag_drop.resolve_resource_drop_target_dir(drop_pos)
def _process_external_drop_events(self):
"""处理外部拖入(系统文件拖拽)事件。"""
return self.model_drag_drop.process_external_drop_events()
def _handle_external_drop(self, file_paths, drop_pos=None):
"""把外部拖入文件分发到资源管理器或场景。"""
return self.model_drag_drop.handle_external_drop(file_paths, drop_pos)
def add_dragged_file(self, file_path):
"""添加拖拽的文件"""
return self.model_drag_drop.add_dragged_file(file_path)
def clear_dragged_files(self):
"""清空拖拽文件列表"""
return self.model_drag_drop.clear_dragged_files()
def process_dragged_files(self):
"""处理拖拽的文件"""
return self.model_drag_drop.process_dragged_files()
def _import_model_from_path(self, file_path):
"""从路径导入模型的内部方法"""
return self.model_drag_drop.import_model_from_path(file_path)
def _draw_drag_drop_interface(self, *args, **kwargs):
return self.interaction_panels._draw_drag_drop_interface(*args, **kwargs)
def _handle_drag_drop_completion(self, *args, **kwargs):
return self.interaction_panels._handle_drag_drop_completion(*args, **kwargs)
def _draw_drag_overlay(self, *args, **kwargs):
return self.interaction_panels._draw_drag_overlay(*args, **kwargs)
def _draw_drag_status(self, *args, **kwargs):
return self.interaction_panels._draw_drag_status(*args, **kwargs)
def _draw_context_menus(self, *args, **kwargs):
return self.interaction_panels._draw_context_menus(*args, **kwargs)
def _delete_node_simple(self, *args, **kwargs):
return self.interaction_panels._delete_node_simple(*args, **kwargs)
def _copy_node(self, *args, **kwargs):
return self.interaction_panels._copy_node(*args, **kwargs)
def _on_create_empty_object(self, *args, **kwargs):
return self.create_actions._on_create_empty_object(*args, **kwargs)
def _on_create_cube(self, *args, **kwargs):
return self.create_actions._on_create_cube(*args, **kwargs)
def _on_create_sphere(self, *args, **kwargs):
return self.create_actions._on_create_sphere(*args, **kwargs)
def _on_create_cylinder(self, *args, **kwargs):
return self.create_actions._on_create_cylinder(*args, **kwargs)
def _on_create_plane(self, *args, **kwargs):
return self.create_actions._on_create_plane(*args, **kwargs)
def _on_create_3d_text(self, *args, **kwargs):
return self.create_actions._on_create_3d_text(*args, **kwargs)
def _on_create_3d_image(self, *args, **kwargs):
return self.create_actions._on_create_3d_image(*args, **kwargs)
def _on_create_gui_button(self, *args, **kwargs):
return self.create_actions._on_create_gui_button(*args, **kwargs)
def _on_create_gui_label(self, *args, **kwargs):
return self.create_actions._on_create_gui_label(*args, **kwargs)
def _on_create_gui_entry(self, *args, **kwargs):
return self.create_actions._on_create_gui_entry(*args, **kwargs)
def _on_create_gui_image(self, *args, **kwargs):
return self.create_actions._on_create_gui_image(*args, **kwargs)
def _on_create_video_screen(self, *args, **kwargs):
return self.create_actions._on_create_video_screen(*args, **kwargs)
def _on_create_2d_video_screen(self, *args, **kwargs):
return self.create_actions._on_create_2d_video_screen(*args, **kwargs)
def _on_create_spherical_video(self, *args, **kwargs):
return self.create_actions._on_create_spherical_video(*args, **kwargs)
def _on_create_virtual_screen(self, *args, **kwargs):
return self.create_actions._on_create_virtual_screen(*args, **kwargs)
def _on_create_spot_light(self, *args, **kwargs):
return self.create_actions._on_create_spot_light(*args, **kwargs)
def _on_create_point_light(self, *args, **kwargs):
return self.create_actions._on_create_point_light(*args, **kwargs)
def _on_create_flat_terrain(self, *args, **kwargs):
return self.create_actions._on_create_flat_terrain(*args, **kwargs)
def _on_create_heightmap_terrain(self, *args, **kwargs):
return self.create_actions._on_create_heightmap_terrain(*args, **kwargs)
def _on_create_script(self, *args, **kwargs):
return self.create_actions._on_create_script(*args, **kwargs)
def _on_load_script(self, *args, **kwargs):
return self.create_actions._on_load_script(*args, **kwargs)
def _on_reload_all_scripts(self, *args, **kwargs):
return self.create_actions._on_reload_all_scripts(*args, **kwargs)
def _on_open_scripts_manager(self, *args, **kwargs):
return self.create_actions._on_open_scripts_manager(*args, **kwargs)
def _on_create_2d_sample_panel(self, *args, **kwargs):
return self.create_actions._on_create_2d_sample_panel(*args, **kwargs)
def _on_create_3d_sample_panel(self, *args, **kwargs):
return self.create_actions._on_create_3d_sample_panel(*args, **kwargs)
def _on_create_web_panel(self, *args, **kwargs):
return self.create_actions._on_create_web_panel(*args, **kwargs)
def createEmptyObject(self, *args, **kwargs):
return self.object_factory.createEmptyObject(*args, **kwargs)
def create3DText(self, *args, **kwargs):
return self.object_factory.create3DText(*args, **kwargs)
def create3DImage(self, *args, **kwargs):
return self.object_factory.create3DImage(*args, **kwargs)
def createCube(self, *args, **kwargs):
return self.object_factory.createCube(*args, **kwargs)
def createSphere(self, *args, **kwargs):
return self.object_factory.createSphere(*args, **kwargs)
def createCylinder(self, *args, **kwargs):
return self.object_factory.createCylinder(*args, **kwargs)
def createPlane(self, *args, **kwargs):
return self.object_factory.createPlane(*args, **kwargs)
def create2DSamplePanel(self, *args, **kwargs):
return self.object_factory.create2DSamplePanel(*args, **kwargs)
def create3DSamplePanel(self, *args, **kwargs):
return self.object_factory.create3DSamplePanel(*args, **kwargs)
def createWebPanel(self, *args, **kwargs):
return self.object_factory.createWebPanel(*args, **kwargs)
def createGUIButton(self, pos=(0, 0, 0), text="按钮", size=0.1):
return self.runtime_actions.createGUIButton(pos, text, size)
def _create_simple_gui_button(self, pos=(0, 0, 0), text="按钮", size=0.1):
return self.runtime_actions._create_simple_gui_button(pos, text, size)
def _on_gui_button_click(self):
return self.runtime_actions._on_gui_button_click()
def _toggle_vr_mode(self):
return self.runtime_actions._toggle_vr_mode()
def _exit_vr_mode(self):
return self.runtime_actions._exit_vr_mode()
def _show_vr_status(self):
return self.runtime_actions._show_vr_status()
def _show_vr_settings(self):
return self.runtime_actions._show_vr_settings()
def _show_vr_performance_report(self):
return self.runtime_actions._show_vr_performance_report()
def _get_chinese_font(self):
return self.runtime_actions._get_chinese_font()
def createGUILabel(self, pos=(0, 0, 0), text="标签", size=0.08):
return self.runtime_actions.createGUILabel(pos, text, size)
def _create_simple_gui_label(self, pos=(0, 0, 0), text="标签", size=0.08):
return self.runtime_actions._create_simple_gui_label(pos, text, size)
def createGUIEntry(self, pos=(0, 0, 0), placeholder="输入文本...", size=0.08):
return self.runtime_actions.createGUIEntry(pos, placeholder, size)
def _create_simple_gui_entry(self, pos=(0, 0, 0), placeholder="输入文本...", size=0.08):
return self.runtime_actions._create_simple_gui_entry(pos, placeholder, size)
def createGUIImage(self, pos=(0, 0, 0), image_path=None, size=2):
return self.runtime_actions.createGUIImage(pos, image_path, size)
def _create_simple_gui_image(self, pos=(0, 0, 0), image_path=None, size=2):
return self.runtime_actions._create_simple_gui_image(pos, image_path, size)
def createVideoScreen(self, pos=(0, 0, 0), size=1, video_path=None):
return self.runtime_actions.createVideoScreen(pos, size, video_path)
def create2DVideoScreen(self, pos=(0, 0, 0), size=0.2, video_path=None):
return self.runtime_actions.create2DVideoScreen(pos, size, video_path)
def createSphericalVideo(self, pos=(0, 0, 0), radius=5.0, video_path=None):
return self.runtime_actions.createSphericalVideo(pos, radius, video_path)
def createVirtualScreen(self, pos=(0, 0, 0), size=(2, 1), text="虚拟屏幕"):
return self.runtime_actions.createVirtualScreen(pos, size, text)
def createSpotLight(self, pos=(0, 0, 5)):
return self.runtime_actions.createSpotLight(pos)
def createPointLight(self, pos=(0, 0, 5)):
return self.runtime_actions.createPointLight(pos)
def createFlatTerrain(self, size=(10, 10), resolution=129):
return self.runtime_actions.createFlatTerrain(size, resolution)
def createTerrainFromHeightMap(self, heightmap_path, scale=(1.0, 1.0, 10.0)):
return self.runtime_actions.createTerrainFromHeightMap(heightmap_path, scale)
def createScript(self, script_name, template="basic"):
return self.runtime_actions.createScript(script_name, template)
def loadScript(self, script_path):
return self.runtime_actions.loadScript(script_path)