Browse Source

Conveyor 输送线

master
修宁 7 months ago
parent
commit
14d68fa5a5
  1. 7
      src/designer/Viewport.ts
  2. 11
      src/model/itemType/ItemTypeLine.ts
  3. 4
      src/model/itemType/ToolboxLine.ts
  4. 33
      src/model/itemType/line/conveyor/Conveyor.ts

7
src/designer/Viewport.ts

@ -146,6 +146,9 @@ export default class Viewport {
// 创建正交摄像机 // 创建正交摄像机
this.initMode2DCamera() this.initMode2DCamera()
// 注册拖拽组件
this.dragControl = new EsDragControls(this)
// 辅助线 // 辅助线
const gridOption = this.worldModel.gridOption const gridOption = this.worldModel.gridOption
const axesHelper = new THREE.GridHelper(gridOption.axesSize, gridOption.axesDivisions) const axesHelper = new THREE.GridHelper(gridOption.axesSize, gridOption.axesDivisions)
@ -249,8 +252,6 @@ export default class Viewport {
tool.init(this) tool.init(this)
} }
// 注册拖拽组件
this.dragControl = new EsDragControls(this)
_.forEach(getAllItemTypes(), (itemType: ItemTypeDefineOption) => { _.forEach(getAllItemTypes(), (itemType: ItemTypeDefineOption) => {
itemType.clazz.afterAddViewport(this) itemType.clazz.afterAddViewport(this)
@ -316,7 +317,7 @@ export default class Viewport {
this.animationFrameId = requestAnimationFrame(this.animate.bind(this)) this.animationFrameId = requestAnimationFrame(this.animate.bind(this))
this.renderView() this.renderView()
this.offset -= 0.05 this.offset -= 0.002
window['lineMaterial'].dashOffset = this.offset window['lineMaterial'].dashOffset = this.offset
} }

11
src/model/itemType/ItemTypeLine.ts

@ -19,7 +19,7 @@ export default abstract class ItemTypeLine extends ItemType {
abstract createPointBasic(position: THREE.Vector3): THREE.Object3D abstract createPointBasic(position: THREE.Vector3): THREE.Object3D
abstract createLineBasic(): THREE.Mesh abstract createLineBasic(isTemplate?: boolean): THREE.Mesh
public init(worldModel: WorldModel) { public init(worldModel: WorldModel) {
return super.init(worldModel).then(() => { return super.init(worldModel).then(() => {
@ -32,7 +32,7 @@ export default abstract class ItemTypeLine extends ItemType {
afterUpdateLine(line: THREE.Mesh, startPoint: THREE.Object3D, endPoint: THREE.Object3D): void { afterUpdateLine(line: THREE.Mesh, startPoint: THREE.Object3D, endPoint: THREE.Object3D): void {
} }
createLine(scene: THREE.Scene, startPoint: THREE.Object3D, endPoint: THREE.Object3D): THREE.Mesh { createLine(viewport: Viewport, scene: THREE.Scene, startPoint: THREE.Object3D, endPoint: THREE.Object3D): THREE.Mesh {
const line = this.createLineBasic() const line = this.createLineBasic()
const geom = line.geometry const geom = line.geometry
geom.setFromPoints([startPoint.position, endPoint.position]) geom.setFromPoints([startPoint.position, endPoint.position])
@ -62,6 +62,11 @@ export default abstract class ItemTypeLine extends ItemType {
this.afterCreateLine(line, startPoint, endPoint) this.afterCreateLine(line, startPoint, endPoint)
//@ts-ignore //@ts-ignore
if (typeof line.computeLineDistances === 'function') { if (typeof line.computeLineDistances === 'function') {
// const canvas = viewport.renderer.domElement
//@ts-ignore
// this.lineMaterial.resolution.set(canvas.width, canvas.height)
//@ts-ignore //@ts-ignore
line.computeLineDistances() line.computeLineDistances()
} }
@ -90,7 +95,7 @@ export default abstract class ItemTypeLine extends ItemType {
continue continue
} }
const line = this.createLine(scene, startPoint, endPoint) const line = this.createLine(viewport, scene, startPoint, endPoint)
} }
} }
} }

4
src/model/itemType/ToolboxLine.ts

@ -32,7 +32,7 @@ export default class ToolboxLine extends Toolbox {
afterAddPoint(startPoint: THREE.Object3D, point: THREE.Object3D) { afterAddPoint(startPoint: THREE.Object3D, point: THREE.Object3D) {
// 如果起始点存在,则将新点添加到起始点的链接中 // 如果起始点存在,则将新点添加到起始点的链接中
startPoint.userData.link.push(point.uuid) startPoint.userData.link.push(point.uuid)
this.itemType.createLine(this.viewport.scene, this.startPoint, point) this.itemType.createLine(this.viewport, this.viewport.scene, this.startPoint, point)
} }
mousemove(e: MouseEvent): THREE.Vector3 | undefined { mousemove(e: MouseEvent): THREE.Vector3 | undefined {
@ -45,7 +45,7 @@ export default class ToolboxLine extends Toolbox {
if (this.startPoint) { if (this.startPoint) {
// 获取最后一个点 // 获取最后一个点
if (!this.tempLine) { if (!this.tempLine) {
this.tempLine = this.itemType.createLineBasic() this.tempLine = this.itemType.createLineBasic(true)
this.viewport.scene.add(this.tempLine) this.viewport.scene.add(this.tempLine)
} }

33
src/model/itemType/line/conveyor/Conveyor.ts

@ -7,6 +7,7 @@ import ConveyorToolbox from './ConveyorToolbox.ts'
import { Line2 } from 'three/examples/jsm/lines/Line2.js' import { Line2 } from 'three/examples/jsm/lines/Line2.js'
import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js' import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js'
import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js' import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js'
import _ from 'lodash'
export default class Conveyor extends ItemTypeLine { export default class Conveyor extends ItemTypeLine {
defaultScale: THREE.Vector3 = new THREE.Vector3(0.25, 0.1, 0.25) defaultScale: THREE.Vector3 = new THREE.Vector3(0.25, 0.1, 0.25)
@ -15,6 +16,8 @@ export default class Conveyor extends ItemTypeLine {
pointMaterial!: THREE.Material pointMaterial!: THREE.Material
lineMaterial!: LineMaterial lineMaterial!: LineMaterial
lineMaterialTemplate!: LineMaterial
lineMaterialOutline!: LineMaterial
static POINT_NAME = 'conveyor_point' static POINT_NAME = 'conveyor_point'
static LINE_NAME = 'conveyor_line' static LINE_NAME = 'conveyor_line'
@ -28,13 +31,30 @@ export default class Conveyor extends ItemTypeLine {
alphaToCoverage: true, alphaToCoverage: true,
side: THREE.DoubleSide, side: THREE.DoubleSide,
color: 0x0088ff, color: 0x0088ff,
linewidth: 0.8,
dashed: true, dashed: true,
resolution: new THREE.Vector2(1, 1), // 需要在afterAddScene中设置
dashOffset: 0, dashOffset: 0,
linewidth: 0.8,
dashScale: 1, dashScale: 1,
dashSize: 0.2, dashSize: 0.2,
gapSize: 0.2, gapSize: 0.2,
worldUnits: true worldUnits: true
// linewidth: 10,
// worldUnits: false,
// dashSize: 0.2,
// gapSize: 0.2,
// dashScale: 1
})
this.lineMaterialTemplate = new LineMaterial({
color: 0x0088ff,
linewidth: 0.8,
worldUnits: true,
opacity: 0.5,
transparent: true,
alphaToCoverage: true,
depthWrite: false, // 避免深度冲突
blending: THREE.NormalBlending
}) })
window['lineMaterial'] = this.lineMaterial // 方便调试查看 window['lineMaterial'] = this.lineMaterial // 方便调试查看
@ -48,7 +68,7 @@ export default class Conveyor extends ItemTypeLine {
super.afterAddScene(viewport, scene, objects) super.afterAddScene(viewport, scene, objects)
_.defer(() => { _.defer(() => {
const canvas = viewport.renderer.domElement const canvas = viewport.renderer.domElement
this.lineMaterial.resolution.set(canvas.width, canvas.height) // this.lineMaterial.resolution.set(canvas.width, canvas.height)
}) })
} }
@ -87,9 +107,14 @@ export default class Conveyor extends ItemTypeLine {
/** /**
* 线 * 线
*/ */
createLineBasic(): Line2 { createLineBasic(isTemplate?: boolean): THREE.Mesh {
const geom = new LineGeometry() const geom = new LineGeometry()
const obj = new Line2(geom, this.lineMaterial) let obj: THREE.Mesh
if (isTemplate) {
obj = new Line2(geom, this.lineMaterialTemplate)
} else {
obj = new Line2(geom, this.lineMaterial)
}
obj.frustumCulled = false obj.frustumCulled = false
obj.name = Conveyor.LINE_NAME obj.name = Conveyor.LINE_NAME
obj.uuid = THREE.MathUtils.generateUUID() obj.uuid = THREE.MathUtils.generateUUID()

Loading…
Cancel
Save