Compare commits
9 Commits
Author | SHA1 | Date |
---|---|---|
|
5ec685374d | |
|
0a801c4188 | |
|
50c78fd219 | |
|
19026731f6 | |
|
1219204f45 | |
|
6cbb63b4e8 | |
|
1329678fe6 | |
|
e9ebc96aac | |
|
8872674ba6 |
|
@ -2,6 +2,7 @@
|
|||
files/*
|
||||
postgres_data/*
|
||||
export_images/*
|
||||
glb_import/*
|
||||
.vscode/
|
||||
__pycache__/
|
||||
poetry.lock
|
||||
|
|
|
@ -26,6 +26,7 @@ class Item(models.Model):
|
|||
slug = models.SlugField(unique=True)
|
||||
images = models.ManyToManyField(Image)
|
||||
scene_3d = models.ForeignKey(Scene3D, on_delete=models.RESTRICT)
|
||||
file = models.FileField(blank=True, null=True, upload_to=group_based_upload_to)
|
||||
is_front = models.BooleanField()
|
||||
|
||||
def __str__(self):
|
||||
|
|
|
@ -11,6 +11,7 @@ class ImageSerializer(serializers.ModelSerializer):
|
|||
|
||||
class ItemSerializer(serializers.ModelSerializer):
|
||||
images = ImageSerializer(many=True)
|
||||
file = serializers.FileField(use_url=False)
|
||||
|
||||
class Meta:
|
||||
lookup_field = 'slug'
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
from django.core.management.base import BaseCommand, CommandError
|
||||
from django.core.files import File
|
||||
import glob
|
||||
import os
|
||||
import logging
|
||||
from object.models import Element3D, Scene3D
|
||||
logger = logging.getLogger("root")
|
||||
|
||||
class Command(BaseCommand):
|
||||
def handle(self, *args, **options):
|
||||
root_directory = "object/management/commands/data"
|
||||
|
||||
files = glob.glob("*.glb", recursive=True, root_dir=root_directory)
|
||||
hv = Scene3D.objects.get(id=48)
|
||||
for f in files:
|
||||
with open(os.path.join(root_directory, f), 'rb') as file:
|
||||
el = Element3D(name=f)
|
||||
el.model_file = File(file, f)
|
||||
el.save()
|
||||
logger.info(el)
|
||||
hv.elements.add(el)
|
||||
logger.info(hv.elements.count())
|
||||
|
|
@ -37,6 +37,7 @@ services:
|
|||
volumes:
|
||||
- ./.env:/app/.env
|
||||
- ./files:/app/files
|
||||
- ./glb_import:/app/object/management/commands/data
|
||||
networks:
|
||||
- dev
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ const loadEnv = async () => {
|
|||
const c = new Color()
|
||||
c.set(props.clear_color || PROMOBG)
|
||||
renderer.value.setClearColor(c)
|
||||
scene.value.fog = new Fog(c, props.focus * k.start, props.focus * k.end)
|
||||
// scene.value.fog = new Fog(c, props.focus * k.start, props.focus * k.end)
|
||||
|
||||
const hsl_value = { h: 0, s: 0, l: 0 }
|
||||
new Color(props.clear_color).getHSL(hsl_value);
|
||||
|
|
|
@ -58,7 +58,7 @@ const sidebarFunc = () => {
|
|||
if (sidebar.is_open) {
|
||||
sidebar.close()
|
||||
} else {
|
||||
sidebar.open()
|
||||
sidebar.is_open = true
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -245,6 +245,7 @@ watch(() => props.source, () => {
|
|||
}
|
||||
console.log('props change')
|
||||
sidebar.close()
|
||||
sidebar.closeBtn()
|
||||
} else {
|
||||
renderer.value.dispose()
|
||||
}
|
||||
|
@ -294,7 +295,7 @@ onBeforeRender(() => {
|
|||
|
||||
const dis_to_cam = camera.value?.position.distanceTo(el.value[0].position);
|
||||
if (dis_to_cam) {
|
||||
const scaling = (0.5 * dis_to_cam) / 100
|
||||
const scaling = (0.66 * dis_to_cam) / 100
|
||||
el.value[0].children[0].scale.set(scaling, scaling, scaling);
|
||||
el.value[0].updateMatrixWorld()
|
||||
}
|
||||
|
@ -335,6 +336,8 @@ onBeforeRender(() => {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
(controls.value as any).update()
|
||||
})
|
||||
|
||||
watch(() => targetDistance.min, () => {
|
||||
|
|
|
@ -4,12 +4,14 @@ type state = {
|
|||
name?: string,
|
||||
description?: string,
|
||||
clickable: PromoScene[],
|
||||
_visible: { id: number, is_enabled: boolean }[],
|
||||
visible: PromoScene[],
|
||||
}
|
||||
export const usePromoScene = defineStore('promo_scene', {
|
||||
state: () => {
|
||||
return {
|
||||
clickable: [],
|
||||
_visible: [],
|
||||
visible: [],
|
||||
} as state
|
||||
},
|
||||
|
@ -22,7 +24,10 @@ export const usePromoScene = defineStore('promo_scene', {
|
|||
this.clickable = data
|
||||
},
|
||||
setVisible(data: PromoScene[]) {
|
||||
this.visible = data
|
||||
this._visible = data.slice(0).map(el => {
|
||||
return { id: el.id, is_enabled: el.is_enabled ?? true }
|
||||
})
|
||||
this.visible = data.slice(0)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import { defineStore } from 'pinia'
|
||||
import { useClickable } from './clickable'
|
||||
import { usePromoScene } from './promo_scene'
|
||||
|
||||
export const usePromoSidebar = defineStore('promo_sidebar', {
|
||||
state: () => {
|
||||
|
@ -47,13 +48,18 @@ export const usePromoSidebar = defineStore('promo_sidebar', {
|
|||
// this.target = undefined;
|
||||
// this.loading = true;
|
||||
this.is_open = false;
|
||||
this.accordions = []
|
||||
// this.accordions = [];
|
||||
}
|
||||
},
|
||||
closeBtn() {
|
||||
this.$reset;
|
||||
this.is_open = false;
|
||||
this.is_btn_open = false;
|
||||
|
||||
const sidebar_scene = usePromoScene()
|
||||
sidebar_scene.visible.map(el => {
|
||||
el.is_enabled = (sidebar_scene._visible.find(item => item.id == el.id) ?? { is_enabled: true }).is_enabled
|
||||
})
|
||||
},
|
||||
toggleAccordion(name: string, newState = null) {
|
||||
if (name == 'obj' && this.accordions.includes('clickable')) this.toggleAccordion('clickable')
|
||||
|
|
Loading…
Reference in New Issue