Browse Source

解决 StoreAt 问题

master
修宁 6 months ago
parent
commit
8018aa2889
  1. 1
      src/core/ModelUtils.ts
  2. 13
      src/core/base/BaseItemEntity.ts
  3. 55
      src/core/base/BaseRenderer.ts
  4. 1
      src/core/manager/ModuleManager.ts
  5. 2
      src/core/script/ModelManager.ts
  6. 3
      src/editor/Model2DEditor.vue
  7. 215
      src/example/example1.js
  8. 2
      src/modules/agv1/index.ts
  9. 2
      src/modules/carton/index.ts
  10. 2
      src/modules/charger/index.ts
  11. 16
      src/modules/cl2/Cl2Entity.ts
  12. 2
      src/modules/cl2/index.ts
  13. 2
      src/modules/clx/index.ts
  14. 11
      src/modules/gstore/GstoreRenderer.ts
  15. 2
      src/modules/gstore/index.ts
  16. 2
      src/modules/measure/index.ts
  17. 2
      src/modules/pallet/index.ts
  18. 2
      src/modules/rack/index.ts
  19. 2
      src/modules/shuttle_rack/index.ts
  20. 2
      src/modules/tote/index.ts
  21. 2
      src/modules/way/index.ts
  22. 7
      src/types/ScriptSupport.d.ts
  23. 6
      src/types/Types.d.ts
  24. 3
      src/types/model.d.ts

1
src/core/ModelUtils.ts

@ -632,6 +632,7 @@ export function load3DModule(arrayBuffer: ArrayBuffer | string, ext: string) {
} }
} }
/** /**
* ItemJson , THREE.js * ItemJson , THREE.js
*/ */

13
src/core/base/BaseItemEntity.ts

@ -261,25 +261,16 @@ export default abstract class BaseEntity implements EntityIf, Loadable, Carry, W
level: level, level: level,
cell: cell cell: cell
} }
const rack = Model.find(storeItemId)
const rackRenderer = getRenderer(rack.t)
const itemRenderer = getRenderer(item.t) const itemRenderer = getRenderer(item.t)
if (!rackRenderer) {
throw new Error(`Renderer for type ${item.t} not found`)
}
if (!itemRenderer) { if (!itemRenderer) {
throw new Error(`Renderer for type ${item.t} not found`) throw new Error(`Renderer for type ${item.t} not found`)
} }
const { position, rotation } = rackRenderer.getStorePlacement(this.viewport, item)
if (!position || !rotation) {
throw new Error(`无法获取物品 ${item.id} 的存储位置`)
}
this.getArmObject().clear() this.getArmObject().clear()
itemRenderer.tempViewport = this.viewport itemRenderer.tempViewport = this.viewport
itemRenderer.createOrUpdatePointForRuntime(item, position, rotation) itemRenderer.createOrUpdatePointForRuntime(item)
itemRenderer.tempViewport = null itemRenderer.tempViewport = null
} }
} }

55
src/core/base/BaseRenderer.ts

@ -5,6 +5,7 @@ import { Line2 } from 'three/examples/jsm/lines/Line2'
import { LineWrap } from '@/core/manager/LineSegmentManager.ts' import { LineWrap } from '@/core/manager/LineSegmentManager.ts'
import type { LineLike, Object3DLike } from '@/types/ModelTypes.ts' import type { LineLike, Object3DLike } from '@/types/ModelTypes.ts'
import { MeshWrap } from '@/core/manager/InstanceMeshManager.ts' import { MeshWrap } from '@/core/manager/InstanceMeshManager.ts'
import { getRenderer } from '@/core/manager/ModuleManager.ts'
/** /**
* *
@ -95,8 +96,6 @@ export default abstract class BaseRenderer {
} }
this.tempViewport.scene.add(...objects) this.tempViewport.scene.add(...objects)
// const dragObjects = objects.filter(obj => !!obj.userData.draggable)
//this.tempViewport.dragManager.setDragObjects(dragObjects, 'push')
} }
removeFromScene(...objects: THREE.Object3D[]) { removeFromScene(...objects: THREE.Object3D[]) {
@ -119,8 +118,8 @@ export default abstract class BaseRenderer {
return point return point
} }
createOrUpdatePointForRuntime(item: ItemJson, position: THREE.Vector3, rotation: THREE.Quaternion): Object3DLike { createOrUpdatePointForRuntime(item: ItemJson): Object3DLike {
const option = { isRuntime: true, position, rotation } const option = { isRuntime: true }
return this.createPointForEntity(item, option) return this.createPointForEntity(item, option)
} }
@ -133,25 +132,44 @@ export default abstract class BaseRenderer {
// 由基础类创造一个属于自己的点演示 // 由基础类创造一个属于自己的点演示
const point = this.createPointBasic(item, option) const point = this.createPointBasic(item, option)
let matrix = getMatrixFromTf(item.tf) let matrix = getMatrixFromTf(item.tf)
if (option?.position instanceof THREE.Vector3 && option?.rotation instanceof THREE.Quaternion) {
if (item.dt.storeAt?.item) {
// 如果是库存物品, 则需要将位置和角度设置为库存位置
const rack = this.tempViewport.stateManager.findItemById(item.dt.storeAt?.item)
if (!rack) {
console.error(`Cannot find rack for item ${item.id} at ${item.dt.storeAt?.item}`)
}
const rackRenderer = getRenderer(rack.t)
if (!rackRenderer) {
console.error(`Cannot find renderer for rack type ${rack.t}`)
}
const { position, rotation } = rackRenderer.getStorePlacement(this.tempViewport, item)
if (!position || !rotation) {
console.error(`无法获取物品 ${item.id} 的存储位置`)
}
option.position = position
option.rotation = rotation
}
if (_.isArray(option?.position) && _.isArray(option?.rotation)) {
matrix = new THREE.Matrix4() matrix = new THREE.Matrix4()
matrix.compose( matrix.compose(
option.position, new THREE.Vector3(option.position[0], option.position[1], option.position[2]),
option.rotation, new THREE.Quaternion().setFromEuler(new THREE.Euler(
THREE.MathUtils.degToRad(option?.rotation[0]),
THREE.MathUtils.degToRad(option?.rotation[1]),
THREE.MathUtils.degToRad(option?.rotation[2]),
'XYZ'
)),
new THREE.Vector3(item.tf[2][0], item.tf[2][1], item.tf[2][2]) new THREE.Vector3(item.tf[2][0], item.tf[2][1], item.tf[2][2])
) )
// 回写 item 数据
item.tf[0] = _.cloneDeep(option.position)
item.tf[1] = _.cloneDeep(option.rotation)
} }
point.setMatrix4(matrix)
// point.position.set(item.tf[0][0], item.tf[0][1], item.tf[0][2]) point.setMatrix4(matrix)
//
// point.rotation.set(
// THREE.MathUtils.degToRad(item.tf[1][0]),
// THREE.MathUtils.degToRad(item.tf[1][1]),
// THREE.MathUtils.degToRad(item.tf[1][2])
// )
//
// point.scale.set(item.tf[2][0], item.tf[2][1], item.tf[2][2])
point.visible = ((typeof item.v !== 'undefined') ? item.v : true) point.visible = ((typeof item.v !== 'undefined') ? item.v : true)
return point return point
@ -267,7 +285,8 @@ export default abstract class BaseRenderer {
* *
* Position Rotation * Position Rotation
*/ */
getStorePlacement(viewport: Viewport, item: ItemJson): { position: THREE.Vector3, rotation: THREE.Quaternion } { getStorePlacement(viewport: Viewport, item: ItemJson)
: { position: [number, number, number], rotation: [number, number, number] } {
throw new Error(' 不支持库存物品的添加. t=' + this.itemTypeName) throw new Error(' 不支持库存物品的添加. t=' + this.itemTypeName)
} }

