!2087 优化:根据板材修改颜色,可配板材名、颜色、板厚度等都一致 #242

pull/2127/MERGE
林三 1 year ago committed by ChenX
parent b2ebf215ec
commit f3ac09c07f

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

@ -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 (
<div id="BoardInfoSelectPanel" className={Classes.DIALOG_CONTAINER}>
<div className={Classes.DIALOG} >
<div className={Classes.DIALOG_HEADER} data-id="dragArea">
<Icon icon="cog" iconSize={18} />
<h4 className={Classes.HEADING}></h4>
<Button
icon="cross"
aria-label="Close"
minimal={true}
onClick={() => { app.Editor.ModalManage.Destory(); }}
/>
</div>
<div className={Classes.DIALOG_BODY}>
<Checkbox
disabled
checked={option.accordMaterial}
label="区分板材料"
onChange={() => { option.accordMaterial = !option.accordMaterial; }}
/>
<Checkbox
checked={option.accordMaterialName}
label="区分板材名"
onChange={() => { option.accordMaterialName = !option.accordMaterialName; }}
/>
<Checkbox
checked={option.accordMaterialColor}
label="区分板材色"
onChange={() => { option.accordMaterialColor = !option.accordMaterialColor; }}
/>
<Checkbox
checked={option.accordThickness}
label="区分板厚度"
onChange={() => { option.accordThickness = !option.accordThickness; }}
/>
</div>
<div className={Classes.DIALOG_FOOTER} >
<div className={Classes.DIALOG_FOOTER_ACTIONS}>
<UserConfigComponent store={this.props.store} type={BoardModalType.ChangeColorByBoardMaterial} configType={Config_ModalType.UserConfigModal} />
<div className="foot_right">
<Button
intent={Intent.SUCCESS}
text="确定"
onClick={() => { app.Editor.ModalManage.Destory(); }}
/>
</div>
</div>
</div>
</div>
</div>
);
}
}

@ -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<ChangeColorByBoardMaterialOption>)
{
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;
}
}

@ -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<string, number>();
let boardMap = new Map<number, Board[]>();
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<BoardColorMater
if (!br) return;
if (br instanceof Board)
{
let store = CalcBrThicknessConfigStore.GetInstance();
let key: string;
if (store.config.option.CalcBoardThickness)
let option = ChangeColorByBoardMaterialStore.GetInstance().m_Option;
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]}`;
this.selectIndex = this.props.data.findIndex(item => item.mtl === key);
}
});
@ -154,6 +153,7 @@ export class BoardColorMaterialMapDialog extends React.Component<BoardColorMater
{
return (
<CommonModal
className="boardColorMaterialMap"
title="板材列表"
hasConfig={false}
close={() => app.Editor.ModalManage.Destory()
@ -169,7 +169,7 @@ export class BoardColorMaterialMapDialog extends React.Component<BoardColorMater
key={d.mtl}
style={{ background: this.selectIndex === i ? ColorMaterial.GetColor(d.color)?.getStyle() : "" }}
>
<span style={{ width: 15, height: 15, background: ColorMaterial.GetColor(d.color)?.getStyle() }}> </span>
<span style={{ width: 15, height: 15, margin: "0px 5px 1px 0px", background: ColorMaterial.GetColor(d.color)?.getStyle() }}> </span>
<span>{`${d.mtl} 实体颜色:${d.color}`}</span>
</li>
);
@ -187,40 +187,3 @@ export class BoardColorMaterialMapDialog extends React.Component<BoardColorMater
app.Editor.SetSelection(d.brs);
};
}
//只是用来保存配置
class CalcBrThicknessConfigStore implements IConfigStore
{
private static _SingleInstance: CalcBrThicknessConfigStore;
static GetInstance(): CalcBrThicknessConfigStore
{
if (this._SingleInstance) return this._SingleInstance;
this._SingleInstance = new CalcBrThicknessConfigStore;
return this._SingleInstance;
}
configName = "默认";
configsNames = ['默认'];
config = {
option: {
CalcBoardThickness: false
}
};
InitOption()
{
this.config = {
option: {
CalcBoardThickness: false
}
};
}
SaveConfig()
{
return this.config;
}
UpdateOption(conf: IConfigOption<any>)
{
Object.assign(this.config, conf);
}
}

@ -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";

@ -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);

@ -40,7 +40,7 @@ export enum BoardModalType
ParseBrName = "ParseBrName",
AutoDimBrs = "AutoDimBrs",
SelectThinBehindBoard = "SelectThinBehindBoard",
ChangeColorByMaterial = "ChangeColorByMaterial",
ChangeColorByBoardMaterial = "ChangeColorByMaterial",
ModifyTexts = "ModifyTexts",
Viewport = "Viewport",
Viewport2 = "Viewport2",

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

@ -160,7 +160,7 @@
li {
outline: 1px solid #ccc;
cursor : pointer;
padding: 5px 0;
padding: 10px 15px 5px 15px;
span {
display : inline-block;

@ -568,3 +568,11 @@ export interface IDimStyleOption extends IBaseOption
dimALTD: number;
dimADEC: number;
}
export interface ChangeColorByBoardMaterialOption
{
accordThickness: boolean;
accordMaterial: boolean;
accordMaterialName: boolean;
accordMaterialColor: boolean;
}

Loading…
Cancel
Save