bx-865-apps #1
|
@ -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": {}
|
||||
},
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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)
|
|
@ -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("описание")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -9,7 +9,11 @@ interface ProductInfo {
|
|||
image3?: string
|
||||
}
|
||||
|
||||
|
||||
interface scene3D {
|
||||
id: number,
|
||||
name: string,
|
||||
elements: element3DType[]
|
||||
}
|
||||
interface element3DType {
|
||||
id: number
|
||||
model_file: string
|
||||
|
|
Loading…
Reference in New Issue