From 9010eba914927203608a4c9b76fecfaf7e74a635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=84=E8=AF=97=E6=B4=A5?= <2723065175@qq.com> Date: Fri, 8 Oct 2021 01:24:46 +0000 Subject: [PATCH] =?UTF-8?q?!1652=20=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=8F=B3?= =?UTF-8?q?=E4=BE=A7=E6=88=91=E7=9A=84=E6=9D=90=E8=B4=A8=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=88=B0=E9=80=89=E4=B8=AD=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/SourceManage/MaterialList.tsx | 74 +++++++++++++++---- 1 file changed, 61 insertions(+), 13 deletions(-) diff --git a/src/UI/Components/SourceManage/MaterialList.tsx b/src/UI/Components/SourceManage/MaterialList.tsx index abd07cac5..deeb42fe5 100644 --- a/src/UI/Components/SourceManage/MaterialList.tsx +++ b/src/UI/Components/SourceManage/MaterialList.tsx @@ -2,13 +2,15 @@ import { Button, Card, Classes, ContextMenu, Intent, Menu, MenuItem } from '@blu import { IObservableValue } from 'mobx'; import { observer } from 'mobx-react'; import * as React from 'react'; -import { Vector3 } from 'three'; +import { Curve, Vector3 } from 'three'; import { app } from '../../../ApplicationServices/Application'; +import { CommandNames } from '../../../Common/CommandNames'; import { MaterialUrls, PublishMaterialUrl } from '../../../Common/HostUrl'; import { PostJson, RequestStatus } from '../../../Common/Request'; import { inflate, MaterialIn, MaterialInAndAppendAppData } from '../../../Common/SerializeMaterial'; import { DuplicateRecordCloning } from '../../../Common/Status'; import { GetEntity, getFileSize } from '../../../Common/Utils'; +import { Hole } from '../../../DatabaseServices/3DSolid/Hole'; import { Board } from '../../../DatabaseServices/Entity/Board'; import { CompositeEntity } from '../../../DatabaseServices/Entity/CompositeEntity'; import { Region } from '../../../DatabaseServices/Entity/Region'; @@ -16,6 +18,7 @@ import { PhysicalMaterialRecord } from '../../../DatabaseServices/PhysicalMateri import { CommandWrap } from '../../../Editor/CommandMachine'; import { PointPick } from '../../../Editor/PointPick'; import { userConfig } from '../../../Editor/UserConfig'; +import { VisualSpaceBox } from '../../../Editor/VisualSpaceBox'; import { appUi } from '../../Layout/ApplicationLayout'; import { ApplyGoodInfo } from '../Asset'; import { DataList } from '../Common/Datalist'; @@ -168,18 +171,7 @@ export class MaterialList extends React.Component { if (json) { let mtl = MaterialIn(JSON.parse(json)) as PhysicalMaterialRecord; - mtl.Name = data.name; - app.Database.WblockCloneObejcts( - [mtl], - app.Database.MaterialTable, - new Map(), - DuplicateRecordCloning.Ignore - )[0] as PhysicalMaterialRecord; - this.readyMtl = null; - AppToaster.show({ - message: "材质已应用到图纸", - timeout: 1000 - }); + this.handleApplyOnce(mtl, data.name); } } else @@ -187,6 +179,21 @@ export class MaterialList extends React.Component { this.handleOpen(); } }; + private handleApplyOnce = (mtl: PhysicalMaterialRecord, name: string) => + { + mtl.Name = name; + app.Database.WblockCloneObejcts( + [mtl], + app.Database.MaterialTable, + new Map(), + DuplicateRecordCloning.Ignore + )[0] as PhysicalMaterialRecord; + this.readyMtl = null; + AppToaster.show({ + message: "材质已应用到图纸", + timeout: 1000 + }); + }; private renameMtl = async () => { let json = await this.handleGetMtlJson(this.readyMtl); @@ -226,6 +233,42 @@ export class MaterialList extends React.Component { this.handleClose(); }, "覆盖材质图纸"); }; + private applyEntity = () => + { + CommandWrap(async () => + { + let json = await this.handleGetMtlJson(this.readyMtl); + + //得到选择的实体. + let material = MaterialIn(JSON.parse(json)) as PhysicalMaterialRecord; + this.handleApplyOnce(material, this.readyMtl.name); + let count = 0; + let brCount = 0; + for (let en of app.Editor.SelectCtrl.SelectSet.SelectEntityList) + { + if (en instanceof Curve) continue; + if (en instanceof VisualSpaceBox) continue; + if (en instanceof Text) continue; + if (en instanceof Hole) continue; + + en.Material = material.Id; + if (en instanceof Board) + { + if (userConfig.isModifyMaterial) + ApplyGoodInfo(en, material); + brCount++; + } + count++; + } + + AppToaster.show({ + message: `成功修改${count}个实体的材质,其中有${brCount}个板! (如果您想选下一组进行应用材质,记得先按ESC取消当前选中哦!) (建议切换到真实实体来查看更改结果!)`, + timeout: 10000, + intent: Intent.SUCCESS, + }); + app.Viewer.UpdateRender(); + }, CommandNames.ApplyMtl); + }; componentDidMount() { document.addEventListener("drop", this.handleApply); @@ -313,6 +356,11 @@ export class MaterialList extends React.Component { text="应用" onClick={() => this.applyMtl(data)} /> + this.applyEntity()} + />