1
src/core/manager/ModuleManager.ts

@ -13,7 +13,6 @@ export interface ModuleDefineOption {
renderer?: BaseRenderer; renderer?: BaseRenderer;
interaction?: BaseInteraction; interaction?: BaseInteraction;
setter?: PropertySetter; setter?: PropertySetter;
entity?: new () => BaseEntity;
} }
// Internal storage for module definitions // Internal storage for module definitions

2
src/core/script/ModelManager.ts

@ -1,4 +1,4 @@
import type Viewport from '@/core/engine/Viewport.ts' import Viewport from '@/core/engine/Viewport.ts'
import { executeTypeScript } from '@/core/script/ScriptSupport.ts' import { executeTypeScript } from '@/core/script/ScriptSupport.ts'
import * as THREE from 'three' import * as THREE from 'three'
import { getMatrixFromTf } from '@/core/ModelUtils.ts' import { getMatrixFromTf } from '@/core/ModelUtils.ts'

3
src/editor/Model2DEditor.vue

@ -13,6 +13,7 @@
:type="state?.view3DMode===Constract.Mode3D?'primary':''" :type="state?.view3DMode===Constract.Mode3D?'primary':''"
@click="state.view3DMode = Constract.Mode3D">3D @click="state.view3DMode = Constract.Mode3D">3D
</el-button> </el-button>
</el-button-group>
<el-button :icon="renderIcon('element Files')" link @click="showBulkCopy" :disabled="!selectedObject"> <el-button :icon="renderIcon('element Files')" link @click="showBulkCopy" :disabled="!selectedObject">
批量复制 批量复制
</el-button> </el-button>
@ -25,8 +26,6 @@
<el-button :icon="renderIcon('element Files')" link @click="animationClick" :disabled="!selectedObject"> <el-button :icon="renderIcon('element Files')" link @click="animationClick" :disabled="!selectedObject">
动画测试 动画测试
</el-button> </el-button>
</el-button-group>
</div> </div>
<div class="section-content"> <div class="section-content">
<div v-if="currentStateManagerId" :key="currentStateManagerVersion" <div v-if="currentStateManagerId" :key="currentStateManagerVersion"

215
src/example/example1.js

