#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 快速选择功能测试 测试修复后的选择功能是否能正确工作 """ import sys import os sys.path.append('..') from direct.showbase.ShowBase import ShowBase from panda3d.core import CardMaker, Vec3, Point3, Material, ModelRoot from PyQt5.QtWidgets import QApplication def main(): """运行完整的主程序进行测试""" print("启动选择功能修复测试...") # 直接运行主程序 from main import MyWorld from ui.main_window import setup_main_window world = MyWorld() app, main_window = setup_main_window(world) # 创建一个简单的测试立方体 print("创建测试立方体...") cm = CardMaker('test_cube') cm.setFrame(-2, 2, -2, 2) model_root = world.render.attachNewNode(ModelRoot("TestCube")) # 创建6个面 for i, (x, y, z, rx, ry, rz) in enumerate([ (0, 0, 2, 0, 0, 0), # 前面 (0, 0, -2, 0, 180, 0), # 后面 (2, 0, 0, 0, 90, 0), # 右面 (-2, 0, 0, 0, -90, 0), # 左面 (0, 2, 0, 90, 0, 0), # 顶面 (0, -2, 0, -90, 0, 0), # 底面 ]): face = model_root.attachNewNode(cm.generate()) face.setPos(x, y, z) face.setHpr(rx, ry, rz) # 设置位置和颜色 model_root.setPos(0, 10, 3) model_root.setColor(0.8, 0.3, 0.3, 1.0) # 创建材质 material = Material() material.setDiffuse((0.8, 0.3, 0.3, 1.0)) material.setAmbient((0.2, 0.1, 0.1, 1.0)) material.setSpecular((0.5, 0.5, 0.5, 1.0)) material.setShininess(32.0) model_root.setMaterial(material) # 设置标签 model_root.setTag("file", "TestCube") model_root.setTag("is_model_root", "1") # 添加到场景管理器 world.scene_manager.models.append(model_root) # 设置碰撞检测 world.scene_manager.setupCollision(model_root) # 更新场景树 world.scene_manager.updateSceneTree() print("✓ 测试立方体创建完成") print("\n=== 测试说明 ===") print("1. 点击红色立方体测试选择功能") print("2. 观察控制台输出,确认选择过程") print("3. 检查是否显示选择框和坐标轴") print("4. 检查左侧树形控件是否高亮") print("5. 尝试拖拽坐标轴移动物体") print("================") # 启用射线显示用于调试 world.setRayDisplay(True) print("射线显示已启用") # 显示窗口 main_window.show() # 运行应用 sys.exit(app.exec_()) if __name__ == "__main__": main()