Compare commits

..

9 Commits
main ... dev

Author SHA1 Message Date
aarizona 5ec685374d use url 2024-09-10 11:26:00 +03:00
aarizona 0a801c4188 add file 2024-09-10 11:12:42 +03:00
aarizona 50c78fd219 remove fog totally 2024-09-09 16:47:28 +03:00
aarizona 19026731f6 docker fix 2024-09-06 20:48:09 +03:00
aarizona 1219204f45 mass glb import 2024-09-06 20:45:10 +03:00
Kseninia Mikhaylova 6cbb63b4e8 sidebar btn 2024-09-06 16:54:02 +03:00
Kseninia Mikhaylova 1329678fe6 controls update 2024-09-06 16:46:12 +03:00
Kseninia Mikhaylova e9ebc96aac close sidebar fully 2024-09-06 16:35:00 +03:00
Kseninia Mikhaylova 8872674ba6 revert visible 2024-09-06 16:21:21 +03:00
10 changed files with 46 additions and 5 deletions

1
.gitignore vendored
View File

@ -2,6 +2,7 @@
files/* files/*
postgres_data/* postgres_data/*
export_images/* export_images/*
glb_import/*
.vscode/ .vscode/
__pycache__/ __pycache__/
poetry.lock poetry.lock

View File

@ -26,6 +26,7 @@ class Item(models.Model):
slug = models.SlugField(unique=True) slug = models.SlugField(unique=True)
images = models.ManyToManyField(Image) images = models.ManyToManyField(Image)
scene_3d = models.ForeignKey(Scene3D, on_delete=models.RESTRICT) 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() is_front = models.BooleanField()
def __str__(self): def __str__(self):

View File

@ -11,6 +11,7 @@ class ImageSerializer(serializers.ModelSerializer):
class ItemSerializer(serializers.ModelSerializer): class ItemSerializer(serializers.ModelSerializer):
images = ImageSerializer(many=True) images = ImageSerializer(many=True)
file = serializers.FileField(use_url=False)
class Meta: class Meta:
lookup_field = 'slug' lookup_field = 'slug'

View File

@ -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())

View File

@ -37,6 +37,7 @@ services:
volumes: volumes:
- ./.env:/app/.env - ./.env:/app/.env
- ./files:/app/files - ./files:/app/files
- ./glb_import:/app/object/management/commands/data
networks: networks:
- dev - dev

View File

@ -50,7 +50,7 @@ const loadEnv = async () => {
const c = new Color() const c = new Color()
c.set(props.clear_color || PROMOBG) c.set(props.clear_color || PROMOBG)
renderer.value.setClearColor(c) 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 } const hsl_value = { h: 0, s: 0, l: 0 }
new Color(props.clear_color).getHSL(hsl_value); new Color(props.clear_color).getHSL(hsl_value);

View File

@ -58,7 +58,7 @@ const sidebarFunc = () => {
if (sidebar.is_open) { if (sidebar.is_open) {
sidebar.close() sidebar.close()
} else { } else {
sidebar.open() sidebar.is_open = true
} }
} }

View File

@ -245,6 +245,7 @@ watch(() => props.source, () => {
} }
console.log('props change') console.log('props change')
sidebar.close() sidebar.close()
sidebar.closeBtn()
} else { } else {
renderer.value.dispose() renderer.value.dispose()
} }
@ -294,7 +295,7 @@ onBeforeRender(() => {
const dis_to_cam = camera.value?.position.distanceTo(el.value[0].position); const dis_to_cam = camera.value?.position.distanceTo(el.value[0].position);
if (dis_to_cam) { 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].children[0].scale.set(scaling, scaling, scaling);
el.value[0].updateMatrixWorld() el.value[0].updateMatrixWorld()
} }
@ -335,6 +336,8 @@ onBeforeRender(() => {
} }
} }
(controls.value as any).update()
}) })
watch(() => targetDistance.min, () => { watch(() => targetDistance.min, () => {

View File

@ -4,12 +4,14 @@ type state = {
name?: string, name?: string,
description?: string, description?: string,
clickable: PromoScene[], clickable: PromoScene[],
_visible: { id: number, is_enabled: boolean }[],
visible: PromoScene[], visible: PromoScene[],
} }
export const usePromoScene = defineStore('promo_scene', { export const usePromoScene = defineStore('promo_scene', {
state: () => { state: () => {
return { return {
clickable: [], clickable: [],
_visible: [],
visible: [], visible: [],
} as state } as state
}, },
@ -22,7 +24,10 @@ export const usePromoScene = defineStore('promo_scene', {
this.clickable = data this.clickable = data
}, },
setVisible(data: PromoScene[]) { 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)
} }
} }
}) })

View File

@ -1,5 +1,6 @@
import { defineStore } from 'pinia' import { defineStore } from 'pinia'
import { useClickable } from './clickable' import { useClickable } from './clickable'
import { usePromoScene } from './promo_scene'
export const usePromoSidebar = defineStore('promo_sidebar', { export const usePromoSidebar = defineStore('promo_sidebar', {
state: () => { state: () => {
@ -47,13 +48,18 @@ export const usePromoSidebar = defineStore('promo_sidebar', {
// this.target = undefined; // this.target = undefined;
// this.loading = true; // this.loading = true;
this.is_open = false; this.is_open = false;
this.accordions = [] // this.accordions = [];
} }
}, },
closeBtn() { closeBtn() {
this.$reset; this.$reset;
this.is_open = false; this.is_open = false;
this.is_btn_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) { toggleAccordion(name: string, newState = null) {
if (name == 'obj' && this.accordions.includes('clickable')) this.toggleAccordion('clickable') if (name == 'obj' && this.accordions.includes('clickable')) this.toggleAccordion('clickable')