@ -179,118 +179,169 @@ export default {
in: [], in: [],
out: [] out: []
} }
}, { id: '3ExXFSuV9WB2WMY2Quyq6L', t: 'measure', v: true, tf: [[0, 0.1, 0], [90, 0, 0], [0.1, 0.1, 0.1]], dt: { in: [], out: [], center: ['4YZKo6XtvL2migaIUmakAr', '7Ik2sRdDZy8Q6sC00AaqCv'] } }, { },
id: '3ExXFSuV9WB2WMY2Quyq6L', {
t: 'measure', id: '3ExXFSuV9WB2WMY2Quyq6L', t: 'measure', v: true,
v: true,
tf: [[0, 0.1, 0], [90, 0, 0], [0.1, 0.1, 0.1]], tf: [[0, 0.1, 0], [90, 0, 0], [0.1, 0.1, 0.1]],
dt: { in: [], out: [], center: ['4YZKo6XtvL2migaIUmakAr', '7Ik2sRdDZy8Q6sC00AaqCv'] } dt: { in: [], out: [], center: ['4YZKo6XtvL2migaIUmakAr', '7Ik2sRdDZy8Q6sC00AaqCv'] }
}, { id: '4YZKo6XtvL2migaIUmakAr', t: 'measure', v: true, tf: [[8.4, 0.1, 0], [90, 0, 0], [0.1, 0.1, 0.1]], dt: { in: [], out: [], center: ['3ExXFSuV9WB2WMY2Quyq6L', '3cdb6OHkp132soSsgW8McA'] } }, { },
id: '3cdb6OHkp132soSsgW8McA', {
t: 'measure', id: '3ExXFSuV9WB2WMY2Quyq6L', t: 'measure', v: true,
v: true, tf: [[0, 0.1, 0], [90, 0, 0], [0.1, 0.1, 0.1]],
dt: { in: [], out: [], center: ['4YZKo6XtvL2migaIUmakAr', '7Ik2sRdDZy8Q6sC00AaqCv'] }
},
{
id: '4YZKo6XtvL2migaIUmakAr', t: 'measure', v: true,
tf: [[8.4, 0.1, 0], [90, 0, 0], [0.1, 0.1, 0.1]],
dt: { in: [], out: [], center: ['3ExXFSuV9WB2WMY2Quyq6L', '3cdb6OHkp132soSsgW8McA'] }
},
{
id: '3cdb6OHkp132soSsgW8McA', t: 'measure', v: true,
tf: [[8.4, 0.1, 9], [90, 0, 0], [0.1, 0.1, 0.1]], tf: [[8.4, 0.1, 9], [90, 0, 0], [0.1, 0.1, 0.1]],
dt: { in: [], out: [], center: ['4YZKo6XtvL2migaIUmakAr', '7Ik2sRdDZy8Q6sC00AaqCv'] } dt: { in: [], out: [], center: ['4YZKo6XtvL2migaIUmakAr', '7Ik2sRdDZy8Q6sC00AaqCv'] }
}, { id: '7Ik2sRdDZy8Q6sC00AaqCv', t: 'measure', v: true, tf: [[0, 0.1, 9], [90, 0, 0], [0.1, 0.1, 0.1]], dt: { in: [], out: [], center: ['3cdb6OHkp132soSsgW8McA', '3ExXFSuV9WB2WMY2Quyq6L'] } }, { },
id: '6Vu3dX1V7Si0ISWIiCkoEh', {
t: 'gstore', id: '7Ik2sRdDZy8Q6sC00AaqCv', t: 'measure', v: true,
v: true, tf: [[0, 0.1, 9], [90, 0, 0], [0.1, 0.1, 0.1]],
dt: { in: [], out: [], center: ['3cdb6OHkp132soSsgW8McA', '3ExXFSuV9WB2WMY2Quyq6L'] }
},
{
id: '6Vu3dX1V7Si0ISWIiCkoEh', t: 'gstore', v: true, strokeWidth: 0.1,
tf: [[1.5, 0.1, 0.63], [0, 0, 0], [1, 0.01, 1]], tf: [[1.5, 0.1, 0.63], [0, 0, 0], [1, 0.01, 1]],
dt: { in: [], out: [], center: [], storeWidth: 1.1, storeDepth: 1.3 } dt: { in: [], out: [], center: [], storeWidth: 1.1 }
}, { id: '592UY0EMScbwIyQqgs8aAs', t: 'gstore', v: true, tf: [[3.9, 0.1, 0.63], [0, 0, 0], [1, 0.01, 1]], dt: { in: [], out: [], center: [], storeWidth: 1.1, storeDepth: 1.3 } }, { },
id: '38TYyVWMGLf8OogQMIiSOz', {
t: 'gstore', id: '592UY0EMScbwIyQqgs8aAs', t: 'gstore', v: true, strokeWidth: 0.1,
v: true, tf: [[3.9, 0.1, 0.63], [0, 0, 0], [1, 0.01, 1]],
tf: [[7.1, 0.1, 2.865], [0, 90, 0], [1, 0.01, 1]], dt: { in: [], out: [], center: [] }
dt: { in: [], out: [], center: [], storeWidth: 1.1, storeDepth: 1.3 } },
}, { id: '1hAaZ1xtvukZowAKeWAcqs', t: 'gstore', v: true, tf: [[7.1, 0.1, 4.35], [0, 0, 0], [1, 0.01, 1]], dt: { in: [], out: [], center: [], storeWidth: 1.1, storeDepth: 1.3 } }, { {
id: '28GxDYUqDwZc2WsOgMU2wi', id: '38TYyVWMGLf8OogQMIiSOz', t: 'gstore', v: true, strokeWidth: 0.1,
t: 'gstore', tf: [[7.1, 0.1, 2.865], [0, 0, 0], [1, 0.01, 1]],
v: true, dt: { in: [], out: [], center: [] }
},
{
id: '1hAaZ1xtvukZowAKeWAcqs', t: 'gstore', v: true, strokeWidth: 0.1,
tf: [[7.1, 0.1, 4.35], [0, 0, 0], [1, 0.01, 1]],
dt: { in: [], out: [], center: [] }
},
{
id: '28GxDYUqDwZc2WsOgMU2wi', t: 'gstore', v: true, strokeWidth: 0.1,
tf: [[7.1, 0.1, 6.75], [0, 90, 0], [1, 0.01, 1]], tf: [[7.1, 0.1, 6.75], [0, 90, 0], [1, 0.01, 1]],
dt: { in: [], out: [], center: [], storeWidth: 1.1, storeDepth: 1.3 } dt: { in: [], out: [], center: [] }
}, { id: '2fWOnUmFpvYyCWEqAyU0QC', t: 'way', v: true, tf: [[1.5, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]], dt: { in: [], out: [], center: ['09PTEMUnACWY0MUG4qmk0r'] } }, { },
id: '09PTEMUnACWY0MUG4qmk0r', {
t: 'way', id: '2fWOnUmFpvYyCWEqAyU0QC', t: 'way', v: true,
v: true, tf: [[1.5, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['09PTEMUnACWY0MUG4qmk0r'] }
},
{
id: '09PTEMUnACWY0MUG4qmk0r', t: 'way', v: true,
tf: [[2.7, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['2fWOnUmFpvYyCWEqAyU0QC', '2CSDVrpqthaiQuyWUymCwy', '0mVU9FacN1fmCAmQqwWgIZ'] } dt: { in: [], out: [], center: ['2fWOnUmFpvYyCWEqAyU0QC', '2CSDVrpqthaiQuyWUymCwy', '0mVU9FacN1fmCAmQqwWgIZ'] }
}, { id: '2CSDVrpqthaiQuyWUymCwy', t: 'way', v: true, tf: [[3.9, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]], dt: { in: [], out: [], center: ['09PTEMUnACWY0MUG4qmk0r'] } }, { },
id: '0mVU9FacN1fmCAmQqwWgIZ', {
t: 'way', id: '2CSDVrpqthaiQuyWUymCwy', t: 'way', v: true,
v: true, tf: [[3.9, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['09PTEMUnACWY0MUG4qmk0r'] }
},
{
id: '0mVU9FacN1fmCAmQqwWgIZ', t: 'way', v: true,
tf: [[2.7, 0.1, 2.832], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0.1, 2.832], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['09PTEMUnACWY0MUG4qmk0r', '7LuzEYQQI7OQcEUekEqWcm'] } dt: { in: [], out: [], center: ['09PTEMUnACWY0MUG4qmk0r', '7LuzEYQQI7OQcEUekEqWcm'] }
}, { id: '7LuzEYQQI7OQcEUekEqWcm', t: 'way', v: true, tf: [[2.7, 0.1, 3.932], [90, 0, 0], [0.25, 0.25, 0.1]], dt: { in: [], out: [], center: ['0mVU9FacN1fmCAmQqwWgIZ', '2RForJhOHXtcw0gq8mYAMh'] } }, { },
id: '2RForJhOHXtcw0gq8mYAMh', {
t: 'way', id: '7LuzEYQQI7OQcEUekEqWcm', t: 'way', v: true,
v: true, tf: [[2.7, 0.1, 3.932], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['0mVU9FacN1fmCAmQqwWgIZ', '2RForJhOHXtcw0gq8mYAMh'] }
},
{
id: '2RForJhOHXtcw0gq8mYAMh', t: 'way', v: true,
tf: [[2.7, 0.1, 4.582], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0.1, 4.582], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['7LuzEYQQI7OQcEUekEqWcm', '32vDSCKBrgMWycW0ySIgsJ'] } dt: { in: [], out: [], center: ['7LuzEYQQI7OQcEUekEqWcm', '32vDSCKBrgMWycW0ySIgsJ'] }
}, { id: '32vDSCKBrgMWycW0ySIgsJ', t: 'way', v: true, tf: [[2.7, 0.1, 5.232], [90, 0, 0], [0.25, 0.25, 0.1]], dt: { in: [], out: [], center: ['2RForJhOHXtcw0gq8mYAMh', '0wcYKcGQialFQCGkAa6aYB'] } }, { },
id: '0wcYKcGQialFQCGkAa6aYB', {
t: 'way', id: '32vDSCKBrgMWycW0ySIgsJ', t: 'way', v: true,
v: true, tf: [[2.7, 0.1, 5.232], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['2RForJhOHXtcw0gq8mYAMh', '0wcYKcGQialFQCGkAa6aYB'] }
},
{
id: '0wcYKcGQialFQCGkAa6aYB', t: 'way', v: true,
tf: [[2.7, 0.1, 5.882], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0.1, 5.882], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['32vDSCKBrgMWycW0ySIgsJ', '55g6mUWBdozg4m2ueUEUsy'] } dt: { in: [], out: [], center: ['32vDSCKBrgMWycW0ySIgsJ', '55g6mUWBdozg4m2ueUEUsy'] }
}, { id: '55g6mUWBdozg4m2ueUEUsy', t: 'way', v: true, tf: [[2.7, 0.1, 6.532], [90, 0, 0], [0.25, 0.25, 0.1]], dt: { in: [], out: [], center: ['0wcYKcGQialFQCGkAa6aYB', '5iKoIUBhnU08EM0IsoyOSW'] } }, { },
id: '5iKoIUBhnU08EM0IsoyOSW', {
t: 'way', id: '55g6mUWBdozg4m2ueUEUsy', t: 'way', v: true,
v: true, tf: [[2.7, 0.1, 6.532], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['0wcYKcGQialFQCGkAa6aYB', '5iKoIUBhnU08EM0IsoyOSW'] }
},
{
id: '5iKoIUBhnU08EM0IsoyOSW', t: 'way', v: true,
tf: [[2.7, 0.1, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0.1, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['55g6mUWBdozg4m2ueUEUsy'] } dt: { in: [], out: [], center: ['55g6mUWBdozg4m2ueUEUsy'] }
}, { },
id: '3ZP01pHXJRuyeg24oCaaMq', {
t: 'way', id: '3ZP01pHXJRuyeg24oCaaMq', t: 'way', v: true,
v: true,
tf: [[5.65, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['5onDSGuIKBpUQo6g0EIsuS'] } dt: { in: [], out: [], center: ['5onDSGuIKBpUQo6g0EIsuS'] }
}, { id: '5onDSGuIKBpUQo6g0EIsuS', t: 'way', v: true, tf: [[5.65, 0.1, 2.865], [90, 0, 0], [0.25, 0.25, 0.1]], dt: { in: [], out: [], center: ['3ZP01pHXJRuyeg24oCaaMq', '41A0CKR8cFW8wKkcSMQ4uk'] } }, { },
id: '41A0CKR8cFW8wKkcSMQ4uk', {
t: 'way', id: '5onDSGuIKBpUQo6g0EIsuS', t: 'way', v: true,
v: true, tf: [[5.65, 0.1, 2.865], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['3ZP01pHXJRuyeg24oCaaMq', '41A0CKR8cFW8wKkcSMQ4uk'] }
},
{
id: '41A0CKR8cFW8wKkcSMQ4uk', t: 'way', v: true,
tf: [[5.65, 0.1, 3.932], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0.1, 3.932], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['5onDSGuIKBpUQo6g0EIsuS', '4PunEz5C3Xk66EaOgMEuMq'] } dt: { in: [], out: [], center: ['5onDSGuIKBpUQo6g0EIsuS', '4PunEz5C3Xk66EaOgMEuMq'] }
}, { id: '4PunEz5C3Xk66EaOgMEuMq', t: 'way', v: true, tf: [[5.65, 0.1, 4.348], [90, 0, 0], [0.25, 0.25, 0.1]], dt: { in: [], out: [], center: ['41A0CKR8cFW8wKkcSMQ4uk', '6oCW8i0dpRtuCEIWIaAcQi'] } }, { },
id: '6oCW8i0dpRtuCEIWIaAcQi', {
t: 'way', id: '4PunEz5C3Xk66EaOgMEuMq', t: 'way', v: true,
v: true, tf: [[5.65, 0.1, 4.348], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['41A0CKR8cFW8wKkcSMQ4uk', '6oCW8i0dpRtuCEIWIaAcQi'] }
},
{
id: '6oCW8i0dpRtuCEIWIaAcQi', t: 'way', v: true,
tf: [[5.65, 0.1, 5.232], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0.1, 5.232], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['4PunEz5C3Xk66EaOgMEuMq', '3C9Z8c6oxQbWcS4uSGkC8b'] } dt: { in: [], out: [], center: ['4PunEz5C3Xk66EaOgMEuMq', '3C9Z8c6oxQbWcS4uSGkC8b'] }
}, { id: '3C9Z8c6oxQbWcS4uSGkC8b', t: 'way', v: true, tf: [[5.65, 0.1, 5.882], [90, 0, 0], [0.25, 0.25, 0.1]], dt: { in: [], out: [], center: ['6oCW8i0dpRtuCEIWIaAcQi', '1jJX8KZLMPSSCwuCOU6AQz'] } }, { },
id: '1jJX8KZLMPSSCwuCOU6AQz', {
t: 'way', id: '3C9Z8c6oxQbWcS4uSGkC8b', t: 'way', v: true,
v: true, tf: [[5.65, 0.1, 5.882], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['6oCW8i0dpRtuCEIWIaAcQi', '1jJX8KZLMPSSCwuCOU6AQz'] }
},
{
id: '1jJX8KZLMPSSCwuCOU6AQz', t: 'way', v: true,
tf: [[5.65, 0.1, 6.532], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0.1, 6.532], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['3C9Z8c6oxQbWcS4uSGkC8b', '0aJ81sOKqm9FYo60AIQmMG'] } dt: { in: [], out: [], center: ['3C9Z8c6oxQbWcS4uSGkC8b', '0aJ81sOKqm9FYo60AIQmMG'] }
}, { id: '0aJ81sOKqm9FYo60AIQmMG', t: 'way', v: true, tf: [[5.65, 0.1, 6.744], [90, 0, 0], [0.25, 0.25, 0.1]], dt: { in: [], out: [], center: ['1jJX8KZLMPSSCwuCOU6AQz', '2qtxSDVn30EcI2uY4W0CWf'] } }, { },
id: '2qtxSDVn30EcI2uY4W0CWf', {
t: 'way', id: '0aJ81sOKqm9FYo60AIQmMG', t: 'way', v: true,
v: true, tf: [[5.65, 0.1, 6.744], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['1jJX8KZLMPSSCwuCOU6AQz', '2qtxSDVn30EcI2uY4W0CWf'] }
},
{
id: '2qtxSDVn30EcI2uY4W0CWf', t: 'way', v: true,
tf: [[5.65, 0.1, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0.1, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['0aJ81sOKqm9FYo60AIQmMG'] } dt: { in: [], out: [], center: ['0aJ81sOKqm9FYo60AIQmMG'] }
}, { },
id: 'ptr1', {
t: 'cl2', id: 'ptr1', t: 'cl2', v: true,
v: true,
tf: [[5.65, 0.1, 2.13], [0, -90, 0], [1, 1, 1]], tf: [[5.65, 0.1, 2.13], [0, -90, 0], [1, 1, 1]],
dt: { in: [], out: [], center: [], ptrWidth: 1.5, ptrDepth: 1.5, ptrHeight: 1.98 } dt: { in: [], out: [], center: [], ptrWidth: 1.5, ptrDepth: 1.5, ptrHeight: 1.98 }
}, { },
id: 'clx1', {
t: 'clx', id: 'clx1', t: 'clx', v: true,
v: true,
tf: [[1.5, 0.1, 2.13], [0, 0, 0], [1, 1, 1]], tf: [[1.5, 0.1, 2.13], [0, 0, 0], [1, 1, 1]],
dt: { in: [], out: [], center: [], clxWidth: 1.65, clxDepth: 1.65, clxHeight: 3.393 } dt: { in: [], out: [], center: [], clxWidth: 1.65, clxDepth: 1.65, clxHeight: 3.393 }
}, { },
id: 'charger1', {
t: 'charger', id: 'charger1', t: 'charger', v: true,
v: true,
tf: [[2.696, 0.1, 8.75], [0, 0, 0], [1, 1, 1]], tf: [[2.696, 0.1, 8.75], [0, 0, 0], [1, 1, 1]],
dt: { in: [], out: [], center: [], chargerWidth: 0.53, chargerDepth: 0.275, clxHeight: 0.3 } dt: { in: [], out: [], center: [], chargerWidth: 0.53, chargerDepth: 0.275, clxHeight: 0.3 }
}, { },
id: 'charger2', {
t: 'charger', id: 'charger2', t: 'charger', v: true,
v: true,
tf: [[5.655, 0.1, 8.75], [0, 0, 0], [1, 1, 1]], tf: [[5.655, 0.1, 8.75], [0, 0, 0], [1, 1, 1]],
dt: { in: [], out: [], center: [], chargerWidth: 0.53, chargerDepth: 0.275, clxHeight: 0.3 } dt: { in: [], out: [], center: [], chargerWidth: 0.53, chargerDepth: 0.275, clxHeight: 0.3 }
}, },
@ -298,7 +349,7 @@ export default {
id: 'pallet1122', // 托盘唯一编码 id: 'pallet1122', // 托盘唯一编码
t: 'pallet', // 托盘类型 t: 'pallet', // 托盘类型
v: true, // 可见 v: true, // 可见
tf: [[1.5, 0.1, 0.63], [0, 0, 0], [1.2, 0.15, 1]], // 变换矩阵 tf: [[0, 0, 0], [0, 0, 0], [1.2, 0.15, 1]], // 变换矩阵
dt: { dt: {
in: [], out: [], center: [], in: [], out: [], center: [],
storeAt: { // 存储位置 storeAt: { // 存储位置
@ -313,7 +364,7 @@ export default {
id: 'pallet1123', id: 'pallet1123',
t: 'pallet', t: 'pallet',
v: true, v: true,
tf: [[7.1, 0.1, 2.865], [0, 0, 0], [1.2, 0.15, 1]], tf: [[0, 0, 0], [0, 0, 0], [1.2, 0.15, 1]],
dt: { dt: {
in: [], out: [], center: [], in: [], out: [], center: [],
storeAt: { item: '38TYyVWMGLf8OogQMIiSOz', bay: 0, level: 0, cell: 0 } storeAt: { item: '38TYyVWMGLf8OogQMIiSOz', bay: 0, level: 0, cell: 0 }

2
src/modules/agv1/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import Agv1Renderer from './Agv1Renderer.ts' import Agv1Renderer from './Agv1Renderer.ts'
import Agv1Entity from './Agv1Entity.ts'
import Agv1Interaction from './Agv1Interaction.ts' import Agv1Interaction from './Agv1Interaction.ts'
import propertySetter from './Agv1PropertySetter.ts' import propertySetter from './Agv1PropertySetter.ts'
@ -11,5 +10,4 @@ export default defineModule({
renderer: new Agv1Renderer(ITEM_TYPE_NAME), renderer: new Agv1Renderer(ITEM_TYPE_NAME),
interaction: new Agv1Interaction(ITEM_TYPE_NAME), interaction: new Agv1Interaction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: Agv1Entity
}) })

2
src/modules/carton/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import CartonRenderer from './CartonRenderer.ts' import CartonRenderer from './CartonRenderer.ts'
import CartonEntity from './CartonEntity.ts'
import CartonInteraction from './CartonInteraction.ts' import CartonInteraction from './CartonInteraction.ts'
import propertySetter from "./CartonPropertySetter.ts"; import propertySetter from "./CartonPropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new CartonRenderer(ITEM_TYPE_NAME), renderer: new CartonRenderer(ITEM_TYPE_NAME),
interaction: new CartonInteraction(ITEM_TYPE_NAME), interaction: new CartonInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: CartonEntity,
}) })

2
src/modules/charger/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import ChargerRenderer from './ChargerRenderer.ts' import ChargerRenderer from './ChargerRenderer.ts'
import ChargerEntity from './ChargerEntity.ts'
import ChargerInteraction from './ChargerInteraction.ts' import ChargerInteraction from './ChargerInteraction.ts'
import propertySetter from "@/modules/charger/ChargerPropertySetter.ts"; import propertySetter from "@/modules/charger/ChargerPropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new ChargerRenderer(ITEM_TYPE_NAME), renderer: new ChargerRenderer(ITEM_TYPE_NAME),
interaction: new ChargerInteraction(ITEM_TYPE_NAME), interaction: new ChargerInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: ChargerEntity,
}) })

