Browse Source

way point 渲染

master
修宁 6 months ago
parent
commit
01ab68ebff
  1. 1
      doc/台湾展会项目V2.json
  2. 38
      src/example/example1.js
  3. 76
      src/modules/way/WayRenderer.ts

1
doc/台湾展会项目V2.json

File diff suppressed because one or more lines are too long

38
src/example/example1.js

@ -204,44 +204,44 @@ export default {
{ {
id: '1', t: 'way', v: true, id: '1', t: 'way', v: true,
tf: [[2.7, 0, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['38', '36', '2'], autogyration: true } dt: { in: ['2', '38', '36'], out: ['2', '38', '36'], center: [], autogyration: true }
}, },
{ {
id: '2', t: 'way', v: true, id: '2', t: 'way', v: true,
tf: [[2.7, 0, 2.832], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0, 2.832], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['1', '3'] } dt: { in: ['1', '3'], out: ['1', '3'], center: [] }
}, },
{ {
id: '3', t: 'way', v: true, id: '3', t: 'way', v: true,
tf: [[2.7, 0, 3.932], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0, 3.932], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['2', '4'], in: ['2', '4'], out: ['2', '4'], center: [],
linkStoreAt: { item: 'rack1', bay: 3, level: 2, cell: 0 } linkStoreAt: { item: 'rack1', bay: 3, level: 2, cell: 0 }
} }
}, },
{ {
id: '4', t: 'way', v: true, id: '4', t: 'way', v: true,
tf: [[2.7, 0, 4.582], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0, 4.582], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['3', '5'] } dt: { in: ['3', '5'], out: ['3', '5'], center: [] }
}, },
{ {
id: '5', t: 'way', v: true, id: '5', t: 'way', v: true,
tf: [[2.7, 0, 5.232], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0, 5.232], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['4', '6'], in: ['4', '6'], out: ['4', '6'], center: [],
linkStoreAt: { item: 'rack1', bay: 2, level: 2, cell: 0 } linkStoreAt: { item: 'rack1', bay: 2, level: 2, cell: 0 }
} }
}, },
{ {
id: '6', t: 'way', v: true, id: '6', t: 'way', v: true,
tf: [[2.7, 0, 5.882], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0, 5.882], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['5', '7'] } dt: { in: ['5', '7'], out: ['5', '7'], center: [] }
}, },
{ {
id: '7', t: 'way', v: true, id: '7', t: 'way', v: true,
tf: [[2.7, 0, 6.532], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0, 6.532], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['6', '8'], in: ['6', '8'], out: ['6', '8'], center: [],
linkStoreAt: { item: 'rack1', bay: 1, level: 1, cell: 0 } linkStoreAt: { item: 'rack1', bay: 1, level: 1, cell: 0 }
} }
}, },
@ -249,20 +249,20 @@ export default {
id: '8', t: 'way', v: true, id: '8', t: 'way', v: true,
tf: [[2.7, 0, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[2.7, 0, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['7'], in: ['7'], out: ['7'], center: [],
linkStoreAt: { item: 'rack1', bay: 0, level: 2, cell: 0 } linkStoreAt: { item: 'rack1', bay: 0, level: 2, cell: 0 }
} }
}, },
{ {
id: '17', t: 'way', v: true, id: '17', t: 'way', v: true,
tf: [[5.65, 0, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['20'] } dt: { in: ['20'], out: ['20'], center: [] }
}, },
{ {
id: '20', t: 'way', v: true, id: '20', t: 'way', v: true,
tf: [[5.65, 0, 2.865], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0, 2.865], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['17', '21'], in: ['17', '21'], out: ['17', '21'], center: [],
linkStoreAt: { item: '54', bay: 0, level: 0, cell: 0 } linkStoreAt: { item: '54', bay: 0, level: 0, cell: 0 }
} }
}, },
@ -270,7 +270,7 @@ export default {
id: '21', t: 'way', v: true, id: '21', t: 'way', v: true,
tf: [[5.65, 0, 3.932], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0, 3.932], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['20', '22'], in: ['20', '22'], out: ['20', '22'], center: [],
linkStoreAt: { item: 'rack1', bay: 3, level: 1, cell: 0 } linkStoreAt: { item: 'rack1', bay: 3, level: 1, cell: 0 }
} }
}, },
@ -278,7 +278,7 @@ export default {
id: '22', t: 'way', v: true, id: '22', t: 'way', v: true,
tf: [[5.65, 0, 4.348], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0, 4.348], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['21', '23'], in: ['21', '23'], out: ['21', '23'], center: [],
linkStoreAt: { item: '56', bay: 0, level: 0, cell: 0 } linkStoreAt: { item: '56', bay: 0, level: 0, cell: 0 }
} }
}, },
@ -286,20 +286,20 @@ export default {
id: '23', t: 'way', v: true, id: '23', t: 'way', v: true,
tf: [[5.65, 0, 5.232], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0, 5.232], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['22', '24'], autogyration: true, in: ['22', '24'], out: ['22', '24'], center: [], autogyration: true,
linkStoreAt: { item: 'rack1', bay: 2, level: 1, cell: 0 } linkStoreAt: { item: 'rack1', bay: 2, level: 1, cell: 0 }
} }
}, },
{ {
id: '24', t: 'way', v: true, id: '24', t: 'way', v: true,
tf: [[5.65, 0, 5.882], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0, 5.882], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { in: [], out: [], center: ['23', '25'] } dt: { in: ['23', '25'], out: ['23', '25'], center: [] }
}, },
{ {
id: '25', t: 'way', v: true, id: '25', t: 'way', v: true,
tf: [[5.65, 0, 6.532], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0, 6.532], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['24', '26'], in: ['24', '26'], out: ['24', '26'], center: [],
linkStoreAt: { item: 'rack1', bay: 1, level: 1, cell: 0 } linkStoreAt: { item: 'rack1', bay: 1, level: 1, cell: 0 }
} }
}, },
@ -307,7 +307,7 @@ export default {
id: '26', t: 'way', v: true, id: '26', t: 'way', v: true,
tf: [[5.65, 0, 6.744], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0, 6.744], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['25', '27'], in: ['25', '27'], out: ['25', '27'], center: [],
linkStoreAt: { item: '58', bay: 0, level: 0, cell: 0 } linkStoreAt: { item: '58', bay: 0, level: 0, cell: 0 }
} }
}, },
@ -315,7 +315,7 @@ export default {
id: '27', t: 'way', v: true, id: '27', t: 'way', v: true,
tf: [[5.65, 0, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[5.65, 0, 7.75], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['26'], in: ['26'], out: ['26'], center: [],
linkStoreAt: { item: 'rack1', bay: 0, level: 1, cell: 0 } linkStoreAt: { item: 'rack1', bay: 0, level: 1, cell: 0 }
} }
}, },
@ -323,7 +323,7 @@ export default {
id: '36', t: 'way', v: true, id: '36', t: 'way', v: true,
tf: [[3.9, 0, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[3.9, 0, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['1'], in: ['1'], out: ['1'], center: [],
linkStoreAt: { item: '47', bay: 0, level: 0, cell: 0 } linkStoreAt: { item: '47', bay: 0, level: 0, cell: 0 }
} }
}, },
@ -331,7 +331,7 @@ export default {
id: '38', t: 'way', v: true, id: '38', t: 'way', v: true,
tf: [[1.5, 0, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]], tf: [[1.5, 0, 2.13], [90, 0, 0], [0.25, 0.25, 0.1]],
dt: { dt: {
in: [], out: [], center: ['1'], in: ['1'], out: ['1'], center: [],
linkStoreAt: { item: '49', bay: 0, level: 0, cell: 0 } linkStoreAt: { item: '49', bay: 0, level: 0, cell: 0 }
} }
}, },

