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
*/

13
src/core/base/BaseItemEntity.ts

@ -261,25 +261,16 @@ export default abstract class BaseEntity implements EntityIf, Loadable, Carry, W
level: level,
cell: cell
}
const rack = Model.find(storeItemId)
const rackRenderer = getRenderer(rack.t)
const itemRenderer = getRenderer(item.t)
if (!rackRenderer) {
throw new Error(`Renderer for type ${item.t} not found`)
}
if (!itemRenderer) {
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()
itemRenderer.tempViewport = this.viewport
itemRenderer.createOrUpdatePointForRuntime(item, position, rotation)
itemRenderer.createOrUpdatePointForRuntime(item)
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 type { LineLike, Object3DLike } from '@/types/ModelTypes.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)
// const dragObjects = objects.filter(obj => !!obj.userData.draggable)
//this.tempViewport.dragManager.setDragObjects(dragObjects, 'push')
}
removeFromScene(...objects: THREE.Object3D[]) {
@ -119,8 +118,8 @@ export default abstract class BaseRenderer {
return point
}
createOrUpdatePointForRuntime(item: ItemJson, position: THREE.Vector3, rotation: THREE.Quaternion): Object3DLike {
const option = { isRuntime: true, position, rotation }
createOrUpdatePointForRuntime(item: ItemJson): Object3DLike {
const option = { isRuntime: true }
return this.createPointForEntity(item, option)
}
@ -133,25 +132,44 @@ export default abstract class BaseRenderer {
// 由基础类创造一个属于自己的点演示
const point = this.createPointBasic(item, option)
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.compose(
option.position,
option.rotation,
new THREE.Vector3(option.position[0], option.position[1], option.position[2]),
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])
)
// 回写 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.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.setMatrix4(matrix)
point.visible = ((typeof item.v !== 'undefined') ? item.v : true)
return point
@ -267,7 +285,8 @@ export default abstract class BaseRenderer {
*
* 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)
}

1
src/core/manager/ModuleManager.ts

@ -13,7 +13,6 @@ export interface ModuleDefineOption {
renderer?: BaseRenderer;
interaction?: BaseInteraction;
setter?: PropertySetter;
entity?: new () => BaseEntity;
}
// 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 * as THREE from 'three'
import { getMatrixFromTf } from '@/core/ModelUtils.ts'

3
src/editor/Model2DEditor.vue

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

215
src/example/example1.js

