From 5d76303aaca225c90c31a35a50c23be89ea3433a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E4=B8=89?= <940119273@qq.com> Date: Thu, 14 Apr 2022 08:48:46 +0000 Subject: [PATCH] =?UTF-8?q?!1860=20=E4=BF=AE=E5=A4=8D:=E9=83=A8=E5=88=86?= =?UTF-8?q?=E9=97=A8=E6=9D=BF=E9=9A=90=E8=97=8F=E9=94=99=E8=AF=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/Door/door.test.ts | 26 ++++++++ __test__/Door/door_test.json | 1 + src/Add-on/HideSelect/HideSelectUtils.ts | 29 +++++---- src/Add-on/HideSelected.ts | 83 +++++++++++++----------- 4 files changed, 87 insertions(+), 52 deletions(-) create mode 100644 __test__/Door/door.test.ts create mode 100644 __test__/Door/door_test.json diff --git a/__test__/Door/door.test.ts b/__test__/Door/door.test.ts new file mode 100644 index 000000000..9e0daac54 --- /dev/null +++ b/__test__/Door/door.test.ts @@ -0,0 +1,26 @@ +import { IsDoor } from "../../src/Add-on/HideSelect/HideSelectUtils"; +import { CADFiler } from "../../src/DatabaseServices/CADFiler"; +import { Database } from "../../src/DatabaseServices/Database"; +import { Board } from "../../src/DatabaseServices/Entity/Board"; +import { BoardOpenDir } from "../../src/UI/Store/BoardInterface"; +import { LoadBoardsFromFileData } from "../Utils/LoadEntity.util"; +LoadBoardsFromFileData; + +test('校验门板类型', () => +{ + let data = require("./door_test.json"); + let file = new CADFiler(data); + let db = new Database(); + db.FileRead(file); + let ents = db.ModelSpace.Entitys; + for (let ent of ents) + { + expect(IsDoor(ent)).toBe(true); + } + + //根据开门方向判断是门板 + let br = new Board; + expect(IsDoor(br)).toBe(false); + br.OpenDir = BoardOpenDir.Left; + expect(IsDoor(br)).toBe(true); +}); diff --git a/__test__/Door/door_test.json b/__test__/Door/door_test.json new file mode 100644 index 000000000..dc9107b20 --- /dev/null +++ b/__test__/Door/door_test.json @@ -0,0 +1 @@ +[8,108,1,2,1,false,0,1,"",2,2,false,0,1,"Board",8,2,107,false,1,6,103,[1,0,0,0,0,0,1,0,0,-1,0,0,2308.521748878178,18,1866.1599253723398,1],106,0,true,[1,0,0,0,0,1,0,0,0,0,1,0,2308.521748878178,18,1901.1599253723398,1],0,3,1720,433,18,true,"Polyline",8,2,0,false,0,7,0,[1,0,0,0,0,1,0,0,0,0,1,0,0,35,0,1],0,0,true,[1,0,0,0,0,1,0,0,0,0,1,0,0,35,0,1],0,2,4,[0,-35],0,[433,-35],0,[433,1685],0,[0,1685],0,true,0,3,0,0,0,0,0,10,2,"左开门板","","①主卧衣柜","18厘 (=欧松板=) 星空灰","(=欧松板=)","星空灰",0,0,"不排",2,0,"1","1","1","1","","","",4,"不排","不排","不排","不排",true,true,1,"jl-无盖铰链","X:0 Y:100,600,1155,1655",0,0,0,0,0,0,1,true,0,0,2,4,false,0,2,4,"TextureTableRecord",2,70,false,4,1,"",2,1002,1002,1,1,0,"",0,0,"TextureTableRecord",2,100,false,4,1,"4B7F9FCF-9404-4A6E-83D6-63C361B0F99C",2,1002,1002,1,1,0,"CAD/images/a2/a2bcece667cc062484723db4a41c98e4.jpg",0,0,"TextureTableRecord",2,101,false,4,1,"FFAF5616-0199-46D2-8A6D-7601E4137C21",2,1002,1002,1,1,0,"CAD/images/35/35c5bfc1f3cb4fbec9d958669bd6be3e.png",0,0,"TextureTableRecord",2,102,false,4,1,"A1E1264A-5920-482D-A4D2-905522C1B8E9",2,1002,1002,1,1,0,"CAD/images/35/35c5bfc1f3cb4fbec9d958669bd6be3e.png",0,0,2,3,false,0,2,2,"PhysicalMaterialRecord",2,71,false,3,1,"默认",9,"#ffffff",false,0,1,true,70,70,0,70,0.2,true,true,true,"","","",false,0,0.5,0.5,0.5,0,0,0,1,1,1,1,0.3,1,0,1,1,1,1,1,1,1,1,1,1,0,"木纹","",1,1,0,0,0,"PhysicalMaterialRecord",2,103,false,3,1,"【墙】莫兰迪灰",9,"#ffffff",false,0,1,true,100,101,0.1,102,1,true,true,true,"【墙】莫兰迪灰","【墙】莫兰迪灰","【墙】莫兰迪灰",false,0,0.5,0.5,0.5,0,0,0,1,1,1,1,0.3,1,0,1,1,1,1,1,1,1,1,1,1,0,"木纹","",1,1,0,0,0,1,0,1,"CommandHistoryRecord",1,"TT",0,2,5,false,0,1,"TemplateSizeBoard",3,2,106,false,5,1,"门板",0,0,0,10,"TemplateParam",2,"L","_L+_ZG+_YG",433,null,"宽",1,null,null,null,0,false,"TemplateParam",2,"W","_W",18,null,"深",1,null,null,null,0,false,"TemplateParam",2,"H","_H+_SG+_XG",1720,null,"高",1,null,null,null,0,false,"TemplateParam",2,"PX","",0,null,null,1,null,null,null,0,false,"TemplateParam",2,"PY","",0,null,null,1,null,null,null,0,false,"TemplateParam",2,"PZ","",0,null,null,1,null,null,null,0,false,"TemplateParam",2,"RX","",0,null,null,1,null,null,null,0,false,"TemplateParam",2,"RY","",0,null,null,1,null,null,null,0,false,"TemplateParam",2,"RZ","",0,null,null,1,null,null,null,0,false,"TemplateParam",2,"BH","",18,null,"板厚",1,null,null,null,0,false,1,107,"",-1,1,2,6,false,0,0,1,2,7,false,0,1,"",2,8,false,0,3,"AmbientLight",8,2,80,false,7,7,0,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],0,0,true,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],0,2,"rgb(255,255,255)",0.9,true,1,1,1,6500,1,1,false,"DirectionalLight",8,2,81,false,7,7,0,[1,0,0,0,0,1,0,0,0,0,1,0,4000,-4000,4000,1],0,0,true,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],0,2,"rgb(255,255,255)",50,false,1,1,1,6500,1,0,true,2,[0,0,0],0.5357,0,"HemisphereLight",8,2,82,false,7,7,0,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],0,0,true,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],0,2,"rgb(255,255,255)",1,true,1,1,1,6500,1,1,true,2,[1,1,1],false,1,2,9,false,0,0,1,2,10,false,0,1,"",2,11,false,0,0,0] \ No newline at end of file diff --git a/src/Add-on/HideSelect/HideSelectUtils.ts b/src/Add-on/HideSelect/HideSelectUtils.ts index fa577259e..d60bd8204 100644 --- a/src/Add-on/HideSelect/HideSelectUtils.ts +++ b/src/Add-on/HideSelect/HideSelectUtils.ts @@ -13,18 +13,17 @@ export function IsDoor(en: Entity) if (en.Template) { let temp = en.Template.Object as TemplateRecord; - return ((temp?.Parent?.Object as TemplateRecord)?.Name === "门板空间"); + if (((temp?.Parent?.Object as TemplateRecord)?.Name === "门板空间")) + return true; } - else + // else //有时候 模块会被破坏,所以模块检测不是唯一标准 + if (en instanceof Board) { - if (en instanceof Board) - { - return en.OpenDir !== BoardOpenDir.None; - } - else if (en instanceof HardwareCompositeEntity) - { - return en.HardwareOption.model.includes("开门"); - } + return en.OpenDir !== BoardOpenDir.None; + } + else if (en instanceof HardwareCompositeEntity) + { + return en.HardwareOption.model.includes("开门"); } return false; } @@ -63,9 +62,10 @@ export function IsHandle(en: Entity) if (en.Template) { let temp = en.Template.Object as TemplateRecord; - return ((temp?.Parent?.Object as TemplateRecord)?.Name === "拉手空间"); + if ((temp?.Parent?.Object as TemplateRecord)?.Name === "拉手空间") + return true; } - else + // else //有时候 模块会被破坏,所以模块检测不是唯一标准 { return en.HardwareOption.name.includes("拉手"); } @@ -78,9 +78,10 @@ export function IsHinge(en: Entity) if (en.Template) { let temp = en.Template.Object as TemplateRecord; - return ((temp?.Parent?.Object as TemplateRecord)?.Name === "铰链空间"); + if ((temp?.Parent?.Object as TemplateRecord)?.Name === "铰链空间") + return true; } - else + // else //有时候 模块会被破坏,所以模块检测不是唯一标准 { return en.HardwareOption.name.includes("铰链"); } diff --git a/src/Add-on/HideSelected.ts b/src/Add-on/HideSelected.ts index ba11f367e..cc46d1573 100644 --- a/src/Add-on/HideSelected.ts +++ b/src/Add-on/HideSelected.ts @@ -10,8 +10,8 @@ import { PromptStatus } from "../Editor/PromptResult"; import { SelectSetBase } from "../Editor/SelectBase"; import { CheckFilter } from "../Editor/SelectFilter"; import { HideSelectModal } from "../UI/Components/Modal/HideSelectModal"; -import { BoardOpenDir } from "../UI/Store/BoardInterface"; import { hideSelectStore } from "../UI/Store/HideSelectStore"; +import { IsDoor, IsHinge } from "./HideSelect/HideSelectUtils"; export class Command_HideSelected implements Command { @@ -133,56 +133,63 @@ export class Command_SwitchDoor implements Command { if (!en || DoorCache.has(en.Id.Index)) continue; if (en.IsErase) continue; - if (!en.Template) + + if (IsDoor(en)) { - if (en instanceof Board) + ens.push(en); + let temp = en.Template?.Object as TemplateRecord; + if (!temp) continue; + let doorSpaceTemp = temp.Parent?.Object as TemplateRecord;; + if (doorSpaceTemp) { - if (en.OpenDir !== BoardOpenDir.None) + for (let id of doorSpaceTemp.Children) { - ens.push(en); + if (!id || id.IsErase) continue; + let temp = id.Object as TemplateRecord; + if (temp.Name === "铰链空间") + { + ToggleChildren(temp); + } + else + { + ToggleObject(temp); + for (let cid of temp.Children) + { + let temp = cid?.Object as TemplateRecord; + if (temp?.Name === "拉手空间") + { + ToggleChildren(temp); + } + } + } } } - else if (en instanceof HardwareCompositeEntity) + else { - if (en.HardwareOption.model.endsWith("开门板") - || en.HardwareOption.name.includes("铰链") - || en.HardwareOption.name.includes("拉手")) + for (let id of temp.Children) { - ens.push(en); - } - } - continue; - } - - let temp = en.Template.Object as TemplateRecord; - - if ((temp?.Parent?.Object as TemplateRecord)?.Name === "门板空间") - { - DoorCache.add(en.Id.Index); - ens.push(en); - let doorSpaceTemp = temp.Parent.Object as TemplateRecord;; - - for (let id of doorSpaceTemp.Children) - { - if (!id || id.IsErase) continue; - let temp = id.Object as TemplateRecord; - if (temp.Name === "铰链空间") - { - ToggleChildren(temp); + if (!id || id.IsErase) continue; + let childrenTemp = id.Object as TemplateRecord; + if (childrenTemp.Name === "拉手空间") + { + ToggleChildren(childrenTemp); + } } - else + if (en instanceof Board) { - ToggleObject(temp); - for (let cid of temp.Children) + for (let hinge of en.RelativeHardware) { - let temp = cid?.Object as TemplateRecord; - if (temp?.Name === "拉手空间") - { - ToggleChildren(temp); - } + let hardWare = hinge.Object as HardwareCompositeEntity; + if (IsHinge(hardWare)) + ens.push(hardWare); } } + else if (en instanceof HardwareCompositeEntity) + { + //复合门板待开发 + } } + } }