From ce3dc618d00790e49b9b284b3a65cac8c5702a77 Mon Sep 17 00:00:00 2001 From: "2817212736@qq.com" <2817212736@qq.com> Date: Fri, 9 May 2025 14:47:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=BA=B9=E7=90=86=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E6=96=B9=E6=B3=95=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=9D=90?= =?UTF-8?q?=E8=B4=A8=E4=B8=8E=E7=BA=B9=E7=90=86=E7=BB=91=E5=AE=9A=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/stores/sceneStore.ts | 29 ++++++++++++++++++++++------- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index e2b55ee..bd0b51f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "material-editor", "private": true, - "version": "1.0.3", + "version": "1.0.4", "type": "module", "scripts": { "dev": "vite", diff --git a/src/stores/sceneStore.ts b/src/stores/sceneStore.ts index 1719ad6..13b71fc 100644 --- a/src/stores/sceneStore.ts +++ b/src/stores/sceneStore.ts @@ -1,7 +1,7 @@ import { defineStore } from "pinia"; import { computed, ref } from "vue"; import { MaterialEditor } from "../common/MaterialEditor"; -import { ObjectId, PhysicalMaterialRecord, TextureTableRecord } from "webcad_ue4_api"; +import { Database, ObjectId, PhysicalMaterialRecord, TextureTableRecord } from "webcad_ue4_api"; import { LoadImageFromUrl } from "../helpers/helper.imageLoader"; import { Texture } from "three"; import { materialRenderer } from "../common/MaterialRenderer"; @@ -9,6 +9,7 @@ import { MaterialOut } from "../common/MaterialSerializer"; export const useScene = defineStore('scene', () => { let _editor: MaterialEditor | undefined; + let _database: Database | undefined; const _currGeometry = ref('球'); const _currTexture = ref(); const CurrGeometry = computed({ @@ -24,9 +25,15 @@ export const useScene = defineStore('scene', () => { console.warn("SceneStore has already been initialized"); return; } + + // 初始化Database + _database = new Database(); + _database.hm.Enable = false; // 关闭历史记录功能 + Material.value.Name = _database.MaterialTable.AllocateName(); // 使用Database为材质分配材质名 + _database.MaterialTable.Add(Material.value as PhysicalMaterialRecord); // 为Material配置一个ObjectId,否则其无法被序列化 - Material.value.objectId = new ObjectId(undefined, undefined); + // Material.value.objectId = new ObjectId(undefined, undefined); _editor = MaterialEditor.GetInstance(); Geometries.value = Array.from(_editor.Geometrys.keys()); @@ -47,6 +54,8 @@ export const useScene = defineStore('scene', () => { Material.value.GoodBye(); _editor?.Dispose(); _editor = undefined; + _database.Destroy(); + _database = undefined; window.onresize = undefined; // 释放Singleton @@ -73,13 +82,20 @@ export const useScene = defineStore('scene', () => { } async function ChangeTextureAsync(url: string) { - const record = new TextureTableRecord(); - record.objectId = new ObjectId(undefined, record); - const img = await LoadImageFromUrl(url); + + // 关联贴图 + const db = Material.value.Db; + const record = new TextureTableRecord(); + // record.objectId = new ObjectId(undefined, record); + record.Name = db.TextureTable.AllocateName(); + db.TextureTable.Add(record); + // 设置Store _currTexture.value = record['texture'] as Texture; _currTexture.value.image = img; + + // 替换map Material.value.map = img ? record.Id : undefined; _currTexture.value.needsUpdate = true; await UpdateMaterialAsync(); @@ -99,9 +115,8 @@ export const useScene = defineStore('scene', () => { } async function SerializeMaterialAsync() { - // TODO: Warn: 是否要生成logo路径? - // const logoPath = await HandleUpdateLogo(); const matJson = MaterialOut(Material.value as PhysicalMaterialRecord); + console.log(matJson); return matJson; }