class TripExportCubeDialog(wx.Dialog): def __init__(self): pre = wx.PreDialog() self.PostCreate(pre) def Init(self, plan): self.plan = plan self.path = "~/" self.output_path = "" self.checkbox_vois = XRCCTRL(self, "checkbox_vois") wx.EVT_LISTBOX(self, XRCID("checkbox_vois"), self.selected_changed) wx.EVT_BUTTON(self, XRCID("btn_ok"), self.save_and_close) wx.EVT_BUTTON(self, XRCID("btn_cancel"), self.close) wx.EVT_BUTTON(self, XRCID("btn_reset"), self.reset) self.lbl_path = XRCCTRL(self, "lbl_path") self.txt_value = XRCCTRL(self, "txt_value") wx.EVT_TEXT(self, XRCID("txt_value"), self.text_value_changed) pub.subscribe(self.path_changed, "general.export.cube_export_path") pub.sendMessage("settings.value.request", "general.export.cube") pub.subscribe(self.patient_data_updated, "patient.loaded") pub.sendMessage("patient.request", {}) for voi in plan.get_vois(): self.checkbox_vois.Append(voi.get_name()) def patient_data_updated(self, msg): self.data = msg.data def selected_changed(self, evt): selected = self.checkbox_vois.GetStringSelection() self.txt_value.SetValue("") for voi in self.plan.get_vois(): if selected == voi.get_name(): if voi.get_cube_value() is -1: self.txt_value.SetValue("") else: self.txt_value.SetValue("%d" % voi.get_cube_value()) def text_value_changed(self, evt): selected = self.checkbox_vois.GetStringSelection() if len(selected) is 0: return for voi in self.plan.get_vois(): if selected == voi.get_name(): try: voi.set_cube_value(int(self.txt_value.GetValue())) except Exception as e: pass def path_changed(self, msg): if not msg.data is None: self.path = msg.data self.lbl_path.SetLabel(self.path) def reset(self, evt): for voi in self.plan.get_vois(): voi.set_cube_value(-1) self.txt_value.SetValue("") for k, item in enumerate(self.checkbox_vois.GetItems()): self.checkbox_vois.Check(k, False) def browse_for_file(self): dlg = wx.FileDialog(self, message="Save Picture", defaultDir=self.path, style=wx.FD_SAVE) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() a = os.path.splitext(path) if not a[-1] is "dos": path = path + ".dos" self.output_path = path pub.sendMessage("settings.value.updated", {"general.export.cube": os.path.dirname(path)}) return True return False def save_and_close(self, evt): selected = self.checkbox_vois.GetCheckedStrings() vois = [] dos = None for voi in self.plan.get_vois(): if voi.get_name() in selected: if dos is None: dos = voi.get_voi().get_voi_data().get_voi_cube( ) / 1000 * voi.get_cube_value() else: dos.cube[dos.cube == 0] = -1 a = voi.get_voi().get_voi_data().get_voi_cube( ) / 1000 * voi.get_cube_value() dos.cube[dos.cube == -1] = a.cube[dos.cube == -1] if not dos is None: if self.browse_for_file(): dos.write(self.output_path) else: return else: pass self.Close() def close(self, evt): self.Close()
class FieldDialog(wx.Dialog): def __init__(self): pre = wx.PreDialog() self.PostCreate(pre) def Init(self, field): self.field = field self.btn_ok = XRCCTRL(self, 'btn_ok') wx.EVT_BUTTON(self, XRCID('btn_ok'), self.save_and_close) self.btn_cancel = XRCCTRL(self, 'btn_close') wx.EVT_BUTTON(self, XRCID('btn_close'), self.close) self.label_fieldname = XRCCTRL(self, 'label_fieldname') self.label_fieldname.SetLabel(field.get_name()) self.check_isocenter = XRCCTRL(self, 'check_isocenter') target = field.get_target() if len(target) > 0: self.check_isocenter.SetValue(True) self.check_isocenter.Bind(wx.EVT_CHECKBOX, self.on_check_isocenter_changed) self.txt_targetx = XRCCTRL(self, 'txt_targetx') self.txt_targety = XRCCTRL(self, 'txt_targety') self.txt_targetz = XRCCTRL(self, 'txt_targetz') if len(target) > 0: self.txt_targetx.SetValue("%.2f" % (target[0])) self.txt_targety.SetValue("%.2f" % (target[1])) self.txt_targetz.SetValue("%.2f" % (target[2])) else: self.txt_targetx.Enable(False) self.txt_targety.Enable(False) self.txt_targetz.Enable(False) self.txt_gantry = XRCCTRL(self, 'txt_gantry') self.txt_gantry.SetValue("%.2f" % field.get_gantry()) self.txt_couch = XRCCTRL(self, 'txt_couch') self.txt_couch.SetValue("%.2f" % field.get_couch()) self.txt_fwhm = XRCCTRL(self, 'txt_fwhm') self.txt_fwhm.SetValue("%.2f" % field.get_fwhm()) self.txt_zsteps = XRCCTRL(self, 'txt_zsteps') self.txt_zsteps.SetValue("%.2f" % field.get_zsteps()) self.txt_doseextension = XRCCTRL(self, 'txt_doseext') self.txt_doseextension.SetValue("%.2f" % field.get_doseextension()) self.txt_contourextension = XRCCTRL(self, 'txt_contourext') self.txt_contourextension.SetValue("%.2f" % field.get_contourextension()) self.txt_raster1 = XRCCTRL(self, 'txt_raster1') self.txt_raster2 = XRCCTRL(self, 'txt_raster2') raster = field.get_rasterstep() self.txt_raster1.SetValue("%.2f" % raster[0]) self.txt_raster2.SetValue("%.2f" % raster[1]) self.drop_projectile = XRCCTRL(self, 'drop_projectile') self.drop_projectile.SetSelection( self.drop_projectile.GetItems().index(field.projectile)) def on_check_isocenter_changed(self, evt): if self.check_isocenter.IsChecked(): self.txt_targetx.Enable(True) self.txt_targety.Enable(True) self.txt_targetz.Enable(True) else: self.txt_targetx.Enable(False) self.txt_targety.Enable(False) self.txt_targetz.Enable(False) def save_and_close(self, evt): self.field.set_couch(self.txt_couch.GetValue()) self.field.set_gantry(self.txt_gantry.GetValue()) self.field.set_fwhm(self.txt_fwhm.GetValue()) if self.check_isocenter.IsChecked(): self.field.set_target(self.txt_targetx.GetValue() + "," + self.txt_targety.GetValue() + "," + self.txt_targetz.GetValue()) else: self.field.set_target("") self.field.set_zsteps(self.txt_zsteps.GetValue()) self.field.set_doseextension(self.txt_doseextension.GetValue()) self.field.set_contourextension(self.txt_contourextension.GetValue()) self.field.set_rasterstep(self.txt_raster1.GetValue(), self.txt_raster2.GetValue()) self.field.set_projectile(self.drop_projectile.GetStringSelection()) self.Close() def close(self, evt): self.Close()