From f3ac09c07f8de2bbaaa51e4ab5bc7fb27fff52d8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9E=97=E4=B8=89?= <940119273@qq.com>
Date: Tue, 25 Apr 2023 09:14:47 +0000
Subject: [PATCH] =?UTF-8?q?!2087=20=E4=BC=98=E5=8C=96:=E6=A0=B9=E6=8D=AE?=
=?UTF-8?q?=E6=9D=BF=E6=9D=90=E4=BF=AE=E6=94=B9=E9=A2=9C=E8=89=B2,?=
=?UTF-8?q?=E5=8F=AF=E9=85=8D=E6=9D=BF=E6=9D=90=E5=90=8D=E3=80=81=E9=A2=9C?=
=?UTF-8?q?=E8=89=B2=E3=80=81=E6=9D=BF=E5=8E=9A=E5=BA=A6=E7=AD=89=E9=83=BD?=
=?UTF-8?q?=E4=B8=80=E8=87=B4=20=20#242?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../BoardInfoSelectPanel.less | 14 ++
.../BoardInfoSelectPanel.tsx | 88 ++++++++++++
.../CalcBrThicknessConfigStore.ts | 36 +++++
.../ChangeColorByMaterial.tsx} | 135 +++++++-----------
src/Editor/CommandRegister.ts | 2 +-
src/Editor/DefaultConfig.ts | 11 +-
src/UI/Components/Board/BoardModalType.ts | 2 +-
.../Modal/ModalStyle/BoardModal.less | 13 ++
.../Modal/ModalStyle/DrillModal.less | 2 +-
src/UI/Store/BoardInterface.ts | 8 ++
10 files changed, 221 insertions(+), 90 deletions(-)
create mode 100644 src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.less
create mode 100644 src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.tsx
create mode 100644 src/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.ts
rename src/Add-on/{ChangeColorByBoardMaterial.tsx => ChangeColorByBoard/ChangeColorByMaterial.tsx} (52%)
diff --git a/src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.less b/src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.less
new file mode 100644
index 000000000..94d82e925
--- /dev/null
+++ b/src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.less
@@ -0,0 +1,14 @@
+#BoardInfoSelectPanel{
+ .bp3-dialog-body{
+ padding: 10px 20px 0 20px;
+ background-color: white;
+
+ label{
+ width: fit-content;
+ }
+ }
+
+ .bp3-dialog-footer{
+ background-color: white;
+ }
+}
\ No newline at end of file
diff --git a/src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.tsx b/src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.tsx
new file mode 100644
index 000000000..3ee8360d2
--- /dev/null
+++ b/src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.tsx
@@ -0,0 +1,88 @@
+import { Button, Checkbox, Classes, Icon, Intent } from "@blueprintjs/core";
+import { observer } from "mobx-react";
+import React from "react";
+import { begin } from "xaop";
+import { app } from "../../ApplicationServices/Application";
+import { KeyBoard } from "../../Common/KeyEnum";
+import { BoardModalType } from "../../UI/Components/Board/BoardModalType";
+import { Config_ModalType, UserConfigComponent } from "../../UI/Components/Board/UserConfigComponent";
+import "./BoardInfoSelectPanel.less";
+import { ChangeColorByBoardMaterialStore } from "./CalcBrThicknessConfigStore";
+
+@observer
+export class BoardInfoSelectPanel extends React.Component<{ store: ChangeColorByBoardMaterialStore; }, {}>
+{
+ _RemoveFun: Function;
+
+ componentDidMount()
+ {
+ this._RemoveFun = begin(app.Editor.ModalManage, app.Editor.ModalManage.OnKeyDown, (e: KeyboardEvent) =>
+ {
+ if (e.keyCode === KeyBoard.Enter || e.keyCode === KeyBoard.Space)
+ app.Editor.ModalManage.Destory();
+ e.stopPropagation();
+ });
+ }
+
+ componentWillUnmount()
+ {
+ if (this._RemoveFun) this._RemoveFun();
+ }
+
+ render()
+ {
+ const option = this.props.store.m_Option;
+
+ return (
+
+
+
+
+
根据板材修改颜色
+
+
+ { option.accordMaterial = !option.accordMaterial; }}
+ />
+ { option.accordMaterialName = !option.accordMaterialName; }}
+ />
+ { option.accordMaterialColor = !option.accordMaterialColor; }}
+ />
+ { option.accordThickness = !option.accordThickness; }}
+ />
+
+
+
+
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/src/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.ts b/src/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.ts
new file mode 100644
index 000000000..3fd4c8b7e
--- /dev/null
+++ b/src/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.ts
@@ -0,0 +1,36 @@
+import { observable, toJS } from "mobx";
+import { DefaultChangeColorByBoardMaterialOption } from "../../Editor/DefaultConfig";
+import { IConfigOption } from "../../UI/Components/Board/UserConfigComponent";
+import { ChangeColorByBoardMaterialOption } from "../../UI/Store/BoardInterface";
+import { IConfigStore } from "../../UI/Store/BoardStore";
+
+export class ChangeColorByBoardMaterialStore implements IConfigStore
+{
+ @observable configName = "默认";
+ SaveConfig()
+ {
+ //新的配置
+ let newConfig: IConfigOption = {};
+ newConfig.option = toJS(this.m_Option);
+ return newConfig;
+ };
+ //板数据
+ @observable m_Option: ChangeColorByBoardMaterialOption = { ...DefaultChangeColorByBoardMaterialOption };
+ @observable configsNames: string[] = [];
+ InitOption()
+ {
+ Object.assign(this.m_Option, DefaultChangeColorByBoardMaterialOption);
+ }
+ UpdateOption(cof: IConfigOption)
+ {
+ Object.assign(this.m_Option, cof.option);
+ }
+
+ private static _SingleInstance: ChangeColorByBoardMaterialStore;
+ static GetInstance(): ChangeColorByBoardMaterialStore
+ {
+ if (this._SingleInstance) return this._SingleInstance;
+ this._SingleInstance = new ChangeColorByBoardMaterialStore;
+ return this._SingleInstance;
+ }
+}
diff --git a/src/Add-on/ChangeColorByBoardMaterial.tsx b/src/Add-on/ChangeColorByBoard/ChangeColorByMaterial.tsx
similarity index 52%
rename from src/Add-on/ChangeColorByBoardMaterial.tsx
rename to src/Add-on/ChangeColorByBoard/ChangeColorByMaterial.tsx
index 43f331e8b..30b0c3435 100644
--- a/src/Add-on/ChangeColorByBoardMaterial.tsx
+++ b/src/Add-on/ChangeColorByBoard/ChangeColorByMaterial.tsx
@@ -3,77 +3,70 @@ import { observable } from 'mobx';
import { observer } from 'mobx-react';
import * as React from 'react';
import { begin } from 'xaop';
-import { app } from "../ApplicationServices/Application";
-import { EBoardKeyList } from "../Common/BoardKeyList";
-import { ColorMaterial } from '../Common/ColorPalette';
-import { Intent } from '../Common/Toaster';
-import { FixedNotZero } from "../Common/Utils";
-import { Board } from "../DatabaseServices/Entity/Board";
-import { Command } from "../Editor/CommandMachine";
-import { PromptSsgetResult, PromptStatus } from "../Editor/PromptResult";
-import { SelectSetBase } from '../Editor/SelectBase';
-import { Production } from '../Production/Product';
-import { BoardModalType } from "../UI/Components/Board/BoardModalType";
-import { IConfigOption } from '../UI/Components/Board/UserConfigComponent';
-import { CommonModal } from '../UI/Components/Modal/ModalContainer';
-import { AppToaster } from '../UI/Components/Toaster';
-import { IConfigStore } from '../UI/Store/BoardStore';
-import { userConfigStore } from '../UI/Store/UserConfigStore';
+import { app } from "../../ApplicationServices/Application";
+import { EBoardKeyList } from "../../Common/BoardKeyList";
+import { ColorMaterial } from '../../Common/ColorPalette';
+import { FixedNotZero } from "../../Common/Utils";
+import { Board } from "../../DatabaseServices/Entity/Board";
+import { Command } from "../../Editor/CommandMachine";
+import { PromptSsgetResult, PromptStatus } from '../../Editor/PromptResult';
+import { SelectSetBase } from '../../Editor/SelectBase';
+import { Production } from '../../Production/Product';
+import { CommonModal } from '../../UI/Components/Modal/ModalContainer';
+import { BoardInfoSelectPanel } from './BoardInfoSelectPanel';
+import { ChangeColorByBoardMaterialStore } from './CalcBrThicknessConfigStore';
export class ChangeColorByMaterial implements Command
{
- store: CalcBrThicknessConfigStore;
async exec()
{
- if (!this.store)
- {
- this.store = CalcBrThicknessConfigStore.GetInstance();
- await userConfigStore.UpdateBoardOption(this.store.configName, BoardModalType.ChangeColorByMaterial, this.store);
- }
+ let store = ChangeColorByBoardMaterialStore.GetInstance();
+ let brs: Board[] = [];
let brRes: PromptSsgetResult;
-
while (true)
{
brRes = await app.Editor.GetSelection({
- Msg: `选择板件,根据板材名称修改颜色<${this.store.config.option.CalcBoardThickness ? "区分板厚" : "不区分板厚"}>`,
- KeyWordList: [{ key: "S", msg: this.store.config.option.CalcBoardThickness ? "不区分板厚" : "区分板厚" }],
+ Msg: `选择板件,根据板材名称修改颜色`,
Filter: { filterTypes: [Board] },
+ KeyWordList: [{ key: "S", msg: "修改区分板材规则" }],
});
- if (brRes.Status === PromptStatus.Cancel) return;
-
- if (brRes.Status === PromptStatus.Keyword)
+ if (brRes.Status === PromptStatus.Cancel)
+ return;
+ else if (brRes.Status === PromptStatus.Keyword)
{
- this.store.config.option.CalcBoardThickness = !this.store.config.option.CalcBoardThickness;
- AppToaster.show({
- message: `成功切换到:${this.store.config.option.CalcBoardThickness ? "区分板厚" : "不区分板厚"}模式`,
- timeout: 5000,
- intent: Intent.SUCCESS,
- }, "ChangeColorByMtl");
- userConfigStore.SaveConfig(BoardModalType.ChangeColorByMaterial, this.store, { toaster: false });
+ app.Editor.ModalManage.RenderModal(BoardInfoSelectPanel, { store });
+ await app.Editor.ModalManage.Wait();
}
else
break;
}
- let brs = brRes.SelectSet.SelectEntityList as Board[];
-
+ brs = brRes.SelectSet.SelectEntityList as Board[];
let colors = [0, 2, 3, 4, 5, 6, 7, 8, 60, 15, 20, 24, 30, 61, 181, 155, 139, 74, 161, 65, 231, 45, 240, 211, 110, 216, 100, 105, 110, 115, 120, 130, 140, 150, 160, 170, 180, 190, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210];
let colorMap = new Map();
let boardMap = new Map();
+ let option = store.m_Option;
let colorIndex = 1;
for (let br of brs)
{
- let key: string;
- if (this.store.config.option.CalcBoardThickness)
+ let key: string = `板材料:${br.BoardProcessOption[EBoardKeyList.Mat] !== "" ? br.BoardProcessOption[EBoardKeyList.Mat] : "无"}`;
+ if (option.accordMaterialName)
+ {
+ key += ` - 板材名:${br.BoardProcessOption[EBoardKeyList.BrMat] !== "" ? br.BoardProcessOption[EBoardKeyList.BrMat] : "无"}`;
+ }
+ if (option.accordMaterialColor)
+ {
+ key += ` - 板材颜色:${br.BoardProcessOption[EBoardKeyList.Color] !== "" ? br.BoardProcessOption[EBoardKeyList.Color] : "无"}`;
+ }
+ if (option.accordThickness)
{
let size = Production.GetSpiteSize(br);
let brbh = size?.spliteThickness ?? br.Thickness;
- key = `${br.BoardProcessOption[EBoardKeyList.BrMat]}-${br.BoardProcessOption[EBoardKeyList.Color]}-${br.BoardProcessOption[EBoardKeyList.Mat]}-板厚:${FixedNotZero(brbh, 1).padEnd(3)}`;
+ key += ` - 板厚:${FixedNotZero(brbh, 1).padEnd(3)}`;
}
- else
- key = `${br.BoardProcessOption[EBoardKeyList.BrMat]}-${br.BoardProcessOption[EBoardKeyList.Color]}-${br.BoardProcessOption[EBoardKeyList.Mat]}`;
+
let color = colorMap.get(key);
if (!color)
{
@@ -130,16 +123,22 @@ export class BoardColorMaterialMapDialog extends React.Component item.mtl === key);
}
});
@@ -154,6 +153,7 @@ export class BoardColorMaterialMapDialog extends React.Component app.Editor.ModalManage.Destory()
@@ -169,7 +169,7 @@ export class BoardColorMaterialMapDialog extends React.Component
-
+
{`${d.mtl} 实体颜色:${d.color}`}
);
@@ -187,40 +187,3 @@ export class BoardColorMaterialMapDialog extends React.Component)
- {
- Object.assign(this.config, conf);
- }
-}
diff --git a/src/Editor/CommandRegister.ts b/src/Editor/CommandRegister.ts
index a9cb20b6f..98111283c 100644
--- a/src/Editor/CommandRegister.ts
+++ b/src/Editor/CommandRegister.ts
@@ -26,7 +26,7 @@ import { IntersectionOperation, SubsractOperation, UnionOperation } from "../Add
import { Command_Break, Command_BreakAll } from "../Add-on/Break";
import { Command_CameraSnapshootRestore, Command_CameraSnapshootSave, Command_CameraSnapshootSaveIndex } from "../Add-on/CameraSnapshootCMD";
import { ChangeColor } from "../Add-on/ChangeColor";
-import { ChangeColorByMaterial } from "../Add-on/ChangeColorByBoardMaterial";
+import { ChangeColorByMaterial } from "../Add-on/ChangeColorByBoard/ChangeColorByMaterial";
import { CheckHoles } from "../Add-on/CheckHoles";
import { CheckModeling } from "../Add-on/CheckModeling";
import { Command_ClosePt } from "../Add-on/closetest";
diff --git a/src/Editor/DefaultConfig.ts b/src/Editor/DefaultConfig.ts
index fb985b62c..522b7907f 100644
--- a/src/Editor/DefaultConfig.ts
+++ b/src/Editor/DefaultConfig.ts
@@ -6,7 +6,7 @@ import { IUpdateBoardInfosOption } from "../UI/Components/Board/UpdateBoardInfoi
import { EMetalsType, ICompHardwareOption, ICylMetalsOption, IExtMetalsOption, IToplineOption } from "../UI/Components/RightPanel/RightPanelInterface";
import { IKuGangDrawOption } from "../UI/Components/Template/TemplateInterface";
import { ECompareType, IBoardFindOption } from "../UI/Store/BoardFindInterface";
-import { BehindBoardOption, BehindHeightPositon, BoardProcessOption, BoardType, BrRelativePos, ClosingStripOption, CommonPanelConfigOption, ComposingType, CurtailType, FaceDirection, IAutoDimBrsOption, IBatchModifyPanelOption, IBoardBatchCurtailOption, IDimStyleOption, LayerBoardOption, LayerNailOption, LinesType, ModifyTextsConfigOption, PointLightOption, RadioType, RectAreaLightOption, RightPlaneLightOption, SideBoardOption, SingleBoardOption, SpotLightOption, StripType, TBBoardOption, VerticalBoardOption, ViewDirection, Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption, ViewportPosition, WindowPanelConfigOption } from "../UI/Store/BoardInterface";
+import { BehindBoardOption, BehindHeightPositon, BoardProcessOption, BoardType, BrRelativePos, ChangeColorByBoardMaterialOption, ClosingStripOption, CommonPanelConfigOption, ComposingType, CurtailType, FaceDirection, IAutoDimBrsOption, IBatchModifyPanelOption, IBoardBatchCurtailOption, IDimStyleOption, LayerBoardOption, LayerNailOption, LinesType, ModifyTextsConfigOption, PointLightOption, RadioType, RectAreaLightOption, RightPlaneLightOption, SideBoardOption, SingleBoardOption, SpotLightOption, StripType, TBBoardOption, VerticalBoardOption, ViewDirection, Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption, ViewportPosition, WindowPanelConfigOption } from "../UI/Store/BoardInterface";
import { DoorPosType, HandleHorPos, HandleVePos, IDoorConfigOption, IDrawerConfigOption, IHingeConfigOption } from "../UI/Store/DoorInterface";
import { IHSOption } from "../UI/Store/HSInterface";
import { ELatticeArrayType, ILatticeOption } from "../UI/Store/LatticeInterface";
@@ -917,3 +917,12 @@ export const DefaultDimStyleOption: IDimStyleOption = {
dimADEC: 2,
};
Object.freeze(DefaultDimStyleOption);
+
+
+export const DefaultChangeColorByBoardMaterialOption: ChangeColorByBoardMaterialOption = {
+ accordThickness: true,
+ accordMaterialColor: true,
+ accordMaterial: true,
+ accordMaterialName: true
+};
+Object.freeze(DefaultChangeColorByBoardMaterialOption);
diff --git a/src/UI/Components/Board/BoardModalType.ts b/src/UI/Components/Board/BoardModalType.ts
index c8257a638..8552ac5b2 100644
--- a/src/UI/Components/Board/BoardModalType.ts
+++ b/src/UI/Components/Board/BoardModalType.ts
@@ -40,7 +40,7 @@ export enum BoardModalType
ParseBrName = "ParseBrName",
AutoDimBrs = "AutoDimBrs",
SelectThinBehindBoard = "SelectThinBehindBoard",
- ChangeColorByMaterial = "ChangeColorByMaterial",
+ ChangeColorByBoardMaterial = "ChangeColorByMaterial",
ModifyTexts = "ModifyTexts",
Viewport = "Viewport",
Viewport2 = "Viewport2",
diff --git a/src/UI/Components/Modal/ModalStyle/BoardModal.less b/src/UI/Components/Modal/ModalStyle/BoardModal.less
index c49086221..c95e64acd 100644
--- a/src/UI/Components/Modal/ModalStyle/BoardModal.less
+++ b/src/UI/Components/Modal/ModalStyle/BoardModal.less
@@ -358,3 +358,16 @@
padding: 0px 11px 14px 0;
}
}
+
+#commonModal .boardColorMaterialMap{
+ font-size: 13px;
+ min-width: 350px;
+
+ .bp3-dialog-body{
+ background-color: white;
+ }
+
+ .bp3-dialog-footer{
+ padding: 2px 20px;
+ }
+}
\ No newline at end of file
diff --git a/src/UI/Components/Modal/ModalStyle/DrillModal.less b/src/UI/Components/Modal/ModalStyle/DrillModal.less
index d84c72a0b..a340b5573 100644
--- a/src/UI/Components/Modal/ModalStyle/DrillModal.less
+++ b/src/UI/Components/Modal/ModalStyle/DrillModal.less
@@ -160,7 +160,7 @@
li {
outline: 1px solid #ccc;
cursor : pointer;
- padding: 5px 0;
+ padding: 10px 15px 5px 15px;
span {
display : inline-block;
diff --git a/src/UI/Store/BoardInterface.ts b/src/UI/Store/BoardInterface.ts
index 57c3a2020..fb506e6ac 100644
--- a/src/UI/Store/BoardInterface.ts
+++ b/src/UI/Store/BoardInterface.ts
@@ -568,3 +568,11 @@ export interface IDimStyleOption extends IBaseOption
dimALTD: number;
dimADEC: number;
}
+
+export interface ChangeColorByBoardMaterialOption
+{
+ accordThickness: boolean;
+ accordMaterial: boolean;
+ accordMaterialName: boolean;
+ accordMaterialColor: boolean;
+}