From a2e0c3fa40a3fdd0901d3cd89b25946985593f6b Mon Sep 17 00:00:00 2001
From: lizw-2015 <1183409807@qq.com>
Date: Tue, 10 Jun 2025 16:59:12 +0800
Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E6=B7=BB=E5=8A=A0=E6=89=B9?=
=?UTF-8?q?=E9=87=8F=E5=A4=8D=E5=88=B6=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 新增 BulkCopy 组件用于批量复制操作
- 在 Model2DEditor 中集成批量复制功能
- 实现了行数、列数、行间距、列间距等配置选项
- 添加了批量复制的逻辑,包括复制对象的坐标计算
---
src/editor/BulkCopy.vue | 127 ++++++++++++++++++++++++
src/editor/Model2DEditor.vue | 61 +++++++++++-
src/editor/widgets/property/PropertyPanel.vue | 136 +++++++++++++-------------
3 files changed, 251 insertions(+), 73 deletions(-)
create mode 100644 src/editor/BulkCopy.vue
diff --git a/src/editor/BulkCopy.vue b/src/editor/BulkCopy.vue
new file mode 100644
index 0000000..2064ca2
--- /dev/null
+++ b/src/editor/BulkCopy.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
diff --git a/src/editor/Model2DEditor.vue b/src/editor/Model2DEditor.vue
index 1c7e8e0..60d277d 100644
--- a/src/editor/Model2DEditor.vue
+++ b/src/editor/Model2DEditor.vue
@@ -17,6 +17,9 @@
:type="state?.view3DMode===Constract.Mode3D?'primary':''"
@click="state.view3DMode = Constract.Mode3D">3D
+
+ 批量复制
+
@@ -92,13 +95,14 @@
diff --git a/src/editor/widgets/property/PropertyPanel.vue b/src/editor/widgets/property/PropertyPanel.vue
index 1cf6e7b..a8182ca 100644
--- a/src/editor/widgets/property/PropertyPanel.vue
+++ b/src/editor/widgets/property/PropertyPanel.vue
@@ -9,23 +9,23 @@ import { defDataFormProps } from '@/editor/widgets/property/PropertyPanelConstan
import Viewport, { type ViewportState } from '@/core/engine/Viewport.ts'
defineOptions({
- name: 'PropertyPanel'
+ name: 'PropertyPanel'
})
// 定义 Props 类型
interface PropertyPanelProps {
- /** 待编辑数据 */
- data?: any;
- /** Viewport */
- viewport: Viewport;
- /** ViewportState */
- viewportState: ViewportState;
- /** 默认的DataFormProps */
- defDataFormProps?: DataFormProps;
- /** 最上面平铺的设置器 */
- flatten?: PropertyFlattenSetter;
- /** 设置器分组集合 */
- groups?: Array
;
+ /** 待编辑数据 */
+ data?: any;
+ /** Viewport */
+ viewport: Viewport;
+ /** ViewportState */
+ viewportState: ViewportState;
+ /** 默认的DataFormProps */
+ defDataFormProps?: DataFormProps;
+ /** 最上面平铺的设置器 */
+ flatten?: PropertyFlattenSetter;
+ /** 设置器分组集合 */
+ groups?: Array;
}
// 读取组件 props 属性
@@ -33,16 +33,16 @@ const props = withDefaults(defineProps(), {})
// 定义 State 类型
interface PropertyPanelState {
- /** 待编辑数据 */
- data?: any;
- /** 已展开的分组 */
- expandGroups: Array;
+ /** 待编辑数据 */
+ data?: any;
+ /** 已展开的分组 */
+ expandGroups: Array;
}
// state 属性
const state = reactive({
- data: lodash.cloneDeep(props.data),
- expandGroups: []
+ data: lodash.cloneDeep(props.data),
+ expandGroups: []
})
// 定义 Data 类型
@@ -54,84 +54,84 @@ const data: PropertyPanelData = {}
const flattenFormProps = computed(() => getDefFormProps(props.flatten))
function getDefFormProps(setter?: PropertyFlattenSetter) {
- const formProps: DataFormProps = {
- ...defDataFormProps,
- ...props.defDataFormProps
- }
- fillFormProps(setter)
- return formProps
+ const formProps: DataFormProps = {
+ ...defDataFormProps,
+ ...props.defDataFormProps
+ }
+ fillFormProps(setter)
+ return formProps
}
function fillFormProps(formProps: DataFormProps, setter?: PropertyFlattenSetter) {
- if (!setter) return
- if (setter.size) formProps.size = setter.size
- if (setter.labelWidth) formProps.labelWidth = setter.labelWidth
+ if (!setter) return
+ if (setter.size) formProps.size = setter.size
+ if (setter.labelWidth) formProps.labelWidth = setter.labelWidth
}
function getCollapseItemId(group: PropertySetterGroup, idx: number) {
- return `_${idx}_${group.title}`
+ return `_${idx}_${group.title}`
}
function onDataChange(newData: any) {
- const viewport = props.viewport
- if (!viewport) return
- viewport.stateManager.update(({ getEntity, putEntity }) => {
- const data = getEntity(props.data.id)
- lodash.assign(data, newData)
- // console.log('onDataChange@1', JSON.stringify(data.dt))
- putEntity(data)
- })
+ const viewport = props.viewport
+ if (!viewport) return
+ viewport.stateManager.update(({ getEntity, putEntity }) => {
+ const data = getEntity(props.data.id);
+ lodash.assign(data, newData);
+ // console.log('onDataChange@1', JSON.stringify(data.dt))
+ putEntity(data);
+ });
}
interface PropertyPanelExpose {
- state: PropertyPanelState;
- data: PropertyPanelData;
+ state: PropertyPanelState;
+ data: PropertyPanelData;
}
const expose: PropertyPanelExpose = {
- state,
- data
+ state,
+ data
}
// 定义组件公开内容
defineExpose(expose)
export type {
- PropertyPanelProps,
- PropertyPanelState
+ PropertyPanelProps,
+ PropertyPanelState
}
-
-
-
-
+
-
-
-
+
+
+
+
+
+