Browse Source

gstore

master
修宁 7 months ago
parent
commit
a4668a619c
  1. 4
      src/modules/gstore/GstoreInteraction.ts
  2. 113
      src/modules/gstore/GstoreRenderer.ts

4
src/modules/gstore/GstoreInteraction.ts

@ -15,8 +15,8 @@ export default class GstoreInteraction extends BaseInteraction {
item = super.createPointOfItem(item, point) item = super.createPointOfItem(item, point)
// 创建一个地堆货架 // 创建一个地堆货架
item.dt.rackWidth = 1.2 // 宽度 item.dt.storeWidth = 1.2 // 宽度
item.dt.rackDepth = 1.2 // 深度 item.dt.storeDepth = 1.2 // 深度
return item return item
} }
} }

113
src/modules/gstore/GstoreRenderer.ts

@ -9,16 +9,9 @@ import { getLineId } from '@/core/ModelUtils.ts'
* *
*/ */
export default class GstoreRenderer extends BaseRenderer { export default class GstoreRenderer extends BaseRenderer {
static LABEL_NAME = 'way_label'
static POINT_NAME = 'way_point' static POINT_NAME = 'way_point'
pointMaterial: THREE.Material pointMaterial: THREE.Material
lineMaterial = new THREE.MeshBasicMaterial({
color: 0xa0cfff,
transparent: true,
opacity: 0.2,
side: THREE.DoubleSide
})
/** /**
* , * ,
@ -31,42 +24,15 @@ export default class GstoreRenderer extends BaseRenderer {
super(itemTypeName) super(itemTypeName)
} }
async init() {
return Promise.all([
super.init(),
this.loadFont()
])
}
async loadFont() {
return new Promise<void>((resolve, reject) => {
new THREE.TextureLoader().load(
MoveLinePointPng,
(texture) => {
this.pointMaterial = new THREE.SpriteMaterial({
map: texture,
transparent: true,
side: THREE.DoubleSide
})
resolve()
},
undefined,
function(err) {
reject(err)
}
)
})
}
/** /**
* 使, * 使 storeWidth/storeDepth, TF无效
*/ */
override afterCreateOrUpdatePoint(item: ItemJson, option: RendererCudOption, objects: THREE.Object3D[]) { override afterCreateOrUpdatePoint(item: ItemJson, option: RendererCudOption, objects: THREE.Object3D[]) {
super.afterCreateOrUpdatePoint(item, option, objects) super.afterCreateOrUpdatePoint(item, option, objects)
const point = objects[0] const point = objects[0]
point.position.y = this.defulePositionY point.position.y = this.defulePositionY
point.scale.set(this.defaultScale.x, this.defaultScale.y, this.defaultScale.z) point.scale.set(item.dt.storeWidth, this.defaultScale.y, item.dt.storeDepth)
point.rotation.set( point.rotation.set(
THREE.MathUtils.degToRad(this.defaultRotation.x), THREE.MathUtils.degToRad(this.defaultRotation.x),
THREE.MathUtils.degToRad(this.defaultRotation.y), THREE.MathUtils.degToRad(this.defaultRotation.y),
@ -76,73 +42,11 @@ export default class GstoreRenderer extends BaseRenderer {
createLineBasic(start: ItemJson, end: ItemJson, type: LinkType): THREE.Object3D[] { createLineBasic(start: ItemJson, end: ItemJson, type: LinkType): THREE.Object3D[] {
const group = new THREE.Group() throw new Error('not allow store line.')
const startPosition = new THREE.Vector3(start.tf[0][0], 0.01, start.tf[0][2])
const endPosition = new THREE.Vector3(end.tf[0][0], 0.01, end.tf[0][2])
const width = 1
const curve = new THREE.LineCurve3(startPosition, endPosition)
const tubeGeometry = new THREE.TubeGeometry(curve, 1, width / 2, 8, false)
const lineMesh = new THREE.Mesh(tubeGeometry, this.lineMaterial)
group.add(lineMesh)
const midPoint = new THREE.Vector3()
.addVectors(startPosition, endPosition)
.multiplyScalar(0.5)
const distance = (startPosition.distanceTo(endPosition) * 1000).toFixed(0)
const label = new Text()
label.text = distance
label.font = SimSunTTF
label.fontSize = 0.2
label.color = '#5f5f5f'
label.opacity = 0.8
label.anchorX = 'center'
label.anchorY = 'middle'
label.depthOffset = 1
label.material.depthTest = false
label.name = GstoreRenderer.LABEL_NAME
label.quaternion.copy(this.tempViewport.camera.quaternion)
label.sync()
label.position.set(midPoint.x, midPoint.y, midPoint.z)
group.add(label)
return [group]
} }
updateLine(start: ItemJson, end: ItemJson, type: LinkType, option?: RendererCudOption) { updateLine(start: ItemJson, end: ItemJson, type: LinkType, option?: RendererCudOption) {
super.updateLine(start, end, type, option) throw new Error('not allow store line.')
const startPosition = new THREE.Vector3(start.tf[0][0], 0.01, start.tf[0][2])
const endPosition = new THREE.Vector3(end.tf[0][0], 0.01, end.tf[0][2])
const width = 1
const lineId = getLineId(start.id, end.id, type)
const lines = this.tempViewport.entityManager.findLineObjectsById(lineId)
const group: THREE.Group = lines[0] as THREE.Group
// 清空group里的元素
const label: Text = group.children[1]
group.clear()
const curve = new THREE.LineCurve3(startPosition, endPosition)
const tubeGeometry = new THREE.TubeGeometry(curve, 1, width / 2, 8, false)
const lineMesh = new THREE.Mesh(tubeGeometry, this.lineMaterial)
group.add(lineMesh)
const midPoint = new THREE.Vector3()
.addVectors(startPosition, endPosition)
.multiplyScalar(0.5)
const distance = (startPosition.distanceTo(endPosition) * 1000).toFixed(0)
label.text = distance
label.quaternion.copy(this.tempViewport.camera.quaternion)
label.sync()
label.position.set(midPoint.x, midPoint.y, midPoint.z)
group.add(label)
} }
createPointBasic(item: ItemJson, option?: RendererCudOption): THREE.Object3D[] { createPointBasic(item: ItemJson, option?: RendererCudOption): THREE.Object3D[] {
@ -151,17 +55,8 @@ export default class GstoreRenderer extends BaseRenderer {
return [obj] return [obj]
} }
appendToScene(...objects: THREE.Object3D[]) {
const dragObjects = objects.filter(obj => !!obj.userData.draggable)
this.tempViewport.dragControl.setDragObjects(dragObjects, 'push')
// this.tempViewport.dragControl.setDragObjects(objects, 'remove')
this.tempViewport?.scene.add(...objects)
}
dispose() { dispose() {
super.dispose() super.dispose()
this.pointMaterial.dispose() this.pointMaterial.dispose()
this.lineMaterial.dispose()
} }
} }
Loading…
Cancel
Save