allow separation of 3d file into individual meshes

This commit is contained in:
2026-04-08 11:16:24 +03:00
parent 4aa9bcdbd6
commit 8d9c7216c3
5 changed files with 14 additions and 4 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "pronature-platform", "name": "pronature-platform",
"version": "0.8.0", "version": "0.9.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "vite", "dev": "vite",
+1 -2
View File
@@ -213,7 +213,6 @@ export default {
}, },
selectObject(oid){ selectObject(oid){
console.log('Selecting object', oid)
this.currentObject = this.flatObjects[oid]?.value; this.currentObject = this.flatObjects[oid]?.value;
this.selectedObject = [oid]; this.selectedObject = [oid];
engine.transformControls.attach(this.currentObject.__o); engine.transformControls.attach(this.currentObject.__o);
@@ -226,7 +225,7 @@ export default {
targetClick(e){ targetClick(e){
if (performance.now() - this.pointerDownTime < 200){ if (performance.now() - this.pointerDownTime < 200){
let intersects = engine.intersect(e, this.$refs.target, engine.activeObjects.children, true); let intersects = engine.intersect(e, this.$refs.target, this.flatObjects.map(o=>o.value.__o), true);
if (intersects.length){ if (intersects.length){
this.selectObject(intersects[0].object.__pn_id) this.selectObject(intersects[0].object.__pn_id)
}else{ }else{
@@ -8,6 +8,15 @@ class GenericObject extends EventManager{
this.source = await engine.load(data.$go.asset.name); this.source = await engine.load(data.$go.asset.name);
this.object = engine.meshUtils.bottomOrigin(this.source.scene) this.object = engine.meshUtils.bottomOrigin(this.source.scene)
if (data.asIndividuals){
this.object.hasIndividualChildren = true;
this.source.scene.traverse(o=>{
if (o.isMesh){
o.isIndividual = true;
}
})
}
if (!data.exclude){ if (!data.exclude){
engine.clickable.add(this.object, async e=>{ engine.clickable.add(this.object, async e=>{
this.object.__onhud = !this.object.__onhud; this.object.__onhud = !this.object.__onhud;
@@ -8,6 +8,8 @@
<v-textarea :label="l.description" v-model="modelValue.description" class="mt-3"></v-textarea> <v-textarea :label="l.description" v-model="modelValue.description" class="mt-3"></v-textarea>
<v-checkbox density="compact" v-model="modelValue.hud" hide-details :label="l.viewInHUD"></v-checkbox> <v-checkbox density="compact" v-model="modelValue.hud" hide-details :label="l.viewInHUD"></v-checkbox>
<v-checkbox density="compact" v-model="modelValue.exclude" hide-details :label="l.disableInteractions"></v-checkbox> <v-checkbox density="compact" v-model="modelValue.exclude" hide-details :label="l.disableInteractions"></v-checkbox>
<v-checkbox density="compact" v-model="modelValue.asIndividuals" hide-details label="asIndividuals(experimental)"></v-checkbox>
<v-select :label="l.collisionType" v-model="modelValue.collisionType" density="compact" hide-details <v-select :label="l.collisionType" v-model="modelValue.collisionType" density="compact" hide-details
:items="collisionTypes"></v-select> :items="collisionTypes"></v-select>
<v-img :src="`/asset/thumb/${modelValue.go}.webp`" /> <v-img :src="`/asset/thumb/${modelValue.go}.webp`" />
+1 -1
View File
@@ -16,7 +16,6 @@
<v-textarea :label="l.description" v-model="object.description"></v-textarea> <v-textarea :label="l.description" v-model="object.description"></v-textarea>
<v-select :label="l.objectType" v-model="object.type" :items="$p.objectTypes.map(ot=>({title:l[ot.value], value:ot.value}))" tit :rules="[rules.required]"> <v-select :label="l.objectType" v-model="object.type" :items="$p.objectTypes.map(ot=>({title:l[ot.value], value:ot.value}))" tit :rules="[rules.required]">
</v-select> </v-select>
<v-file-input :label="l.objectFile" v-model="file" :rules="[rules.requiredFile]"></v-file-input>
<v-combobox clearable chips multiple :label="l.tags" v-model="object.tags" :items="tagList"> <v-combobox clearable chips multiple :label="l.tags" v-model="object.tags" :items="tagList">
<template v-slot:chip="{ props, item }"> <template v-slot:chip="{ props, item }">
<v-chip v-bind="props" label> <v-chip v-bind="props" label>
@@ -26,6 +25,7 @@
</v-chip> </v-chip>
</template> </template>
</v-combobox> </v-combobox>
<v-file-input :label="l.objectFile" v-model="file" :rules="[rules.requiredFile]"></v-file-input>
<div v-if="object.asset" closable-chips deletable-chips :delimiters="[',']">{{ object.asset.name }} | {{ object.asset.ofn }}</div> <div v-if="object.asset" closable-chips deletable-chips :delimiters="[',']">{{ object.asset.name }} | {{ object.asset.ofn }}</div>
</v-form> </v-form>
<v-card-actions> <v-card-actions>