!1898 开发:清理

pull/1895/MERGE
林三 2 years ago committed by ChenX
parent 7e6cc5e348
commit 2f97fc18a9

@ -39,17 +39,17 @@ export class Command_OpenCabinet implements Command
}); });
return; return;
} }
let OK = false; let canOpen = false;
let DrawerEns: Entity[] = []; let drawerEns: Entity[] = [];
let DoorEns: Entity[] = []; let doorEns: Entity[] = [];
let DoorGroups: Entity[][] = []; let doorGroups: Entity[][] = [];
while (!OK) while (!canOpen)
{ {
if (this._MoveDrawerObjs.length > 0 || this._MoveDoorObjs.length > 0) //判断之前是否开过门板、抽屉 if (this._MoveDrawerObjs.length > 0 || this._MoveDoorObjs.length > 0) //判断之前是否开过门板、抽屉
{ {
Log("关闭门板、抽屉"); Log("关闭门板、抽屉");
OK = true; canOpen = true;
} }
else else
{ {
@ -71,24 +71,24 @@ export class Command_OpenCabinet implements Command
let holes: Entity[] = []; let holes: Entity[] = [];
for (let ent of ss.SelectSet.SelectEntityList) for (let ent of ss.SelectSet.SelectEntityList)
if (IsDoor(ent) && ent.Template) if (IsDoor(ent) && ent.Template)
DoorEns.push(ent); doorEns.push(ent);
else if (IsHandle(ent)) else if (IsHandle(ent))
handles.push(ent); handles.push(ent);
else if (IsDrawer(ent) || IsLattice(ent)) else if (IsDrawer(ent) || IsLattice(ent))
DrawerEns.push(ent); drawerEns.push(ent);
else if (ent instanceof Hole) else if (ent instanceof Hole)
holes.push(ent); holes.push(ent);
//拉手、排钻 绑定门板 获得门板组 二维刀路 //拉手、排钻 绑定门板 获得门板组 二维刀路
this.GetDoorGroups(DoorEns, handles, holes, DoorGroups); this.GetDoorGroups(doorEns, handles, holes, doorGroups);
//门板组 设置旋转方向 旋转点 //门板组 设置旋转方向 旋转点
this.SetDoorGroupRotate(DoorGroups); this.SetDoorGroupRotate(doorGroups);
let boxDrawerMap: Map<Box3, Entity[]> = new Map(); let boxDrawerMap: Map<Box3, Entity[]> = new Map();
//拉手、排钻 绑定抽屉 获取抽屉组 //拉手、排钻 绑定抽屉 获取抽屉组
this.GetDrawerMap(DrawerEns, handles, holes, boxDrawerMap); this.GetDrawerMap(drawerEns, handles, holes, boxDrawerMap);
//抽屉组 设置方向 //抽屉组 设置方向
this.SetDrawerDirection(boxDrawerMap); this.SetDrawerDirection(boxDrawerMap);
@ -96,10 +96,10 @@ export class Command_OpenCabinet implements Command
if (this._MoveDoorObjs.length === 0 && this._MoveDrawerObjs.length === 0) return; if (this._MoveDoorObjs.length === 0 && this._MoveDrawerObjs.length === 0) return;
this.DoMove(OK); //动起来 this.DoMove(canOpen); //动起来
//开启门板抽屉后,限制使用其他功能, //开启门板抽屉后,限制使用其他功能,
while (!OK) while (!canOpen)
{ {
userConfig.isOpenCabinet = true; userConfig.isOpenCabinet = true;
AppToaster.show({ AppToaster.show({
@ -134,11 +134,11 @@ export class Command_OpenCabinet implements Command
} }
} }
private GetDrawerMap(DrawerEns: Entity[], handles: Entity[], holes: Entity[], boxDrawerMap: Map<Box3, Entity[]>) private GetDrawerMap(drawerEns: Entity[], handles: Entity[], holes: Entity[], boxDrawerMap: Map<Box3, Entity[]>)
{ {
for (let i = 0; i < DrawerEns.length; i++) for (let i = 0; i < drawerEns.length; i++)
{ {
let ens = DrawerEns[i].Template.Object as TemplateRecord; let ens = drawerEns[i].Template.Object as TemplateRecord;
while (ens.Name !== "抽屉空间" && ens.Name !== "格子抽") while (ens.Name !== "抽屉空间" && ens.Name !== "格子抽")
{ {
if (ens.Parent) if (ens.Parent)
@ -154,8 +154,8 @@ export class Command_OpenCabinet implements Command
for (let en of ens.AllEntitys) for (let en of ens.AllEntitys)
{ {
//删除重复节省资源 //删除重复节省资源
if (DrawerEns.includes(en) && DrawerEns[i] !== en) if (drawerEns.includes(en) && drawerEns[i] !== en)
DrawerEns.splice(DrawerEns.indexOf(en), 1); drawerEns.splice(drawerEns.indexOf(en), 1);
else if (handles.includes(en)) else if (handles.includes(en))
handles.splice(handles.indexOf(en), 1); handles.splice(handles.indexOf(en), 1);
else if (holes.includes(en)) else if (holes.includes(en))
@ -196,17 +196,17 @@ export class Command_OpenCabinet implements Command
} }
} }
private GetDoorGroups(DoorEns: Entity[], handles: Entity[], holes: Entity[], DoorGroups: Entity[][]) private GetDoorGroups(doorEns: Entity[], handles: Entity[], holes: Entity[], doorGroups: Entity[][])
{ {
for (let i = 0; i < DoorEns.length; i++) for (let i = 0; i < doorEns.length; i++)
{ {
let ens = DoorEns[i].Template.Object as TemplateRecord; let ens = doorEns[i].Template.Object as TemplateRecord;
let doorGroup: Entity[] = ens.Entitys; let doorGroup: Entity[] = ens.Entitys;
for (let en of ens.Entitys) for (let en of ens.Entitys)
{ {
//删除重复节省资源 //删除重复节省资源
if (DoorEns.includes(en) && DoorEns[i] !== en) if (doorEns.includes(en) && doorEns[i] !== en)
DoorEns.splice(DoorEns.indexOf(en), 1); doorEns.splice(doorEns.indexOf(en), 1);
else if (handles.includes(en)) else if (handles.includes(en))
handles.splice(handles.indexOf(en), 1); handles.splice(handles.indexOf(en), 1);
else if (holes.includes(en)) else if (holes.includes(en))
@ -219,7 +219,7 @@ export class Command_OpenCabinet implements Command
//手动添加的把手跟随门板 //手动添加的把手跟随门板
arrayRemoveIf(handles, (handle) => IsEntityBelongToDoor(enBox, ocsInv, doorGroup, handle)); arrayRemoveIf(handles, (handle) => IsEntityBelongToDoor(enBox, ocsInv, doorGroup, handle));
} }
DoorGroups.push(doorGroup); doorGroups.push(doorGroup);
} }
function IsEntityBelongToDoor(enBox: Box3Ext, ocsInv: Matrix4, doorGroup: Entity[], en: Entity) function IsEntityBelongToDoor(enBox: Box3Ext, ocsInv: Matrix4, doorGroup: Entity[], en: Entity)
@ -234,9 +234,9 @@ export class Command_OpenCabinet implements Command
} }
} }
private DoMove(OK: boolean) private DoMove(canOpen: boolean)
{ {
let dis = OK ? -1 : 1; let dis = canOpen ? -1 : 1;
this._Timer = setInterval(() => this._Timer = setInterval(() =>
{ {
if (this._Count === MOVECOUNT) if (this._Count === MOVECOUNT)
@ -244,7 +244,7 @@ export class Command_OpenCabinet implements Command
clearInterval(this._Timer); clearInterval(this._Timer);
this._Timer = undefined; this._Timer = undefined;
this._Count = 0; this._Count = 0;
if (OK) if (canOpen)
{ {
this._MoveDoorObjs.length = 0; this._MoveDoorObjs.length = 0;
this._MoveDrawerObjs.length = 0; this._MoveDrawerObjs.length = 0;
@ -302,19 +302,19 @@ export class Command_OpenCabinet implements Command
obj.updateMatrixWorld(true); obj.updateMatrixWorld(true);
} }
private SetDoorGroupRotate(DoorGroups: Entity[][]) private SetDoorGroupRotate(doorGroups: Entity[][])
{ {
let boxDoorMap: Map<Box3, Entity[]> = new Map(); let boxDoorMap: Map<Box3, Entity[]> = new Map();
if (DoorGroups.length > 0) if (doorGroups.length > 0)
{ {
for (let i = 0; i < DoorGroups.length; i++) for (let i = 0; i < doorGroups.length; i++)
{ {
let osc = (DoorGroups[i][0] as Entity).SpaceOCSInv; let osc = (doorGroups[i][0] as Entity).SpaceOCSInv;
let brBox = new Box3; let brBox = new Box3;
for (let en of DoorGroups[i]) for (let en of doorGroups[i])
if ((!IsHandle(en) || en instanceof Hole) && !(en instanceof Curve)) //门把手不记录box 影响旋转点 但跟随旋转 (AllEntity中包含曲线类型需要过滤) if ((!IsHandle(en) || en instanceof Hole) && !(en instanceof Curve)) //门把手不记录box 影响旋转点 但跟随旋转 (AllEntity中包含曲线类型需要过滤)
brBox.union((en as Entity).GetBoundingBoxInMtx(osc)); brBox.union((en as Entity).GetBoundingBoxInMtx(osc));
boxDoorMap.set(brBox, DoorGroups[i]); boxDoorMap.set(brBox, doorGroups[i]);
} }
for (let [box, br] of boxDoorMap) for (let [box, br] of boxDoorMap)

Loading…
Cancel
Save