Beispiel #1
0
    def initUI(self):               

        cw = QWidget()
        self.setCentralWidget(cw)
        grid = QGridLayout()
        grid.setSpacing(15)
        
        # status bar
        self.statusBar().showMessage('Ready')

        font_label = QFont()
        font_label.setBold(True)

        ################ dicom reader
        rstart = 0
        text_dcm = QLabel('DICOM reader') 
        text_dcm.setFont(font_label)
        self.text_dcm_dir = QLabel('DICOM dir:')
        self.text_dcm_data = QLabel('DICOM data:')
        self.text_dcm_out = QLabel('output file:')
        grid.addWidget(text_dcm, rstart + 0, 1, 1, 4)
        grid.addWidget(self.text_dcm_dir, rstart + 1, 1, 1, 4)
        grid.addWidget(self.text_dcm_data, rstart + 2, 1, 1, 4)
        grid.addWidget(self.text_dcm_out, rstart + 3, 1, 1, 4)

        btn_dcmdir = QPushButton("Load DICOM", self)
        btn_dcmdir.clicked.connect(self.loadDcmDir)
        btn_dcmred = QPushButton("Reduce", self)
        btn_dcmred.clicked.connect(self.reduceDcm)
        btn_dcmcrop = QPushButton("Crop", self)
        btn_dcmcrop.clicked.connect(self.cropDcm)
        btn_dcmsave = QPushButton("Save DCM", self)
        btn_dcmsave.clicked.connect(self.saveDcm)
        grid.addWidget(btn_dcmdir, rstart + 4, 1)
        grid.addWidget(btn_dcmred, rstart + 4, 2)
        grid.addWidget(btn_dcmcrop, rstart + 4, 3)
        grid.addWidget(btn_dcmsave, rstart + 4, 4)

        hr = QFrame()
        hr.setFrameShape(QFrame.HLine)
        grid.addWidget(hr, rstart + 5, 0, 1, 6)

        ################ segmentation
        rstart = 6
        text_seg = QLabel('Segmentation') 
        text_seg.setFont(font_label)
        self.text_seg_in = QLabel('input data:')
        self.text_seg_data = QLabel('segment. data:')
        self.text_seg_out = QLabel('output file:')
        grid.addWidget(text_seg, rstart + 0, 1)
        grid.addWidget(self.text_seg_in, rstart + 1, 1, 1, 4)
        grid.addWidget(self.text_seg_data, rstart + 2, 1, 1, 4)
        grid.addWidget(self.text_seg_out, rstart + 3, 1, 1, 4)

        btn_segload = QPushButton("Load DCM", self)
        btn_segload.clicked.connect(self.loadDcm)
        btn_segauto = QPushButton("Automatic seg.", self)
        btn_segauto.clicked.connect(self.autoSeg)
        btn_segman = QPushButton("Manual seg.", self)
        btn_segman.clicked.connect(self.manualSeg)
        btn_segsave = QPushButton("Save SEG", self)
        btn_segsave.clicked.connect(self.saveSeg)
        grid.addWidget(btn_segload, rstart + 4, 1)
        grid.addWidget(btn_segauto, rstart + 4, 2)
        grid.addWidget(btn_segman, rstart + 4, 3)
        grid.addWidget(btn_segsave, rstart + 4, 4)

        hr = QFrame()
        hr.setFrameShape(QFrame.HLine)
        grid.addWidget(hr, rstart + 5, 0, 1, 6)

        ################ mesh gen.
        rstart = 12
        text_mesh = QLabel('Mesh generation') 
        text_mesh.setFont(font_label)
        self.text_mesh_in = QLabel('input data:')
        self.text_mesh_data = QLabel('mesh data:')
        self.text_mesh_out = QLabel('output file:')
        grid.addWidget(text_mesh, rstart + 0, 1)
        grid.addWidget(self.text_mesh_in, rstart + 1, 1, 1, 4)
        grid.addWidget(self.text_mesh_data, rstart + 2, 1, 1, 4)
        grid.addWidget(self.text_mesh_out, rstart + 3, 1, 1, 4)

        btn_meshload = QPushButton("Load SEG", self)
        btn_meshload.clicked.connect(self.loadSeg)
        btn_meshsave = QPushButton("Save MESH", self)
        btn_meshsave.clicked.connect(self.saveMesh)
        btn_meshgener = QPushButton("Generate", self)
        btn_meshgener.clicked.connect(self.generMesh)
        btn_meshsmooth = QPushButton("Smooth", self)
        btn_meshsmooth.clicked.connect(self.smoothMesh)
        btn_meshview = QPushButton("View", self)
        btn_meshview.clicked.connect(self.viewMesh)
        grid.addWidget(btn_meshload, rstart + 4, 1)
        grid.addWidget(btn_meshgener, rstart + 4, 2)
        grid.addWidget(btn_meshsmooth, rstart + 4, 3)
        grid.addWidget(btn_meshsave, rstart + 4, 4)
        grid.addWidget(btn_meshview, rstart + 8, 3, 1, 2)
        
        text_mesh_mesh = QLabel('mesh:')
        text_mesh_elements = QLabel('elements:')
        text_mesh_smooth = QLabel('smooth method:')
        text_mesh_output = QLabel('output format:')
        grid.addWidget(text_mesh_mesh, rstart + 6, 1)
        grid.addWidget(text_mesh_elements, rstart + 6, 2)
        grid.addWidget(text_mesh_smooth, rstart + 6, 3)
        grid.addWidget(text_mesh_output, rstart + 6, 4)
        
        rbtn_mesh_mesh_surf = QRadioButton('surface')
        rbtn_mesh_mesh_vol = QRadioButton('volume')
        grid.addWidget(rbtn_mesh_mesh_surf, rstart + 7, 1)
        grid.addWidget(rbtn_mesh_mesh_vol, rstart + 8, 1)
        self.rbtng_mesh_mesh = QButtonGroup(self)
        self.rbtng_mesh_mesh.addButton(rbtn_mesh_mesh_surf, 1)
        self.rbtng_mesh_mesh.addButton(rbtn_mesh_mesh_vol, 2)
        rbtn_mesh_mesh_vol.setChecked(True)

        rbtn_mesh_elements_3 = QRadioButton('tri/tetra')
        rbtn_mesh_elements_4 = QRadioButton('quad/hexa')
        grid.addWidget(rbtn_mesh_elements_3, rstart + 7, 2)
        grid.addWidget(rbtn_mesh_elements_4, rstart + 8, 2)
        self.rbtng_mesh_elements = QButtonGroup(self)
        self.rbtng_mesh_elements.addButton(rbtn_mesh_elements_3, 1)
        self.rbtng_mesh_elements.addButton(rbtn_mesh_elements_4, 2)
        rbtn_mesh_elements_4.setChecked(True)
        
        combo = QComboBox(self)
        combo.activated[str].connect(self.changeOut)
        
        supp_write = []
        for k, v in supported_capabilities.iteritems(): 
            if 'w' in v:
                supp_write.append(k)

        combo.addItems(supp_write)
        combo.setCurrentIndex(supp_write.index('vtk'))
        grid.addWidget(combo, rstart + 7, 4)

        combo2 = QComboBox(self)
        combo2.activated[str].connect(self.changeSmoothMethod)
        combo2.addItems(smooth_methods)
        combo2.setCurrentIndex(smooth_methods.index(self.mesh_smooth_method))
        grid.addWidget(combo2, rstart + 7, 3)

        hr = QFrame()
        hr.setFrameShape(QFrame.HLine)
        grid.addWidget(hr, rstart + 9, 0, 1, 6)
        
        # quit
        btn_quit = QPushButton("Quit", self)
        btn_quit.clicked.connect(self.quit)
        grid.addWidget(btn_quit, 24, 2, 1, 2)
        
        cw.setLayout(grid)
        self.setWindowTitle('DICOM2FEM')    
        self.show()
