diff --git a/__test__/FileSystem/__snapshots__/wblockClone.test.ts.snap b/__test__/FileSystem/__snapshots__/wblockClone.test.ts.snap
index 3691de858..11cf2b91a 100644
--- a/__test__/FileSystem/__snapshots__/wblockClone.test.ts.snap
+++ b/__test__/FileSystem/__snapshots__/wblockClone.test.ts.snap
@@ -49,7 +49,7 @@ Array [
3,
1,
"材质1",
- 2,
+ 3,
"#ffffff",
false,
0.2,
@@ -64,6 +64,8 @@ Array [
true,
true,
"",
+ "",
+ "",
1,
-1,
0,
@@ -156,7 +158,7 @@ Array [
3,
1,
"材质1",
- 2,
+ 3,
"#ffffff",
false,
0.2,
@@ -171,6 +173,8 @@ Array [
true,
true,
"",
+ "",
+ "",
"PhysicalMaterialRecord",
2,
103,
@@ -178,7 +182,7 @@ Array [
3,
1,
"材质1(1)",
- 2,
+ 3,
"#ffffff",
false,
0.2,
@@ -193,6 +197,8 @@ Array [
true,
true,
"",
+ "",
+ "",
1,
-1,
0,
@@ -271,7 +277,7 @@ Array [
3,
1,
"材质1",
- 2,
+ 3,
"#ffffff",
false,
0,
@@ -286,6 +292,8 @@ Array [
true,
true,
"",
+ "",
+ "",
1,
-1,
0,
diff --git a/src/Add-on/BoardFindModify.ts b/src/Add-on/BoardFindModify.ts
index eae19576f..e916ea4ee 100644
--- a/src/Add-on/BoardFindModify.ts
+++ b/src/Add-on/BoardFindModify.ts
@@ -269,7 +269,7 @@ export class BoardFindModify implements Command
break;
case EBoardKeyList.Mat:
br.BoardProcessOption[EBoardKeyList.Mat] = option[EBoardKeyList.Mat];
- br.BoardProcessOption[EBoardKeyList.BrMat] = option.brMat;
+ br.BoardProcessOption[EBoardKeyList.BrMat] = option[EBoardKeyList.BrMat];
br.BoardProcessOption[EBoardKeyList.Color] = option[EBoardKeyList.Color];
break;
case EBoardKeyList.DrillType:
@@ -365,7 +365,7 @@ export class BoardFindModify implements Command
option.brName = br.Name;
break;
case EBoardKeyList.Mat:
- option.brMat = br.BoardProcessOption[EBoardKeyList.BrMat];
+ option[EBoardKeyList.BrMat] = br.BoardProcessOption[EBoardKeyList.BrMat];
option[EBoardKeyList.Mat] = br.BoardProcessOption[EBoardKeyList.Mat];
option[EBoardKeyList.Color] = br.BoardProcessOption[EBoardKeyList.Color];
break;
diff --git a/src/Common/StoreageKeys.ts b/src/Common/StoreageKeys.ts
index dfce98101..afdc554bd 100644
--- a/src/Common/StoreageKeys.ts
+++ b/src/Common/StoreageKeys.ts
@@ -10,4 +10,5 @@ export enum StoreageKeys
RoomName = "roomName",
LastOpenFileId = "lastfid",
Uid = "uid",
+ Goods = "Goods_",
}
diff --git a/src/DatabaseServices/PhysicalMaterialRecord.ts b/src/DatabaseServices/PhysicalMaterialRecord.ts
index 4a4422813..42d357bc0 100644
--- a/src/DatabaseServices/PhysicalMaterialRecord.ts
+++ b/src/DatabaseServices/PhysicalMaterialRecord.ts
@@ -5,6 +5,14 @@ import { MaterialTableRecord } from "./MaterialTableRecord";
import { ObjectId } from "./ObjectId";
import { TextureTableRecord } from "./Texture";
+
+export interface IGoodProps
+{
+ name: string;
+ material: string;
+ color: string;
+}
+
@Factory
export class PhysicalMaterialRecord extends MaterialTableRecord
{
@@ -21,8 +29,11 @@ export class PhysicalMaterialRecord extends MaterialTableRecord
useMap = true;
useBumpMap = true;
useRoughnessMap = true;
- shopId = "";
-
+ private _goodsInfo: IGoodProps = {
+ name: "",
+ color: "",
+ material: "",
+ };
private material = new MeshPhysicalMaterial({});
async Update()
{
@@ -71,8 +82,15 @@ export class PhysicalMaterialRecord extends MaterialTableRecord
{
return this.material;
}
-
-
+ get GoodsInfo()
+ {
+ return this._goodsInfo;
+ }
+ set GoodsInfo(info: IGoodProps)
+ {
+ this.WriteAllObjectRecord();
+ Object.assign(this._goodsInfo, info);
+ }
//#region -------------------------File-------------------------
ReadFile(file: CADFiler)
{
@@ -93,14 +111,21 @@ export class PhysicalMaterialRecord extends MaterialTableRecord
this.useMap = file.Read();
this.useBumpMap = file.Read();
this.useRoughnessMap = file.Read();
- this.shopId = file.Read();
+ if (ver <= 2)
+ file.Read();
+ else
+ {
+ this._goodsInfo.name = file.Read();
+ this._goodsInfo.material = file.Read();
+ this._goodsInfo.color = file.Read();
+ }
this.Update();
}
//对象将自身数据写入到文件.
WriteFile(file: CADFiler)
{
super.WriteFile(file);
- file.Write(2);
+ file.Write(3);
file.Write(this.color);
file.Write(this.transparent);
file.Write(this.matalness);
@@ -114,7 +139,9 @@ export class PhysicalMaterialRecord extends MaterialTableRecord
file.Write(this.useMap);
file.Write(this.useBumpMap);
file.Write(this.useRoughnessMap);
- file.Write(this.shopId);
+ file.Write(this._goodsInfo.name);
+ file.Write(this._goodsInfo.material);
+ file.Write(this._goodsInfo.color);
}
//#endregion
}
diff --git a/src/Editor/DefaultConfig.ts b/src/Editor/DefaultConfig.ts
index d7e75513b..d3583a504 100644
--- a/src/Editor/DefaultConfig.ts
+++ b/src/Editor/DefaultConfig.ts
@@ -5,6 +5,7 @@ import { IBoardFindOption, ECompareType } from "../UI/Store/BoardFindInterface";
import { ILatticeOption, ELatticeArrayType } from "../UI/Store/LatticeInterface";
import { HandleVePos, DoorPosType, HandleHorPos, IDrawerConfigOption } from "../UI/Store/DoorInterface";
import { CurtailType, IBoardBatchCurtailOption } from "../UI/Components/BoardBatchCurtailModal";
+import { EBoardKeyList } from "../Common/BoardKeyList";
export const DefaultLayerBoardConfig: LayerBoardOption = {
version: 1,
@@ -238,7 +239,7 @@ export const DefaultBoardFindOption: IBoardFindOption = {
roomName: "",
cabinetName: "",
brName: "",
- brMat: "",
+ [EBoardKeyList.BrMat]: "",
material: "",
color: "",
lines: LinesType.Positive,
@@ -389,5 +390,5 @@ export const DefaultLatticeConfig: ILatticeOption = {
isOpenCut: false,
upCut: 0,
downCut: 4,
-}
+};
Object.freeze(DefaultLatticeConfig);
diff --git a/src/UI/Components/Asset.tsx b/src/UI/Components/Asset.tsx
index 562292fb8..13151d027 100644
--- a/src/UI/Components/Asset.tsx
+++ b/src/UI/Components/Asset.tsx
@@ -4,7 +4,7 @@ import * as React from 'react';
import { CSSProperties } from 'react';
import * as xaop from 'xaop';
import { app } from '../../ApplicationServices/Application';
-import { ImgsUrl, MaterialUrls } from '../../Common/HostUrl';
+import { ImgsUrl, MaterialUrls, ShopUrls } from '../../Common/HostUrl';
import { Post, PostJson, RequestStatus } from '../../Common/Request';
import { deflate, MaterialOut } from '../../Common/SerializeMaterial';
import { PhysicalMaterialRecord } from '../../DatabaseServices/PhysicalMaterialRecord';
@@ -13,6 +13,10 @@ import { commandMachine } from '../../Editor/CommandMachine';
import { MaterialRendererSingle } from '../Editor/Asset/MaterialRenderer';
import { appUi } from '../Layout/ApplicationLayout';
import { AppToaster } from './Toaster';
+import { appCache } from '../../Common/AppCache';
+import { StoreageKeys } from '../../Common/StoreageKeys';
+import { Board } from '../../DatabaseServices/Entity/Board';
+import { EBoardKeyList } from '../../Common/BoardKeyList';
//蓝图.
const RootStyle: CSSProperties = {
@@ -112,7 +116,11 @@ export class Asset extends React.Component<{ material: PhysicalMaterialRecord; }
let material = this.props.material as PhysicalMaterialRecord;
for (let en of app.Editor.SelectCtrl.SelectSet.SelectEntityList)
{
- en.Material = material.Id;
+ if (en instanceof Board)
+ {
+ en.Material = material.Id;
+ ApplyGoodInfo(en, material);
+ }
}
app.Viewer.UpdateRender();
@@ -197,3 +205,10 @@ export class Asset extends React.Component<{ material: PhysicalMaterialRecord; }
);
}
}
+
+export function ApplyGoodInfo(en: Board, material: PhysicalMaterialRecord)
+{
+ en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name;
+ en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color;
+ en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material;
+}
diff --git a/src/UI/Components/Board/BoardFindModify.tsx b/src/UI/Components/Board/BoardFindModify.tsx
index 157ba0699..0ed7542c1 100644
--- a/src/UI/Components/Board/BoardFindModify.tsx
+++ b/src/UI/Components/Board/BoardFindModify.tsx
@@ -13,6 +13,7 @@ import { observable } from 'mobx';
import { LinesType, FaceDirection, ComposingType, DrillType } from '../../Store/BoardInterface';
import { userConfig } from '../../../Editor/UserConfig';
import { BoardDirectionIcon } from './BoardCommon';
+import { GoodsList, IGoodInfo } from '../../MaterialEditor/GoodsList';
interface IBoardFindState
{
@@ -26,6 +27,7 @@ export default class BoardFindModifyModal extends React.Component<{ store?: Boar
["左侧板", false], ["右侧板", false], ["顶板", false], ["底板", false],
["层板", false], ["背板", false], ["地脚线", false],
];
+ private showShops = observable.box(false);
constructor(props)
{
super(props);
@@ -93,6 +95,14 @@ export default class BoardFindModifyModal extends React.Component<{ store?: Boar
});
this.setState({ userInputName: name });
};
+ private handleSelectGoods = (good: IGoodInfo) =>
+ {
+ const option = this.props.store.m_Option;
+ option[EBoardKeyList.BrMat] = good.name;
+ option[EBoardKeyList.Mat] = good.material;
+ option[EBoardKeyList.Color] = good.color;
+ this.showShops.set(false);
+ };
render()
{
const store = this.props.store;
@@ -114,6 +124,10 @@ export default class BoardFindModifyModal extends React.Component<{ store?: Boar
["房名", EBoardKeyList.RoomName], ["柜名", EBoardKeyList.CabinetName],
];
const selectOptions = userConfig.DrillConfigs.size > 0 ? [...userConfig.DrillConfigs.keys(), "不排"] : [];
+
+ if (option.highDrill.length !== 4)
+ option.highDrill.push(...Array(4).fill(selectOptions[0]));
+
return (
-
+ option[EBoardKeyList.BrMat] = e.target.value} />
-
+ option[EBoardKeyList.Mat] = e.target.value} />
颜色
-
+ option[EBoardKeyList.Color] = e.target.value} />
-
+
+
{
+ private showShops = observable.box(false);
+ private container: HTMLDivElement;
private matPars = [
["boardName", "板材名"], ["material", "材料"], ["color", "颜色"]
];
@@ -85,15 +89,35 @@ export class BoardProcessModal extends React.Component{
}
app.Editor.ModalManage.ToggleShow();
};
+ private selectGoods = (good: IGoodInfo) =>
+ {
+ this.props.opt[EBoardKeyList.BrMat] = good.name;
+ this.props.opt[EBoardKeyList.Mat] = good.material;
+ this.props.opt[EBoardKeyList.Color] = good.color;
+ if (this.props.br && this.props.br.Material)
+ {
+ let mat = this.props.br.Material.Object as PhysicalMaterialRecord;
+ mat.GoodsInfo = {
+ name: good.name,
+ material: good.material,
+ color: good.color,
+ };
+ }
+ this.showShops.set(false);
+ };
async UNSAFE_componentWillMount()
{
this.drillConfigs = userConfig.DrillConfigs;
}
+ componentDidMount()
+ {
+ this.container.addEventListener('keydown', e => e.stopPropagation());
+ }
render()
{
let isShowHighEditor = Boolean(this.props.br);
return (
-
+
this.container = el}>
{
this.renderEl()
}
@@ -104,7 +128,14 @@ export class BoardProcessModal extends React.Component{
option={this.props.opt}
isInline={true}
/>
-
+
+