OpenDroneMap-WebODM/app/api/potree.py

56 wiersze
1.7 KiB
Python

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)
"""
get_and_check_project(request, project_pk, perms=("change_project", ))
task = self.get_and_check_task(request, pk)
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
"""
get_and_check_project(request, project_pk, perms=("change_project", ))
task = self.get_and_check_task(request, pk)
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})