中化加油站项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

112 lines
3.0 KiB

import { Mesh, Vector3 } from "@babylonjs/core";
import { Button, Rectangle, StackPanel } from "@babylonjs/gui";
import { SceneManager } from "../controller/scene-manager";
import { UIManager } from "../controller/ui-manager";
import { BabylonUIStyleTool } from "./babylon-ui-style-tool";
import { GizmoTool } from "./gizmo-tool";
export class PosPointTool {
static readonly c_key = "PosPoint";
static instance: PosPointTool;
mesh: Mesh;
pos: Vector3;
uiRoot: Rectangle;
//#region UI
initUI() {
let instance = this;
this.uiRoot = new Rectangle("PosPointTooUI");
UIManager.Instance.uiRoot.addControl(this.uiRoot);
BabylonUIStyleTool.setStyle_size(this.uiRoot, "40px", "20px");
let stack = new StackPanel("stack");
this.uiRoot.addControl(stack);
stack.isVertical = false;
let btn_add = Button.CreateSimpleButton("add", "+");
stack.addControl(btn_add);
btn_add.background = BabylonUIStyleTool.c_color_blue;
btn_add.color = "white";
btn_add.thickness = 0;
btn_add.onPointerClickObservable.add(() => {
instance.btn_add();
});
BabylonUIStyleTool.setStyle_size(btn_add, "20px", "20px");
let btn_reduce = Button.CreateSimpleButton("reduce", "-");
stack.addControl(btn_reduce);
btn_reduce.background = BabylonUIStyleTool.c_color_red;
btn_reduce.color = "white";
btn_reduce.thickness = 0;
btn_reduce.onPointerClickObservable.add(() => {
instance.btn_reduce();
});
BabylonUIStyleTool.setStyle_size(btn_reduce, "20px", "20px");
}
showUI(show: boolean) {
this.uiRoot.isVisible = show;
this.uiRoot.linkWithMesh(this.mesh);
this.uiRoot.linkOffsetY = "-50px";
}
//#endregion
static get Instance() {
if (PosPointTool.instance == null) {
PosPointTool.instance = new PosPointTool();
PosPointTool.instance.initUI();
SceneManager.Instance.scene.onBeforeRenderObservable.add(PosPointTool.onUpdate);
GizmoTool.onGizmoAimMeshObservable.add((mesh) => {
if (mesh == null || !mesh.name.match(PosPointTool.c_key)) {
PosPointTool.attachMesh(null);
}
});
}
return PosPointTool.instance;
}
onAdd: () => void;
onReduce: () => void;
static attachMesh(mesh: Mesh, pos?: Vector3, onAdd?: () => void, onReduce?: () => void) {
PosPointTool.Instance.mesh = mesh;
PosPointTool.Instance.pos = pos;
PosPointTool.Instance.showUI(mesh != null);
PosPointTool.Instance.onAdd = onAdd;
PosPointTool.Instance.onReduce = onReduce;
}
static onUpdate() {
if (PosPointTool.Instance.mesh != null) {
}
}
//添加
btn_add() {
if (this.onAdd) {
this.onAdd();
}
}
//减少
btn_reduce() {
if (this.onReduce) {
this.onReduce();
}
}
}