Browse Source

ItemType Meta

master
修宁 7 months ago
parent
commit
1ba5315fa8
  1. 2
      src/designer/Viewport.ts
  2. 2
      src/designer/model2DEditor/EsDragControls.ts
  3. 2
      src/model/ModelUtils.ts
  4. 2
      src/model/itemType/ItemType.ts
  5. 77
      src/model/itemType/ItemTypeDefine.ts
  6. 4
      src/model/itemType/ItemTypeLine.ts
  7. 2
      src/model/itemType/line/conveyor/ConveyorMeta.ts
  8. 31
      src/model/itemType/measure/MeasureMeta.ts

2
src/designer/Viewport.ts

@ -9,7 +9,7 @@ import { reactive, watch } from 'vue'
import type { ITool } from '@/designer/model2DEditor/tools/ITool.ts'
import { CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer'
import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer'
import { getAllItemTypes } from '@/runtime/DefineItemType.ts'
import { getAllItemTypes } from '@/model/itemType/ItemTypeDefine.ts'
import type { ItemTypeDefineOption } from '@/model/itemType/ItemTypeDefine.ts'
import type Toolbox from '@/model/itemType/Toolbox.ts'

2
src/designer/model2DEditor/EsDragControls.ts

@ -2,7 +2,7 @@ import { DragControls } from './DragControls.js'
import * as THREE from 'three'
import type Viewport from '@/designer/Viewport.ts'
import Constract from '@/designer/Constract.ts'
import { getItemTypeByName } from '@/runtime/DefineItemType.ts'
import { getItemTypeByName } from '@/model/itemType/ItemTypeDefine.ts'
import type { ItemTypeDefineOption } from '@/model/itemType/ItemTypeDefine.ts'
import { markRaw } from 'vue'

2
src/model/ModelUtils.ts

@ -1,7 +1,7 @@
import * as THREE from 'three'
import type { ItemTypeDefineOption } from '@/model/itemType/ItemTypeDefine.ts'
import type { ItemJson } from '@/model/WorldModelType.ts'
import { getAllItemTypes, getItemTypeByName } from '@/runtime/DefineItemType.ts'
import { getAllItemTypes, getItemTypeByName } from '@/model/itemType/ItemTypeDefine.ts'
import type Viewport from '@/designer/Viewport.ts'
import { computeBoundsTree, disposeBoundsTree } from 'three-mesh-bvh'
import { Vector2 } from 'three/src/math/Vector2'

2
src/model/itemType/ItemType.ts

@ -53,7 +53,7 @@ export default abstract class ItemType {
/**
* scene
*/
afterAddScene(viewport:Viewport, scene: THREE.Scene, objects: THREE.Object3D[]): void {
afterAddScene(viewport: Viewport, scene: THREE.Scene, objects: THREE.Object3D[]): void {
}
/**

77
src/model/itemType/ItemTypeDefine.ts

@ -1,4 +1,65 @@
import _ from 'lodash'
import type ItemType from '@/model/itemType/ItemType.ts'
import * as THREE from 'three'
const itemTypes: Record<string, ItemTypeDefineOption> = {}
window['itemTypes'] = itemTypes
/**
*
*/
export function defineItemType(option: ItemTypeDefineOption) {
itemTypes[option.name] = option
option.clazz.name = option.name
option.clazz.option = option
return option
}
export function getItemTypeByName(type: string): ItemTypeDefineOption {
const itemType = _.get(itemTypes, type)
if (!itemType) {
console.warn(`未找到物流单元类型定义: ${type}`)
return
}
return itemType
}
export function getAllItemTypes(): ItemTypeDefineOption[] {
return Object.values(itemTypes)
}
/**
* "点"
*/
export const BASIC_META_OF_POINT: ItemTypeMeta = [
{ field: 'uuid', editor: 'uuid' },
{ field: 'name', editor: 'string' },
{ editor: 'transform' },
{ field: 'color', editor: 'color' },
{ editor: '-' },
{ editor: 'in_out_center' }
]
/**
* "物流运输单元",
*/
export const BASIC_META_OF_POINT2: ItemTypeMeta = [
{ field: 'userData.selectable', editor: 'checkbox' },
{ field: 'userData.protected', editor: 'checkbox' },
{ field: 'visible', editor: 'checkbox' }
]
/**
* "线"
*/
export const BASIC_META_OF_LINE: ItemTypeMeta = []
/**
* "线",
*/
export const BASIC_META_OF_LINE2: ItemTypeMeta = []
export type ActionType =
/**
@ -23,4 +84,20 @@ export interface ItemTypeDefineOption {
label: string
actionType: ActionType
clazz: ItemType
getMeta(object: THREE.Object3D): ItemTypeMeta
}
/**
*
*/
export type ItemTypeMeta = ItemTypeMetaItem[]
export type ItemTypeMetaItem = {
field?: string
editor: 'uuid' | 'string' | 'number' |
'color' | 'transform' | '-' |
'select' | 'checkbox' | 'text' |
'in_out_center' | 'group_button'
}

4
src/model/itemType/ItemTypeLine.ts

@ -4,7 +4,6 @@ import type { ItemJson } from '@/model/WorldModelType.ts'
import type WorldModel from '@/model/WorldModel.ts'
import type Viewport from '@/designer/Viewport.ts'
import { findObject3DByCondition, findObject3DById } from '@/model/ModelUtils.ts'
import type { Line2 } from 'three/examples/jsm/lines/Line2.js'
let pmFn
@ -110,7 +109,8 @@ export default abstract class ItemTypeLine extends ItemType {
actionType: item.a,
label: item.l,
color: item.c,
selectable: true
selectable: true,
protected: false,
})
point.rotation.set(

2
src/model/itemType/line/conveyor/ConveyorMeta.ts

@ -1,4 +1,4 @@
import { defineItemType } from '@/runtime/DefineItemType.ts'
import { defineItemType } from '@/model/itemType/ItemTypeDefine.ts'
import Conveyor from './Conveyor.ts'
export default defineItemType({

31
src/model/itemType/measure/MeasureMeta.ts

@ -1,9 +1,36 @@
import { defineItemType } from '@/runtime/DefineItemType.ts'
import * as THREE from 'three'
import Measure from '@/model/itemType/measure/Measure.ts'
import {
defineItemType,
BASIC_META_OF_POINT,
BASIC_META_OF_POINT2,
BASIC_META_OF_LINE,
BASIC_META_OF_LINE2,
type ItemTypeMeta
} from '@/model/itemType/ItemTypeDefine.ts'
export default defineItemType({
name: 'measure',
label: '测量距离',
actionType: 'ln',
clazz: new Measure()
clazz: new Measure(),
/**
*
*/
getMeta(object: THREE.Object3D): ItemTypeMeta {
if (object.name === Measure.LINE_NAME) {
return [
...BASIC_META_OF_LINE,
...BASIC_META_OF_LINE2
]
} else if (object.name === Measure.POINT_NAME) {
return [
...BASIC_META_OF_POINT,
...BASIC_META_OF_POINT2
]
}
return []
}
})
Loading…
Cancel
Save