16
src/modules/cl2/Cl2Entity.ts

@ -20,8 +20,15 @@ export default class Cl2Entity extends BaseEntity {
const arm = this.getArmObject() const arm = this.getArmObject()
// 抬高20cm
this.isLoading = true this.isLoading = true
// 将物品拾取到机械臂上
const mesh = this.pickupItem(item)
const ptrForkMesh = this.getArmObject()
mesh.position.set(0, 0.1, 0)
mesh.rotation.set(0, THREE.MathUtils.degToRad(90), 0)
ptrForkMesh.add(mesh)
// 抬高20cm
gsap.to(arm.position, { gsap.to(arm.position, {
y: arm.position.y + 0.2, y: arm.position.y + 0.2,
duration: 0.5, duration: 0.5,
@ -29,11 +36,6 @@ export default class Cl2Entity extends BaseEntity {
onComplete: () => { onComplete: () => {
this.isCarrying = true this.isCarrying = true
this.isLoading = false this.isLoading = false
const mesh = this.pickupItem(item)
const ptrForkMesh = this.getArmObject()
mesh.position.set(0, 0.1, 0)
mesh.rotation.set(0, THREE.MathUtils.degToRad(90), 0)
ptrForkMesh.add(mesh)
} }
}) })
})) }))
@ -45,6 +47,8 @@ export default class Cl2Entity extends BaseEntity {
const item = this.viewport.entityManager.findItemById(itemId) const item = this.viewport.entityManager.findItemById(itemId)
this.isCarrying = false this.isCarrying = false
this.isUnloading = false this.isUnloading = false
// 将物品从机械臂上卸下
this.dropItem(item, rackId, bay, level) this.dropItem(item, rackId, bay, level)
})) }))
} }

