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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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')
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)
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)
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')
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)
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)
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)
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)
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)
def get(self, request): try: return sync_send_command('center') except Exception as e: return ResponseDto(success=False, message=e.message)