Browse Source

Charger 充电桩点位问题

master
修宁 6 months ago
parent
commit
4f32a61759
  1. 2
      src/core/base/BaseRenderer.ts
  2. 4
      src/core/manager/EntityManager.ts
  3. 1
      src/core/manager/WorldModel.ts
  4. 11
      src/editor/ModelMain.vue
  5. 8
      src/example/example1.js
  6. 3
      src/modules/measure/MeasureRenderer.ts
  7. 37
      src/modules/way/WayRenderer.ts

2
src/core/base/BaseRenderer.ts

@ -7,8 +7,6 @@ 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' import { getRenderer } from '@/core/manager/ModuleManager.ts'
debugger
/** /**
* *
* / 线 Three.js . * / 线 Three.js .

4
src/core/manager/EntityManager.ts

@ -473,11 +473,11 @@ export default class EntityManager {
} }
} }
appendLineObject(id: string, lines: LineLike) { appendLineObject(id: string, lines: any) {
this.__lineMap.set(id, lines) this.__lineMap.set(id, lines)
} }
findLineObjectById(lineId: string): LineLike | undefined { findLineObjectById(lineId: string): any | undefined {
return this.__lineMap.get(lineId) return this.__lineMap.get(lineId)
} }

1
src/core/manager/WorldModel.ts

@ -230,5 +230,4 @@ export default class WorldModel {
} }
const worldModel = new WorldModel() const worldModel = new WorldModel()
debugger
export { worldModel } export { worldModel }

11
src/editor/ModelMain.vue

@ -12,7 +12,8 @@
<div v-if="isModelOpen" style="display: flex; flex-direction: row; align-items: center; margin-right: 10px;"> <div v-if="isModelOpen" style="display: flex; flex-direction: row; align-items: center; margin-right: 10px;">
<div class="field-block" style="margin-right: 5px;"> <div class="field-block" style="margin-right: 5px;">
<el-select style="width:130px;" placeholder="运行环境" <el-select style="width:130px;" placeholder="运行环境"
v-model="worldModelState.currentEnvId"> v-model="worldModelState.runState.currentEnvId">
<el-option v-for="env in envList" :key="env.env_id" :label="env.env_name" :value="env.env_id"></el-option>
<template #footer> <template #footer>
<el-button size="small" type="primary" plain>创建运行环境</el-button> <el-button size="small" type="primary" plain>创建运行环境</el-button>
<el-button size="small" :icon="renderIcon('Refresh')" @click="reloadEnvList" /> <el-button size="small" :icon="renderIcon('Refresh')" @click="reloadEnvList" />
@ -21,7 +22,7 @@
</div> </div>
<div class="field-block" style="margin-right: 5px;"> <div class="field-block" style="margin-right: 5px;">
<el-select style="width:130px;" placeholder="时间速率" <el-select style="width:130px;" placeholder="时间速率"
v-model="worldModelState.timeRate"> v-model="worldModelState.runState.timeRate">
<el-option label="1x" :value="1"></el-option> <el-option label="1x" :value="1"></el-option>
<el-option label="2x" :value="2"></el-option> <el-option label="2x" :value="2"></el-option>
<el-option label="10x" :value="10"></el-option> <el-option label="10x" :value="10"></el-option>
@ -261,12 +262,6 @@ export default {
} }
}, },
watch: { watch: {
'worldModel.state.project_uuid': {
handler() {
this.reloadEnvList()
},
immediate: true
},
hideBottom(value) { hideBottom(value) {
if (value) { if (value) {
this.$refs.mainSplit.refreshSize([100, 0]) this.$refs.mainSplit.refreshSize([100, 0])

8
src/example/example1.js

@ -376,14 +376,14 @@ export default {
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', v: true, id: 'charger1', t: 'way', v: true,
tf: [[2.696, 0, 8.75], [0, 0, 0], [1, 1, 1]], tf: [[2.696, 0, 8.75], [0, 0, 0], [1, 1, 1]],
dt: { in: ['8'], out: ['8'], center: [], chargerWidth: 0.53, chargerDepth: 0.275, clxHeight: 0.3 } dt: { in: ['8'], out: ['8'], center: [], isCharger: true }
}, },
{ {
id: 'charger2', t: 'charger', v: true, id: 'charger2', t: 'way', v: true,
tf: [[5.655, 0, 8.75], [0, 0, 0], [1, 1, 1]], tf: [[5.655, 0, 8.75], [0, 0, 0], [1, 1, 1]],
dt: { in: ['27'], out: ['27'], center: [], chargerWidth: 0.53, chargerDepth: 0.275, clxHeight: 0.3 } dt: { in: ['27'], out: ['27'], center: [], isCharger: true }
}, },
{ {
id: 'pallet1122', // 托盘唯一编码 id: 'pallet1122', // 托盘唯一编码

3
src/modules/measure/MeasureRenderer.ts

@ -7,9 +7,6 @@ import LineSegmentManager, { LineWrap } from '@/core/manager/LineSegmentManager.
import type { LineLike, Object3DLike } from '@/types/ModelTypes.ts' import type { LineLike, Object3DLike } from '@/types/ModelTypes.ts'
import InstanceMeshManager from '@/core/manager/InstanceMeshManager.ts' import InstanceMeshManager from '@/core/manager/InstanceMeshManager.ts'
debugger
console.log('MeasureRenderer initialized at', performance.now());
/** /**
* *
* InstanceMesh LineSegment * InstanceMesh LineSegment

37
src/modules/way/WayRenderer.ts

@ -10,6 +10,7 @@ import InstanceMeshManager from '@/core/manager/InstanceMeshManager.ts'
import LineSegmentManager from '@/core/manager/LineSegmentManager.ts' import LineSegmentManager from '@/core/manager/LineSegmentManager.ts'
import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial' import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial'
import { getRenderer } from '@/core/manager/ModuleManager.ts' import { getRenderer } from '@/core/manager/ModuleManager.ts'
import chargerUrl from '@/assets/images/ptr/charger.png'
/** /**
* AGV行走路线渲染器 point * AGV行走路线渲染器 point
@ -17,7 +18,7 @@ import { getRenderer } from '@/core/manager/ModuleManager.ts'
export default class WayRenderer extends BaseRenderer { export default class WayRenderer extends BaseRenderer {
static LABEL_NAME = 'way_label' static LABEL_NAME = 'way_label'
static POINT_NAME = 'way_point' static POINT_NAME = 'way_point'
static LINE_NAME = 'way_line' static CHARGER_POINT_NAME = 'charger'
static GUIDEWAY_LINE_NAME = 'guideway' static GUIDEWAY_LINE_NAME = 'guideway'
static RED_LINE_NAME = 'red_line' static RED_LINE_NAME = 'red_line'
@ -42,6 +43,7 @@ export default class WayRenderer extends BaseRenderer {
dirGeometry: THREE.PlaneGeometry dirGeometry: THREE.PlaneGeometry
dirMaterial: THREE.Material dirMaterial: THREE.Material
dir2Material: THREE.Material dir2Material: THREE.Material
chargerMaterial: THREE.Material
/** /**
* , * ,
@ -58,13 +60,18 @@ export default class WayRenderer extends BaseRenderer {
super.init(), super.init(),
new THREE.TextureLoader().loadAsync(MoveLinePointPng), new THREE.TextureLoader().loadAsync(MoveLinePointPng),
new THREE.TextureLoader().loadAsync(TriangleUrl), new THREE.TextureLoader().loadAsync(TriangleUrl),
new THREE.TextureLoader().loadAsync(Triangle2Url) new THREE.TextureLoader().loadAsync(Triangle2Url),
new THREE.TextureLoader().loadAsync(chargerUrl)
]).then(([_, texture, dirTexture, dir2Texture]) => { ]).then(([_, texture, dirTexture, dir2Texture, chargerTexture]) => {
texture.flipY = false texture.flipY = false
this.pointGeometry = new THREE.PlaneGeometry(1, 1).rotateX(-Math.PI / 2) this.pointGeometry = new THREE.PlaneGeometry(1, 1).rotateX(-Math.PI / 2)
this.pointGeometry.center() this.pointGeometry.center()
this.chargerMaterial = new THREE.MeshLambertMaterial({
map: chargerTexture, // 颜色贴图
transparent: true // 允许透明纹理
})
this.pointMaterial = new THREE.MeshBasicMaterial({ this.pointMaterial = new THREE.MeshBasicMaterial({
map: texture, map: texture,
@ -98,6 +105,10 @@ export default class WayRenderer extends BaseRenderer {
createPointBasic(item: ItemJson, option?: RendererCudOption): Object3DLike { createPointBasic(item: ItemJson, option?: RendererCudOption): Object3DLike {
// 不允许改变高度/角度/大小 // 不允许改变高度/角度/大小
if (item.dt.isCharger) {
return this.createCharger(item)
} else {
item.tf = [ item.tf = [
[item.tf[0][0], this.defulePositionY, item.tf[0][2]], [item.tf[0][0], this.defulePositionY, item.tf[0][2]],
[this.defaultRotation.x, this.defaultRotation.y, this.defaultRotation.z], [this.defaultRotation.x, this.defaultRotation.y, this.defaultRotation.z],
@ -105,9 +116,24 @@ export default class WayRenderer extends BaseRenderer {
] ]
return this.pointManager.createByItem(item) return this.pointManager.createByItem(item)
} }
}
private createCharger(item: ItemJson) {
// 创建平面几何体
const group = new THREE.Group()
group.name = WayRenderer.CHARGER_POINT_NAME
// 绘制背景矩形框
const planeGeometry = new THREE.PlaneGeometry(item.dt.chargerWidth, item.dt.chargerDepth)
planeGeometry.rotateX(-Math.PI / 2)
const planeMesh = new THREE.Mesh(planeGeometry, this.chargerMaterial)
group.add(planeMesh)
return group
}
createLine(start: ItemJson, end: ItemJson, type: LinkType): Object3DLike { createLine(start: ItemJson, end: ItemJson, type: LinkType): Object3DLike {
if (start.t === this.itemTypeName && end.t === this.itemTypeName) { if ((start.t === this.itemTypeName) && end.t === this.itemTypeName) {
return this._createOrUpdateGuideway(start, end, type) return this._createOrUpdateGuideway(start, end, type)
} else { } else {
// throw new Error('目前只支持二维码站点之间的连接') // throw new Error('目前只支持二维码站点之间的连接')
@ -260,6 +286,9 @@ export default class WayRenderer extends BaseRenderer {
*/ */
afterCreateOrUpdatePoint(item: ItemJson, option: RendererCudOption, object: Object3DLike) { afterCreateOrUpdatePoint(item: ItemJson, option: RendererCudOption, object: Object3DLike) {
super.afterCreateOrUpdatePoint(item, option, object) super.afterCreateOrUpdatePoint(item, option, object)
if (item.dt.isCharger) {
return
}
// 创建一个 id 标签 // 创建一个 id 标签
this.tempViewport.labelManager.createOrUpdateMeshLabel(object, '' + item.id, { this.tempViewport.labelManager.createOrUpdateMeshLabel(object, '' + item.id, {

Loading…
Cancel
Save