react-planner-electron
Version:
react-planner-electron is a React Component for plans design. Draw a 2D floorplan and navigate it in 3D mode.
632 lines (566 loc) • 22.8 kB
JSX
import * as Three from 'three';
import React from 'react';
const WIDTH = 70;
const DEPTH = 70;
const HEIGHT = 100;
const grey = new Three.MeshBasicMaterial({color : 0xD3D3D3});
const metalGrey = new Three.MeshBasicMaterial({color : 0x808080});
const white = new Three.MeshBasicMaterial({color : 0x000000});
const black = new Three.MeshBasicMaterial({color : 0x000000});
function makeBackrest(){
let backrest = new Three.Object3D();
let backrestGeometry1 = new Three.CylinderGeometry( 0.01 , 0.01 , 0.18 , 32, 32 );
let backrestGeometry2 = new Three.CylinderGeometry( 0.01 , 0.01 , 0.04 , 32, 32 );
let NodeGeometry = new Three.SphereGeometry( 0.01 , 32 , 32 );
let backrest1 = new Three.Mesh( backrestGeometry1 , black );
let backrest2 = new Three.Mesh( backrestGeometry2 , black );
let backrest3 = new Three.Mesh( backrestGeometry1 , black );
let backrest4 = new Three.Mesh( backrestGeometry2 , black );
let node1 = new Three.Mesh( NodeGeometry , black );
let node2 = new Three.Mesh( NodeGeometry , black );
let backrestPillow = makeBackrestPillow();
backrest1.rotation.z = Math.PI*(90 +6)/180;
backrest1.position.z = 0.05;
backrest1.position.x = 0.09;
backrest2.rotation.z = -Math.PI*96/180;
backrest2.position.x = 0.02*Math.cos(Math.PI*6/180);
backrest3.rotation.z = Math.PI*(90 +6)/180;
backrest3.position.z =-0.05;
backrest3.position.x = 0.09;
backrest4.rotation.z =-Math.PI*96/180;
backrest4.position.x = 0.02*Math.cos(Math.PI*6/180);
node1.position.y = 0.09;
node2.position.y = 0.09;
node1.add(backrest2);
node2.add(backrest4);
backrestPillow.rotation.y = Math.PI/2;
backrestPillow.position.y = 0.25 +0.02;
backrest1.add(node1);
backrest.add(backrest1);
backrest3.add(node2);
backrest.add(backrest3);
backrest.add(backrestPillow);
return backrest;
}
function makeBackrestMinLOD(){
let backrest = new Three.Object3D();
let backrestGeometry1 = new Three.CylinderGeometry( 0.01 , 0.01 , 0.18 , 8, 8 );
let backrestGeometry2 = new Three.CylinderGeometry( 0.01 , 0.01 , 0.04 , 8, 8 );
let NodeGeometry = new Three.SphereGeometry( 0.01 , 32 , 32 );
let backrest1 = new Three.Mesh( backrestGeometry1 , black );
let backrest2 = new Three.Mesh( backrestGeometry2 , black );
let backrest3 = new Three.Mesh( backrestGeometry1 , black );
let backrest4 = new Three.Mesh( backrestGeometry2 , black );
let node1 = new Three.Mesh( NodeGeometry , black );
let node2 = new Three.Mesh( NodeGeometry , black );
let backrestPillow = makeBackrestPillowMinLOD();
backrest1.rotation.z = Math.PI*(90 +6)/180;
backrest1.position.z = 0.05;
backrest1.position.x = 0.09;
backrest2.rotation.z = -Math.PI*96/180;
backrest2.position.x = 0.02*Math.cos(Math.PI*6/180);
backrest3.rotation.z = Math.PI*(90 +6)/180;
backrest3.position.z =-0.05;
backrest3.position.x = 0.09;
backrest4.rotation.z =-Math.PI*96/180;
backrest4.position.x = 0.02*Math.cos(Math.PI*6/180);
node1.position.y = 0.09;
node2.position.y = 0.09;
node1.add(backrest2);
node2.add(backrest4);
backrestPillow.rotation.y = Math.PI/2;
backrestPillow.position.y = 0.25 +0.02;
backrest1.add(node1);
backrest.add(backrest1);
backrest3.add(node2);
backrest.add(backrest3);
backrest.add(backrestPillow);
return backrest;
}
function makeWheel(){
let ArmrestGeometry = new Three.CylinderGeometry( 0.027 , 0.02 , 0.3 , 32, 32 );
let SupportGeometry = new Three.CylinderGeometry( 0.02 , 0.01 , 0.02 , 32, 32 );
let PivotGeometry = new Three.CylinderGeometry( 0.008 , 0.008 , 0.01 , 32, 32 );
let SupportGeometryStart = new Three.SphereGeometry( 0.02 , 32 , 32 );
let WheelGeometry = new Three.CylinderGeometry( 0.025 , 0.025 , 0.05 , 32, 32 );
let InsideWheelGeometry = new Three.CylinderGeometry( 0.02 , 0.02 , 0.051 , 32, 32 );
let WheelCoverGeometry = new Three.CylinderGeometry( 0.026 , 0.026 , 0.045 , 32, 32 );
let armrest = new Three.Mesh( ArmrestGeometry , metalGrey );
let support = new Three.Mesh( SupportGeometry , metalGrey );
let pivot = new Three.Mesh( PivotGeometry , grey );
let SupportStart = new Three.Mesh( SupportGeometryStart , metalGrey );
let Wheel = new Three.Mesh( WheelGeometry , black );
let WheelCover = new Three.Mesh( WheelCoverGeometry , metalGrey );
let InsideWheel = new Three.Mesh( InsideWheelGeometry , metalGrey );
let Armrest1 = new Three.Object3D();
let Armrest2 = new Three.Object3D();
armrest.rotation.z = Math.PI*80/180;
armrest.position.x = 0.01 + 0.15;
Armrest1.rotation.z =-Math.PI*80/180;
Armrest1.position.y =-Math.sin(Math.PI*80/180)*0.15;
support.position.y =-0.01;
pivot.position.y =-0.01 - 0.005;
Wheel.rotation.x = Math.PI/2;
Wheel.position.y =-0.005 -0.02;
WheelCover.position.z =-0.003;
Wheel.add(InsideWheel);
Wheel.add(WheelCover);
pivot.add(Wheel);
support.add(pivot);
Armrest1.add(support);
Armrest1.add(SupportStart);
armrest.add(Armrest1);
Armrest2.add(armrest);
return Armrest2;
}
function makeWheelMinLOD(){
let ArmrestGeometry = new Three.CylinderGeometry( 0.027 , 0.02 , 0.3 , 8, 8 );
let SupportGeometry = new Three.CylinderGeometry( 0.02 , 0.01 , 0.02 , 8, 8 );
let PivotGeometry = new Three.CylinderGeometry( 0.008 , 0.008 , 0.01 , 8, 8 );
let SupportGeometryStart = new Three.SphereGeometry( 0.02 , 8 , 8 );
let WheelGeometry = new Three.CylinderGeometry( 0.025 , 0.025 , 0.05 , 8, 8 );
let InsideWheelGeometry = new Three.CylinderGeometry( 0.02 , 0.02 , 0.051 , 8, 8 );
let armrest = new Three.Mesh( ArmrestGeometry , metalGrey );
let support = new Three.Mesh( SupportGeometry , metalGrey );
let pivot = new Three.Mesh( PivotGeometry , grey );
let SupportStart = new Three.Mesh( SupportGeometryStart , metalGrey );
let Wheel = new Three.Mesh( WheelGeometry , black );
let InsideWheel = new Three.Mesh( InsideWheelGeometry , metalGrey );
let Armrest1 = new Three.Object3D();
let Armrest2 = new Three.Object3D();
armrest.rotation.z = Math.PI*80/180;
armrest.position.x = 0.01 + 0.15;
Armrest1.rotation.z =-Math.PI*80/180;
Armrest1.position.y =-Math.sin(Math.PI*80/180)*0.15;
support.position.y =-0.01;
pivot.position.y =-0.01 - 0.005;
Wheel.rotation.x = Math.PI/2;
Wheel.position.y =-0.005 -0.02;
Wheel.add(InsideWheel);
pivot.add(Wheel);
support.add(pivot);
Armrest1.add(support);
Armrest1.add(SupportStart);
armrest.add(Armrest1);
Armrest2.add(armrest);
return Armrest2;
}
function makeBackrestPillow(){
let pillow = new Three.Object3D();
let CenterGeometry = new Three.BoxGeometry( 0.3 , 0.5 , 0.04 );
let ShortEdgeGeometry = new Three.CylinderGeometry( 0.02 , 0.02 , 0.3 , 32, 32 );
let LongEdgeGeometry = new Three.CylinderGeometry( 0.02 , 0.02 , 0.5 , 32, 32 );
let AngleGeometry = new Three.SphereGeometry( 0.02 , 32 , 32 );
let edgeShort1 = new Three.Mesh( ShortEdgeGeometry , white );
let edgeShort2 = new Three.Mesh( ShortEdgeGeometry , white );
let edgeLong1 = new Three.Mesh( LongEdgeGeometry , white );
let edgeLong2 = new Three.Mesh( LongEdgeGeometry , white );
let angle1c = new Three.Mesh( AngleGeometry , white);
let angle2c = new Three.Mesh( AngleGeometry , white);
let angle1l = new Three.Mesh( AngleGeometry , white);
let angle2l = new Three.Mesh( AngleGeometry , white);
let center = new Three.Mesh( CenterGeometry , white );
edgeShort1.rotation.z = Math.PI/2;
edgeShort1.position.y = 0.25;
angle1c.position.y = 0.15;
edgeShort2.rotation.z = Math.PI/2;
edgeShort2.position.y =-0.25;
angle2c.position.y =-0.15;
edgeLong1.position.x = 0.15;
angle1l.position.y = 0.25;
edgeLong2.position.x =-0.15;
angle2l.position.y =-0.25;
edgeLong2.add(angle2l);
pillow.add(edgeLong2);
edgeLong1.add(angle1l);
pillow.add(edgeLong1);
edgeShort2.add(angle2c);
pillow.add(edgeShort2);
edgeShort1.add(angle1c);
pillow.add(edgeShort1);
pillow.add(center);
return pillow;
}
function makeBackrestPillowMinLOD(){
let pillow = new Three.Object3D();
let CenterGeometry = new Three.BoxGeometry( 0.3 , 0.5 , 0.04 );
let ShortEdgeGeometry = new Three.CylinderGeometry( 0.02 , 0.02 , 0.3 , 8, 8 );
let LongEdgeGeometry = new Three.CylinderGeometry( 0.02 , 0.02 , 0.5 , 8, 8 );
let AngleGeometry = new Three.SphereGeometry( 0.02 , 32 , 32 );
let edgeShort1 = new Three.Mesh( ShortEdgeGeometry , white );
let edgeShort2 = new Three.Mesh( ShortEdgeGeometry , white );
let edgeLong1 = new Three.Mesh( LongEdgeGeometry , white );
let edgeLong2 = new Three.Mesh( LongEdgeGeometry , white );
let angle1c = new Three.Mesh( AngleGeometry , white);
let angle2c = new Three.Mesh( AngleGeometry , white);
let angle1l = new Three.Mesh( AngleGeometry , white);
let angle2l = new Three.Mesh( AngleGeometry , white);
let center = new Three.Mesh( CenterGeometry , white );
edgeShort1.rotation.z = Math.PI/2;
edgeShort1.position.y = 0.25;
angle1c.position.y = 0.15;
edgeShort2.rotation.z = Math.PI/2;
edgeShort2.position.y =-0.25;
angle2c.position.y =-0.15;
edgeLong1.position.x = 0.15;
angle1l.position.y = 0.25;
edgeLong2.position.x =-0.15;
angle2l.position.y =-0.25;
edgeLong2.add(angle2l);
pillow.add(edgeLong2);
edgeLong1.add(angle1l);
pillow.add(edgeLong1);
edgeShort2.add(angle2c);
pillow.add(edgeShort2);
edgeShort1.add(angle1c);
pillow.add(edgeShort1);
pillow.add(center);
return pillow;
}
function makeBody() {
let body = new Three.Object3D();
let SupportPillowGeometry1 = new Three.BoxGeometry( 0.28 , 0.06 , 0.07 );
let SupportPillowGeometry2 = new Three.BoxGeometry( 0.3 , 0.04 , 0.09 );
let ShortHandleGeometry = new Three.CylinderGeometry( 0.0045 , 0.0045 , 0.07 , 32, 32 );
let LongHandleGeometry = new Three.CylinderGeometry( 0.0045 , 0.0045 , 0.09 , 32, 32 );
let HandleGeometry = new Three.CylinderGeometry( 0.007 , 0.005 , 0.06 , 32 );
let ArmrestSupportGeometry = new Three.CylinderGeometry( 0.01 , 0.01 , 0.2 , 32, 32 );
let SupportPillow1 = new Three.Mesh( SupportPillowGeometry1 , metalGrey );
let SupportPillow2 = new Three.Mesh( SupportPillowGeometry2 , metalGrey );
let LongHandle = new Three.Mesh( LongHandleGeometry , white );
let ShortHandle = new Three.Mesh( ShortHandleGeometry , white );
let Handle1 = new Three.Mesh( HandleGeometry , black );
let Handle2 = new Three.Mesh( HandleGeometry , black );
let ArmrestBase1 = new Three.Mesh( ArmrestSupportGeometry , metalGrey );
let ArmrestBase2 = new Three.Mesh( ArmrestSupportGeometry , metalGrey );
let Pillow = makePillow();
let armrest1 = makeArmrest();
let armrest2 = makeArmrest();
SupportPillow1.position.y = 0.03;
SupportPillow2.rotation.z = Math.PI*6/180;
SupportPillow2.position.y = 0.06 ;
LongHandle.rotation.x = Math.PI*80/180;
LongHandle.position.z = 0.035 + 0.045;
LongHandle.position.x = 0.1;
ShortHandle.rotation.x =-Math.PI*80/180;
ShortHandle.position.z =-0.035 - 0.035;
ShortHandle.position.x = 0.08;
Handle2.position.y = 0.035 + 0.03;
Handle1.position.y = 0.045 + 0.03;
Pillow.position.y = 0.02 + 0.02;
ArmrestBase1.rotation.x = Math.PI/2;
ArmrestBase1.rotation.y = -Math.PI*6/180;
ArmrestBase2.rotation.x = Math.PI/2;
ArmrestBase2.rotation.y = -Math.PI*6/180;
ArmrestBase1.position.z = 0.045 + 0.1;
ArmrestBase2.position.z =-0.045 - 0.1;
armrest1.position.y = 0.1;
armrest2.position.y = -0.1;
SupportPillow2.add(Pillow);
ArmrestBase1.add(armrest1);
ArmrestBase2.add(armrest2);
SupportPillow2.add(ArmrestBase1);
SupportPillow2.add(ArmrestBase2);
LongHandle.add(Handle1);
ShortHandle.add(Handle2);
SupportPillow1.add(LongHandle);
SupportPillow1.add(ShortHandle);
body.add(SupportPillow2);
body.add(SupportPillow1);
return body;
}
function makeBodyMinLOD() {
let body = new Three.Object3D();
let SupportPillowGeometry1 = new Three.BoxGeometry( 0.28 , 0.06 , 0.07 );
let SupportPillowGeometry2 = new Three.BoxGeometry( 0.3 , 0.04 , 0.09 );
let ArmrestSupportGeometry = new Three.CylinderGeometry( 0.01 , 0.01 , 0.2 , 8, 8 );
let SupportPillow1 = new Three.Mesh( SupportPillowGeometry1 , metalGrey );
let SupportPillow2 = new Three.Mesh( SupportPillowGeometry2 , metalGrey );
let ArmrestBase1 = new Three.Mesh( ArmrestSupportGeometry , metalGrey );
let ArmrestBase2 = new Three.Mesh( ArmrestSupportGeometry , metalGrey );
let Pillow = makePillow();
let armrest1 = makeArmrestMinLOD();
let armrest2 = makeArmrestMinLOD();
SupportPillow1.position.y = 0.03;
SupportPillow2.rotation.z = Math.PI*6/180;
SupportPillow2.position.y = 0.06 ;
Pillow.position.y = 0.02 + 0.02;
ArmrestBase1.rotation.x = Math.PI/2;
ArmrestBase1.rotation.y = -Math.PI*6/180;
ArmrestBase2.rotation.x = Math.PI/2;
ArmrestBase2.rotation.y = -Math.PI*6/180;
ArmrestBase1.position.z = 0.045 + 0.1;
ArmrestBase2.position.z =-0.045 - 0.1;
armrest1.position.y = 0.1;
armrest2.position.y = -0.1;
SupportPillow2.add(Pillow);
ArmrestBase1.add(armrest1);
ArmrestBase2.add(armrest2);
SupportPillow2.add(ArmrestBase1);
SupportPillow2.add(ArmrestBase2);
body.add(SupportPillow2);
body.add(SupportPillow1);
return body;
}
function makeArmrest(){
let armrest = new Three.Object3D();
let NodeGeometry = new Three.SphereGeometry( 0.01 , 32 , 32 );
let GeometryP1 = new Three.CylinderGeometry( 0.01 , 0.01 , 0.24 , 32, 32 );
let GeometryP2 = new Three.CylinderGeometry( 0.01 , 0.01 , 0.04 , 32, 32 );
let GeometryP3 = new Three.CylinderGeometry( 0.02 , 0.025 , 0.2 , 32, 32 );
let node1 = new Three.Mesh( NodeGeometry , metalGrey );
let node2 = new Three.Mesh( NodeGeometry , metalGrey );
let P1 = new Three.Mesh( GeometryP1 , metalGrey );
let P2 = new Three.Mesh( GeometryP2 , metalGrey );
let P3 = new Three.Mesh( GeometryP3 , white );
P1.rotation.x = Math.PI/2;
P1.rotation.z = -Math.PI*25/180;
P1.position.set( 0.12*Math.sin(P1.rotation.z) , 0 , -0.12*Math.cos(P1.rotation.z) );
P2.rotation.z = Math.PI*100/180;
P2.position.x = 0.02;
P2.position.y = 0.0035;
node2.position.y =-0.12;
P3.position.y =-0.1 -0.02;
P2.add(P3);
node2.add(P2);
P1.add(node2);
node1.add(P1);
armrest.add(node1);
return armrest;
}
function makeArmrestMinLOD(){
let armrest = new Three.Object3D();
let NodeGeometry = new Three.SphereGeometry( 0.01 , 8 , 8 );
let GeometryP1 = new Three.CylinderGeometry( 0.01 , 0.01 , 0.24 , 8, 8 );
let GeometryP2 = new Three.CylinderGeometry( 0.01 , 0.01 , 0.04 , 8, 8 );
let GeometryP3 = new Three.CylinderGeometry( 0.02 , 0.025 , 0.2 , 8, 8 );
let node1 = new Three.Mesh( NodeGeometry , metalGrey );
let node2 = new Three.Mesh( NodeGeometry , metalGrey );
let P1 = new Three.Mesh( GeometryP1 , metalGrey );
let P2 = new Three.Mesh( GeometryP2 , metalGrey );
let P3 = new Three.Mesh( GeometryP3 , white );
P1.rotation.x = Math.PI/2;
P1.rotation.z = -Math.PI*25/180;
P1.position.set( 0.12*Math.sin(P1.rotation.z) , 0 , -0.12*Math.cos(P1.rotation.z) );
P2.rotation.z = Math.PI*100/180;
P2.position.x = 0.02;
P2.position.y = 0.0035;
node2.position.y =-0.12;
P3.position.y =-0.1 -0.02;
P2.add(P3);
node2.add(P2);
P1.add(node2);
node1.add(P1);
armrest.add(node1);
return armrest;
}
function makePillow() {
let pillow = new Three.Object3D();
let CenterGeometry = new Three.BoxGeometry( 0.4 , 0.04 , 0.4 );
let CenterPillow = new Three.Mesh( CenterGeometry , white );
let edge1 = makeEdge();
let edge2 = makeEdge();
let edge3 = makeEdge();
let edge4 = makeEdge();
edge1.rotation.x = Math.PI/2;
edge1.position.x = 0.2;
edge2.rotation.x =-Math.PI/2;
edge2.position.x =-0.2;
edge3.rotation.z =-Math.PI/2;
edge3.position.z =-0.2;
edge4.rotation.z = Math.PI/2;
edge4.position.z = 0.2;
CenterPillow.add(edge1);
CenterPillow.add(edge2);
CenterPillow.add(edge3);
CenterPillow.add(edge4);
pillow.add(CenterPillow);
return pillow;
}
function makeEdge(){
let EdgeGeometry = new Three.CylinderGeometry( 0.02 , 0.02 , 0.4 , 32 , 32, true );
let AngleGeometry = new Three.SphereGeometry( 0.02 , 32 , 32 );
let angle = new Three.Mesh( AngleGeometry , white );
let edge = new Three.Mesh( EdgeGeometry , white );
edge.openEnded = 1;
angle.position.y = 0.2;
edge.add(angle);
return edge;
}
function makeBase(){
let base = new Three.Object3D();
let CylinderGeometry1 = new Three.CylinderGeometry( 0.027 , 0.027 , 0.05 , 32, 32 );
let CylinderGeometry2 = new Three.CylinderGeometry( 0.03 , 0.03 , 0.2 , 32, 32 );
let CylinderGeometry3 = new Three.CylinderGeometry( 0.04 , 0.04 , 0.06 , 32, 32 );
let CylinderCoverGeometryCylinder2 = new Three.TorusGeometry( 0.04 , 0.025 , 32 , 100 );
let CylinderGeometry4 = new Three.CylinderGeometry( 0.02 , 0.02 , 0.14 , 32, 32 );
let Cylinder1 = new Three.Mesh( CylinderGeometry1 , metalGrey );
let Cylinder2 = new Three.Mesh( CylinderGeometry2 , metalGrey );
let CoverCylinder1 = new Three.Mesh( CylinderGeometry3 , metalGrey );
let CoverCylinder2 = new Three.Mesh( CylinderCoverGeometryCylinder2 , metalGrey );
let Cylinder3 = new Three.Mesh( CylinderGeometry4 , metalGrey );
let Wheel = makeWheels();
Cylinder1.position.y =-0.1 - 0.025;
Cylinder3.position.y = 0.1 + 0.07;
Wheel.position.y =-0.07;
CoverCylinder1.position.y =-0.05;
CoverCylinder2.rotation.x = Math.PI/2;
CoverCylinder2.position.y =-0.05;
Cylinder2.add(CoverCylinder1);
Cylinder2.add(CoverCylinder2);
Cylinder2.add(Wheel);
Cylinder2.add(Cylinder1);
Cylinder2.add(Cylinder3);
base.add(Cylinder2);
return base;
}
function makeBaseMinLOD(){
let base = new Three.Object3D();
let CylinderGeometry1 = new Three.CylinderGeometry( 0.027 , 0.027 , 0.05 , 8, 8 );
let CylinderGeometry2 = new Three.CylinderGeometry( 0.03 , 0.03 , 0.2 , 8, 8 );
let CylinderGeometry3 = new Three.CylinderGeometry( 0.04 , 0.04 , 0.06 , 8, 8 );
let CylinderCoverGeometryCylinder2 = new Three.TorusGeometry( 0.04 , 0.025 , 8 , 100 );
let CylinderGeometry4 = new Three.CylinderGeometry( 0.02 , 0.02 , 0.14 , 8, 8 );
let Cylinder1 = new Three.Mesh( CylinderGeometry1 , metalGrey );
let Cylinder2 = new Three.Mesh( CylinderGeometry2 , metalGrey );
let CoverCylinder1 = new Three.Mesh( CylinderGeometry3 , metalGrey );
let CoverCylinder2 = new Three.Mesh( CylinderCoverGeometryCylinder2 , metalGrey );
let Cylinder3 = new Three.Mesh( CylinderGeometry4 , metalGrey );
let Wheel = makeWheelsMinLOD();
Cylinder1.position.y =-0.1 - 0.025;
Cylinder3.position.y = 0.1 + 0.07;
Wheel.position.y =-0.07;
CoverCylinder1.position.y =-0.05;
CoverCylinder2.rotation.x = Math.PI/2;
CoverCylinder2.position.y =-0.05;
Cylinder2.add(CoverCylinder1);
Cylinder2.add(CoverCylinder2);
Cylinder2.add(Wheel);
Cylinder2.add(Cylinder1);
Cylinder2.add(Cylinder3);
base.add(Cylinder2);
return base;
}
function makeWheels(){
let wheels = new Three.Object3D();
for (let i = 0; i < 5; i++) {
let wheel = makeWheel();
wheel.rotation.y = 2*Math.PI*i*72/360;
wheels.add(wheel);
}
return wheels;
}
function makeWheelsMinLOD(){
let wheels = new Three.Object3D();
for (let i = 0; i < 5; i++) {
let wheel = makeWheelMinLOD();
wheel.rotation.y = 2*Math.PI*i*72/360;
wheels.add(wheel);
}
return wheels;
}
const objectMaxLOD = makeObjectMaxLOD();
const objectMinLOD = makeObjectMinLOD();
function makeObjectMaxLOD() {
let chairDesk = new Three.Mesh();
let baseChair = makeBase();
let bodyChair = makeBody();
let backrestChair = makeBackrest();
baseChair.position.y = 0.1 +0.07;
bodyChair.position.y = 0.1 +0.14;
backrestChair.position.y = 0.06;
backrestChair.position.x =-0.25;
bodyChair.add(backrestChair);
baseChair.add(bodyChair);
chairDesk.add(baseChair);
chairDesk.rotation.y= -0.5*Math.PI;
chairDesk.position.z-= 0.02;
return chairDesk
}
function makeObjectMinLOD() {
let chairDesk = new Three.Mesh();
let baseChair = makeBaseMinLOD();
let bodyChair = makeBodyMinLOD();
let backrestChair = makeBackrestMinLOD();
baseChair.position.y = 0.1 +0.07;
bodyChair.position.y = 0.1 +0.14;
backrestChair.position.y = 0.06;
backrestChair.position.x =-0.25;
bodyChair.add(backrestChair);
baseChair.add(bodyChair);
chairDesk.add(baseChair);
chairDesk.rotation.y= -0.5*Math.PI;
chairDesk.position.z-= 0.02;
return chairDesk
}
export default {
name: "chairdesk",
prototype: "items",
info: {
tag: ['furnishings', 'wood'],
title: "chairdesk",
description: "office chair",
image: require('./chairdesk.png')
},
properties: {
altitude: {
label: "altitude",
type: "length-measure",
defaultValue: {
length: 0,
unit: 'cm'
}
}
},
render2D: function (element, layer, scene) {
let angle = element.rotation + 90;
let textRotation = 0;
if (Math.sin(angle * Math.PI / 180) < 0) {
textRotation = 180;
}
return (
<g transform={ `translate(${-WIDTH / 2},${-DEPTH / 2})`}>
<rect key="1" x="0" y="0" width={WIDTH} height={DEPTH}
style={{stroke: element.selected ? '#0096fd' : '#000', strokeWidth: "2px", fill: "#84e1ce"}}/>
<text key="2" x="0" y="0"
transform={ `translate(${WIDTH / 2}, ${DEPTH / 2}) scale(1,-1) rotate(${textRotation})`}
style={ {textAnchor: "middle", fontSize: "11px"}}>
{element.type}
</text>
</g>
);
},
render3D: function (element, layer, scene) {
let newAltitude = element.properties.get('altitude').get('length');
let chairDeskMaxLOD = new Three.Object3D();
chairDeskMaxLOD.add(objectMaxLOD.clone());
let aa = new Three.Box3().setFromObject(chairDeskMaxLOD);
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);
chairDeskMaxLOD.position.y+= newAltitude;
chairDeskMaxLOD.position.x+= -WIDTH/8;
chairDeskMaxLOD.position.z+= DEPTH/4;
chairDeskMaxLOD.scale.set( WIDTH / deltaX,DEPTH / deltaZ, HEIGHT / deltaY);
let chairDeskMinLOD = new Three.Object3D();
chairDeskMinLOD.add(objectMinLOD.clone());
chairDeskMinLOD.position.y+= newAltitude;
chairDeskMinLOD.position.x+= -WIDTH/8;
chairDeskMinLOD.position.z+= DEPTH/4;
chairDeskMinLOD.scale.set( WIDTH / deltaX,DEPTH / deltaZ, HEIGHT / deltaY);
/**** all level of detail ***/
let lod = new Three.LOD();
lod.addLevel(chairDeskMaxLOD, 200);
lod.addLevel(chairDeskMinLOD, 900);
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);
}
};