Beispiel #2
0
    def init_MeshGenTab(self):
        vbox = QVBoxLayout()
        vbox.setSpacing(10)

        self.text_mesh_in = QLabel('input data:')
        self.text_mesh_data = QLabel('mesh data:')
        vbox.addWidget(QLabel())
        vbox.addWidget(self.text_mesh_in)
        vbox.addWidget(self.text_mesh_data)

        hr = QFrame()
        hr.setFrameShape(QFrame.HLine)
        vbox.addWidget(hr)

        self.text_mesh_grid = QLabel('grid:')
        vbox.addWidget(self.text_mesh_grid)
        btn_meshrescale = QPushButton("Rescale", self)
        btn_meshrescale.clicked.connect(self.rescaleSeg)
        hbox0 = QHBoxLayout()
        hbox0.addStretch(1)
        hbox0.addWidget(btn_meshrescale)
        hbox0.addStretch(1)
        vbox.addLayout(hbox0)

        hr = QFrame()
        hr.setFrameShape(QFrame.HLine)
        vbox.addWidget(hr)

        vbox1 = QVBoxLayout()
        btn_meshload = QPushButton("Load SEG", self)
        btn_meshload.clicked.connect(self.loadSeg)
        btn_meshsave = QPushButton("Save MESH", self)
        btn_meshsave.clicked.connect(self.saveMesh)
        text_mesh_output = QLabel('format:')

        combo_sm = QComboBox(self)
        combo_sm.activated[str].connect(self.changeOut)
        supp_write = []
        for k, v in supported_capabilities.iteritems():
            if 'w' in v:
                supp_write.append(k)

        combo_sm.addItems(supp_write)
        combo_sm.setCurrentIndex(supp_write.index('vtk'))

        vbox1.addWidget(btn_meshload)
        vbox1.addWidget(btn_meshsave)
        hbox1 = QHBoxLayout()
        hbox1.addWidget(text_mesh_output)
        hbox1.addWidget(combo_sm)
        vbox1.addLayout(hbox1)
        vbox1.addStretch(1)

        vbox2 = QVBoxLayout()
        btn_meshgener = QPushButton("Generate", self)
        btn_meshgener.clicked.connect(self.generMesh)
        text_mesh_mesh = QLabel('generator:')

        combo_mg = QComboBox(self)
        combo_mg.activated[str].connect(self.changeMesh)
        self.mesh_generator = 'marching cubes'
        keys = mesh_generators.keys()
        keys.sort()
        combo_mg.addItems(keys)
        combo_mg.setCurrentIndex(keys.index(self.mesh_generator))

        vbox2.addWidget(btn_meshgener)
        hbox1 = QHBoxLayout()
        hbox1.addWidget(text_mesh_mesh)
        hbox1.addWidget(combo_mg)
        vbox2.addLayout(hbox1)
        #vbox2.addStretch(1)
        vbox2.addWidget(QLabel())

        btn_meshsmooth = QPushButton("Smooth", self)
        btn_meshsmooth.clicked.connect(self.smoothMesh)
        text_mesh_smooth = QLabel('method:')

        combo_out = QComboBox(self)
        combo_out.activated[str].connect(self.changeSmoothMethod)
        keys = smooth_methods.keys()
        combo_out.addItems(keys)
        combo_out.setCurrentIndex(keys.index('taubin'))

        vbox2.addWidget(btn_meshsmooth)
        hbox1 = QHBoxLayout()
        hbox1.addWidget(text_mesh_smooth)
        hbox1.addWidget(combo_out)
        vbox2.addLayout(hbox1)
        vbox2.addStretch(1)

        vbox3 = QVBoxLayout()
        btn_meshview = QPushButton("Mesh preview", self)
        btn_meshview.clicked.connect(self.viewMesh)
        vbox3.addWidget(btn_meshview)
        vbox3.addStretch(1)

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addLayout(vbox1)
        hbox.addStretch(1)
        hbox.addLayout(vbox2)
        hbox.addStretch(1)
        hbox.addLayout(vbox3)
        hbox.addStretch(1)

        vbox.addStretch(1)
        vbox.addLayout(hbox)
        vbox.addStretch(1)

        return vbox