2
src/modules/cl2/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import Cl2Renderer from './Cl2Renderer.ts' import Cl2Renderer from './Cl2Renderer.ts'
import Cl2Entity from './Cl2Entity.ts'
import Cl2Interaction from './Cl2Interaction.ts' import Cl2Interaction from './Cl2Interaction.ts'
import propertySetter from "./Cl2PropertySetter.ts"; import propertySetter from "./Cl2PropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new Cl2Renderer(ITEM_TYPE_NAME), renderer: new Cl2Renderer(ITEM_TYPE_NAME),
interaction: new Cl2Interaction(ITEM_TYPE_NAME), interaction: new Cl2Interaction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: Cl2Entity,
}) })

2
src/modules/clx/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import ClxRenderer from './ClxRenderer.ts' import ClxRenderer from './ClxRenderer.ts'
import ClxEntity from './ClxEntity.ts'
import ClxInteraction from './ClxInteraction.ts' import ClxInteraction from './ClxInteraction.ts'
import propertySetter from "@/modules/clx/ClxPropertySetter.ts"; import propertySetter from "@/modules/clx/ClxPropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new ClxRenderer(ITEM_TYPE_NAME), renderer: new ClxRenderer(ITEM_TYPE_NAME),
interaction: new ClxInteraction(ITEM_TYPE_NAME), interaction: new ClxInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: ClxEntity
}) })

