Ejemplo n.º 1
0
 def get(self, request):
     """
     Change window center and window width
     :param ww: ww
     :param wl: wl
     :return: rgb image data
     """
     try:
         ww = request.GET.get('ww', None)
         wl = request.GET.get('wl', None)
         if ww is None or wl is None:
             return ResponseDto(success=False, message='请输入完整的请求数据')
         return sync_send_command('wwwl', ww=ww, wl=wl)
     except Exception as e:
         return ResponseDto(success=False, message=e.message)
Ejemplo n.º 2
0
    def get(self, request):
        """
        the client request loads a series
        :param seriesuid: series uid
        :return:boolean true for success, false for failure
        """
        try:
            seriesuid = request.GET.get('seriesuid', None)
            series, msg = series_svc.get_series_by_uid(seriesuid)
            if series is None:
                return ResponseDto(success=False, message=msg)

            with open(series.seriespixeldatafilepath, 'rb') as f:
                vol = f.read()
            return sync_load_volume(vol)
        except Exception as e:
            return ResponseDto(success=False, message=e.message)
Ejemplo n.º 3
0
 def get(self, request):
     """
     Reset voulme data
     :return: True or False
     """
     try:
         return sync_send_command('reset')
     except Exception as e:
         return ResponseDto(success=False, message=e.message)
Ejemplo n.º 4
0
 def put(self, request):
     cps = [request.data.get('contours', None)]
     contour_uid = request.data.get('contour_uid', None)
     rst = sync_send_command('point2dto3d', contours=cps)
     if not rst.data['success']:
         return rst
     cps = json.loads(rst.data['data'])['contours']
     success, msg = contour_svc.update_by_contouruid(contour_uid, cps)
     return ResponseDto(success=success, message=msg)
Ejemplo n.º 5
0
 def get(self, request):
     try:
         colormode = request.GET.get('colormode', '0')
         display_view = request.GET.get('display_view', 'all')
         return sync_send_command('color',
                                  colormode=colormode,
                                  display_view=display_view)
     except Exception as e:
         return ResponseDto(success=True, message=e.message)
Ejemplo n.º 6
0
 def get(self, request):
     """
     the client request loads a series and get images
     :return: rgb image data
     """
     try:
         return sync_send_command('show')
     except Exception as e:
         return ResponseDto(success=False, message=e.message)
Ejemplo n.º 7
0
    def get(self, request):
        series_uid = request.GET.get('seriesuid', None)
        roi_uid = request.GET.get('roiuid', None)
        mask_fp = file_path_ferry.volumePath + r'{}_mask.nii.gz'.format(series_uid)
        success, msg = contour_svc.contour_2_mask(mask_fp, roi_uid)
        if not success:
            return ResponseDto(success=False, message=msg)

        return FileResponseDto(mask_fp)
Ejemplo n.º 8
0
 def get(self, request):
     """
     Zoom
     :param shift: zoom factor shift
     :param focus_view: current focused view, 'transverse' for transverse,
           'saggital' for saggital, 'coronal' for coronal
     :return: rgb image data
     """
     try:
         zoom_factor = request.GET.get('zoom_factor', '0')
         focus_view = request.GET.get('focus_view', None)
         if focus_view is None:
             return ResponseDto(success=False, message='请输入完整的请求数据')
         return sync_send_command('zoom',
                                  zoom_factor=zoom_factor,
                                  focus_view=focus_view)
     except Exception as e:
         return ResponseDto(success=False, message=e.message)
Ejemplo n.º 9
0
def sync_send_command(command, **kwargs):
    data = msg.RequestMsg()
    data.command = command
    data.content = json.dumps(kwargs)
    data = data.SerializeToString()
    rst = proxy.sync_send_command(data, CmdId.cmd_id_render, 'img_srv')

    data = msg.ResponseMsg()
    data.ParseFromString(rst)
    return ResponseDto(success=data.success, message=data.comment, data=data.content)
