8.28合并
This commit is contained in:
parent
f4b16c36c6
commit
ace5229473
@ -53,7 +53,7 @@ class Panda3DWorld(ShowBase):
|
||||
Panda3DWorld : A class to handle all panda3D world manipulation
|
||||
"""
|
||||
|
||||
def __init__(self, width=1254, height=729, is_fullscreen=False, size=1.0, clear_color=LVecBase4f(0, 0.5, 0, 1),
|
||||
def __init__(self, width=1380, height=729, is_fullscreen=False, size=1.0, clear_color=LVecBase4f(0, 0.5, 0, 1),
|
||||
name="qpanda3D"):
|
||||
|
||||
global _global_world_instance
|
||||
|
||||
9
main.py
9
main.py
@ -107,6 +107,15 @@ class MyWorld(CoreWorld):
|
||||
# 默认启用模型间碰撞检测(可选)
|
||||
self.enableModelCollisionDetection(enable=True, frequency=0.1, threshold=0.5)
|
||||
|
||||
try:
|
||||
self.property_panel = PropertyPanelManager(self)
|
||||
print("✓ 属性面板管理器初始化完成")
|
||||
except Exception as e:
|
||||
print(f"⚠ 属性面板管理器初始化失败: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
self.property_panel = None
|
||||
|
||||
print("✓ MyWorld 初始化完成")
|
||||
print("✅ 碰撞管理器已初始化")
|
||||
|
||||
|
||||
@ -15,8 +15,8 @@ from PyQt5.QtWidgets import (QApplication, QMainWindow, QMenuBar, QMenu, QAction
|
||||
QLabel, QLineEdit, QFormLayout, QDoubleSpinBox, QScrollArea,
|
||||
QFileSystemModel, QButtonGroup, QToolButton, QPushButton, QHBoxLayout,
|
||||
QComboBox, QGroupBox, QInputDialog, QFileDialog, QMessageBox, QDesktopWidget, QDialog,
|
||||
QSpinBox)
|
||||
from PyQt5.QtCore import Qt, QDir, QTimer
|
||||
QSpinBox, QFrame)
|
||||
from PyQt5.QtCore import Qt, QDir, QTimer, QSize, QPoint
|
||||
from ui.widgets import CustomPanda3DWidget, CustomFileView, CustomTreeWidget,CustomAssetsTreeWidget, CustomConsoleDockWidget
|
||||
|
||||
class MainWindow(QMainWindow):
|
||||
@ -352,6 +352,20 @@ class MainWindow(QMainWindow):
|
||||
self.loadCesiumTilesetAction = self.cesiumMenu.addAction('加载3Dtiles')
|
||||
self.loadCesiumTilesetAction.triggered.connect(self.onLoadCesiumTileset)
|
||||
|
||||
# 添加地球视图相关菜单项
|
||||
self.createCesiumViewAction = self.cesiumMenu.addAction('创建地球视图')
|
||||
self.createCesiumViewAction.triggered.connect(self.onCreateCesiumView)
|
||||
|
||||
self.toggleCesiumViewAction = self.cesiumMenu.addAction('开关地球视图')
|
||||
self.toggleCesiumViewAction.triggered.connect(self.onToggleCesiumView)
|
||||
|
||||
self.refreshCesiumViewAction = self.cesiumMenu.addAction('刷新地球视图')
|
||||
self.refreshCesiumViewAction.triggered.connect(self.onRefreshCesiumView)
|
||||
|
||||
# 添加模型相关菜单项
|
||||
self.addModelToCesiumAction = self.cesiumMenu.addAction('添加模型到地球')
|
||||
self.addModelToCesiumAction.triggered.connect(self.onAddModelClicked)
|
||||
|
||||
|
||||
# 帮助菜单
|
||||
self.helpMenu = menubar.addMenu('帮助')
|
||||
@ -441,25 +455,47 @@ class MainWindow(QMainWindow):
|
||||
# 创建属性面板的主容器和布局
|
||||
self.propertyContainer = QWidget()
|
||||
self.propertyContainer.setObjectName("PropertyContainer")
|
||||
self.propertyLayout = QVBoxLayout(self.propertyContainer)
|
||||
|
||||
# 添加初始提示信息
|
||||
tipLabel = QLabel("")
|
||||
tipLabel.setStyleSheet("color: gray;") # 使用灰色字体
|
||||
self.propertyLayout.addWidget(tipLabel)
|
||||
try:
|
||||
self.propertyLayout = QVBoxLayout(self.propertyContainer)
|
||||
print(f"✓ 属性布局创建完成: {self.propertyLayout}")
|
||||
|
||||
# 创建滚动区域并设置属性
|
||||
self.scrollArea = QScrollArea()
|
||||
self.scrollArea.setWidgetResizable(True)
|
||||
self.scrollArea.setWidget(self.propertyContainer)
|
||||
# 添加初始提示信息
|
||||
tipLabel = QLabel("选择对象以查看属性")
|
||||
tipLabel.setStyleSheet("color: gray; padding: 10px;") # 使用灰色字体
|
||||
self.propertyLayout.addWidget(tipLabel)
|
||||
print("✓ 提示标签添加完成")
|
||||
|
||||
# 设置滚动区域为停靠窗口的主部件
|
||||
self.rightDock.setWidget(self.scrollArea)
|
||||
self.rightDock.setMinimumWidth(300)
|
||||
self.addDockWidget(Qt.RightDockWidgetArea, self.rightDock)
|
||||
# 创建滚动区域并设置属性
|
||||
self.scrollArea = QScrollArea()
|
||||
self.scrollArea.setWidgetResizable(True)
|
||||
self.scrollArea.setWidget(self.propertyContainer)
|
||||
print("✓ 滚动区域设置完成")
|
||||
|
||||
# 设置属性面板到世界对象
|
||||
self.world.setPropertyLayout(self.propertyLayout)
|
||||
# 设置滚动区域为停靠窗口的主部件
|
||||
self.rightDock.setWidget(self.scrollArea)
|
||||
self.rightDock.setMinimumWidth(300)
|
||||
self.addDockWidget(Qt.RightDockWidgetArea, self.rightDock)
|
||||
print("✓ 右侧停靠窗口添加完成")
|
||||
|
||||
# 设置属性面板到世界对象
|
||||
if hasattr(self.world, 'setPropertyLayout'):
|
||||
print("开始设置属性布局到世界对象...")
|
||||
self.world.setPropertyLayout(self.propertyLayout)
|
||||
print("✓ 属性布局设置完成")
|
||||
else:
|
||||
print("⚠ 世界对象没有 setPropertyLayout 方法")
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ 设置属性面板时出错: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
# 创建基本的属性面板作为后备方案
|
||||
fallback_widget = QLabel("属性面板初始化失败\n请查看控制台日志")
|
||||
fallback_widget.setStyleSheet("color: red; background-color: white; padding: 10px;")
|
||||
self.rightDock.setWidget(fallback_widget)
|
||||
self.addDockWidget(Qt.RightDockWidgetArea, self.rightDock)
|
||||
|
||||
# 创建脚本管理停靠窗口
|
||||
self.scriptDock = QDockWidget("脚本管理", self)
|
||||
@ -478,7 +514,7 @@ class MainWindow(QMainWindow):
|
||||
self.scriptDock.setWidget(self.scriptScrollArea)
|
||||
self.scriptDock.setMinimumWidth(300)
|
||||
|
||||
# 设置脚本面板内容
|
||||
# 设置脚本面板内容 - 这里添加调用
|
||||
self.setupScriptPanel(self.scriptLayout)
|
||||
self.addDockWidget(Qt.RightDockWidgetArea, self.scriptDock)
|
||||
|
||||
@ -510,7 +546,6 @@ class MainWindow(QMainWindow):
|
||||
# self.bottomDock.setWidget(self.fileView)
|
||||
# self.addDockWidget(Qt.BottomDockWidgetArea, self.bottomDock)
|
||||
|
||||
|
||||
# 创建底部停靠窗口(资源窗口)
|
||||
self.bottomDock = QDockWidget("资源", self)
|
||||
self.fileView = CustomAssetsTreeWidget(self.world)
|
||||
@ -523,7 +558,6 @@ class MainWindow(QMainWindow):
|
||||
self.consoleDock.setWidget(self.consoleView)
|
||||
self.addDockWidget(Qt.BottomDockWidgetArea, self.consoleDock)
|
||||
|
||||
|
||||
def setupToolbar(self):
|
||||
"""创建工具栏"""
|
||||
self.toolbar = self.addToolBar('工具栏')
|
||||
@ -743,80 +777,33 @@ class MainWindow(QMainWindow):
|
||||
self.buildAction.triggered.connect(lambda: buildPackage(self))
|
||||
self.exitAction.triggered.connect(QApplication.instance().quit)
|
||||
|
||||
#连接工具事件
|
||||
self.sunsetAction.triggered.connect(lambda : self.world.setCurrentTool("光照编辑"))
|
||||
self.pluginAction.triggered.connect(lambda : self.world.setCurrentTool("图形编辑"))
|
||||
# 连接工具事件
|
||||
self.sunsetAction.triggered.connect(lambda: self.world.setCurrentTool("光照编辑"))
|
||||
self.pluginAction.triggered.connect(lambda: self.world.setCurrentTool("图形编辑"))
|
||||
|
||||
# 连接GUI编辑模式事件
|
||||
self.guiEditModeAction.triggered.connect(lambda: self.world.toggleGUIEditMode())
|
||||
|
||||
# 连接创建事件
|
||||
# 连接光源创建按钮事件
|
||||
self.createSpotLightAction.triggered.connect(lambda :self.world.createSpotLight())
|
||||
self.createPointLightAction.triggered.connect(lambda :self.world.createPointLight())
|
||||
# 连接GUI创建按钮事件
|
||||
# 连接创建事件 - 使用菜单动作而不是不存在的工具栏按钮
|
||||
self.createSpotLightAction.triggered.connect(lambda: self.world.createSpotLight())
|
||||
self.createPointLightAction.triggered.connect(lambda: self.world.createPointLight())
|
||||
self.createButtonAction.triggered.connect(lambda: self.world.createGUIButton())
|
||||
self.createLabelAction.triggered.connect(lambda: self.world.createGUILabel())
|
||||
self.createEntryAction.triggered.connect(lambda: self.world.createGUIEntry())
|
||||
self.create3DTextAction.triggered.connect(lambda: self.world.createGUI3DText())
|
||||
#self.createSpotLightAction.triggered.connect(lambda :self.world.createSpotLight())
|
||||
self.createVirtualScreenAction.triggered.connect(lambda: self.world.createGUIVirtualScreen())
|
||||
self.createCesiumViewAction.triggered.connect(self.onCreateCesiumView)
|
||||
self.toggleCesiumViewAction.triggered.connect(self.onToggleCesiumView)
|
||||
self.refreshCesiumViewAction.triggered.connect(self.onRefreshCesiumView)
|
||||
self.createCesiumViewAction.triggered.connect(self.onCreateCesiumView)
|
||||
self.toggleCesiumViewAction.triggered.connect(self.onToggleCesiumView)
|
||||
self.refreshCesiumViewAction.triggered.connect(self.onRefreshCesiumView)
|
||||
|
||||
#连接地形创建事件
|
||||
# 连接地形创建事件
|
||||
self.createFlatTerrainAction.triggered.connect(self.onCreateFlatTerrain)
|
||||
self.createHeightmapTerrainAction.triggered.connect(self.onCreateHeightmapTerrain)
|
||||
self.terrainEditModeAction.triggered.connect(self.onTerrainEditMode)
|
||||
|
||||
# 连接工具栏GUI创建按钮事件
|
||||
self.createButtonTool.clicked.connect(lambda: self.world.createGUIButton())
|
||||
self.createLabelTool.clicked.connect(lambda: self.world.createGUILabel())
|
||||
self.create3DTextTool.clicked.connect(lambda: self.world.createGUI3DText())
|
||||
self.create3DImageTool.clicked.connect(lambda: self.world.createGUI3DImage())
|
||||
self.create2DImageTool.clicked.connect(lambda: self.world.createGUI2DImage())
|
||||
self.createSpotLight.clicked.connect(lambda :self.world.createSpotLight())
|
||||
self.createPointLight.clicked.connect(lambda :self.world.createPointLight())
|
||||
|
||||
# 连接工具栏地形创建按钮事件
|
||||
self.createFlatTerrainTool.clicked.connect(self.onCreateFlatTerrain)
|
||||
self.createHeightmapTerrainTool.clicked.connect(self.onCreateHeightmapTerrain)
|
||||
self.terrainEditTool.clicked.connect(self.onTerrainEditMode)
|
||||
|
||||
# # 连接创建事件
|
||||
# # 连接光源创建按钮事件
|
||||
# self.createSpotLightAction.triggered.connect(lambda :self.world.createSpotLight())
|
||||
# self.createPointLightAction.triggered.connect(lambda :self.world.createPointLight())
|
||||
# # 连接GUI创建按钮事件
|
||||
# self.createButtonAction.triggered.connect(lambda: self.world.createGUIButton())
|
||||
# self.createLabelAction.triggered.connect(lambda: self.world.createGUILabel())
|
||||
# self.createEntryAction.triggered.connect(lambda: self.world.createGUIEntry())
|
||||
# self.create3DTextAction.triggered.connect(lambda: self.world.createGUI3DText())
|
||||
# #self.createSpotLightAction.triggered.connect(lambda :self.world.createSpotLight())
|
||||
#
|
||||
# # self.createVideoScreen.triggered.connect(lambda: self.world.video_manager.create_video_screen(
|
||||
# # pos=(0, 0, 2),
|
||||
# # size=(4, 3),
|
||||
# # name=f"video_screen_{len(self.world.video_manager.video_objects) if hasattr(self.world, 'video_manager') else 0}"
|
||||
# # ))
|
||||
# # self.createSphericalVideo.triggered.connect(lambda: self.world.createGUISphericalVideo())
|
||||
#
|
||||
# self.createVirtualScreenAction.triggered.connect(lambda: self.world.create_spherical_video())
|
||||
#
|
||||
# # 连接工具栏GUI创建按钮事件
|
||||
# self.createButtonTool.clicked.connect(lambda: self.world.createGUIButton())
|
||||
# self.createLabelTool.clicked.connect(lambda: self.world.createGUILabel())
|
||||
# self.create3DTextTool.clicked.connect(lambda: self.world.createGUI3DText())
|
||||
# self.createSpotLight.clicked.connect(lambda :self.world.createSpotLight())
|
||||
# self.createPointLight.clicked.connect(lambda :self.world.createPointLight())
|
||||
|
||||
# 连接树节点点击信号
|
||||
# self.treeWidget.itemClicked.connect(self.world.onTreeItemClicked)
|
||||
self.treeWidget.itemSelectionChanged.connect(lambda :self.world.onTreeItemClicked(self.treeWidget.currentItem(), 0))
|
||||
self.treeWidget.itemSelectionChanged.connect(
|
||||
lambda: self.world.onTreeItemClicked(self.treeWidget.currentItem(), 0))
|
||||
print("已连接点击信号")
|
||||
|
||||
# 连接工具切换信号
|
||||
|
||||
Loading…
Reference in New Issue
Block a user