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