Ejemplo n.º 10
0
    def get(self, request):
        """
        Rotate
        :param angle: rotate angle
        :param focus_view: current focused view, 'transverse' for transverse,
              'saggital' for saggital, 'coronal' for coronal
        :return: rgb image data
        """
        try:
            pos_pre = request.GET.get('pos_pre', None)
            pos_cur = request.GET.get('pos_cur', None)
            focus_view = request.GET.get('focus_view', None)
            if pos_pre is None or pos_cur is None or focus_view is None:
                return ResponseDto(success=False, message='请输入完整的请求数据')

            return sync_send_command('rotate',
                                     pos_pre=pos_pre,
                                     pos_cur=pos_cur,
                                     focus_view=focus_view)
        except Exception as e:
            return ResponseDto(success=False, message=e.message)
Ejemplo n.º 11
0
    def put(self, request):
        request_data = request.data

        if request_data is None:
            return ResponseDto(success=False, message='请携带有效的seriesuid')
        seriesuid = request_data['params']['updates'][0]['value']
        seriespath = file_path_ferry.splitDicomPath + str(seriesuid)

        if not os.path.exists(seriespath):
            return ResponseDto(success=False, message='请确认series数据是否存在')

        if len(os.listdir(seriespath)) <= 1:
            return ResponseDto(success=False,
                               message='series下的dicom文件单一,无法build volume')

        try:
            builder = VolumeBuilder()
            volfilepath, seriesuid = builder.build(seriespath)
        except Exception as e:
            return ResponseDto(success=True, message='dicom文件不符合规范,创建volume失败')

        success, msg = series_svc.upload_volume(volfilepath, seriesuid)
        if not success:
            return ResponseDto(success=success, message=msg)

        try:
            return sync_send_command('load', volumepath=volfilepath)
        except Exception as e:
            return ResponseDto(success=False, message=e.message)
Ejemplo n.º 12
0
    def get(self, request):
        """
        Opening and closing macro recording, save script
        :param macro_status: the status of macro recording
        :return:
        """
        macro_status = request.GET.get('macro_status', None)
        user_name = request.user
        if macro_status == 'start':
            MacroRecorder.macro_status = True
        elif macro_status == 'finish':
            macro_name = str(user_name) + str(time.time())
            scriptname = '{}.py'.format(macro_name)
            scriptpath = STATIC_ROOT + '/serve/macro/' + scriptname

            try:
                with open(scriptpath, 'a+') as f:
                    f.write(MacroRecorder.code_header + MacroRecorder.code)
            except:
                MacroRecorder.code = MacroRecorder.code
                return ResponseDto('脚本写入失败')

            MacroRecorder.macro_status = False
            MacroRecorder.code = ''

            data = {
                'scriptname': scriptname,
                'userid': 'anonymous',
                'scriptpath': scriptpath
            }

            success, msg = macro_svc.create(data)
            if not success:
                return ResponseDto(success=success, message=msg)

            return ResponseDto(macro_name)
        else:
            pass

        return ResponseDto('OK')
Ejemplo n.º 13
0
    def post(self, request):
        series_uid = request.data.get('seriesuid', None)
        name = request.data.get('name', None)
        color = request.data.get('color', None)

        if series_uid is None or name is None or name is None:
            return ResponseDto(success=False,
                               message='Missing required arguments.')

        uid = UidGenerator.roi_uid()
        params = {
            'seriesuid': series_uid,
            'roiname': name,
            'roicolor': color,
            'roiuid': uid
        }

        success, msg = roi_svc.create(params)
        if not success:
            return ResponseDto(success=False, message=msg)
        else:
            return ResponseDto(uid)
Ejemplo n.º 14
0
 def get(self, request):
     """
     translation
     :param shift: center shift, like [1,1,2], you should pass it like `'1,1,2'`
     :param focus_view: current focused view, 'transverse' for transverse,
           'saggital' for saggital, 'coronal' for coronal
     :param display_view: need to displayed on screen, 'transverse' for transverse,
           'saggital' for saggital, 'coronal' for coronal, 'all' for all view
     :return: rgb image data
     """
     try:
         pos_pre = request.GET.get('pos_pre', None)
         pos_cur = request.GET.get('pos_cur', None)
         focus_view = request.GET.get('focus_view', None)
         if pos_pre is None or pos_cur is None:
             return ResponseDto(success=False, message='请输入完整的请求数据')
         return sync_send_command('pan',
                                  pos_pre=pos_pre,
                                  pos_cur=pos_cur,
                                  focus_view=focus_view)
     except Exception as e:
         return ResponseDto(success=True, message=e.message)
