import * as THREE from "three"
const defultCabinetObj ={
w:60, //宽
h:200,//高
z:60,//深
layers:42,//层数
}
const basicParameters ={
thickness:5, // 竖板厚度
}
class cabinet {
constructor(options){
this.options= options;
// 房间场景
this.scene = options.scene;
this.camera = options.camera;
// 机柜各个面相对于0,0,0的坐标 坐标参数 x y z
this.position = {x:0,y:0,z:0};
// 机柜位置及旋转参数
this.cabPosition =options.cabPosition || {x:0,y:0,z:0,rotatex:0,rotatey:0,rotatez:0}
// 机柜参数
this.cabinetObj = options.cabinetObj || defultCabinetObj;
// 机柜编号
this.cabId = options.cabId;
// 机柜状态
this.status = options.status || 0;
// 剩余槽位
this.cabSlot = options.slot || 42;
//优化 从外部创建一次传入 不重复创建
this.cabinetbgMaterial = options.cabinetbgMaterial;
}
//接收外部传入的材质
setMaterial(arg){
this.cabinetbgMaterial = arg;
}
create(){
// 柜子的组
let cabGroup = new THREE.Group();
/**
*
* 创建柜子顶板 底板
*/
let bottomGeometry = new THREE.BoxGeometry(this.cabinetObj.w+basicParameters.thickness*2, basicParameters.thickness,this.cabinetObj.z + basicParameters.thickness*2);
let bottomGLmaterial = this.cabinetbgMaterial.topBan;
let bottom = new THREE.Mesh(bottomGeometry,bottomGLmaterial);
/**
*
* 创建柜子左 右竖板
*/
let riserLGeometry = new THREE.BoxGeometry(basicParameters.thickness, this.cabinetObj.h,this.cabinetObj.z);
let materialsbg = [];
for (let i = 0; i < riserLGeometry.faces.length / 2; i += 1) {
let material
if(i===4){
material = this.cabinetbgMaterial.leftBan[0];
}else{
material = this.cabinetbgMaterial.leftBan[1];
}
materialsbg[i] = material
}
let riserL = new THREE.Mesh(riserLGeometry,materialsbg);
let riserX = this.position.x <0?this.position.x + this.cabinetObj.w/2 + basicParameters.thickness/2:this.position.x - this.cabinetObj.w/2 - basicParameters.thickness/2
riserL.position.set(riserX,this.position.y,this.position.z)
let riserR = riserL.clone();
// 右挡板的位置
let riserRX = this.position.x < 0 ? riserL.position.x - this.cabinetObj.w + basicParameters.thickness*1.5:riserL.position.x + this.cabinetObj.w + basicParameters.thickness
riserR.position.set(riserRX,riserL.position.y,riserL.position.z)
riserL.name="riserL"
riserR.name="riserR"
cabGroup.add(riserL,riserR);
let bootomX = this.position.x<0 ? this.position.x:this.position.x
let bootomZ = this.position.z < 0? this.position.z :this.position.z
let bootomY = this.position.y <0?this.position.y - this.cabinetObj.h/2 : this.position.y - this.cabinetObj.h/2
bottom.position.set(bootomX,bootomY,bootomZ)
let roof = bottom.clone();
roof.position.set(bootomX,bootomY + this.cabinetObj.h + basicParameters.thickness/2,bootomZ)
bottom.name="bottom"
roof.name="roof"
cabGroup.add(bottom,roof);
/**
*
*创建柜子后板
*/
let rearGeometryH = new THREE.BoxGeometry(this.cabinetObj.w + basicParameters.thickness*2,this.cabinetObj.h,basicParameters.thickness);
let materialsbgH = [];
for (let i = 0; i < rearGeometryH.faces.length / 2; i += 1) {
let material
if(i===0 || i ===1){
material = this.cabinetbgMaterial.rearBan[0];
}else{
material = this.cabinetbgMaterial.rearBan[1];
}
materialsbgH[i] = material
}
let rearZ= this.position.z<0?this.position.z + this.cabinetObj.z/2 + basicParameters.thickness/2 :this.position.z - this.cabinetObj.z/2 - basicParameters.thickness/2
//let rearX= this.position.x<0?this.position.x+ this.cabinetObj.w/2 + basicParameters.thickness/2:this.position.x - this.cabinetObj.w/2 - basicParameters.thickness/2
let rear = new THREE.Mesh(rearGeometryH,materialsbgH);
rear.position.set(this.position.x,this.position.y,rearZ);
rear.name="rear"
cabGroup.add(rear)
/**
*
*创建机柜门 见下一篇
*/