feat(render): 实现PSD文件导入和多选支持功能

- 添加PSD文件解析和图层导入功能- 实现多选状态下网格选择和边界框绘制
- 增加虚线边框和多选操作手柄显示
- 支持多选状态下点精确检测算法
- 添加拖拽操作历史记录功能
- 实现模型部件唯一命名避免冲突- 增加纹理垂直翻转和像素数据转换- 支持可见PSD图层性和不透明度设置
- 添加模型状态调试打印功能
-优化网格包含点检测逻辑和性能

重要更新
- 支持多选图层
- 支持导入psd文件
- 支持撤回和重做操作
This commit is contained in:
tzdwindows 7
2025-10-19 18:48:12 +08:00
parent 6a3eb89aaf
commit fec5de1276
14 changed files with 4852 additions and 279 deletions

View File

@@ -10,6 +10,9 @@ import com.chuangzhou.vivid2D.render.model.util.Mesh2D;
import javax.swing.*;
import java.awt.*;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* 简单的测试示例:创建一个 Model2D添加几层部件
@@ -19,6 +22,8 @@ import java.awt.*;
public class ModelLayerPanelTest {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
System.setOut(new PrintStream(System.out, true, StandardCharsets.UTF_8));
System.setErr(new PrintStream(System.err, true, StandardCharsets.UTF_8));
// 创建示例模型并添加图层
Model2D model = new Model2D("示例模型");
@@ -92,13 +97,8 @@ public class ModelLayerPanelTest {
JButton updateSelectionBtn = new JButton("更新选中部件");
updateSelectionBtn.addActionListener(e -> {
renderPanel.executeInGLContext(() -> {
ModelPart selectedPart = renderPanel.getSelectedPart();
transformPanel.setSelectedPart(selectedPart);
if (selectedPart != null) {
System.out.println("已选中部件: " + selectedPart.getName());
} else {
System.out.println("未选中任何部件");
}
List<ModelPart> selectedPart = renderPanel.getSelectedParts();
transformPanel.setSelectedParts(selectedPart);
});
});
bottom.add(updateSelectionBtn);
@@ -113,8 +113,8 @@ public class ModelLayerPanelTest {
System.out.println("点击了模型:" + mesh.getName() + ",模型坐标:" + modelX + ", " + modelY + ",屏幕坐标:" + screenX + ", " + screenY);
// 自动更新变换面板的选中部件
ModelPart selectedPart = renderPanel.getSelectedPart();
transformPanel.setSelectedPart(selectedPart);
List<ModelPart> selectedPart = renderPanel.getSelectedParts();
transformPanel.setSelectedParts(selectedPart);
// 切换到变换控制选项卡
rightTabbedPane.setSelectedIndex(1);