zhongrj
2025-11-24 276323dce9613867abb3f58a4cc2abbfb2fd0dea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
from .tasks import TaskNestedView
from .common import get_and_check_project
from rest_framework.response import Response
from rest_framework import exceptions
 
class Scene(TaskNestedView):
    def get(self, request, pk=None, project_pk=None):
        """
        Retrieve Potree scene information
        """
        task = self.get_and_check_task(request, pk)
 
        return Response(task.potree_scene)
    
    def post(self, request, pk=None, project_pk=None):
        """
        Store potree scene information (except camera view)
        """
        task = self.get_and_check_task(request, pk)
        if (not task.public) or (task.public and not task.public_edit):
            get_and_check_project(request, project_pk, perms=("change_project", ))
        scene = request.data
 
        # Quick type check
        if scene.get('type') != 'Potree':
            raise exceptions.ValidationError(detail="Invalid potree scene")
        
        for k in scene:
            if not k in ["view", "pointclouds", "settings"]:
                task.potree_scene[k] = scene[k]
 
        task.save()
        return Response({'success': True})
 
class CameraView(TaskNestedView):
    def post(self, request, pk=None, project_pk=None):
        """
        Store camera view information
        """
        task = self.get_and_check_task(request, pk)
        if (not task.public) or (task.public and not task.public_edit):
            get_and_check_project(request, project_pk, perms=("change_project", ))
 
        view = request.data
        if not view:
            raise exceptions.ValidationError(detail="view parameter missing")
 
        if not task.potree_scene:
            init_p = {
                'type': 'Potree',
                'version': 1.7
            } 
            task.potree_scene = init_p
        
        task.potree_scene['view'] = view
        task.save()
            
        return Response({'success': True})