!2160 优化:修改板件凹槽属性的实体更新性能,避免重复更新

pull/2162/head
林三 2 years ago committed by ChenX
parent 40700796fe
commit 89f02f4662

@ -3,17 +3,18 @@ import { observable } from "mobx";
import { observer } from "mobx-react";
import React from "react";
import { app } from "../../ApplicationServices/Application";
import { safeEval } from "../../Common/eval";
import { KeyBoard } from "../../Common/KeyEnum";
import { UpdateDraw } from "../../Common/Status";
import { safeEval } from "../../Common/eval";
import { Board } from "../../DatabaseServices/Entity/Board";
import { Entity } from "../../DatabaseServices/Entity/Entity";
import { ExtrudeSolid } from "../../DatabaseServices/Entity/Extrude";
import { CommandWrap } from "../../Editor/CommandMachine";
import { ICommonOptionProps } from "../../UI/Components/Board/CommonBoardOption";
import { CommonModal } from "../../UI/Components/Modal/ModalContainer";
import "./groove.less";
import { GrooveInfo } from "./GrooveInfo";
import { GroovesModal } from "./GroovesModal";
import "./groove.less";
interface BoardProps
{
@ -60,7 +61,7 @@ export class GroovesModifyModal extends React.Component<BoardProps, ICommonOptio
}
//各部分 手动修改
_ModifyOfPart(grooves: GrooveInfo[][], inputEls: React.RefObject<any>[][])
_ModifyOfPart(grooves: GrooveInfo[][], inputEls: React.RefObject<any>[][], needUpdateEnts: Set<Entity>)
{
let i = 0;
for (let gs of grooves)
@ -82,9 +83,9 @@ export class GroovesModifyModal extends React.Component<BoardProps, ICommonOptio
g.groove.KnifeRadius = parseFloat(inputEls[i][3].current.value);
if (g.isRelation)//如果是关联切割 更新另一个实体时也会更新我们自身(通过反应器)
g.groove.Update(UpdateDraw.None);
needUpdateEnts.add(g.groove); //g.groove.Update(UpdateDraw.None);
else
g.parentBoard.Update();
needUpdateEnts.add(g.parentBoard); //g.parentBoard.Update();
}
i++;
}
@ -92,7 +93,7 @@ export class GroovesModifyModal extends React.Component<BoardProps, ICommonOptio
}
//打钩的部分参与批量修改
_ModifyOfCheck = (e: GrooveInfo[][]) =>
_ModifyOfCheck = (e: GrooveInfo[][], needUpdateEnts: Set<Entity>) =>
{
for (let grooves of e)
for (let gs of grooves)
@ -111,9 +112,9 @@ export class GroovesModifyModal extends React.Component<BoardProps, ICommonOptio
gs.groove.KnifeRadius = parseFloat(this._InputEl4.current.value);
if (gs.isRelation)//如果是关联切割 更新另一个实体时也会更新我们自身(通过反应器)
gs.groove.Update(UpdateDraw.None);
needUpdateEnts.add(gs.groove); //gs.groove.Update(UpdateDraw.None);
else
gs.parentBoard.Update();
needUpdateEnts.add(gs.parentBoard); //gs.parentBoard.Update();
}
};
@ -121,12 +122,23 @@ export class GroovesModifyModal extends React.Component<BoardProps, ICommonOptio
{
await CommandWrap(() =>
{
this._ModifyOfPart(this._GrooveInfo, this._InputEls); //先遍历执行 手动修改过的值
let needUpdateEnts = new Set<Entity>; //更新
this._ModifyOfPart(this._GrooveInfo, this._InputEls, needUpdateEnts); //先遍历执行 手动修改过的值
if (this._InputEl1.current.value || this._InputEl2.current.value || this._InputEl3.current.value || this._InputEl4.current.value)
{
this._ModifyOfCheck(this._GrooveInfo); //再修改打勾部分(打勾为批量修改 打勾部分的凹槽值改成 底下批量修改输入框里面的值)
this._ModifyOfCheck(this._GrooveInfo, needUpdateEnts); //再修改打勾部分(打勾为批量修改 打勾部分的凹槽值改成 底下批量修改输入框里面的值)
}
for (let ent of needUpdateEnts)
{
if (ent instanceof Board)
ent.Update();
else
ent.Update(UpdateDraw.None);
}
}, "修改属性");
app.Editor.ModalManage.Destory();
};

Loading…
Cancel
Save