bx-865-apps #1

Merged
ksenia_mikhailova merged 140 commits from bx-865-apps into main 2024-06-27 15:03:27 +03:00
9 changed files with 94 additions and 20 deletions
Showing only changes of commit 1007144c08 - Show all commits

View File

@ -176,6 +176,22 @@
"detail": "django.db",
"documentation": {}
},
{
"label": "migrations",
"importPath": "django.db",
"description": "django.db",
"isExtraImport": true,
"detail": "django.db",
"documentation": {}
},
{
"label": "models",
"importPath": "django.db",
"description": "django.db",
"isExtraImport": true,
"detail": "django.db",
"documentation": {}
},
{
"label": "models",
"importPath": "django.db",
@ -1012,7 +1028,7 @@
"kind": 5,
"importPath": "back.back.urls",
"description": "back.back.urls",
"peekOfCode": "router = routers.DefaultRouter()\nrouter.register(r'api/front_img', frontimg_views.ImageViewSet)\nrouter.register(r'api/obj/element', object_views.Element3DViewSet)\nrouter.register(r'api/obj/clickable', object_views.ClickableAreaViewSet)\nurlpatterns = [\n path('', include(router.urls)),\n path(\"admin/\", admin.site.urls),\n path(\"api/products\", csrf_exempt(views.Products.as_view())),\n path(\"api/floorplan/\", csrf_exempt(views.FloorplanView.as_view())),\n path(\"api/floorplan/<str:id>\", csrf_exempt(views.FloorplanView.as_view())),",
"peekOfCode": "router = routers.DefaultRouter()\nrouter.register(r'api/front_img', frontimg_views.ImageViewSet)\nrouter.register(r'api/obj/scene', object_views.Scene3DViewSet)\nrouter.register(r'api/obj/element', object_views.Element3DViewSet)\nrouter.register(r'api/obj/clickable', object_views.ClickableAreaViewSet)\nurlpatterns = [\n path('', include(router.urls)),\n path(\"admin/\", admin.site.urls),\n path(\"api/products\", csrf_exempt(views.Products.as_view())),\n path(\"api/floorplan/\", csrf_exempt(views.FloorplanView.as_view())),",
"detail": "back.back.urls",
"documentation": {}
},
@ -1169,6 +1185,15 @@
"detail": "back.object.migrations.0008_alter_clickablearea_target",
"documentation": {}
},
{
"label": "Migration",
"kind": 6,
"importPath": "back.object.migrations.0009_alter_clickablearea_description_and_more",
"description": "back.object.migrations.0009_alter_clickablearea_description_and_more",
"peekOfCode": "class Migration(migrations.Migration):\n dependencies = [\n ('object', '0008_alter_clickablearea_target'),\n ]\n operations = [\n migrations.AlterField(\n model_name='clickablearea',\n name='description',\n field=models.TextField(verbose_name='описание'),\n ),",
"detail": "back.object.migrations.0009_alter_clickablearea_description_and_more",
"documentation": {}
},
{
"label": "ObjectConfig",
"kind": 6,
@ -1187,12 +1212,21 @@
"detail": "back.object.models",
"documentation": {}
},
{
"label": "Scene3D",
"kind": 6,
"importPath": "back.object.models",
"description": "back.object.models",
"peekOfCode": "class Scene3D(models.Model):\n name = models.CharField(\n max_length=120,\n )\n elements = models.ManyToManyField(Element3D)\nclass ClickableArea(models.Model):\n name = models.CharField(\"название\", max_length=255)\n description = models.TextField(\"описание\")\n object_name = models.CharField(\"название объекта\", max_length=255)\n target = models.ForeignKey(",
"detail": "back.object.models",
"documentation": {}
},
{
"label": "ClickableArea",
"kind": 6,
"importPath": "back.object.models",
"description": "back.object.models",
"peekOfCode": "class ClickableArea(models.Model):\n name = models.CharField(max_length=255)\n description = models.TextField()\n object_name = models.CharField(max_length=255)\n target = models.ForeignKey(\n Element3D,\n on_delete=models.PROTECT,\n related_name=\"clickable_areas\",\n blank=True,\n null=True,",
"peekOfCode": "class ClickableArea(models.Model):\n name = models.CharField(\"название\", max_length=255)\n description = models.TextField(\"описание\")\n object_name = models.CharField(\"название объекта\", max_length=255)\n target = models.ForeignKey(\n Element3D,\n on_delete=models.PROTECT,\n related_name=\"clickable_areas\",\n blank=True,\n null=True,",
"detail": "back.object.models",
"documentation": {}
},
@ -1219,7 +1253,16 @@
"kind": 6,
"importPath": "back.object.serializers",
"description": "back.object.serializers",
"peekOfCode": "class Element3DSerializer(serializers.ModelSerializer):\n model_file = serializers.ImageField(use_url=False)\n class Meta:\n model = Element3D\n fields = \"__all__\"\nclass ClickableAreaSerializer(serializers.ModelSerializer):\n class Meta:\n model = ClickableArea\n fields = \"__all__\"",
"peekOfCode": "class Element3DSerializer(serializers.ModelSerializer):\n model_file = serializers.ImageField(use_url=False)\n class Meta:\n model = Element3D\n fields = \"__all__\"\nclass Scene3DSerializer(serializers.ModelSerializer):\n class Meta:\n model = Scene3D\n fields = \"__all__\"\n depth = 2",
"detail": "back.object.serializers",
"documentation": {}
},
{
"label": "Scene3DSerializer",
"kind": 6,
"importPath": "back.object.serializers",
"description": "back.object.serializers",
"peekOfCode": "class Scene3DSerializer(serializers.ModelSerializer):\n class Meta:\n model = Scene3D\n fields = \"__all__\"\n depth = 2\nclass ClickableAreaSerializer(serializers.ModelSerializer):\n class Meta:\n model = ClickableArea\n fields = \"__all__\"",
"detail": "back.object.serializers",
"documentation": {}
},
@ -1237,7 +1280,7 @@
"kind": 6,
"importPath": "back.object.views",
"description": "back.object.views",
"peekOfCode": "class NumberInFilter(django_filters.BaseInFilter, django_filters.NumberFilter):\n pass\nclass ClickableAreaViewSet(viewsets.ModelViewSet):\n queryset = ClickableArea.objects.all()\n serializer_class = ClickableAreaSerializer\n filterset_fields = (\n \"source\",\n \"object_name\",\n )\nclass Element3DFilter(django_filters.rest_framework.FilterSet):",
"peekOfCode": "class NumberInFilter(django_filters.BaseInFilter, django_filters.NumberFilter):\n pass\nclass ClickableAreaViewSet(viewsets.ModelViewSet):\n queryset = ClickableArea.objects.all()\n serializer_class = ClickableAreaSerializer\n filterset_fields = (\n \"source\",\n \"object_name\",\n )\nclass Scene3DViewSet(viewsets.ModelViewSet):",
"detail": "back.object.views",
"documentation": {}
},
@ -1246,7 +1289,16 @@
"kind": 6,
"importPath": "back.object.views",
"description": "back.object.views",
"peekOfCode": "class ClickableAreaViewSet(viewsets.ModelViewSet):\n queryset = ClickableArea.objects.all()\n serializer_class = ClickableAreaSerializer\n filterset_fields = (\n \"source\",\n \"object_name\",\n )\nclass Element3DFilter(django_filters.rest_framework.FilterSet):\n parent = NumberInFilter(\n field_name=\"parent\",",
"peekOfCode": "class ClickableAreaViewSet(viewsets.ModelViewSet):\n queryset = ClickableArea.objects.all()\n serializer_class = ClickableAreaSerializer\n filterset_fields = (\n \"source\",\n \"object_name\",\n )\nclass Scene3DViewSet(viewsets.ModelViewSet):\n queryset = Scene3D.objects.all()\n serializer_class = Scene3DSerializer",
"detail": "back.object.views",
"documentation": {}
},
{
"label": "Scene3DViewSet",
"kind": 6,
"importPath": "back.object.views",
"description": "back.object.views",
"peekOfCode": "class Scene3DViewSet(viewsets.ModelViewSet):\n queryset = Scene3D.objects.all()\n serializer_class = Scene3DSerializer\n filterset_fields = (\n \"name\",\n )\nclass Element3DFilter(django_filters.rest_framework.FilterSet):\n parent = NumberInFilter(\n field_name=\"parent\",\n lookup_expr=\"in\",",
"detail": "back.object.views",
"documentation": {}
},