@ -179,118 +179,169 @@ export default {
in: [],
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',
v: true,
},
{
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: '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,
},
{
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: '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]],
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',
v: true,
},
{
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', v: true, strokeWidth: 0.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 }
}, { 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',
v: true,
tf: [[7.1, 0.1, 2.865], [0, 90, 0], [1, 0.01, 1]],
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',
t: 'gstore',
v: true,
dt: { in: [], out: [], center: [], storeWidth: 1.1 }
},
{
id: '592UY0EMScbwIyQqgs8aAs', t: 'gstore', v: true, strokeWidth: 0.1,
tf: [[3.9, 0.1, 0.63], [0, 0, 0], [1, 0.01, 1]],
dt: { in: [], out: [], center: [] }
},
{
id: '38TYyVWMGLf8OogQMIiSOz', t: 'gstore', v: true, strokeWidth: 0.1,
tf: [[7.1, 0.1, 2.865], [0, 0, 0], [1, 0.01, 1]],
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]],
dt: { in: [], out: [], center: [], storeWidth: 1.1, storeDepth: 1.3 }
}, { 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',
v: true,
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', v: true,
tf: [[2.7, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
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',
v: true,
},
{
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', v: true,
tf: [[2.7, 0.1, 2.832], [90, 0, 0], [0.25, 0.25, 0.1]],
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',
v: true,
},
{
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', v: true,
tf: [[2.7, 0.1, 4.582], [90, 0, 0], [0.25, 0.25, 0.1]],
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',
v: true,
},
{
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', v: true,
tf: [[2.7, 0.1, 5.882], [90, 0, 0], [0.25, 0.25, 0.1]],
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',
v: true,
},
{
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', v: true,
tf: [[2.7, 0.1, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['55g6mUWBdozg4m2ueUEUsy'] }
}, {
id: '3ZP01pHXJRuyeg24oCaaMq',
t: 'way',
v: true,
},
{
id: '3ZP01pHXJRuyeg24oCaaMq', t: 'way', v: true,
tf: [[5.65, 0.1, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
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',
v: true,
},
{
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', v: true,
tf: [[5.65, 0.1, 3.932], [90, 0, 0], [0.25, 0.25, 0.1]],
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',
v: true,
},
{
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', v: true,
tf: [[5.65, 0.1, 5.232], [90, 0, 0], [0.25, 0.25, 0.1]],
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',
v: true,
},
{
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', v: true,
tf: [[5.65, 0.1, 6.532], [90, 0, 0], [0.25, 0.25, 0.1]],
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',
v: true,
},
{
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', v: true,
tf: [[5.65, 0.1, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['0aJ81sOKqm9FYo60AIQmMG'] }
}, {
id: 'ptr1',
t: 'cl2',
v: true,
},
{
id: 'ptr1', t: 'cl2', v: true,
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 }
}, {
id: 'clx1',
t: 'clx',
v: true,
},
{
id: 'clx1', t: 'clx', v: true,
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 }
}, {
id: 'charger1',
t: 'charger',
v: true,
},
{
id: 'charger1', t: 'charger', v: true,
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 }
}, {
id: 'charger2',
t: 'charger',
v: true,
},
{
id: 'charger2', t: 'charger', v: true,
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 }
},
@ -298,7 +349,7 @@ export default {
id: 'pallet1122', // 托盘唯一编码
t: 'pallet', // 托盘类型
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: {
in: [], out: [], center: [],
storeAt: { // 存储位置
@ -313,7 +364,7 @@ export default {
id: 'pallet1123',
t: 'pallet',
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: {
in: [], out: [], center: [],
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 Agv1Renderer from './Agv1Renderer.ts'
import Agv1Entity from './Agv1Entity.ts'
import Agv1Interaction from './Agv1Interaction.ts'
import propertySetter from './Agv1PropertySetter.ts'
@ -11,5 +10,4 @@ export default defineModule({
renderer: new Agv1Renderer(ITEM_TYPE_NAME),
interaction: new Agv1Interaction(ITEM_TYPE_NAME),
setter: propertySetter,
entity: Agv1Entity
})

2
src/modules/carton/index.ts

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

2
src/modules/charger/index.ts

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

16
src/modules/cl2/Cl2Entity.ts

@ -20,8 +20,15 @@ export default class Cl2Entity extends BaseEntity {
const arm = this.getArmObject()
// 抬高20cm
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, {
y: arm.position.y + 0.2,
duration: 0.5,
@ -29,11 +36,6 @@ export default class Cl2Entity extends BaseEntity {
onComplete: () => {
this.isCarrying = true
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)
this.isCarrying = false
this.isUnloading = false
// 将物品从机械臂上卸下
this.dropItem(item, rackId, bay, level)
}))
}

2
src/modules/cl2/index.ts

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

2
src/modules/clx/index.ts

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

11
src/modules/gstore/GstoreRenderer.ts

@ -168,7 +168,7 @@ export default class GstoreRenderer extends BaseRenderer {
*
* 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) {
// 没有定义存储位置,返回空对象
//@ts-ignore
@ -177,13 +177,6 @@ export default class GstoreRenderer extends BaseRenderer {
// 将这个物品添加到库存中
const me = viewport.entityManager.findItemById(item.dt.storeAt.item)
const position = new THREE.Vector3(...me.tf[0])
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 }
return { position: me.tf[0], rotation: me.tf[1] }
}
}

2
src/modules/gstore/index.ts

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

2
src/modules/measure/index.ts

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

2
src/modules/pallet/index.ts

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

2
src/modules/rack/index.ts

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

2
src/modules/shuttle_rack/index.ts

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

2
src/modules/tote/index.ts

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

2
src/modules/way/index.ts

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

7
src/types/ScriptSupport.d.ts

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

6
src/types/Types.d.ts

@ -85,3 +85,9 @@ interface Vector3IF {
*/
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 {
createFromInteraction?: boolean
/**
*
*/
isRuntime?: boolean
//THREE.Vector3
position?: any

Loading…
Cancel
Save