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 (
- +
+ { + 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} /> - + +