Ejemplo n.º 15
0
    def get(self, request):
        seriesuid = request.GET.get(
            'seriesuid',
            '1.3.12.2.1107.5.1.4.64606.30000018051006052134700006373')
        scriptname = request.GET.get('scriptname',
                                     'AnonymousUser1540275438.76')
        if not seriesuid or not scriptname:
            return ResponseDto('请输入有效的参数')

        series, msg = series_svc.get_series_by_uid(seriesuid)
        if not series:
            return ResponseDto(success=False, message=msg)
        volumepath = series.seriespixeldatafilepath
        try:
            command = 'python static/macro/{}.py {} {}'.format(
                scriptname, seriesuid, volumepath)
            r = os.popen(command)
            info = r.readlines()
            log.dev_info(info)
        except:
            return ResponseDto('script执行异常')

        return ResponseDto('OK')
Ejemplo n.º 16
0
 def get(self, request):
     """
     Page turning
     :param delta: cursor delta
     :param focus_view: current focused view, 'transverse' for transverse,
           'saggital' for saggital, 'coronal' for coronal
     :return: rgb image data
     """
     try:
         delta = request.GET.get('delta', '0')
         focus_view = request.GET.get('focus_view', None)
         return sync_send_command('page',
                                  delta=delta,
                                  focus_view=focus_view)
     except Exception as e:
         return ResponseDto(success=False, message=e.message)
Ejemplo n.º 17
0
 def get(self, request):
     """
     roll
     :param cursor: the 3d world coordinate of a cursor, like [1,1,2], you should pass it like `'1,1,2'`
     :param focus_view: current focused view, 'transverse' for transverse,
           'saggital' for saggital, 'coronal' for coronal
     :return: rgb image data
     """
     try:
         cursor = request.GET.get('cursor', '0')
         focus_view = request.GET.get('focus_view', None)
         return sync_send_command('roll',
                                  cursor=cursor,
                                  focus_view=focus_view)
     except Exception as e:
         return ResponseDto(success=False, message=e.message)
Ejemplo n.º 18
0
 def post(self, request):
     roi_uid = request.data.get('roi_uid', None)
     slice_index = request.data.get('slice_index', None)
     contours = request.data.get('contours', None)
     contour_type = int(request.data.get('contour_type', None))
     contour_uid = request.data.get('contour_uid', None)
     rst = sync_send_command('point2dto3d', contours=contours)
     if not rst.data['success']:
         return rst
     contours = json.loads(rst.data['data'])['contours']
     if contour_type == 0 or contour_uid is None:
         success, msg = contour_svc.create(slice_index, roi_uid, contours,
                                           contour_type)
     else:
         success, msg = contour_svc.create_by_contouruid(
             slice_index, roi_uid, contours, contour_type, contour_uid)
     return ResponseDto(success=success, message=msg)
Ejemplo n.º 19
0
def sync_load_volume(vol):
    rst = proxy.sync_send_command(vol, CmdId.cmd_id_load_volume, 'img_srv')
    data = msg.ResponseMsg()
    data.ParseFromString(rst)
    return ResponseDto(success=data.success, message=data.comment, data=data.content)
Ejemplo n.º 20
0
 def delete(self, request):
     roi_uid = request.GET.get('roi_uid', None)
     slice_index = request.GET.get('slice_index', None)
     success, msg = contour_svc.delete(slice_index)
     return ResponseDto(success=success, message=msg)
Ejemplo n.º 21
0
 def get(self, request):
     try:
         return sync_send_command('center')
     except Exception as e:
         return ResponseDto(success=False, message=e.message)