Exemple #1
0
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()
Exemple #2
0
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()