View File

@ -26,6 +26,7 @@ from object import views as object_views
router = routers.DefaultRouter()
router.register(r'api/front_img', frontimg_views.ImageViewSet)
router.register(r'api/obj/scene', object_views.Scene3DViewSet)
router.register(r'api/obj/element', object_views.Element3DViewSet)
router.register(r'api/obj/clickable', object_views.ClickableAreaViewSet)

View File

@ -1,5 +1,6 @@
from django.contrib import admin
from .models import Element3D, ClickableArea
from .models import ClickableArea, Element3D, Scene3D
admin.site.register(Scene3D)
admin.site.register(Element3D)
admin.site.register(ClickableArea)

View File

@ -28,6 +28,13 @@ class Element3D(models.Model):
return self.name
class Scene3D(models.Model):
name = models.CharField(
max_length=120,
)
elements = models.ManyToManyField(Element3D)
class ClickableArea(models.Model):
name = models.CharField("название", max_length=255)
description = models.TextField("описание")

View File

@ -1,5 +1,5 @@
from rest_framework import serializers
from .models import Element3D, ClickableArea
from .models import Scene3D, Element3D, ClickableArea
class Element3DSerializer(serializers.ModelSerializer):
@ -8,6 +8,12 @@ class Element3DSerializer(serializers.ModelSerializer):
model = Element3D
fields = "__all__"
class Scene3DSerializer(serializers.ModelSerializer):
class Meta:
model = Scene3D
fields = "__all__"
depth = 2
class ClickableAreaSerializer(serializers.ModelSerializer):
class Meta:
model = ClickableArea

