From 132b5931afa5e296abb4d7d0b3cba715eb976697 Mon Sep 17 00:00:00 2001 From: ChenX Date: Wed, 19 May 2021 11:28:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=E9=81=BF=E5=85=8D=E5=8D=A0?= =?UTF-8?q?=E4=BD=8D=E7=A9=BA=E9=97=B4=E8=A2=ABPU?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/Purge.ts | 29 +++++++++++++++---- .../Template/TemplateRecord.ts | 5 ++++ .../RightPanel/TemplateParamPanel.tsx | 3 +- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/Add-on/Purge.ts b/src/Add-on/Purge.ts index 68a673bca..0ce876a2f 100644 --- a/src/Add-on/Purge.ts +++ b/src/Add-on/Purge.ts @@ -2,6 +2,7 @@ import { Intent } from "@blueprintjs/core"; import { app } from "../ApplicationServices/Application"; import { arrayRemoveIf } from "../Common/ArrayExt"; import { Database } from "../DatabaseServices/Database"; +import { Entity } from "../DatabaseServices/Entity/Entity"; import { Command } from "../Editor/CommandMachine"; import { TempEditor } from "../Editor/TempEditor"; import { AppToaster } from "../UI/Components/Toaster"; @@ -58,15 +59,31 @@ export function Purge(db: Database): void if (isErase) e.GoodBye(); return isErase; }); - arrayRemoveIf(db.TemplateTable.Objects, e => + + //应该避免占位空间被PU(占位空间内没有实体,也没有子层) + arrayRemoveIf(db.TemplateTable.Objects, t => { - if (!e || e.IsErase) return true; - e.Purge(); - if (e.AllEntitys.length === 0) + if (!t || t.IsErase) return true; + + let allEnts: Entity[] = []; + t.Traverse(ct => { - e.Erase(); + for (let id of ct.Objects) + { + if (id.Object) + allEnts.push(id.Object as Entity); + } + }); + + if (allEnts.length && allEnts.every(e => e.IsErase)) + { + t.Erase(); + t.Traverse(ct => ct.Erase());//PU所有子层 return true; - }; + } + + //否则PU本层 + t.Purge(); }); //再次清理,避免子模块没了之后,父模块还引用它 diff --git a/src/DatabaseServices/Template/TemplateRecord.ts b/src/DatabaseServices/Template/TemplateRecord.ts index c76b2159f..6ebf0c28b 100644 --- a/src/DatabaseServices/Template/TemplateRecord.ts +++ b/src/DatabaseServices/Template/TemplateRecord.ts @@ -122,6 +122,11 @@ export class TemplateRecord extends SymbolTableRecord return (this.Parent?.Object)?.Root ?? this; } + get IsRoot() + { + return this._Parent === undefined; + } + get Entitys() { return this.Objects.map(o => o.Object as Entity); diff --git a/src/UI/Components/RightPanel/TemplateParamPanel.tsx b/src/UI/Components/RightPanel/TemplateParamPanel.tsx index f3ebe70ba..1400c1a33 100644 --- a/src/UI/Components/RightPanel/TemplateParamPanel.tsx +++ b/src/UI/Components/RightPanel/TemplateParamPanel.tsx @@ -676,8 +676,7 @@ export class TemplateParamDetail extends React.Component<{}> { <>
{ - this.store.GetCurrentTemplate() !== this.store.GetCurrentTemplate().Root && - this.RenderPositionRotateionParams() + !this.store.GetCurrentTemplate().IsRoot && this.RenderPositionRotateionParams() }