Beispiel #3
0
    def init_MeshGenTab(self):
        vbox = QVBoxLayout()
        vbox.setSpacing(10)

        self.text_mesh_in = QLabel('input data:')
        self.text_mesh_data = QLabel('mesh data:')
        vbox.addWidget(QLabel())
        vbox.addWidget(self.text_mesh_in)
        vbox.addWidget(self.text_mesh_data)

        hr = QFrame()
        hr.setFrameShape(QFrame.HLine)
        vbox.addWidget(hr)

        vbox1 = QVBoxLayout()
        btn_meshload = QPushButton("Load SEG", self)
        btn_meshload.clicked.connect(self.loadSeg)
        btn_meshsave = QPushButton("Save MESH", self)
        btn_meshsave.clicked.connect(self.saveMesh)
        text_mesh_output = QLabel('format:')

        combo_sm = QComboBox(self)
        combo_sm.activated[str].connect(self.changeOut)
        supp_write = []
        for k, v in supported_capabilities.iteritems():
            if 'w' in v:
                supp_write.append(k)

        combo_sm.addItems(supp_write)
        combo_sm.setCurrentIndex(supp_write.index('vtk'))

        vbox1.addWidget(btn_meshload)
        vbox1.addWidget(btn_meshsave)
        hbox1 = QHBoxLayout()
        hbox1.addWidget(text_mesh_output)
        hbox1.addWidget(combo_sm)
        vbox1.addLayout(hbox1)
        vbox1.addStretch(1)

        vbox2 = QVBoxLayout()
        btn_meshgener = QPushButton("Generate", self)
        btn_meshgener.clicked.connect(self.generMesh)
        text_mesh_mesh = QLabel('generator:')

        combo_mg = QComboBox(self)
        combo_mg.activated[str].connect(self.changeMesh)
        self.mesh_generator = 'marching cubes'
        keys = mesh_generators.keys()
        keys.sort()
        combo_mg.addItems(keys)
        combo_mg.setCurrentIndex(keys.index(self.mesh_generator))

        vbox2.addWidget(btn_meshgener)
        hbox1 = QHBoxLayout()
        hbox1.addWidget(text_mesh_mesh)
        hbox1.addWidget(combo_mg)
        vbox2.addLayout(hbox1)
        #vbox2.addStretch(1)
        vbox2.addWidget(QLabel())

        btn_meshsmooth = QPushButton("Smooth", self)
        btn_meshsmooth.clicked.connect(self.smoothMesh)
        text_mesh_smooth = QLabel('method:')

        combo_out = QComboBox(self)
        combo_out.activated[str].connect(self.changeSmoothMethod)
        keys = smooth_methods.keys()
        combo_out.addItems(keys)
        combo_out.setCurrentIndex(keys.index('taubin'))

        vbox2.addWidget(btn_meshsmooth)
        hbox1 = QHBoxLayout()
        hbox1.addWidget(text_mesh_smooth)
        hbox1.addWidget(combo_out)
        vbox2.addLayout(hbox1)
        vbox2.addStretch(1)

        vbox3 = QVBoxLayout()
        btn_meshview = QPushButton("Mesh preview", self)
        btn_meshview.clicked.connect(self.viewMesh)
        vbox3.addWidget(btn_meshview)
        vbox3.addStretch(1)

        hbox = QHBoxLayout()
        hbox.addStretch(1)
        hbox.addLayout(vbox1)
        hbox.addStretch(1)
        hbox.addLayout(vbox2)
        hbox.addStretch(1)
        hbox.addLayout(vbox3)
        hbox.addStretch(1)

        vbox.addStretch(1)
        vbox.addLayout(hbox)
        vbox.addStretch(1)

        return vbox