View File

@ -1,8 +1,8 @@
from rest_framework import viewsets
import django_filters
from .models import ClickableArea, Element3D
from .serializers import ClickableAreaSerializer, Element3DSerializer
from .models import ClickableArea, Element3D, Scene3D
from .serializers import ClickableAreaSerializer, Element3DSerializer, Scene3DSerializer
class NumberInFilter(django_filters.BaseInFilter, django_filters.NumberFilter):
@ -17,6 +17,12 @@ class ClickableAreaViewSet(viewsets.ModelViewSet):
"object_name",
)
class Scene3DViewSet(viewsets.ModelViewSet):
queryset = Scene3D.objects.all()
serializer_class = Scene3DSerializer
filterset_fields = (
"name",
)
class Element3DFilter(django_filters.rest_framework.FilterSet):
parent = NumberInFilter(

View File

@ -24,17 +24,14 @@ function shadows_and_pos(scene: any) {
const models = ref<model3DType[]>([])
const clickable = ref<clickableAreaType[]>([])
const clickable_objects = ref<any[]>([])
const { controls, raycaster, camera, scene, renderer } = useTresContext()
const { controls, raycaster, camera, scene } = useTresContext()
const { seekByName } = useSeek()
const sidebar = usePromoSidebar()
const loadModels = async () => {
const res = await fetch(`${SERVER_URL}/api/obj/element/${props.source}`)
const raw_data = await res.json() as element3DType[] | element3DType
let data = raw_data as element3DType[]
if (props.source.endsWith('/')) {
data = [raw_data] as element3DType[]
}
const res = await fetch(`${SERVER_URL}/api/obj/scene/${props.source}`)
const raw_data = await res.json() as scene3D
const data = raw_data.elements
if (!controls.value) return
const c = (controls.value as any)
const distance = {

View File

@ -36,9 +36,9 @@ const point_light = reactive({
})
const route = useRoute()
const source = ref(route.params.target ? (route.params.target.toString() + '/') : '?parent__isnull=True')
const source = ref(route.params.target ? (route.params.target.toString() + '/') : '1/')
watch(() => route.params.target, () => {
let t = '?parent__isnull=True'
let t = '1'
if (route.params.target) t = route.params.target.toString() + '/'
if (source.value !== t) {
source.value = t

View File

@ -9,7 +9,11 @@ interface ProductInfo {
image3?: string
}
interface scene3D {
id: number,
name: string,
elements: element3DType[]
}
interface element3DType {
id: number
model_file: string