11
src/modules/gstore/GstoreRenderer.ts

@ -168,7 +168,7 @@ export default class GstoreRenderer extends BaseRenderer {
* *
* Position Rotation * Position Rotation
*/ */
getStorePlacement(viewport: Viewport, item: ItemJson): { position: THREE.Vector3, rotation: THREE.Quaternion } { getStorePlacement(viewport: Viewport, item: ItemJson): { position: [number, number, number], rotation: [number, number, number] } {
if (!item.dt?.storeAt?.item) { if (!item.dt?.storeAt?.item) {
// 没有定义存储位置,返回空对象 // 没有定义存储位置,返回空对象
//@ts-ignore //@ts-ignore
@ -177,13 +177,6 @@ export default class GstoreRenderer extends BaseRenderer {
// 将这个物品添加到库存中 // 将这个物品添加到库存中
const me = viewport.entityManager.findItemById(item.dt.storeAt.item) const me = viewport.entityManager.findItemById(item.dt.storeAt.item)
const position = new THREE.Vector3(...me.tf[0]) return { position: me.tf[0], rotation: me.tf[1] }
const rotation = new THREE.Quaternion().setFromEuler(new THREE.Euler(
THREE.MathUtils.degToRad(me.tf[1][0]),
THREE.MathUtils.degToRad(me.tf[1][1]),
THREE.MathUtils.degToRad(me.tf[1][2]),
'XYZ'
))
return { position, rotation }
} }
} }

2
src/modules/gstore/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import GstoreRenderer from './GstoreRenderer.ts' import GstoreRenderer from './GstoreRenderer.ts'
import GstoreEntity from './GstoreEntity.ts'
import GstoreInteraction from './GstoreInteraction.ts' import GstoreInteraction from './GstoreInteraction.ts'
import propertySetter from "@/modules/gstore/GstorePropertySetter.ts"; import propertySetter from "@/modules/gstore/GstorePropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new GstoreRenderer(ITEM_TYPE_NAME), renderer: new GstoreRenderer(ITEM_TYPE_NAME),
interaction: new GstoreInteraction(ITEM_TYPE_NAME), interaction: new GstoreInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: GstoreEntity,
}) })

