react-planner-electron
Version:
react-planner-electron is a React Component for plans design. Draw a 2D floorplan and navigate it in 3D mode.
638 lines (530 loc) • 21.2 kB
JSX
import * as Three from 'three';
import React from 'react';
const textureLoader = new Three.TextureLoader();
const white = textureLoader.load(require("./white.jpg"));
const whiteMaterial = new Three.MeshLambertMaterial({color:0x000000});
const wood = textureLoader.load(require("./wood.jpg"));
const glassMaterial = new Three.MeshLambertMaterial({color:0xc6c6c6,transparent: true, opacity:.5});
function makeMonitor(newDepth)
{
let monitor = new Three.Object3D();
let cubeGeometryBase = new Three.BoxGeometry(0.04,0.42,0.06);
let whiteTexture = new Three.MeshLambertMaterial({map:white});
let edge1 = new Three.Mesh(cubeGeometryBase,whiteTexture);
edge1.position.set(0,0.79,0);
edge1.rotation.x=Math.PI/2;
monitor.add(edge1);
let edge2 = new Three.Mesh(cubeGeometryBase,whiteTexture);
edge2.position.set(0,0.43,0);
edge2.rotation.x=Math.PI/2;
monitor.add(edge2);
let cubeGeometryBase2 = new Three.BoxGeometry(0.04,0.42,0.04);
let edge3 = new Three.Mesh(cubeGeometryBase2,whiteTexture);
edge3.position.set(0,0.61,0.21);
monitor.add(edge3);
let edge4 = new Three.Mesh(cubeGeometryBase2,whiteTexture);
edge4.position.set(0,0.61,-0.21);
monitor.add(edge4);
let cubeGeometryBase3 = new Three.BoxGeometry(0.4,0.40,0.05);
let screen = new Three.Mesh(cubeGeometryBase3,whiteMaterial);
screen.position.set(-0.02,0.61,0);
screen.rotation.y=Math.PI/2;
monitor.add(screen);
monitor.rotation.y-=Math.PI/2;
monitor.rotation.x-=Math.PI/3;
let value = new Three.Box3().setFromObject(monitor);
let deltaX = Math.abs(value.max.x - value.min.x);
let deltaY = Math.abs(value.max.y - value.min.y);
let deltaZ = Math.abs(value.max.z - value.min.z);
monitor.scale.set(newDepth/3 / deltaX, newDepth/4 / deltaY, newDepth/4 / deltaZ);
return monitor
}
function makeObjectMaxLOD(newWidthA,newWidthB,newHeight,newDepth) {
let desk = new Three.Mesh();
let rectShape = new Three.Shape();
if(newWidthA<newWidthB) {
rectShape.moveTo(0, 0);
rectShape.lineTo(newWidthA / 2 - newWidthB / 2, newDepth);
rectShape.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2), newDepth);
rectShape.lineTo(newWidthA, 0);
}
else if(newWidthA>newWidthB) {
rectShape.moveTo(0, 0);
rectShape.lineTo(newWidthA, 0);
rectShape.lineTo(newWidthA + (newWidthB/2 - newWidthA/2), newDepth);
rectShape.lineTo(-(newWidthB/2-newWidthA/2), newDepth);
}
else if(newWidthA===newWidthB){
rectShape.moveTo( 0,0 );
rectShape.lineTo( 0, newDepth );
rectShape.lineTo( newWidthA, newDepth );
rectShape.lineTo( newWidthA, 0 );
}
let extrudeSettings = {
steps: 2,
depth: newHeight/40,
bevelEnabled: false,
bevelThickness: newHeight,
bevelSize: newHeight,
bevelSegments: 2
};
let geometry = new Three.ExtrudeGeometry( rectShape, extrudeSettings );
let woodTexture = new Three.MeshLambertMaterial({map:wood});
let mesh = new Three.Mesh( geometry, woodTexture ) ;
mesh.rotation.x+=Math.PI/2;
mesh.position.y=newHeight/1.8;
let rectShape2 = new Three.Shape();
let hole = new Three.Path();
if(newWidthA<newWidthB) {
rectShape2.moveTo(0, 0);
rectShape2.lineTo(newWidthA, 0);
rectShape2.lineTo(newWidthA + (newWidthB/2 - newWidthA/2), newDepth);
rectShape2.lineTo(-(newWidthB/2-newWidthA/2), newDepth);
hole.moveTo(newWidthB/20, newDepth/20);
hole.lineTo(newWidthA / 2 - newWidthB / 2 + newWidthB/20, newDepth - newDepth/20);
hole.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2) - newWidthB/20, newDepth -newDepth/20);
hole.lineTo(newWidthA - newWidthB/20, newDepth/20);
rectShape2.holes.push(hole);
}
else if(newWidthA>newWidthB){
rectShape2.moveTo(0, 0);
rectShape2.lineTo(newWidthA, 0);
rectShape2.lineTo(newWidthA + (newWidthB/2 - newWidthA/2), newDepth);
rectShape2.lineTo(-(newWidthB/2-newWidthA/2), newDepth);
hole.moveTo(newWidthA / 2 - newWidthB / 2 - newWidthA / 20, newDepth / 20);
hole.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2) + newWidthA / 20, newDepth / 20);
hole.lineTo(newWidthB + newWidthA / 20, newDepth - newDepth / 20);
hole.lineTo(newWidthA - newWidthB - newWidthA / 20, newDepth - newDepth / 20);
rectShape2.holes.push(hole);
}
else if(newWidthA===newWidthB){
rectShape2.moveTo(0, 0);
rectShape2.lineTo(newWidthA, 0);
rectShape2.lineTo(newWidthA, newDepth);
rectShape2.lineTo(0, newDepth);
hole.moveTo(newWidthA/20, newDepth/20);
hole.lineTo(newWidthA-newWidthA/20, newDepth/20);
hole.lineTo(newWidthA-newWidthA/20, newDepth-newDepth/20);
hole.lineTo(newWidthA/20, newDepth-newDepth/20);
rectShape2.holes.push(hole);
}
let geometry2 = new Three.ExtrudeGeometry( rectShape2, extrudeSettings );
let mesh2 = new Three.Mesh( geometry2, woodTexture ) ;
mesh2.position.y+=newHeight;
mesh2.position.z+=newDepth/40;
mesh2.rotation.x+=Math.PI/2;
let mesh3 = new Three.Mesh( geometry, woodTexture ) ;
mesh3.position.y+=newHeight;
mesh3.rotation.x+=Math.PI/1.5;
if (newWidthA < newWidthB) {
mesh3.scale.set(.98,1,1);
mesh3.position.x += 3;
}
if (newWidthA > newWidthB || newWidthA === newWidthB) mesh3.scale.set(1,1,1);
let glass = new Three.Shape();
if(newWidthA<newWidthB) {
glass.moveTo(newWidthB/20, newDepth/20);
glass.lineTo(newWidthA / 2 - newWidthB / 2 + newWidthB/20, newDepth - newDepth/20);
glass.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2) - newWidthB/20, newDepth -newDepth/20);
glass.lineTo(newWidthA - newWidthB/20, newDepth/20);
}
else if (newWidthA>newWidthB){
glass.moveTo(newWidthA / 2 - newWidthB / 2 - newWidthA / 20, newDepth / 20);
glass.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2) + newWidthA / 20, newDepth / 20);
glass.lineTo(newWidthB + newWidthA / 20, newDepth - newDepth / 20);
glass.lineTo(newWidthA - newWidthB - newWidthA / 20, newDepth - newDepth / 20);
}
else if (newWidthA===newWidthB){
glass.moveTo(newWidthA/20, newDepth/20);
glass.lineTo(newWidthA-newWidthA/20, newDepth/20);
glass.lineTo(newWidthA-newWidthA/20, newDepth-newDepth/20);
glass.lineTo(newWidthA/20, newDepth-newDepth/20);
}
let geometry4 = new Three.ExtrudeGeometry( glass, extrudeSettings );
let mesh4 = new Three.Mesh( geometry4, glassMaterial ) ;
mesh4.position.y+=newHeight;
mesh4.rotation.x+=Math.PI/2;
let geometry5 = new Three.BoxGeometry(newWidthA,newDepth/20,1.6*newHeight);
let mesh5 = new Three.Mesh(geometry5, woodTexture);
mesh5.rotation.x+=Math.PI/2;
mesh5.position.set(newWidthA/2,newHeight/5,0);
let c;
if(newWidthA<newWidthB)
c = (newWidthB/2 - newWidthA/2);
else if(newWidthA>newWidthB)
c = (newWidthA/2 - newWidthB/2);
let value = (newDepth)/c;
let angle = Math.atan(value);
let edge;
edge = Math.sqrt(Math.pow(c,2)+Math.pow(newDepth,2));
if (newWidthA===newWidthB) edge = newDepth;
let geometry6 = new Three.BoxGeometry(edge,newDepth/20,1.6*newHeight);
let mesh6 = new Three.Mesh(geometry6, woodTexture);
mesh6.rotation.x+=Math.PI/2;
if(newWidthA<newWidthB) {
mesh6.position.set(-(newWidthB/2 - newWidthA/2)/2, newHeight / 5, newDepth / 2);
mesh6.rotation.z-=angle;
}
else if(newWidthA>newWidthB) {
mesh6.position.set((newWidthA- (newWidthA/2+newWidthB/2))/2, newHeight / 5, newDepth / 2);
mesh6.rotation.z+=angle;
}
else if(newWidthA===newWidthB) {
mesh6.position.set(0, newHeight / 5, newDepth / 2);
mesh6.rotation.z+=Math.PI/2;
}
let mesh7 = mesh6.clone();
if(newWidthA<newWidthB) {
mesh7.position.set(newWidthB- 1.5 * (newWidthB/2 - newWidthA/2) , newHeight / 5, newDepth / 2);
mesh7.rotation.z=-Math.PI + angle;
}
else if(newWidthA>newWidthB) {
mesh7.position.set(newWidthA - (newWidthA/2 - newWidthB/2)/2, newHeight / 5, newDepth / 2);
mesh7.rotation.z=-Math.PI - angle;
}
else if(newWidthA===newWidthB) {
mesh7.position.set(newWidthB,newHeight/5,newDepth/2);
}
let index;
let indexMonitor;
let lastPosition;
let lastPositionMonitor;
let incrPosition;
if (newWidthA<newWidthB){
index = 0;
indexMonitor = newWidthB/2 - newWidthA/2;
lastPosition = newWidthB - 2 * (newWidthB/2 - newWidthA/2);
lastPositionMonitor = newWidthB - 2 * (newWidthB/2 - newWidthA/2) - (newWidthB/2 - newWidthA/2);
incrPosition = newWidthB/2 - newWidthA/2;
}
else if (newWidthA>newWidthB){
index = newWidthA/2 - newWidthB/2;
indexMonitor = 2 * (newWidthA/2 - newWidthB/2);
lastPosition = newWidthA - (newWidthA/2 - newWidthB/2);
lastPositionMonitor = newWidthA - 2 * (newWidthA/2 - newWidthB/2);
incrPosition = newWidthA/2 - newWidthB/2;
}
else if (newWidthA===newWidthB){
index = 0;
indexMonitor = newWidthA/8;
lastPosition = newWidthA;
lastPositionMonitor = newWidthA - newWidthA/8;
incrPosition = newWidthA/8;
}
for ( let i = index + incrPosition; i < lastPosition; i+=incrPosition) {
let geometry8 = new Three.BoxGeometry(newDepth,newDepth/20,1.55*newHeight);
let mesh8 = new Three.Mesh(geometry8, woodTexture);
mesh8.rotation.x=Math.PI/2;
mesh8.rotation.z=Math.PI/2;
mesh8.position.x+=i;
mesh8.position.y+=newHeight/5;
mesh8.position.z+=newDepth/2;
desk.add(mesh8);
}
desk.add(mesh);
desk.add(mesh2);
desk.add(mesh3);
desk.add(mesh4);
desk.add(mesh5);
desk.add(mesh6);
desk.add(mesh7);
for (let i = indexMonitor + incrPosition/2; i < lastPositionMonitor ; i += incrPosition) {
let monitor2 = makeMonitor(newDepth);
monitor2.position.x = i;
monitor2.position.z += 1.15*newDepth;
monitor2.position.y += mesh3.position.y/2.2;
desk.add(monitor2);
}
return desk
}
function makeObjectMinLOD(newWidthA,newWidthB,newHeight,newDepth) {
let desk = new Three.Mesh();
let rectShape = new Three.Shape();
if(newWidthA<newWidthB) {
rectShape.moveTo(0, 0);
rectShape.lineTo(newWidthA / 2 - newWidthB / 2, newDepth);
rectShape.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2), newDepth);
rectShape.lineTo(newWidthA, 0);
}
else if(newWidthA>newWidthB) {
rectShape.moveTo(0, 0);
rectShape.lineTo(newWidthA, 0);
rectShape.lineTo(newWidthA + (newWidthB/2 - newWidthA/2), newDepth);
rectShape.lineTo(-(newWidthB/2-newWidthA/2), newDepth);
}
else if(newWidthA===newWidthB){
rectShape.moveTo( 0,0 );
rectShape.lineTo( 0, newDepth );
rectShape.lineTo( newWidthA, newDepth );
rectShape.lineTo( newWidthA, 0 );
}
let extrudeSettings = {
steps: 2,
depth: newHeight/40,
bevelEnabled: false,
bevelThickness: newHeight,
bevelSize: newHeight,
bevelSegments: 2
};
let geometry = new Three.ExtrudeGeometry( rectShape, extrudeSettings );
let woodTexture = new Three.MeshLambertMaterial({map:wood});
let mesh = new Three.Mesh( geometry, woodTexture ) ;
mesh.rotation.x+=Math.PI/2;
mesh.position.y=newHeight/1.8;
let rectShape2 = new Three.Shape();
let hole = new Three.Path();
if(newWidthA<newWidthB) {
rectShape2.moveTo(0, 0);
rectShape2.lineTo(newWidthA, 0);
rectShape2.lineTo(newWidthA + (newWidthB/2 - newWidthA/2), newDepth);
rectShape2.lineTo(-(newWidthB/2-newWidthA/2), newDepth);
hole.moveTo(newWidthB/20, newDepth/20);
hole.lineTo(newWidthA / 2 - newWidthB / 2 + newWidthB/20, newDepth - newDepth/20);
hole.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2) - newWidthB/20, newDepth -newDepth/20);
hole.lineTo(newWidthA - newWidthB/20, newDepth/20);
rectShape2.holes.push(hole);
}
else if(newWidthA>newWidthB){
rectShape2.moveTo(0, 0);
rectShape2.lineTo(newWidthA, 0);
rectShape2.lineTo(newWidthA + (newWidthB/2 - newWidthA/2), newDepth);
rectShape2.lineTo(-(newWidthB/2-newWidthA/2), newDepth);
hole.moveTo(newWidthA / 2 - newWidthB / 2 - newWidthA / 20, newDepth / 20);
hole.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2) + newWidthA / 20, newDepth / 20);
hole.lineTo(newWidthB + newWidthA / 20, newDepth - newDepth / 20);
hole.lineTo(newWidthA - newWidthB - newWidthA / 20, newDepth - newDepth / 20);
rectShape2.holes.push(hole);
}
else if(newWidthA===newWidthB){
rectShape2.moveTo(0, 0);
rectShape2.lineTo(newWidthA, 0);
rectShape2.lineTo(newWidthA, newDepth);
rectShape2.lineTo(0, newDepth);
hole.moveTo(newWidthA/20, newDepth/20);
hole.lineTo(newWidthA-newWidthA/20, newDepth/20);
hole.lineTo(newWidthA-newWidthA/20, newDepth-newDepth/20);
hole.lineTo(newWidthA/20, newDepth-newDepth/20);
rectShape2.holes.push(hole);
}
let geometry2 = new Three.ExtrudeGeometry( rectShape2, extrudeSettings );
let mesh2 = new Three.Mesh( geometry2, woodTexture ) ;
mesh2.position.y+=newHeight;
mesh2.position.z+=newDepth/40;
mesh2.rotation.x+=Math.PI/2;
let mesh3 = new Three.Mesh( geometry, woodTexture ) ;
mesh3.position.y+=newHeight;
mesh3.rotation.x+=Math.PI/1.5;
if (newWidthA < newWidthB) {
mesh3.scale.set(.98,1,1);
mesh3.position.x += 3;
}
if (newWidthA > newWidthB || newWidthA === newWidthB) mesh3.scale.set(1,1,1);
let glass = new Three.Shape();
if(newWidthA<newWidthB) {
glass.moveTo(newWidthB/20, newDepth/20);
glass.lineTo(newWidthA / 2 - newWidthB / 2 + newWidthB/20, newDepth - newDepth/20);
glass.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2) - newWidthB/20, newDepth -newDepth/20);
glass.lineTo(newWidthA - newWidthB/20, newDepth/20);
}
else if (newWidthA>newWidthB){
glass.moveTo(newWidthA / 2 - newWidthB / 2 - newWidthA / 20, newDepth / 20);
glass.lineTo(newWidthA - (newWidthA / 2 - newWidthB / 2) + newWidthA / 20, newDepth / 20);
glass.lineTo(newWidthB + newWidthA / 20, newDepth - newDepth / 20);
glass.lineTo(newWidthA - newWidthB - newWidthA / 20, newDepth - newDepth / 20);
}
else if (newWidthA===newWidthB){
glass.moveTo(newWidthA/20, newDepth/20);
glass.lineTo(newWidthA-newWidthA/20, newDepth/20);
glass.lineTo(newWidthA-newWidthA/20, newDepth-newDepth/20);
glass.lineTo(newWidthA/20, newDepth-newDepth/20);
}
let geometry4 = new Three.ExtrudeGeometry( glass, extrudeSettings );
let glassMaterial = new Three.MeshLambertMaterial({color:0xc6c6c6,transparent: true, opacity:.5});
let mesh4 = new Three.Mesh( geometry4, glassMaterial ) ;
mesh4.position.y+=newHeight;
mesh4.rotation.x+=Math.PI/2;
let geometry5 = new Three.BoxGeometry(newWidthA,newDepth/20,1.6*newHeight);
let mesh5 = new Three.Mesh(geometry5, woodTexture);
mesh5.rotation.x+=Math.PI/2;
mesh5.position.set(newWidthA/2,newHeight/5,0);
let c;
if(newWidthA<newWidthB)
c = (newWidthB/2 - newWidthA/2);
else if(newWidthA>newWidthB)
c = (newWidthA/2 - newWidthB/2);
let value = (newDepth)/c;
let angle = Math.atan(value);
let edge;
edge = Math.sqrt(Math.pow(c,2)+Math.pow(newDepth,2));
if (newWidthA===newWidthB) edge = newDepth;
let geometry6 = new Three.BoxGeometry(edge,newDepth/20,1.6*newHeight);
let mesh6 = new Three.Mesh(geometry6, woodTexture);
mesh6.rotation.x+=Math.PI/2;
if(newWidthA<newWidthB) {
mesh6.position.set(-(newWidthB/2 - newWidthA/2)/2, newHeight / 5, newDepth / 2);
mesh6.rotation.z-=angle;
}
else if(newWidthA>newWidthB) {
mesh6.position.set((newWidthA- (newWidthA/2+newWidthB/2))/2, newHeight / 5, newDepth / 2);
mesh6.rotation.z+=angle;
}
else if(newWidthA===newWidthB) {
mesh6.position.set(0, newHeight / 5, newDepth / 2);
mesh6.rotation.z+=Math.PI/2;
}
let mesh7 = mesh6.clone();
if(newWidthA<newWidthB) {
mesh7.position.set(newWidthB- 1.5 * (newWidthB/2 - newWidthA/2) , newHeight / 5, newDepth / 2);
mesh7.rotation.z=-Math.PI + angle;
}
else if(newWidthA>newWidthB) {
mesh7.position.set(newWidthA - (newWidthA/2 - newWidthB/2)/2, newHeight / 5, newDepth / 2);
mesh7.rotation.z=-Math.PI - angle;
}
else if(newWidthA===newWidthB) {
mesh7.position.set(newWidthB,newHeight/5,newDepth/2);
}
desk.add(mesh);
desk.add(mesh2);
desk.add(mesh3);
desk.add(mesh4);
desk.add(mesh5);
desk.add(mesh6);
desk.add(mesh7);
return desk
}
export default {
name: "desk",
prototype: "items",
info: {
tag: ['furnishings', 'wood'],
title: "desk",
description: "desk",
image: require('./desk.png')
},
properties: {
widthA: {
label: "larghezza lato A",
type: "length-measure",
defaultValue: {
length: 400,
unit: 'cm'
}
},
widthB: {
label: "larghezza lato B",
type: "length-measure",
defaultValue: {
length: 400,
unit: 'cm'
}
},
depth: {
label: "depth",
type: "length-measure",
defaultValue: {
length: 90,
unit: 'cm'
}
},
height: {
label: "height",
type: "length-measure",
defaultValue: {
length: 100,
unit: 'cm'
}
},
altitude: {
label: "altitude",
type: "length-measure",
defaultValue: {
length: 0,
unit: 'cm'
}
}
},
render2D: function (element, layer, scene) {
let newWidthA = element.properties.get('widthA').get('length');
let newWidthB = element.properties.get('widthB').get('length');
let newDepth = element.properties.get('depth').get('length');
let angle = element.rotation + 90;
let textRotation = 0;
if (Math.sin(angle * Math.PI / 180) < 0) {
textRotation = 180;
}
return (
<g transform={`translate(${-newWidthA / 2},${-newDepth / 2})`}>
<path key="1" d={`M ${newWidthA/2-newWidthB/2} 0 l ${-newWidthA/2+newWidthB/2} ${newDepth} l ${newWidthA} 0 l ${-newWidthA/2+newWidthB/2}${-newDepth} l ${-newWidthB} 0`} stroke="red"
transform={`translate(0, ${newDepth}) scale(1,-1)`}
style={{stroke: element.selected ? '#0096fd' : '#000', strokeWidth: "2px", fill: "#84e1ce"}}/>
<text key="5" x="0" y="0"
transform={`translate(${newWidthA / 2}, ${newDepth / 2}) scale(1,-1) rotate(${textRotation})`}
style={{textAnchor: "middle", fontSize: "11px"}}>
{element.type}
</text>
</g>
)
},
render3D: function (element, layer, scene) {
let newWidthA = element.properties.get('widthA').get('length');
let newWidthB = element.properties.get('widthB').get('length');
let newDepth = element.properties.get('depth').get('length');
let newHeight = element.properties.get('height').get('length');
let newAltitude = element.properties.get('altitude').get('length');
/********** lod max **********/
let scrivaniaMaxLOD = new Three.Object3D();
scrivaniaMaxLOD.add(makeObjectMaxLOD(newWidthA,newWidthB,newHeight,newDepth).clone());
let aa = new Three.Box3().setFromObject(scrivaniaMaxLOD);
let deltaX = Math.abs(aa.max.x - aa.min.x);
let deltaY = Math.abs(aa.max.y - aa.min.y);
let deltaZ = Math.abs(aa.max.z - aa.min.z);
scrivaniaMaxLOD.position.y += newHeight/2 + newAltitude;
scrivaniaMaxLOD.position.z += newDepth/2;
if (newWidthA<newWidthB)
scrivaniaMaxLOD.position.x += newWidthB/2 - (newWidthB/2 - newWidthA/2);
if (newWidthA>newWidthB)
scrivaniaMaxLOD.position.x += newWidthA/2;
if (newWidthA===newWidthB)
scrivaniaMaxLOD.position.x += newWidthB/2;
scrivaniaMaxLOD.rotation.y += Math.PI;
if(newWidthA<newWidthB)
scrivaniaMaxLOD.scale.set(newWidthB / deltaX, newDepth / deltaY, newHeight / deltaZ);
if(newWidthA>newWidthB)
scrivaniaMaxLOD.scale.set(newWidthA / deltaX, newDepth / deltaY, newHeight / deltaZ);
if(newWidthA===newWidthB)
scrivaniaMaxLOD.scale.set(newWidthA / deltaX, newDepth / deltaY, newHeight / deltaZ);
/********** lod min **********/
let scrivaniaMinLOD = new Three.Object3D();
scrivaniaMinLOD.add(makeObjectMinLOD(newWidthA,newWidthB,newHeight,newDepth).clone());
scrivaniaMinLOD.position.y += newHeight/2 + newAltitude;
scrivaniaMinLOD.position.z += newDepth/2;
if (newWidthA<newWidthB)
scrivaniaMinLOD.position.x += newWidthB/2 - (newWidthB/2 - newWidthA/2);
if (newWidthA>newWidthB)
scrivaniaMinLOD.position.x += newWidthA/2;
if (newWidthA===newWidthB)
scrivaniaMinLOD.position.x += newWidthB/2;
scrivaniaMinLOD.rotation.y += Math.PI;
if(newWidthA<newWidthB)
scrivaniaMinLOD.scale.set(newWidthB / deltaX, newDepth / deltaY, newHeight / deltaZ);
if(newWidthA>newWidthB)
scrivaniaMinLOD.scale.set(newWidthA / deltaX, newDepth / deltaY, newHeight / deltaZ);
if(newWidthA===newWidthB)
scrivaniaMinLOD.scale.set(newWidthA / deltaX, newDepth / deltaY, newHeight / deltaZ);
/*** add all Level of Detail ***/
let lod = new Three.LOD();
lod.addLevel(scrivaniaMaxLOD, 700);
lod.addLevel(scrivaniaMinLOD, 1000);
lod.updateMatrix();
lod.matrixAutoUpdate = false;
if (element.selected) {
let bbox = new Three.BoxHelper(lod, 0x99c3fb);
bbox.material.linewidth = 5;
bbox.renderOrder = 1000;
bbox.material.depthTest = false;
lod.add(bbox);
}
return Promise.resolve(lod);
}
};