!1465 功能:根据板材改颜色新增UI,并且加入板厚

pull/1465/MERGE
ChenX 4 years ago
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);
};
}

@ -17,6 +17,8 @@ export class BoardMoveTool
_DrawDims: AlignedDimension[] = [];
Disable = false;
_Board: Board;
ForceUpdate = false;
constructor()
@ -90,6 +92,8 @@ export class BoardMoveTool
private async HitBoard(br: Board)
{
if (this.Disable) return;
await Sleep(1);
let brOCS = br.OCS;
let brRot = brOCS.clone().setPosition(0, 0, 0);

@ -203,8 +203,13 @@ export class Editor
else
selectData._SelectList.add(en.DrawObject);
let bak = this.App.MoveTool.Disable;
this.App.MoveTool.Disable = true;
this.SelectCtrl.AddSelect(selectData, true);
this.SelectCtrl.UpdateView();
this.App.MoveTool.Disable = bak;
}
UpdateScreen()

@ -3,14 +3,14 @@
}
#drillModal .small-name {
width: 4.55rem;
margin: 0;
padding: 0;
width : 4.55rem;
margin : 0;
padding : 0;
padding-left: 5px;
}
#drillModal .bp3-dialog-body>div:first-child {
padding-top: 10px;
padding-top : 10px;
padding-bottom: 0;
}
@ -34,13 +34,13 @@
}
.drill-temp {
display: flex;
display : flex;
overflow: hidden;
&>select {
width: 95px;
overflow: hidden;
height: 20px;
width : 95px;
overflow : hidden;
height : 20px;
line-height: 20px;
}
}
@ -52,8 +52,8 @@
#drillModal .br-set>span:first-child,
#drillModal .bp3-dialog-body .bp3-label>span:first-child {
display: inline-block;
width: 5.5rem;
display : inline-block;
width : 5.5rem;
white-space: nowrap;
}
@ -70,9 +70,9 @@
}
#drillModal .rules {
height: 80%;
height : 80%;
max-height: 300px;
overflow: auto;
overflow : auto;
}
@darkActiveColor: #1a83ad;
@ -87,21 +87,21 @@
#drillModal .drill-type {
justify-content: space-between;
align-items: center;
padding-bottom: 3px;
align-items : center;
padding-bottom : 3px;
button {
margin-bottom: 10px;
}
&>div:first-child {
width: 680px;
overflow-x: auto;
width : 680px;
overflow-x : auto;
white-space: nowrap;
}
&>div.bp3-html-select {
width: 300px;
width : 300px;
padding-bottom: 10px;
select {
@ -116,18 +116,40 @@
#commonModal .collsion {
max-height: 500px;
overflow: auto;
overflow : auto;
li {
outline: 1px solid #ccc;
cursor : pointer;
padding: 5px 0;
span {
display : inline-block;
max-width : 100px;
white-space : nowrap;
overflow : hidden;
text-overflow: ellipsis;
}
}
li:hover {
background-color: #1a83ad;
}
}
#commonModal .brmtlmap {
max-height: 800px;
overflow : auto;
li {
outline: 1px solid #ccc;
cursor: pointer;
cursor : pointer;
padding: 5px 0;
span {
display: inline-block;
max-width: 100px;
white-space: nowrap;
overflow: hidden;
display : inline-block;
white-space : nowrap;
overflow : hidden;
text-overflow: ellipsis;
}
}

Loading…
Cancel
Save