yuliang 5 months ago
parent
commit
e34b3c69eb
  1. 1
      src/core/manager/WorldModel.ts
  2. 12
      src/modules/palletTz/PalletTz3dObject.ts
  3. 5
      src/modules/palletTz/PalletTzEntity.ts
  4. 22
      src/modules/palletTz/PalletTzInteraction.ts
  5. 35
      src/modules/palletTz/PalletTzPropertySetter.ts
  6. 90
      src/modules/palletTz/PalletTzRenderer.ts
  7. 12
      src/modules/palletTz/index.ts
  8. 4
      src/modules/rack/Rack3dObject.ts

1
src/core/manager/WorldModel.ts

@ -116,6 +116,7 @@ export default class WorldModel {
import('../../modules/rack'),
import('../../modules/shuttle_rack'),
import('../../modules/pallet'),
import('../../modules/palletTz'),
import('../../modules/tote'),
import('../../modules/carton'),
import('../../modules/amr/ptr/cl2'),

12
src/modules/palletTz/PalletTz3dObject.ts

@ -0,0 +1,12 @@
import * as THREE from 'three'
import {mergeGeometries} from 'three/addons/utils/BufferGeometryUtils.js'
import {BufferGeometry} from "three";
import {Material} from "three/src/materials/Material";
import storageBar_PNG from "@/assets/Models/storageBar.png";
import Plastic_Rough_JPG from "@/assets/Models/Plastic_Rough.jpg";
import {InstancedMesh} from "three/src/objects/InstancedMesh";
import {decimalSumBy, resetUVs} from "@/core/ModelUtils";
export default class PalletTz3dObject extends THREE.Object3D {
}

5
src/modules/palletTz/PalletTzEntity.ts

@ -0,0 +1,5 @@
import BaseEntity from '@/core/base/BaseItemEntity.ts'
export default class PalletTzEntity extends BaseEntity {
}

22
src/modules/palletTz/PalletTzInteraction.ts

@ -0,0 +1,22 @@
import BaseInteraction from '@/core/base/BaseInteraction.ts'
import * as THREE from 'three'
export default class PalletTzInteraction extends BaseInteraction {
get isSinglePointMode(): boolean {
return true
}
constructor(itemTypeName: string) {
super(itemTypeName)
}
createPointOfItem(item: ItemJson, point: THREE.Vector3): ItemJson {
item = super.createPointOfItem(item, point)
// 创建一个地堆货架
item.dt.palletWidth = 1.1 // 宽度
item.dt.palletDepth = 1.1 // 深度
return item
}
}

35
src/modules/palletTz/PalletTzPropertySetter.ts

@ -0,0 +1,35 @@
import type { PropertySetter } from '@/core/base/PropertyTypes.ts'
import { basicFieldsSetter } from '@/editor/widgets/property/PropertyPanelConstant.ts'
const propertySetter: PropertySetter = {
flatten: {
fields: [
...basicFieldsSetter
]
},
groups: [
{
title: '存储位置', expand: true, size: 'small',
fields: [
{
dataPath: 'dt.storeAt.item', label: '货架', input: 'Input',
inputProps: {}
},
{
dataPath: 'dt.storeAt.bay', label: '列', input: 'InputNumber',
inputProps: {}
},
{
dataPath: 'dt.storeAt.level', label: '层', input: 'InputNumber',
inputProps: {}
},
{
dataPath: 'dt.storeAt.cell', label: '格', input: 'InputNumber',
inputProps: {}
}
]
}
]
}
export default propertySetter

90
src/modules/palletTz/PalletTzRenderer.ts

@ -0,0 +1,90 @@
import * as THREE from 'three'
import BaseRenderer from '@/core/base/BaseRenderer.ts'
import Constract from '@/core/Constract.ts'
import type { Object3DLike } from '@/types/ModelTypes.ts'
import MODULE_PALLET_GLB from '@/assets/Models/Pallet.glb?url'
import MODULE_PALLET_TEX from '@/assets/Models/Pallet.jpg?inline'
import { loadGlbModule, loadTexture, processModel } from '@/core/ModelUtils.ts'
import InstanceMeshManager from '@/core/manager/InstanceMeshManager.ts'
/**
*
*/
export default class PalletTzRenderer extends BaseRenderer {
static POINT_NAME = 'pallet_point'
/**
* ,
*/
readonly defulePositionY: number = Constract.HEIGHT_WAY
readonly defaultScale: THREE.Vector3 = new THREE.Vector3(1.1, 0.15, 1.1)
readonly defaultRotation: THREE.Vector3 = new THREE.Vector3(0, 0, 0)
readonly defaultUserData = {
color: 0xFF616161
}
palletGeometry: THREE.BufferGeometry
palletMaterial: THREE.MeshPhongMaterial
private _isInitialized = false
async init() {
await super.init()
const [glbGroup, palletTexture] = await Promise.all([
loadGlbModule(MODULE_PALLET_GLB),
loadTexture(MODULE_PALLET_TEX)
])
const mesh = glbGroup.children[0] as THREE.Mesh
this.palletGeometry = processModel(mesh)
this.palletMaterial = new THREE.MeshPhongMaterial({ color: 0x2b5d94 })
palletTexture.flipY = true
palletTexture.wrapS = THREE.RepeatWrapping
palletTexture.wrapT = THREE.RepeatWrapping
palletTexture.repeat.set(0.5, 0.5)
this.palletMaterial.color.set(this.defaultUserData.color)
this.palletMaterial.map = palletTexture
this.palletMaterial.needsUpdate = true
this._isInitialized = true
}
createPointBasic(item: ItemJson, option?: RendererCudOption): Object3DLike {
if (!this._isInitialized) {
throw new Error('Renderer not initialized')
}
return this.pointManager.createByItem(item)
}
get pointManager(): InstanceMeshManager {
if (!this.tempViewport) {
throw new Error('tempViewport is not set.')
}
if (!this._isInitialized) {
throw new Error('Renderer not ready')
}
return this.tempViewport.getOrCreateMeshManager(this.itemTypeName, () =>
// 构建 InstanceMesh 代理对象
new InstanceMeshManager(this.itemTypeName,
this.tempViewport,
this.palletGeometry,
this.palletMaterial,
true, true)
)
}
dispose() {
super.dispose()
if (this.palletGeometry) {
this.palletGeometry.dispose()
this.palletGeometry = undefined
}
if (this.palletMaterial) {
this.palletMaterial.dispose()
this.palletMaterial = undefined
}
}
}

12
src/modules/palletTz/index.ts

@ -0,0 +1,12 @@
import { defineModule } from '@/core/manager/ModuleManager.ts'
import PalletTzRenderer from './PalletTzRenderer.ts'
import PalletTzInteraction from './PalletTzInteraction.ts'
import propertySetter from '@/modules/palletTz/PalletTzPropertySetter.ts'
export const ITEM_TYPE_NAME = 'palletTz'
export default defineModule(ITEM_TYPE_NAME, () => ({
renderer: new PalletTzRenderer(ITEM_TYPE_NAME),
interaction: new PalletTzInteraction(ITEM_TYPE_NAME),
setter: propertySetter
}))

4
src/modules/rack/Rack3dObject.ts

@ -11,11 +11,11 @@ export default class Rack3dObject extends THREE.Object3D {
private rackVerticalBarWidth = 0.1
private rackVerticalBarDepth = 0.08
private static rackVerticalBarColor = 0xFF35499C
private static rackVerticalBarColor = 0xFF2E66FD
private static rackVerticalBarGeometryMap: Map<number, BufferGeometry> = new Map<number, BufferGeometry>()
private static rackVerticalBarMaterial: Material = null
private static rackLinkBarColor = 0xFF35499C
private static rackLinkBarColor = 0xFF2E66FD
private static rackLinkBarGeometryMap: Map<LinkBarKey, BufferGeometry> = new Map<LinkBarKey, BufferGeometry>()
private static rackLinkBarMaterial: Material = null

Loading…
Cancel
Save