76
src/modules/way/WayRenderer.ts

@ -108,7 +108,7 @@ export default class WayRenderer extends BaseRenderer {
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('目前只支持二维码站点之间的连接')
const lineId = getLineId(start.id, end.id, type) const lineId = getLineId(start.id, end.id, type)
@ -118,8 +118,8 @@ export default class WayRenderer extends BaseRenderer {
updateLine(start: ItemJson, end: ItemJson, type: LinkType, option?: RendererCudOption) { updateLine(start: ItemJson, end: ItemJson, type: LinkType, option?: RendererCudOption) {
if (start.t === this.itemTypeName && end.t === this.itemTypeName) { if (start.t === this.itemTypeName && end.t === this.itemTypeName) {
// this.deleteLine(start, end, type) this.deleteLine(start, end, type)
// this._createOrUpdateGuideway(start, end, type) this._createOrUpdateGuideway(start, end, type)
} else { } else {
// throw new Error('目前只支持二维码站点之间的连接') // throw new Error('目前只支持二维码站点之间的连接')
@ -191,10 +191,10 @@ export default class WayRenderer extends BaseRenderer {
const dummy = new THREE.Object3D() const dummy = new THREE.Object3D()
dummy.position.setFromMatrixPosition(matrix) dummy.position.setFromMatrixPosition(matrix)
// dummy.rotation.setFromRotationMatrix(matrix) // dummy.rotation.setFromRotationMatrix(matrix)
dummy.scale.set(0.4, 0.01, 0.2) dummy.scale.set(0.2, 0.01, 0.2)
if (direction === '<->') { if (direction === '<->') {
dummy.scale.set(0.4, 0.01, 0.4) dummy.scale.set(0.2, 0.01, 0.4)
dummy.lookAt(endPosition) dummy.lookAt(endPosition)
} else if (direction === '->') { } else if (direction === '->') {
dummy.lookAt(endPosition) dummy.lookAt(endPosition)
@ -219,10 +219,10 @@ export default class WayRenderer extends BaseRenderer {
const position = startPosition.clone().lerp(endPosition, i / length) const position = startPosition.clone().lerp(endPosition, i / length)
const dummy = new THREE.Object3D() const dummy = new THREE.Object3D()
dummy.position.copy(position) dummy.position.copy(position)
dummy.scale.set(0.4, 0.01, 0.2) dummy.scale.set(0.2, 0.01, 0.2)
if (direction === '<->') { if (direction === '<->') {
dummy.scale.set(0.4, 0.01, 0.4) dummy.scale.set(0.2, 0.01, 0.4)
dummy.lookAt(endPosition) dummy.lookAt(endPosition)
} else if (direction === '->') { } else if (direction === '->') {
dummy.lookAt(endPosition) dummy.lookAt(endPosition)
@ -290,68 +290,6 @@ export default class WayRenderer extends BaseRenderer {
} }
} }
afterCreateOrUpdateLine(start: ItemJson, end: ItemJson, type: LinkType, option: RendererCudOption, object: LineLike) {
const startPosition = new THREE.Vector3(start.tf[0][0], this.defulePositionY, start.tf[0][2])
const endPosition = new THREE.Vector3(end.tf[0][0], this.defulePositionY, end.tf[0][2])
// =============== 下面这一段不要删除,用来显示数字标签 =============================
// this.tempViewport.labelManager.createOrUpdateLabelByDistance(object, startPoint.position, endPoint.position, {
// useHtmlLabel: false,
// fontSize: 0.2,
// color: '#333333',
// format: (distance) => {
// return (distance * 1000).toFixed(0)
// }
// })
// ==========================================================================
// const matrix = linkPlaneByPoint(startPosition, endPosition, this.rendererOption.lineWidth)
//
// if (object.userData.dirWraps) {
// // 清空之前的箭头
// object.userData.dirWraps.forEach((uuid: string) => {
// this.dirPointManager.delete(uuid)
// })
// }
//
// const length = startPosition.distanceTo(endPosition)
// if (length < 0.1) {
// // 如果两点距离小于 0.1m,则不添加方向指示器
// return
//
// } else if (length < 3) {
// // 如果两点距离小于 3m,则在中间添加一个方向指示器
// const dirWrap = this.dirPointManager.create(object.uuid + '_dir')
//
// const dummy = new THREE.Object3D()
// dummy.position.setFromMatrixPosition(matrix)
// dummy.rotation.setFromRotationMatrix(matrix)
// dummy.scale.set(0.4, 0.01, 0.2)
// dummy.updateMatrix()
// dirWrap.setMatrix4(dummy.matrix)
// object.userData.dirWraps = [dirWrap.uuid]
//
// } else {
// // 否则每隔 3m 添加一个方向指示器
// for (let i = 0; i < length; i += 3) {
// const dirWrap = this.dirPointManager.create(object.uuid + '_dir_' + i)
// const position = startPosition.clone().lerp(endPosition, i / length)
// const dummy = new THREE.Object3D()
// dummy.position.copy(position)
// dummy.lookAt(endPosition)
// dummy.scale.set(0.4, 0.01, 0.2)
// dummy.updateMatrix()
//
// dirWrap.setMatrix4(dummy.matrix)
//
// if (!object.userData.dirWraps) {
// object.userData.dirWraps = []
// }
// object.userData.dirWraps.push(dirWrap.uuid)
// }
// }
}
dispose() { dispose() {
super.dispose() super.dispose()
this.pointMaterial?.dispose() this.pointMaterial?.dispose()

Loading…
Cancel
Save