|
@@ -2,8 +2,10 @@ import * as THREE from "three";
|
|
|
|
|
|
import FloorplanControls from "../controls/FloorplanControls.js";
|
|
import FloorplanControls from "../controls/FloorplanControls.js";
|
|
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
|
|
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
|
|
|
|
+import { TrackballControls } from "three/examples/jsm/controls/TrackballControls.js";
|
|
import Line from "../box/object/Line";
|
|
import Line from "../box/object/Line";
|
|
import LinePoints from "../box/object/LinePoints.js";
|
|
import LinePoints from "../box/object/LinePoints.js";
|
|
|
|
+import Marker from "../box/object/marker.js";
|
|
import { LineMaterial } from "three/examples/jsm/lines/LineMaterial.js";
|
|
import { LineMaterial } from "three/examples/jsm/lines/LineMaterial.js";
|
|
|
|
|
|
const convertScreenToNDC = function (event, domElement) {
|
|
const convertScreenToNDC = function (event, domElement) {
|
|
@@ -24,25 +26,71 @@ export default class Player {
|
|
this.pointerdown = new THREE.Vector2();
|
|
this.pointerdown = new THREE.Vector2();
|
|
this.pointerup = new THREE.Vector2();
|
|
this.pointerup = new THREE.Vector2();
|
|
this.pointer = new THREE.Vector2();
|
|
this.pointer = new THREE.Vector2();
|
|
|
|
+ this.markPosition = new THREE.Vector3();
|
|
|
|
|
|
this.touchImg = null;
|
|
this.touchImg = null;
|
|
this.activeEdge = null;
|
|
this.activeEdge = null;
|
|
this.drawLine = null;
|
|
this.drawLine = null;
|
|
this.startObj = null;
|
|
this.startObj = null;
|
|
|
|
+ this.marker = null;
|
|
this.allowDrawing = false;
|
|
this.allowDrawing = false;
|
|
|
|
|
|
this.drawing = false;
|
|
this.drawing = false;
|
|
this.inited = false;
|
|
this.inited = false;
|
|
this.renderLines = [];
|
|
this.renderLines = [];
|
|
|
|
+ this.renderMarkers = [];
|
|
this.activeEdges = [];
|
|
this.activeEdges = [];
|
|
this.matLine = null;
|
|
this.matLine = null;
|
|
this.lineColor = 0xe44d54;
|
|
this.lineColor = 0xe44d54;
|
|
|
|
+ // 1是画线,2是标方向
|
|
|
|
+ this.mode = 0;
|
|
this.init();
|
|
this.init();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ setMode(mode) {
|
|
|
|
+ this.mode = mode;
|
|
|
|
+ if (mode === 1 || mode === 2) {
|
|
|
|
+ this.reset();
|
|
|
|
+ this.setEditMode();
|
|
|
|
+ }
|
|
|
|
+ if (mode === 0) {
|
|
|
|
+ this.setFreeMode();
|
|
|
|
+ }
|
|
|
|
+ this.scene.emit("mode", this.mode);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // removeMarker() {
|
|
|
|
+ // if (this.marker) {
|
|
|
|
+ // this.scene.scene.remove(this.marker);
|
|
|
|
+ // this.marker = null;
|
|
|
|
+ // }
|
|
|
|
+ // }
|
|
|
|
+ setFreeMode() {
|
|
|
|
+ this.floorplanControls.enablePan = true;
|
|
|
|
+ this.floorplanControls.mouseButtons = {
|
|
|
|
+ LEFT: THREE.MOUSE.PAN,
|
|
|
|
+ MIDDLE: THREE.MOUSE.DOLLY,
|
|
|
|
+ RIGHT: THREE.MOUSE.PAN,
|
|
|
|
+ };
|
|
|
|
+ this.reset();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ setEditMode() {
|
|
|
|
+ this.floorplanControls.enablePan = true;
|
|
|
|
+ this.floorplanControls.mouseButtons = {
|
|
|
|
+ LEFT: THREE.MOUSE.ROTATE,
|
|
|
|
+ MIDDLE: THREE.MOUSE.DOLLY,
|
|
|
|
+ RIGHT: THREE.MOUSE.PAN,
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+
|
|
init = () => {
|
|
init = () => {
|
|
// //floorplanControls
|
|
// //floorplanControls
|
|
- // this.floorplanControls = new FloorplanControls(this.orthCamera, this.scene.domElement, this);
|
|
|
|
|
|
+ // this.floorplanControls = new FloorplanControls(
|
|
|
|
+ // this.orthCamera,
|
|
|
|
+ // this.scene.domElement,
|
|
|
|
+ // this
|
|
|
|
+ // );
|
|
this.floorplanControls = new OrbitControls(
|
|
this.floorplanControls = new OrbitControls(
|
|
this.orthCamera,
|
|
this.orthCamera,
|
|
this.scene.domElement
|
|
this.scene.domElement
|
|
@@ -52,18 +100,22 @@ export default class Player {
|
|
// this.floorplanControls.target.set(0, 1, 0);
|
|
// this.floorplanControls.target.set(0, 1, 0);
|
|
// this.floorplanControls.rotateSpeed = 0.5;
|
|
// this.floorplanControls.rotateSpeed = 0.5;
|
|
// this.floorplanControls.panSpeed = 0.75
|
|
// this.floorplanControls.panSpeed = 0.75
|
|
- // this.floorplanControls.maxDistance = 100
|
|
|
|
- // this.floorplanControls.minDistance = 3.5
|
|
|
|
|
|
+
|
|
|
|
+ this.floorplanControls.maxDistance = 100;
|
|
|
|
+ this.floorplanControls.minDistance = 3.5;
|
|
this.floorplanControls.maxZoom = 500;
|
|
this.floorplanControls.maxZoom = 500;
|
|
this.floorplanControls.minZoom = 100;
|
|
this.floorplanControls.minZoom = 100;
|
|
|
|
|
|
|
|
+ // this.floorplanControls.mouseButtons = {
|
|
|
|
+ // LEFT: THREE.MOUSE.PAN,
|
|
|
|
+ // MIDDLE: THREE.MOUSE.DOLLY,
|
|
|
|
+ // RIGHT: THREE.MOUSE.PAN
|
|
|
|
+ // }
|
|
|
|
+ this.setMode(0);
|
|
this.floorplanControls.enableRotate = false;
|
|
this.floorplanControls.enableRotate = false;
|
|
this.raycaster = new THREE.Raycaster();
|
|
this.raycaster = new THREE.Raycaster();
|
|
this.onBindEvent();
|
|
this.onBindEvent();
|
|
this.inited = true;
|
|
this.inited = true;
|
|
-
|
|
|
|
- console.log("this.floorplanControls", this.floorplanControls);
|
|
|
|
-
|
|
|
|
this.matLine = new LineMaterial({
|
|
this.matLine = new LineMaterial({
|
|
color: this.lineColor,
|
|
color: this.lineColor,
|
|
linewidth: 3, // in world units with size attenuation, pixels otherwise
|
|
linewidth: 3, // in world units with size attenuation, pixels otherwise
|
|
@@ -79,52 +131,124 @@ export default class Player {
|
|
onPointerMove = (e) => {
|
|
onPointerMove = (e) => {
|
|
if (!this.drawing) return;
|
|
if (!this.drawing) return;
|
|
this.pointermove = convertScreenToNDC(e, this.scene.domElement);
|
|
this.pointermove = convertScreenToNDC(e, this.scene.domElement);
|
|
- this.raycaster.setFromCamera(this.pointermove, this.orthCamera);
|
|
|
|
- let intersectArr = this.scene.boxManager.imgList;
|
|
|
|
- // if(this.startObj) {
|
|
|
|
- // let i = intersectArr.indexOf(this.startObj)
|
|
|
|
- // intersectArr.splice(i, 1)
|
|
|
|
- // }
|
|
|
|
- const intersects = this.raycaster.intersectObjects(intersectArr, false);
|
|
|
|
- if (intersects[0] && intersects[0].object !== this.startObj) {
|
|
|
|
- this.touchImg = intersects[0];
|
|
|
|
- this.setActiveLine(this.touchImg);
|
|
|
|
|
|
+ if (this.mode === 1) {
|
|
|
|
+ this.raycaster.setFromCamera(this.pointermove, this.orthCamera);
|
|
|
|
+ let intersectArr = this.scene.boxManager.imgList;
|
|
|
|
+ // if(this.startObj) {
|
|
|
|
+ // let i = intersectArr.indexOf(this.startObj)
|
|
|
|
+ // intersectArr.splice(i, 1)
|
|
|
|
+ // }
|
|
|
|
+ const intersects = this.raycaster.intersectObjects(intersectArr, false);
|
|
|
|
+ if (intersects[0] && intersects[0].object !== this.startObj) {
|
|
|
|
+ this.touchImg = intersects[0];
|
|
|
|
+ this.setActiveLine(this.touchImg);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (this.mode === 2) {
|
|
|
|
+ if (this.marker) {
|
|
|
|
+ let pos = new THREE.Vector3(this.pointermove.x, this.pointermove.y, -1);
|
|
|
|
+ pos.unproject(this.orthCamera);
|
|
|
|
+ pos.y = 5;
|
|
|
|
+ // console.log("pos", pos);
|
|
|
|
+ this.marker.position.copy(pos);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
onPointerDown = (e) => {
|
|
onPointerDown = (e) => {
|
|
console.log("start draw");
|
|
console.log("start draw");
|
|
this.pointerdown = convertScreenToNDC(e, this.scene.domElement);
|
|
this.pointerdown = convertScreenToNDC(e, this.scene.domElement);
|
|
- this.raycaster.setFromCamera(this.pointerdown, this.orthCamera);
|
|
|
|
- let intersectArr = this.scene.boxManager.imgList;
|
|
|
|
- const intersects = this.raycaster.intersectObjects(intersectArr, false);
|
|
|
|
- console.log("intersects", intersects);
|
|
|
|
- if (intersects[0]) {
|
|
|
|
- this.startObj = intersects[0].object;
|
|
|
|
- this.drawing = true;
|
|
|
|
- } else {
|
|
|
|
- this.startObj = null;
|
|
|
|
- this.drawing = false;
|
|
|
|
|
|
+ if (this.mode === 1) {
|
|
|
|
+ this.raycaster.setFromCamera(this.pointerdown, this.orthCamera);
|
|
|
|
+ let intersectArr = this.scene.boxManager.imgList;
|
|
|
|
+ const intersects = this.raycaster.intersectObjects(intersectArr, false);
|
|
|
|
+ console.log("intersects", intersects);
|
|
|
|
+ if (intersects[0]) {
|
|
|
|
+ this.startObj = intersects[0].object;
|
|
|
|
+ this.drawing = true;
|
|
|
|
+ } else {
|
|
|
|
+ this.startObj = null;
|
|
|
|
+ this.drawing = false;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (this.mode === 2) {
|
|
|
|
+ if (!this.marker) {
|
|
|
|
+ let pos = new THREE.Vector3(this.pointerdown.x, this.pointerdown.y, -1);
|
|
|
|
+ pos.unproject(this.orthCamera);
|
|
|
|
+ pos.y = 5;
|
|
|
|
+ this.marker = new Marker(pos);
|
|
|
|
+ this.scene.scene.add(this.marker);
|
|
|
|
+ this.drawing = true;
|
|
|
|
+ } else {
|
|
|
|
+ // this.drawing = false;
|
|
|
|
+ this.raycaster.setFromCamera(this.pointerdown, this.orthCamera);
|
|
|
|
+ let intersectArr = this.scene.boxManager.imgList;
|
|
|
|
+ const intersects = this.raycaster.intersectObjects(intersectArr, false);
|
|
|
|
+
|
|
|
|
+ if (intersects[0]) {
|
|
|
|
+ // this.drawing = false;
|
|
|
|
+ const imageId = intersects[0].object.userData;
|
|
|
|
+ let lasPos = new THREE.Vector3(
|
|
|
|
+ this.pointerdown.x,
|
|
|
|
+ this.pointerdown.y,
|
|
|
|
+ -1
|
|
|
|
+ );
|
|
|
|
+ lasPos.unproject(this.orthCamera);
|
|
|
|
+ lasPos.y = 5;
|
|
|
|
+ const marker = new Marker(lasPos);
|
|
|
|
+
|
|
|
|
+ const activeMarkeritem = {
|
|
|
|
+ id: imageId,
|
|
|
|
+ point: lasPos.toArray(),
|
|
|
|
+ };
|
|
|
|
+ const exist = this.renderMarkers.find((item) => item.id === imageId);
|
|
|
|
+
|
|
|
|
+ if (!exist) {
|
|
|
|
+ this.scene.scene.add(marker);
|
|
|
|
+ this.renderMarkers.push(activeMarkeritem);
|
|
|
|
+ this.scene.scene.remove(this.marker);
|
|
|
|
+ this.marker = null;
|
|
|
|
+ } else {
|
|
|
|
+ this.scene.emit("markerExist");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ console.log("activeMarkeritem", activeMarkeritem);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
// this.floorplanControls.enabled = false;
|
|
// this.floorplanControls.enabled = false;
|
|
};
|
|
};
|
|
onPointerUp = (e) => {
|
|
onPointerUp = (e) => {
|
|
- // console.log("last Line-wPos", points);
|
|
|
|
this.pointerup = convertScreenToNDC(e, this.scene.domElement);
|
|
this.pointerup = convertScreenToNDC(e, this.scene.domElement);
|
|
- this.drawing = false;
|
|
|
|
- this.floorplanControls.enabled = true;
|
|
|
|
- this.startObj = null;
|
|
|
|
|
|
+ console.log("onPointerUp", this.pointerup);
|
|
|
|
|
|
- if (this.drawLine) {
|
|
|
|
- const points = this.drawLine.userData.points;
|
|
|
|
- const dir = this.drawLine.userData.dir;
|
|
|
|
- const finishLine = new LinePoints(points, 0, this.matLine);
|
|
|
|
- this.renderLines.push(points);
|
|
|
|
- this.scene.scene.add(finishLine);
|
|
|
|
- const imageId = this.touchImg.object.userData;
|
|
|
|
- console.log("this.touchImg", dir, imageId, points);
|
|
|
|
|
|
+ if (this.mode === 1) {
|
|
|
|
+ this.drawing = false;
|
|
|
|
+ this.floorplanControls.enabled = true;
|
|
|
|
+ this.startObj = null;
|
|
|
|
+ if (this.drawLine) {
|
|
|
|
+ const points = this.drawLine.userData.points;
|
|
|
|
+ const dir = this.drawLine.userData.dir;
|
|
|
|
+ const finishLine = new LinePoints(points, 0, this.matLine);
|
|
|
|
+ this.renderLines.push(points);
|
|
|
|
+ this.scene.scene.add(finishLine);
|
|
|
|
+ const imageId = this.touchImg.object.userData;
|
|
|
|
+
|
|
|
|
+ const activeLineItem = {
|
|
|
|
+ id: imageId,
|
|
|
|
+ dir: [dir],
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ console.log("this.touchImg", activeLineItem, points);
|
|
|
|
+ this.insertActiveEdge(activeLineItem);
|
|
|
|
+ this.drawLine = null;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ if (this.mode === 2) {
|
|
|
|
+ // this.drawing = false;
|
|
|
|
+ }
|
|
|
|
+ this.syncDrawData();
|
|
};
|
|
};
|
|
|
|
|
|
Listener = {
|
|
Listener = {
|
|
@@ -167,7 +291,6 @@ export default class Player {
|
|
if (this.drawLine) {
|
|
if (this.drawLine) {
|
|
this.drawLine.removeFromParent();
|
|
this.drawLine.removeFromParent();
|
|
}
|
|
}
|
|
- // console.log("this.drawLine", this.drawLine);
|
|
|
|
let s = new THREE.Vector3(this.pointerdown.x, this.pointerdown.y, -1);
|
|
let s = new THREE.Vector3(this.pointerdown.x, this.pointerdown.y, -1);
|
|
let e = new THREE.Vector3(this.pointermove.x, this.pointermove.y, -1);
|
|
let e = new THREE.Vector3(this.pointermove.x, this.pointermove.y, -1);
|
|
s.unproject(this.orthCamera);
|
|
s.unproject(this.orthCamera);
|
|
@@ -191,7 +314,6 @@ export default class Player {
|
|
x -= 0.5;
|
|
x -= 0.5;
|
|
y -= 0.5;
|
|
y -= 0.5;
|
|
// console.log(x, y);
|
|
// console.log(x, y);
|
|
-
|
|
|
|
if (x >= 0 && y >= 0) {
|
|
if (x >= 0 && y >= 0) {
|
|
if (x > y) {
|
|
if (x > y) {
|
|
return 3;
|
|
return 3;
|
|
@@ -230,9 +352,154 @@ export default class Player {
|
|
this.buildLine();
|
|
this.buildLine();
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ insertActiveEdge(item) {
|
|
|
|
+ const exist = this.activeEdges.find((s) => item.id === s.id);
|
|
|
|
+ if (exist) {
|
|
|
|
+ exist.dir = [...new Set([...exist.dir, ...item.dir])];
|
|
|
|
+ } else {
|
|
|
|
+ this.activeEdges.push(item);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ insertActiveMarker(item) {
|
|
|
|
+ const exist = this.activeEdges.find((s) => item.id === s.id);
|
|
|
|
+ if (exist) {
|
|
|
|
+ exist.dir = [...new Set([...exist.dir, ...item.dir])];
|
|
|
|
+ } else {
|
|
|
|
+ this.activeEdges.push(item);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ showAllActiveEdges() {
|
|
|
|
+ if (this.inited) {
|
|
|
|
+ let imgList = this.scene.boxManager.imgList;
|
|
|
|
+ if (this.activeEdges.length > 0) {
|
|
|
|
+ this.activeEdges.forEach((edge) => {
|
|
|
|
+ const exist = imgList.find((item) => item.userData === edge.id);
|
|
|
|
+ // console.log("exist", exist);
|
|
|
|
+ if (exist) {
|
|
|
|
+ edge.dir.forEach((dir) => {
|
|
|
|
+ exist.touchLines.children[dir].visible = true;
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ } else {
|
|
|
|
+ imgList.forEach((img) => {
|
|
|
|
+ // console.log("img", img);
|
|
|
|
+ img.touchLines.children.forEach((line) => {
|
|
|
|
+ if (line.visible) {
|
|
|
|
+ line.visible = false;
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ getDrawData() {
|
|
|
|
+ let data;
|
|
|
|
+ if (this.scene.sceneType === 1) {
|
|
|
|
+ data = {
|
|
|
|
+ hor_lines: this.renderLines,
|
|
|
|
+ hor_activeEdges: this.activeEdges,
|
|
|
|
+ hor_markers: this.renderMarkers,
|
|
|
|
+ vir_lines: [],
|
|
|
|
+ vir_activeEdges: [],
|
|
|
|
+ vir_markers: [],
|
|
|
|
+ };
|
|
|
|
+ } else {
|
|
|
|
+ data = {
|
|
|
|
+ hor_lines: [],
|
|
|
|
+ hor_activeEdges: [],
|
|
|
|
+ hor_markers: [],
|
|
|
|
+ vir_lines: this.renderLines,
|
|
|
|
+ vir_activeEdges: this.activeEdges,
|
|
|
|
+ vir_markers: this.renderMarkers,
|
|
|
|
+ };
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // console.log("sceneType", this.scene.sceneType);
|
|
|
|
+ return data;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ syncDrawData() {
|
|
|
|
+ const data = this.getDrawData();
|
|
|
|
+ this.scene.emit("data", data);
|
|
|
|
+ }
|
|
|
|
+ load(type, data) {
|
|
|
|
+
|
|
|
|
+ if (type === 1) {
|
|
|
|
+ console.log("data1", data);
|
|
|
|
+ const { hor_activeEdges, hor_lines, hor_markers } = data;
|
|
|
|
+ hor_activeEdges && (this.activeEdges = hor_activeEdges);
|
|
|
|
+ if (hor_lines && Array.isArray(hor_lines)) {
|
|
|
|
+ this.renderLines = hor_lines;
|
|
|
|
+ hor_lines.forEach((line) => {
|
|
|
|
+ const finishLine = new LinePoints(line, 0, this.matLine);
|
|
|
|
+ this.scene.scene.add(finishLine);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ if (hor_markers && Array.isArray(hor_markers)) {
|
|
|
|
+ this.renderMarkers = hor_markers;
|
|
|
|
+ hor_markers.forEach((pos) => {
|
|
|
|
+ console.log("pos");
|
|
|
|
+ const p = new THREE.Vector3().fromArray(pos.point);
|
|
|
|
+ const marker = new Marker(p);
|
|
|
|
+ this.scene.scene.add(marker);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (type === 2) {
|
|
|
|
+ const { vir_activeEdges, vir_lines, vir_markers } = data;
|
|
|
|
+ vir_activeEdges && (this.activeEdges = vir_activeEdges);
|
|
|
|
+ if (vir_lines && Array.isArray(vir_lines)) {
|
|
|
|
+ this.renderLines = vir_lines;
|
|
|
|
+ vir_lines.forEach((line) => {
|
|
|
|
+ const finishLine = new LinePoints(line, 0, this.matLine);
|
|
|
|
+ this.scene.scene.add(finishLine);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ if (vir_markers && Array.isArray(vir_markers)) {
|
|
|
|
+ this.renderMarkers = vir_markers;
|
|
|
|
+ vir_markers.forEach((pos) => {
|
|
|
|
+ const p = new THREE.Vector3().fromArray(pos.point);
|
|
|
|
+ const marker = new Marker(p);
|
|
|
|
+ this.scene.scene.add(marker);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ this.syncDrawData();
|
|
|
|
+ }
|
|
|
|
+ reset() {
|
|
|
|
+ if (this.marker) {
|
|
|
|
+ this.scene.scene.remove(this.marker);
|
|
|
|
+ this.marker = null;
|
|
|
|
+ }
|
|
|
|
+ if (this.drawLine) {
|
|
|
|
+ this.scene.scene.remove(this.drawLine);
|
|
|
|
+ this.drawLine = null;
|
|
|
|
+ }
|
|
|
|
+ if (this.touchImg) {
|
|
|
|
+ this.touchImg = null;
|
|
|
|
+ }
|
|
|
|
+ if (this.activeEdge) {
|
|
|
|
+ this.activeEdge = null;
|
|
|
|
+ }
|
|
|
|
+ this.drawing = false;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ clear() {
|
|
|
|
+ this.activeEdges = [];
|
|
|
|
+ this.renderLines = [];
|
|
|
|
+ this.renderMarkers = [];
|
|
|
|
+ this.reset();
|
|
|
|
+ this.scene.clearDrawScene();
|
|
|
|
+ this.syncDrawData();
|
|
|
|
+ }
|
|
|
|
+
|
|
update = () => {
|
|
update = () => {
|
|
if (this.floorplanControls.enabled) {
|
|
if (this.floorplanControls.enabled) {
|
|
this.floorplanControls && this.floorplanControls.update();
|
|
this.floorplanControls && this.floorplanControls.update();
|
|
|
|
+ this.scene.boxManager && this.showAllActiveEdges();
|
|
}
|
|
}
|
|
};
|
|
};
|
|
}
|
|
}
|