Browse Source

Way 点位的删除

master
修宁 6 months ago
parent
commit
51878c8aa6
  1. 3
      src/core/ModelUtils.ts
  2. 3
      src/core/base/BaseInteraction.ts
  3. 13
      src/core/base/BaseRenderer.ts
  4. 10
      src/core/manager/InstanceMeshManager.ts
  5. 46
      src/example/ExampleUtil.js
  6. 11
      src/example/example1.js
  7. 8
      src/modules/way/WayRenderer.ts

3
src/core/ModelUtils.ts

@ -65,7 +65,8 @@ export function getLinkDirection(viewport: Viewport, linkName: string, start: It
}
throw new Error(`无法判断 ${start.id}${end.id} 之间的连接关系`)
// 他们之间没有连接关系
return { lineId, direction: '' }
}
export function setUserDataForItem(item: ItemJson, object: Object3DLike) {

3
src/core/base/BaseInteraction.ts

@ -7,6 +7,7 @@ import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry'
import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial'
import { numberToString } from '@/utils/webutils.ts'
import { CSS2DObject } from 'three/examples/jsm/renderers/CSS2DRenderer'
import type { Object3DLike } from '@/types/ModelTypes.ts'
let pdFn, pmFn, puFn
@ -40,7 +41,7 @@ export default abstract class BaseInteraction {
// 连线起点
linkStartPointId: string
linkStartPointObject: THREE.Object3D
linkStartPointObject: Object3DLike
templineMaterial = new LineMaterial({
color: 0xE63C17, // 主颜色

13
src/core/base/BaseRenderer.ts

@ -6,6 +6,7 @@ import InstancePointManager, { PointManageWrap } from '@/core/manager/InstancePo
import Constract from '@/core/Constract.ts'
import LineSegmentManager, { LineManageWrap } from '@/core/manager/LineSegmentManager.ts'
import type { Object3DLike } from '@/types/ModelTypes.ts'
import { InstanceMeshWrap } from '@/core/manager/InstanceMeshManager.ts'
/**
*
@ -152,6 +153,18 @@ export default abstract class BaseRenderer {
const object = this.tempViewport.entityManager.findObjectById(id)
if (object instanceof THREE.Object3D) {
this.removeFromScene(object)
} else if (object instanceof PointManageWrap) {
// 如果是 PointManageWrap, 则需要调用管理器的删除方法
object.manager.deletePoint(id)
} else if (object instanceof InstanceMeshWrap) {
// 如果是 PointManageWrap, 则需要调用管理器的删除方法
object.manager.delete(id)
} else if (object instanceof LineManageWrap) {
// 如果是 PointManageWrap, 则需要调用管理器的删除方法
object.manager.deleteLine(id)
}
this.tempViewport.entityManager.deleteEntityOnly(id)

10
src/core/manager/InstanceMeshManager.ts

@ -2,6 +2,7 @@ import * as THREE from 'three'
import type Viewport from '@/core/engine/Viewport.ts'
import InstanceMeshBlock from '@/core/manager/InstanceMeshBlock.ts'
import { PointManageWrap } from '@/core/manager/InstancePointManager.ts'
import { Matrix4 } from 'three/src/math/Matrix4'
export default class InstanceMeshManager {
private __uuidMap = new Map<string, InstanceMeshWrap>()
@ -150,6 +151,15 @@ export class InstanceMeshWrap {
name: string
visible: boolean
get position(): THREE.Vector3 {
const m = new THREE.Matrix4()
this.manager.blocks[this.blockIndex].instancedMesh.getMatrixAt(this.meshIndex, m)
const pos = new THREE.Vector3()
m.decompose(pos, new THREE.Quaternion(), new THREE.Vector3())
return pos
}
constructor(entityId: string, manager: InstanceMeshManager, blockIndex: number, meshIndex: number, userData?: any) {
this.uuid = system.createUUID()
this.entityId = entityId

46
src/example/ExampleUtil.js

@ -135,6 +135,52 @@ export function buildAgvPerformanceData(t, rows, cols) {
// 与前一个点进行连线
if (row > 0 && col > 0) {
const preXNode = data.get('wp_' + (row - 1) + '_' + (col))
node.dt.in.push(preXNode.id)
preXNode.dt.out.push(node.id)
const preYNode = data.get('wp_' + (row) + '_' + (col - 1))
node.dt.in.push(preYNode.id)
preYNode.dt.out.push(node.id)
} else if (row > 0) {
const preXNode = data.get('wp_' + (row - 1) + '_' + (col))
node.dt.in.push(preXNode.id)
preXNode.dt.out.push(node.id)
} else if (col > 0) {
const preYNode = data.get('wp_' + (row) + '_' + (col - 1))
node.dt.in.push(preYNode.id)
preYNode.dt.out.push(node.id)
}
}
}
return Array.from(data.values())
}
/**
* 构建AGV性能数据
* @param rows 行数
* @param cols 列数
*/
export function buildCenterLinkPerformanceData(t, rows, cols) {
const spacingX = 1.25 // X轴间距
const spacingZ = 1.25 // Y轴间距
// 创建一个二维数组来存储点阵数据
const data = new Map()
for (let row = 0; row < rows; row++) {
for (let col = 0; col < cols; col++) {
// 计算每个点的坐标
const node = createAgvNode(t, row, col)
node.tf[0][0] = row * spacingX
node.tf[0][2] = col * spacingZ
data.set(node.id, node)
// 与前一个点进行连线
if (row > 0 && col > 0) {
const preXNode = data.get('wp_' + (row - 1) + '_' + (col))
node.dt.center.push(preXNode.id)
preXNode.dt.center.push(node.id)

11
src/example/example1.js

@ -1,4 +1,4 @@
import { buildAgvPerformanceData, buildPointPerformanceData, buildRackPerformanceData } from '@/example/ExampleUtil.js'
import { buildAgvPerformanceData, buildCenterLinkPerformanceData, buildPointPerformanceData, buildRackPerformanceData } from '@/example/ExampleUtil.js'
export default {
project_uuid: 'example1',
@ -391,6 +391,10 @@ export default {
items: buildAgvPerformanceData('way', 100, 100)
},
{
catalogCode: '__f4', t: 'floor',
items: buildCenterLinkPerformanceData('measure', 100, 100)
},
{
catalogCode: '__f2', t: 'floor',
items: buildPointPerformanceData('pallet', 200, 500)
},
@ -552,9 +556,10 @@ export default {
{
label: '仓库楼层', // 目录分组名
items: [
{ catalogCode: '__f1', label: '路径压力测试 (-f1)' },
{ catalogCode: '__f2', label: '箱子压力测试 (-f2)' },
{ catalogCode: '__f3', label: '货架压力测试 (-f3)' },
{ catalogCode: '__f2', label: '箱子压力测试 (-f2)' }, // 目录项
{ catalogCode: '__f1', label: '路径压力测试 (-f1)' }, // 目录项
{ catalogCode: '__f4', label: '标尺压力测试 (-f4)' },
{ catalogCode: 'f1', label: '一楼 (f1)' },
{ catalogCode: 'f2', label: '二楼 (f2)' },
{ catalogCode: 'f3', label: '三楼 (f3)' },

8
src/modules/way/WayRenderer.ts

@ -106,7 +106,7 @@ export default class WayRenderer extends BaseRenderer {
if (start.t === this.itemTypeName && end.t === this.itemTypeName) {
return this._createOrUpdateGuideway(start, end, type)
} else {
throw new Error('目前只支持二维码站点之间的连接')
// throw new Error('目前只支持二维码站点之间的连接')
}
}
@ -116,7 +116,7 @@ export default class WayRenderer extends BaseRenderer {
this._createOrUpdateGuideway(start, end, type)
} else {
throw new Error('目前只支持二维码站点之间的连接')
// throw new Error('目前只支持二维码站点之间的连接')
}
}
@ -215,7 +215,7 @@ export default class WayRenderer extends BaseRenderer {
deleteLine(start: ItemJson, end: ItemJson, type: LinkType, option?: RendererCudOption) {
if (start.t === this.itemTypeName && end.t === this.itemTypeName) {
if ((start.t === this.itemTypeName || start.t === 'unknown') && (end.t === this.itemTypeName || end.t === 'unknown')) {
// 二维码站点之间的连接
const lineId = getCargoLineId(WayRenderer.GUIDEWAY_LINE_NAME, start.id, end.id)
const object = this.tempViewport.entityManager.findLineObjectById(lineId)
@ -233,7 +233,7 @@ export default class WayRenderer extends BaseRenderer {
this.tempViewport.entityManager.deleteLineObjectOnly(lineId)
} else {
throw new Error('目前只支持二维码站点之间的连接')
// throw new Error('目前只支持二维码站点之间的连接')
}
}

Loading…
Cancel
Save