2
src/modules/measure/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import MeasureRenderer from './MeasureRenderer.ts' import MeasureRenderer from './MeasureRenderer.ts'
import MeasureEntity from './MeasureEntity.ts'
import MeasureInteraction from './MeasureInteraction.ts' import MeasureInteraction from './MeasureInteraction.ts'
import propertySetter from "@/modules/measure/MeasurePropertySetter.ts"; import propertySetter from "@/modules/measure/MeasurePropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new MeasureRenderer(ITEM_TYPE_NAME), renderer: new MeasureRenderer(ITEM_TYPE_NAME),
interaction: new MeasureInteraction(ITEM_TYPE_NAME), interaction: new MeasureInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: MeasureEntity,
}) })

2
src/modules/pallet/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import PalletRenderer from './PalletRenderer.ts' import PalletRenderer from './PalletRenderer.ts'
import PalletEntity from './PalletEntity.ts'
import PalletInteraction from './PalletInteraction.ts' import PalletInteraction from './PalletInteraction.ts'
import propertySetter from "@/modules/pallet/PalletPropertySetter.ts"; import propertySetter from "@/modules/pallet/PalletPropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new PalletRenderer(ITEM_TYPE_NAME), renderer: new PalletRenderer(ITEM_TYPE_NAME),
interaction: new PalletInteraction(ITEM_TYPE_NAME), interaction: new PalletInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: PalletEntity,
}) })

