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; +}