mirror of https://gitee.com/cf-fz/WebCAD.git
!1465 功能:根据板材改颜色新增UI,并且加入板厚
parent
b9e9d3b09d
commit
9b6a96c20f
@ -1,36 +0,0 @@
|
||||
import { Command } from "../Editor/CommandMachine";
|
||||
import { app } from "../ApplicationServices/Application";
|
||||
import { Board } from "../DatabaseServices/Entity/Board";
|
||||
import { PromptStatus } from "../Editor/PromptResult";
|
||||
import { EBoardKeyList } from "../Common/BoardKeyList";
|
||||
|
||||
export class ChangeColorByMaterial implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
let brRes = await app.Editor.GetSelection({
|
||||
Msg: "选择板件,根据板材名称修改颜色",
|
||||
Filter: { filterTypes: [Board] }
|
||||
});
|
||||
|
||||
if (brRes.Status === PromptStatus.Cancel) return;
|
||||
|
||||
let brs = brRes.SelectSet.SelectEntityList as Board[];
|
||||
|
||||
let cache: string[] = ["placeholder"];
|
||||
|
||||
for (let br of brs)
|
||||
{
|
||||
let key = `${br.BoardProcessOption[EBoardKeyList.BrMat]}-${br.BoardProcessOption[EBoardKeyList.Color]}-${br.BoardProcessOption[EBoardKeyList.Mat]}`;
|
||||
let color = cache.indexOf(key);
|
||||
if (color === -1)
|
||||
{
|
||||
color = cache.length + 1;
|
||||
cache.push(key);
|
||||
}
|
||||
else
|
||||
color += 1;
|
||||
br.ColorIndex = color;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,136 @@
|
||||
import { Classes } from '@blueprintjs/core';
|
||||
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 { FixedNotZero } from "../Common/Utils";
|
||||
import { Board } from "../DatabaseServices/Entity/Board";
|
||||
import { Command } from "../Editor/CommandMachine";
|
||||
import { PromptStatus } from "../Editor/PromptResult";
|
||||
import { SelectSetBase } from '../Editor/SelectBase';
|
||||
import { CommonModal } from '../UI/Components/Modal/ModalContainer';
|
||||
|
||||
export class ChangeColorByMaterial implements Command
|
||||
{
|
||||
async exec()
|
||||
{
|
||||
let brRes = await app.Editor.GetSelection({
|
||||
Msg: "选择板件,根据板材名称修改颜色",
|
||||
Filter: { filterTypes: [Board] }
|
||||
});
|
||||
|
||||
if (brRes.Status === PromptStatus.Cancel) return;
|
||||
|
||||
let brs = brRes.SelectSet.SelectEntityList as Board[];
|
||||
|
||||
let colors = [0, 1, 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 colorIndex = 1;
|
||||
for (let br of brs)
|
||||
{
|
||||
let key = `${br.BoardProcessOption[EBoardKeyList.BrMat]}-${br.BoardProcessOption[EBoardKeyList.Color]}-${br.BoardProcessOption[EBoardKeyList.Mat]}-板厚:${FixedNotZero(br.Thickness, 1).padEnd(3)}`;
|
||||
let color = colorMap.get(key);
|
||||
if (!color)
|
||||
{
|
||||
color = colorIndex;
|
||||
colorMap.set(key, colorIndex);
|
||||
colorIndex++;
|
||||
}
|
||||
br.ColorIndex = colors[color];
|
||||
|
||||
let arr = boardMap.get(color);
|
||||
if (!arr)
|
||||
{
|
||||
arr = [];
|
||||
boardMap.set(color, arr);
|
||||
}
|
||||
arr.push(br);
|
||||
}
|
||||
|
||||
let boardMapArr: { mtl: string, brs: Board[]; color: number; }[] = [];
|
||||
|
||||
for (let key of colorMap)
|
||||
{
|
||||
boardMapArr.push({ mtl: key[0], brs: boardMap.get(key[1]), color: colors[key[1]] });
|
||||
}
|
||||
|
||||
boardMapArr.sort((b1, b2) => b1.mtl.localeCompare(b2.mtl));
|
||||
|
||||
app.Editor.ModalManage.RenderModeless(BoardColorMaterialMapDialog, { data: boardMapArr }, { canMinimize: false });
|
||||
}
|
||||
}
|
||||
|
||||
interface BoardColorMaterialMapDialogProps
|
||||
{
|
||||
data: {
|
||||
mtl: string;
|
||||
brs: Board[];
|
||||
color: number;
|
||||
}[];
|
||||
}
|
||||
|
||||
//用显示板材和板件的对应关系,命令根据板件材质改颜色的功能
|
||||
@observer
|
||||
export class BoardColorMaterialMapDialog extends React.Component<BoardColorMaterialMapDialogProps, {}> {
|
||||
|
||||
@observable selectIndex: number = -1;
|
||||
removeAop: Function;
|
||||
componentDidMount()
|
||||
{
|
||||
let selectCtrl = app.Editor.SelectCtrl;
|
||||
if (!this.removeAop)
|
||||
this.removeAop = begin(selectCtrl, selectCtrl.AddSelect, (ss: SelectSetBase) =>
|
||||
{
|
||||
let br = ss.SelectEntityList[0];
|
||||
if (!br) return;
|
||||
if (br instanceof Board)
|
||||
{
|
||||
let key = `${br.BoardProcessOption[EBoardKeyList.BrMat]}-${br.BoardProcessOption[EBoardKeyList.Color]}-${br.BoardProcessOption[EBoardKeyList.Mat]}-板厚:${FixedNotZero(br.Thickness, 1).padEnd(3)}`;
|
||||
|
||||
this.selectIndex = this.props.data.findIndex(item => item.mtl === key);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
componentWillUnmount()
|
||||
{
|
||||
if (this.removeAop) this.removeAop();
|
||||
}
|
||||
|
||||
public render()
|
||||
{
|
||||
return (
|
||||
<CommonModal
|
||||
title="板材列表"
|
||||
hasConfig={false}
|
||||
close={() => app.Editor.ModalManage.Destory()
|
||||
}
|
||||
>
|
||||
<ul className={Classes.LIST_UNSTYLED + " center brmtlmap"}>
|
||||
{
|
||||
this.props.data.map((d, i) =>
|
||||
{
|
||||
return (
|
||||
<li onClick={() => this.click(d)} 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>{`${d.mtl} 实体颜色:${d.color}`}</span>
|
||||
</li>
|
||||
);
|
||||
})
|
||||
}
|
||||
</ul>
|
||||
</CommonModal >
|
||||
);
|
||||
}
|
||||
private click = (d: {
|
||||
mtl: string;
|
||||
brs: Board[];
|
||||
}) =>
|
||||
{
|
||||
app.Editor.SetSelection(d.brs);
|
||||
};
|
||||
}
|
Loading…
Reference in new issue