diff --git a/package.json b/package.json index 50e8be3..97b245b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "material-editor", "private": true, - "version": "1.0.14", + "version": "1.0.15", "type": "module", "scripts": { "dev": "vite", diff --git a/src/components/MaterialAdjuster.vue b/src/components/MaterialAdjuster.vue index 12f02ce..651ac21 100644 --- a/src/components/MaterialAdjuster.vue +++ b/src/components/MaterialAdjuster.vue @@ -7,7 +7,7 @@ - + @@ -130,10 +130,12 @@ const scene = useScene(); const props = defineProps<{ name?: string; textureSrcList?: string[]; + /** 忽略纹理参数,提交时直接输出场景内的材质,用于某些在组件外对场景进行编辑的特殊情况(例如材质编辑模式) */ + ignoreTexture?: boolean; }>(); const emits = defineEmits<{ (e: 'cancel'): void; - (e: 'submit', data: MaterialRequest[]): void; + (e: 'submit', data: MaterialRequest[]): void; }>(); const Material = computed(() => scene.Material); @@ -161,8 +163,8 @@ const uploading = ref(false); // }); const materialInfo = reactive({ dirId: DirectoryId.MaterialDir, // 正常来说是2 - materialName: props.name || '材质', - inputText:'', + materialName: props.name || '材质', + inputText: '', }); watch(() => props.textureSrcList, async (val) => { @@ -182,7 +184,7 @@ watch(() => scene.CurrTexture, (val) => { rotation: val.rotation, repeatX: val.repeat.x, repeatY: val.repeat.y, - moveX: val.offset.x, + moveX: val.offset.x, moveY: val.offset.y } }) @@ -218,7 +220,7 @@ function UpdateTexture() { } async function loadData() { - if(!materialInfo.inputText) return; + if (!materialInfo.inputText) return; const json = JSON.parse(materialInfo.inputText); const cadFile = FromDeflateBase64(json.file); scene.ImportMaterialAsync(cadFile) @@ -233,18 +235,31 @@ async function HandleUpload() { uploading.value = true; const result = []; - // 遍历纹理链接列表,更改纹理后将材质序列化,然后还原场景 - let idx = 0; - for (const src of props.textureSrcList) { - await scene.ChangeTextureFromUrlAsync(src); + if (props.ignoreTexture) { + // 直接将材质序列化 const mat = { - name: materialInfo.materialName + ++idx, + name: materialInfo.materialName, logo: await scene.GenerateMaterialLogoAsync(), // jsonString -> Deflate -> BinaryString -> Base64 file: ToDeflatedBase64(await scene.SerializeMaterialAsync()) }; result.push(mat); + } + else { + // 遍历纹理链接列表,更改纹理后将材质序列化,然后还原场景 + let idx = 0; + for (const src of _textureSrc.value) { + await scene.ChangeTextureFromUrlAsync(src); + const mat = { + name: materialInfo.materialName + ++idx, + logo: await scene.GenerateMaterialLogoAsync(), + // jsonString -> Deflate -> BinaryString -> Base64 + file: ToDeflatedBase64(await scene.SerializeMaterialAsync()) + }; + result.push(mat); + } } + await scene.ChangeTextureFromUrlAsync(_textureSrc.value[0]); emits('submit', result); return result; diff --git a/src/components/MaterialView.vue b/src/components/MaterialView.vue index 813cd86..7cee791 100644 --- a/src/components/MaterialView.vue +++ b/src/components/MaterialView.vue @@ -1,7 +1,8 @@