2
src/modules/rack/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import RackRenderer from './RackRenderer.ts' import RackRenderer from './RackRenderer.ts'
import RackEntity from './RackEntity.ts'
import RackInteraction from './RackInteraction.ts' import RackInteraction from './RackInteraction.ts'
import propertySetter from "@/modules/rack/RackPropertySetter.ts"; import propertySetter from "@/modules/rack/RackPropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new RackRenderer(ITEM_TYPE_NAME), renderer: new RackRenderer(ITEM_TYPE_NAME),
interaction: new RackInteraction(ITEM_TYPE_NAME), interaction: new RackInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: RackEntity,
}) })

2
src/modules/shuttle_rack/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import ShuttleRackRenderer from './ShuttleRackRenderer.ts' import ShuttleRackRenderer from './ShuttleRackRenderer.ts'
import ShuttleRackEntity from './ShuttleRackEntity.ts'
import ShuttleRackInteraction from './ShuttleRackInteraction.ts' import ShuttleRackInteraction from './ShuttleRackInteraction.ts'
import propertySetter from "./ShuttleRackPropertySetter.ts"; import propertySetter from "./ShuttleRackPropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new ShuttleRackRenderer(ITEM_TYPE_NAME), renderer: new ShuttleRackRenderer(ITEM_TYPE_NAME),
interaction: new ShuttleRackInteraction(ITEM_TYPE_NAME), interaction: new ShuttleRackInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: ShuttleRackEntity,
}) })

2
src/modules/tote/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import ToteRenderer from './ToteRenderer.ts' import ToteRenderer from './ToteRenderer.ts'
import ToteEntity from './ToteEntity.ts'
import ToteInteraction from './ToteInteraction.ts' import ToteInteraction from './ToteInteraction.ts'
import propertySetter from './TotePropertySetter.ts' import propertySetter from './TotePropertySetter.ts'
@ -11,5 +10,4 @@ export default defineModule({
renderer: new ToteRenderer(ITEM_TYPE_NAME), renderer: new ToteRenderer(ITEM_TYPE_NAME),
interaction: new ToteInteraction(ITEM_TYPE_NAME), interaction: new ToteInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: ToteEntity
}) })

2
src/modules/way/index.ts

@ -1,6 +1,5 @@
import { defineModule } from '@/core/manager/ModuleManager.ts' import { defineModule } from '@/core/manager/ModuleManager.ts'
import WayRenderer from './WayRenderer.ts' import WayRenderer from './WayRenderer.ts'
import WayEntity from './WayEntity.ts'
import WayInteraction from './WayInteraction.ts' import WayInteraction from './WayInteraction.ts'
import propertySetter from "@/modules/way/WayPropertySetter.ts"; import propertySetter from "@/modules/way/WayPropertySetter.ts";
@ -11,5 +10,4 @@ export default defineModule({
renderer: new WayRenderer(ITEM_TYPE_NAME), renderer: new WayRenderer(ITEM_TYPE_NAME),
interaction: new WayInteraction(ITEM_TYPE_NAME), interaction: new WayInteraction(ITEM_TYPE_NAME),
setter: propertySetter, setter: propertySetter,
entity: WayEntity,
}) })

7
src/types/ScriptSupport.d.ts

@ -14,13 +14,6 @@ declare interface Model {
getPositionByEntityId(entityId: string): Vector3IF getPositionByEntityId(entityId: string): Vector3IF
/** /**
*
* @param agv
* @return
*/
createTask(agv: object): TaskManagerIF
/**
* ID获取 CL2 * ID获取 CL2
*/ */
getCl2(id: string): Cl2If getCl2(id: string): Cl2If

6
src/types/Types.d.ts

@ -85,3 +85,9 @@ interface Vector3IF {
*/ */
distanceTo(vector: Vector3IF): number; distanceTo(vector: Vector3IF): number;
} }
interface QuaternionIF {
x: number,
y: number,
z: number
}

3
src/types/model.d.ts

@ -40,6 +40,9 @@ interface InteractionCudOption {
*/ */
interface RendererCudOption { interface RendererCudOption {
createFromInteraction?: boolean createFromInteraction?: boolean
/**
*
*/
isRuntime?: boolean isRuntime?: boolean
//THREE.Vector3 //THREE.Vector3
position?: any position?: any

Loading…
Cancel
Save