コード例 #1
0
ファイル: main.py プロジェクト: larrykoubiak/ff6pc-patch
def main():
    filelist = FileList("data/main.list")
    obb = ObbFile("data/main.obb", filelist.Files)
    fe = obb.Files["misc/rom.bin.gz"]
    obb.ReadEntry(fe.Name)
    gba = GBA(fe.Data)
    gba.extract_sprites()
コード例 #2
0
def get_file_list(path, alphabet, **kwargs):
    assert path != ''
    if zipfile.is_zipfile(path):
        os.chdir(os.path.dirname(path) or '.')
        file_list = ZipFileList(os.path.basename(path))
    else:
        os.chdir(path)
        file_list = FileList.from_working_directory()

    if alphabet:
        file_list.files.sort(key=functools.cmp_to_key(misc.cmp_general))
    else:
        file_list.files.sort(key=functools.cmp_to_key(misc.cmp_human))

    return file_list
コード例 #3
0
# -------------------------------------------------------------
# loglevel is bound to the string value obtained from the
# command line argument. Convert to upper case to allow the user to
# specify --log=DEBUG or --log=debug
# -------------------------------------------------------------
numeric_level = getattr(logging, args.log.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level,
                    filename='get_limb_contour.log',
                    filemode='w')

# -------------------------------------
# Get the list of image names to read
# -------------------------------------
theList = FileList(args.dataset, args.list)
imagePaths = theList.getPathFilenames()

logging.info("imagePath is %s", imagePaths)

# --------------------------------------
# Loop over the input dataset of images
# --------------------------------------
for filename in imagePaths:

    if args.list:
        if not os.path.isfile(filename):
            sys.exit("filename " + filename + "  does not exist")

        # Read image
        img = cv2.imread(filename)
コード例 #4
0
import sys
from filelist import FileList

if __name__ == '__main__':
    fl = FileList()
    args = sys.argv
    if len(args) == 3:
        root_dir = args[1]
        ext = args[2]
    else:
        root_dir = '.'
        ext = '.py'

    fl.setup(root_dir, ext)
    fl.print()
コード例 #5
0
ファイル: app.py プロジェクト: Albom/IonoViewie
 def get_filelist(self, directory):
     result = []
     for filename in FileList.get(directory):
         if fnmatch(filename, '????????_????_iono.ion'):
             result.append(filename)
     return result
コード例 #6
0
class MainWidget(QWidget):
    dirname = ''
    step = 0

    def __init__(self, parent=None):
        super(MainWidget, self).__init__(parent)
        self.initUI()
        self.fileList = FileList()
        self.fileList.sig_file.connect(self.update_status)
        self.fileList.finished.connect(self.finish_process)

    def initUI(self):
        self.resize(480, 360)

        self.txtFolder = QLineEdit()
        self.txtFolder.setReadOnly(True)
        self.btnFolder = QPushButton('参照...')
        self.btnFolder.clicked.connect(self.show_folder_dialog)
        hb1 = QHBoxLayout()
        hb1.addWidget(self.txtFolder)
        hb1.addWidget(self.btnFolder)

        self.btnExec = QPushButton('実行')
        self.btnExec.clicked.connect(self.exec_process)
        self.btnExec.setEnabled(False)
        self.btnExec.setVisible(True)

        self.btnExit = QPushButton('終了')
        self.btnExit.setVisible(False)
        self.btnExit.setEnabled(False)
        self.btnExit.clicked.connect(self.close)

        hb2 = QHBoxLayout()
        hb2.addWidget(self.btnExec)
        hb2.addWidget(self.btnExit)

        self.txtLog = QTextEdit()
        self.txtLog.setReadOnly(True)

        self.pbar = QProgressBar()
        self.pbar.setTextVisible(False)

        layout = QVBoxLayout()
        layout.addLayout(hb1)
        layout.addLayout(hb2)
        layout.addWidget(self.txtLog)
        layout.addWidget(self.pbar)
        self.setLayout(layout)

        self.setWindowTitle('PyQt5 Sample')

    def show_folder_dialog(self):
        ''' open dialog and set to foldername '''
        dirname = QFileDialog.getExistingDirectory(self,
                                                   'open folder',
                                                   os.path.expanduser('.'),
                                                   QFileDialog.ShowDirsOnly)
        if dirname:
            self.dirname = dirname.replace('/', os.sep)
            self.txtFolder.setText(self.dirname)
            self.btnExec.setEnabled(True)
            self.step = 0

    def print_log(self, logstr):
        self.txtLog.append(logstr)

    @pyqtSlot()
    def exec_process(self):
        if os.path.exists(self.dirname):
            try:
                QApplication.setOverrideCursor(Qt.WaitCursor)
                self.fileList.setup(self.dirname, '.py')
                maxCnt = self.fileList.length
                self.pbar.setValue(0)
                self.pbar.setMinimum(0)
                self.pbar.setMaximum(maxCnt)
                self.fileList.start()
            except Exception as e:
                self.print_log(str(e))
            finally:
                QApplication.restoreOverrideCursor()
        else:
            self.print_log('{0} is not exists'.format(self.dirname))

    @pyqtSlot(str)
    def update_status(self, filename):
        self.txtLog.append(filename)
        self.step += 1
        self.pbar.setValue(self.step)

    @pyqtSlot()
    def finish_process(self):
        self.fileList.wait()
        self.btnExec.setEnabled(False)
        self.btnExec.setVisible(False)
        self.btnExit.setEnabled(True)
        self.btnExit.setVisible(True)
コード例 #7
0
 def __init__(self, parent=None):
     super(MainWidget, self).__init__(parent)
     self.initUI()
     self.fileList = FileList()
     self.fileList.sig_file.connect(self.update_status)
     self.fileList.finished.connect(self.finish_process)
コード例 #8
0
logging.info("test list : %s", args.testList)
logging.info("model : %s", args.model)

# Only look at images that are night time
minSunElev = -20.
logging.info("min Sun Elevation allowed : %s", minSunElev)

# -------------------------------------------
# Classify the images using the input model
# -------------------------------------------
logging.info("Classifying images ...")

# -------------------------------------
# Get the list of image names to read
# -------------------------------------
theList = FileList(args.testDir, args.testList)
imagePaths = theList.getPathFilenames()

# grab set of test images  - FIX
#imagePaths2 = sorted(paths.list_images(args.testDir))

#------------------------------------
# Open up the results output file
#------------------------------------
# add date & time to results filename
# get current date/time and convert to a string
now = datetime.datetime.now()
nowStr = now.strftime("%Y-%m-%d_%H-%M")
logging.info("nowStr = %s", nowStr)

# -----------------------------------------
コード例 #9
0
ファイル: mainwin.py プロジェクト: gouxiayibu/momo_labeltool
    def setupUi(self, main_window):
        main_window.setObjectName("main_window")
        main_window.resize(1037, 784)
        self.centralwidget = QtWidgets.QWidget(main_window)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.canvas = Canvas(self.centralwidget)
        self.canvas.setInteractive(True)
        self.canvas.setObjectName("canvas")
        self.gridLayout_3.addWidget(self.canvas, 1, 0, 1, 1)
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setObjectName("widget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.fixitem = QtWidgets.QCheckBox(self.widget)
        self.fixitem.setObjectName("fixitem")
        self.horizontalLayout.addWidget(self.fixitem)
        self.index = QtWidgets.QCheckBox(self.widget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.index.sizePolicy().hasHeightForWidth())
        self.index.setSizePolicy(sizePolicy)
        self.index.setObjectName("index")
        self.horizontalLayout.addWidget(self.index)
        self.control = QtWidgets.QCheckBox(self.widget)
        self.control.setChecked(True)
        self.control.setObjectName("control")
        self.horizontalLayout.addWidget(self.control)
        self.keypoint = QtWidgets.QCheckBox(self.widget)
        self.keypoint.setChecked(True)
        self.keypoint.setObjectName("keypoint")
        self.horizontalLayout.addWidget(self.keypoint)
        self.contour = QtWidgets.QCheckBox(self.widget)
        self.contour.setChecked(True)
        self.contour.setObjectName("contour")
        self.horizontalLayout.addWidget(self.contour)
        self.left_eyebrown = QtWidgets.QCheckBox(self.widget)
        self.left_eyebrown.setChecked(True)
        self.left_eyebrown.setObjectName("left_eyebrown")
        self.horizontalLayout.addWidget(self.left_eyebrown)
        self.right_eyebrown = QtWidgets.QCheckBox(self.widget)
        self.right_eyebrown.setChecked(True)
        self.right_eyebrown.setObjectName("right_eyebrown")
        self.horizontalLayout.addWidget(self.right_eyebrown)
        self.left_eye = QtWidgets.QCheckBox(self.widget)
        self.left_eye.setChecked(True)
        self.left_eye.setObjectName("left_eye")
        self.horizontalLayout.addWidget(self.left_eye)
        self.right_eye = QtWidgets.QCheckBox(self.widget)
        self.right_eye.setChecked(True)
        self.right_eye.setObjectName("right_eye")
        self.horizontalLayout.addWidget(self.right_eye)
        self.nose = QtWidgets.QCheckBox(self.widget)
        self.nose.setChecked(True)
        self.nose.setObjectName("nose")
        self.horizontalLayout.addWidget(self.nose)
        self.mouth_outter = QtWidgets.QCheckBox(self.widget)
        self.mouth_outter.setChecked(True)
        self.mouth_outter.setObjectName("mouth_outter")
        self.horizontalLayout.addWidget(self.mouth_outter)
        self.mouth_inner = QtWidgets.QCheckBox(self.widget)
        self.mouth_inner.setChecked(True)
        self.mouth_inner.setObjectName("mouth_inner")
        self.horizontalLayout.addWidget(self.mouth_inner)
        self.gridLayout_3.addWidget(self.widget, 0, 0, 1, 1)
        main_window.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(main_window)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1037, 18))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        self.menu_2 = QtWidgets.QMenu(self.menubar)
        self.menu_2.setObjectName("menu_2")
        main_window.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(main_window)
        self.statusbar.setObjectName("statusbar")
        main_window.setStatusBar(self.statusbar)
        self.dockWidget_2 = QtWidgets.QDockWidget(main_window)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.dockWidget_2.sizePolicy().hasHeightForWidth())
        self.dockWidget_2.setSizePolicy(sizePolicy)
        self.dockWidget_2.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.dockWidget_2.setObjectName("dockWidget_2")
        self.dockWidgetContents_2 = QtWidgets.QWidget()
        self.dockWidgetContents_2.setObjectName("dockWidgetContents_2")
        self.gridLayout = QtWidgets.QGridLayout(self.dockWidgetContents_2)
        self.gridLayout.setObjectName("gridLayout")
        self.file_list = FileList(self.dockWidgetContents_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.file_list.sizePolicy().hasHeightForWidth())
        self.file_list.setSizePolicy(sizePolicy)
        self.file_list.setObjectName("file_list")
        self.gridLayout.addWidget(self.file_list, 0, 0, 1, 1)
        self.dockWidget_2.setWidget(self.dockWidgetContents_2)
        main_window.addDockWidget(QtCore.Qt.DockWidgetArea(2),
                                  self.dockWidget_2)
        self.actionload = QtWidgets.QAction(main_window)
        self.actionload.setObjectName("actionload")
        self.actionConvert = QtWidgets.QAction(main_window)
        self.actionConvert.setObjectName("actionConvert")
        self.actionConvert1k = QtWidgets.QAction(main_window)
        self.actionConvert1k.setObjectName("actionConvert1k")
        self.actionBrezier = QtWidgets.QAction(main_window)
        self.actionBrezier.setObjectName("actionBrezier")
        self.menu.addAction(self.actionload)
        self.menu_2.addAction(self.actionConvert)
        self.menu_2.addAction(self.actionConvert1k)
        self.menu_2.addAction(self.actionBrezier)
        self.menubar.addAction(self.menu.menuAction())
        self.menubar.addAction(self.menu_2.menuAction())

        self.retranslateUi(main_window)
        QtCore.QMetaObject.connectSlotsByName(main_window)
コード例 #10
0
ファイル: mainwin.py プロジェクト: gouxiayibu/momo_labeltool
class Ui_main_window(object):
    def setupUi(self, main_window):
        main_window.setObjectName("main_window")
        main_window.resize(1037, 784)
        self.centralwidget = QtWidgets.QWidget(main_window)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.canvas = Canvas(self.centralwidget)
        self.canvas.setInteractive(True)
        self.canvas.setObjectName("canvas")
        self.gridLayout_3.addWidget(self.canvas, 1, 0, 1, 1)
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setObjectName("widget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.fixitem = QtWidgets.QCheckBox(self.widget)
        self.fixitem.setObjectName("fixitem")
        self.horizontalLayout.addWidget(self.fixitem)
        self.index = QtWidgets.QCheckBox(self.widget)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum,
                                           QtWidgets.QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.index.sizePolicy().hasHeightForWidth())
        self.index.setSizePolicy(sizePolicy)
        self.index.setObjectName("index")
        self.horizontalLayout.addWidget(self.index)
        self.control = QtWidgets.QCheckBox(self.widget)
        self.control.setChecked(True)
        self.control.setObjectName("control")
        self.horizontalLayout.addWidget(self.control)
        self.keypoint = QtWidgets.QCheckBox(self.widget)
        self.keypoint.setChecked(True)
        self.keypoint.setObjectName("keypoint")
        self.horizontalLayout.addWidget(self.keypoint)
        self.contour = QtWidgets.QCheckBox(self.widget)
        self.contour.setChecked(True)
        self.contour.setObjectName("contour")
        self.horizontalLayout.addWidget(self.contour)
        self.left_eyebrown = QtWidgets.QCheckBox(self.widget)
        self.left_eyebrown.setChecked(True)
        self.left_eyebrown.setObjectName("left_eyebrown")
        self.horizontalLayout.addWidget(self.left_eyebrown)
        self.right_eyebrown = QtWidgets.QCheckBox(self.widget)
        self.right_eyebrown.setChecked(True)
        self.right_eyebrown.setObjectName("right_eyebrown")
        self.horizontalLayout.addWidget(self.right_eyebrown)
        self.left_eye = QtWidgets.QCheckBox(self.widget)
        self.left_eye.setChecked(True)
        self.left_eye.setObjectName("left_eye")
        self.horizontalLayout.addWidget(self.left_eye)
        self.right_eye = QtWidgets.QCheckBox(self.widget)
        self.right_eye.setChecked(True)
        self.right_eye.setObjectName("right_eye")
        self.horizontalLayout.addWidget(self.right_eye)
        self.nose = QtWidgets.QCheckBox(self.widget)
        self.nose.setChecked(True)
        self.nose.setObjectName("nose")
        self.horizontalLayout.addWidget(self.nose)
        self.mouth_outter = QtWidgets.QCheckBox(self.widget)
        self.mouth_outter.setChecked(True)
        self.mouth_outter.setObjectName("mouth_outter")
        self.horizontalLayout.addWidget(self.mouth_outter)
        self.mouth_inner = QtWidgets.QCheckBox(self.widget)
        self.mouth_inner.setChecked(True)
        self.mouth_inner.setObjectName("mouth_inner")
        self.horizontalLayout.addWidget(self.mouth_inner)
        self.gridLayout_3.addWidget(self.widget, 0, 0, 1, 1)
        main_window.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(main_window)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1037, 18))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        self.menu_2 = QtWidgets.QMenu(self.menubar)
        self.menu_2.setObjectName("menu_2")
        main_window.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(main_window)
        self.statusbar.setObjectName("statusbar")
        main_window.setStatusBar(self.statusbar)
        self.dockWidget_2 = QtWidgets.QDockWidget(main_window)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.dockWidget_2.sizePolicy().hasHeightForWidth())
        self.dockWidget_2.setSizePolicy(sizePolicy)
        self.dockWidget_2.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.dockWidget_2.setObjectName("dockWidget_2")
        self.dockWidgetContents_2 = QtWidgets.QWidget()
        self.dockWidgetContents_2.setObjectName("dockWidgetContents_2")
        self.gridLayout = QtWidgets.QGridLayout(self.dockWidgetContents_2)
        self.gridLayout.setObjectName("gridLayout")
        self.file_list = FileList(self.dockWidgetContents_2)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding,
                                           QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.file_list.sizePolicy().hasHeightForWidth())
        self.file_list.setSizePolicy(sizePolicy)
        self.file_list.setObjectName("file_list")
        self.gridLayout.addWidget(self.file_list, 0, 0, 1, 1)
        self.dockWidget_2.setWidget(self.dockWidgetContents_2)
        main_window.addDockWidget(QtCore.Qt.DockWidgetArea(2),
                                  self.dockWidget_2)
        self.actionload = QtWidgets.QAction(main_window)
        self.actionload.setObjectName("actionload")
        self.actionConvert = QtWidgets.QAction(main_window)
        self.actionConvert.setObjectName("actionConvert")
        self.actionConvert1k = QtWidgets.QAction(main_window)
        self.actionConvert1k.setObjectName("actionConvert1k")
        self.actionBrezier = QtWidgets.QAction(main_window)
        self.actionBrezier.setObjectName("actionBrezier")
        self.menu.addAction(self.actionload)
        self.menu_2.addAction(self.actionConvert)
        self.menu_2.addAction(self.actionConvert1k)
        self.menu_2.addAction(self.actionBrezier)
        self.menubar.addAction(self.menu.menuAction())
        self.menubar.addAction(self.menu_2.menuAction())

        self.retranslateUi(main_window)
        QtCore.QMetaObject.connectSlotsByName(main_window)

    def retranslateUi(self, main_window):
        _translate = QtCore.QCoreApplication.translate
        main_window.setWindowTitle(_translate("main_window", "关键点标注"))
        self.fixitem.setText(_translate("main_window", "固定图片(F)"))
        self.fixitem.setShortcut(_translate("main_window", "F"))
        self.index.setText(_translate("main_window", "序号(S)"))
        self.index.setShortcut(_translate("main_window", "S"))
        self.control.setText(_translate("main_window", "控制点(Q)"))
        self.control.setShortcut(_translate("main_window", "Q"))
        self.keypoint.setText(_translate("main_window", "关键点(W)"))
        self.keypoint.setShortcut(_translate("main_window", "W"))
        self.contour.setText(_translate("main_window", "脸轮廓(E)"))
        self.contour.setShortcut(_translate("main_window", "E"))
        self.left_eyebrown.setText(_translate("main_window", "左眉毛(R)"))
        self.left_eyebrown.setShortcut(_translate("main_window", "R"))
        self.right_eyebrown.setText(_translate("main_window", "右眉毛(T)"))
        self.right_eyebrown.setShortcut(_translate("main_window", "T"))
        self.left_eye.setText(_translate("main_window", "左眼睛(Y)"))
        self.left_eye.setShortcut(_translate("main_window", "Y"))
        self.right_eye.setText(_translate("main_window", "右眼睛(U)"))
        self.right_eye.setShortcut(_translate("main_window", "U"))
        self.nose.setText(_translate("main_window", "鼻子(I)"))
        self.nose.setShortcut(_translate("main_window", "I"))
        self.mouth_outter.setText(_translate("main_window", "嘴外轮廓(O)"))
        self.mouth_outter.setShortcut(_translate("main_window", "O"))
        self.mouth_inner.setText(_translate("main_window", "嘴内轮廓(P)"))
        self.mouth_inner.setShortcut(_translate("main_window", "P"))
        self.menu.setTitle(_translate("main_window", "文件"))
        self.menu_2.setTitle(_translate("main_window", "数据处理"))
        self.actionload.setText(_translate("main_window", "载入文件夹"))
        self.actionConvert.setText(_translate("main_window", "生成137点"))
        self.actionConvert1k.setText(_translate("main_window", "生成1000点"))
        self.actionBrezier.setText(_translate("main_window", "生成贝塞尔关键点"))
コード例 #11
0
# loglevel =
numeric_level = getattr(logging, args.log.upper(), None)
if not isinstance(numeric_level, int):
    raise ValueError('Invalid log level: %s' % loglevel)
logging.basicConfig(level=numeric_level, filename='run_ML_make_model.log', filemode='w')

# write run parameters to log file
logging.info("log level : %s", args.log)
logging.info("ptraining directory : %s", args.pDir)
logging.info((pList + " files : %s"), args.pList)

#  -------------------------------------------------------------------------------
# -------------------------------------
# Get the list of image names to read
# -------------------------------------
theList = FileList(args.pDir,  args.pList)
imagePaths = theList.getPathFilenames()

logging.info("imagePath is %s", imagePaths)

# Initialize the labels and description data
Labels = []
Data = []

nadirLabel = "nadir Lightning"
nonNadirLabel = "non-nadir"

#-----------------------------
# Set up the image descriptor
#-----------------------------
desc = HSVColorTexture()
コード例 #12
0
ファイル: plater.py プロジェクト: jbernardis/repraptoolbox
	def __init__(self, parent):
		wx.Frame.__init__(self, None, wx.ID_ANY, 'Plater', size=(600, 600))
		self.parent = parent
		self.log = self.parent.log
		self.t = 0
		self.seq = 0
		self.modified = False
		self.settings = Settings(cmdFolder)
		self.Show()
		ico = wx.Icon(os.path.join(cmdFolder, "images", "platerico.png"), wx.BITMAP_TYPE_PNG)
		self.SetIcon(ico)
		
		self.savedfile = None
		
		self.Bind(wx.EVT_CLOSE, self.onClose)
		self.Bind(EVT_SPLIT_UPDATE, self.splitUpdate)
		
		self.images = Images(os.path.join(cmdFolder, "images"))
		
		self.stlCanvas = StlFrame(self, self.settings)
		
		self.bAdd = wx.BitmapButton(self, wx.ID_ANY, self.images.pngAdd, size=BUTTONDIM)
		self.bAdd.SetToolTip("Add an STL file to the plate")
		self.Bind(wx.EVT_BUTTON, self.doAdd, self.bAdd)
		
		self.bClone = wx.BitmapButton(self, wx.ID_ANY, self.images.pngClone, size=BUTTONDIM)
		self.bClone.SetToolTip("Add a copy of the selected object")
		self.Bind(wx.EVT_BUTTON, self.doClone, self.bClone)
		self.bClone.Enable(False)
		
		self.bDel = wx.BitmapButton(self, wx.ID_ANY, self.images.pngDel, size=BUTTONDIM)
		self.bDel.SetToolTip("Delete the selected object from the plate")
		self.Bind(wx.EVT_BUTTON, self.doDel, self.bDel)
		self.bDel.Enable(False)
		
		self.bDelall = wx.BitmapButton(self, wx.ID_ANY, self.images.pngDelall, size=BUTTONDIM)
		self.bDelall.SetToolTip("Delete ALL objects from the plate")
		self.Bind(wx.EVT_BUTTON, self.doDelall, self.bDelall)
		self.bDelall.Enable(False)
		
		self.bArrange = wx.BitmapButton(self, wx.ID_ANY, self.images.pngArrange, size=BUTTONDIM)
		self.bArrange.SetToolTip("Arrange the objects on the plate")
		self.Bind(wx.EVT_BUTTON, self.doArrange, self.bArrange)
		self.bArrange.Enable(False)
		
		self.bCenter = wx.BitmapButton(self, wx.ID_ANY, self.images.pngCenter, size=BUTTONDIM)
		self.bCenter.SetToolTip("Center the plate")
		self.Bind(wx.EVT_BUTTON, self.doCenter, self.bCenter)
		self.bCenter.Enable(False)
		
		self.bGrid = wx.BitmapButton(self, wx.ID_ANY, self.images.pngGrid, size=BUTTONDIM)
		self.bGrid.SetToolTip("Create a grid of the selected object")
		self.Bind(wx.EVT_BUTTON, self.doGrid, self.bGrid)
		self.bGrid.Enable(False)
		
		self.bMirror = wx.BitmapButton(self, wx.ID_ANY, self.images.pngMirror, size=BUTTONDIM)
		self.bMirror.SetToolTip("Mirror the selected object")
		self.Bind(wx.EVT_BUTTON, self.doMirror, self.bMirror)
		self.bMirror.Enable(False)
		
		self.bRotate = wx.BitmapButton(self, wx.ID_ANY, self.images.pngRotate, size=BUTTONDIM)
		self.bRotate.SetToolTip("Rotate the selected object")
		self.Bind(wx.EVT_BUTTON, self.doRotate, self.bRotate)
		self.bRotate.Enable(False)
		
		self.bTranslate = wx.BitmapButton(self, wx.ID_ANY, self.images.pngTranslate, size=BUTTONDIM)
		self.bTranslate.SetToolTip("Translate the selected object")
		self.Bind(wx.EVT_BUTTON, self.doTranslate, self.bTranslate)
		self.bTranslate.Enable(False)
		
		self.bScale = wx.BitmapButton(self, wx.ID_ANY, self.images.pngScale, size=BUTTONDIM)
		self.bScale.SetToolTip("Scale the selected object")
		self.Bind(wx.EVT_BUTTON, self.doScale, self.bScale)
		self.bScale.Enable(False)
		
		self.bSplit = wx.BitmapButton(self, wx.ID_ANY, self.images.pngSplit, size=BUTTONDIM)
		self.bSplit.SetToolTip("Split the selected object")
		self.Bind(wx.EVT_BUTTON, self.doSplit, self.bSplit)
		self.bSplit.Enable(False)
		
		self.bSaveAs = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFilesaveas, size=BUTTONDIM)
		self.bSaveAs.SetToolTip("Save the plate to an STL file")
		self.Bind(wx.EVT_BUTTON, self.doSaveAs, self.bSaveAs)
		self.bSaveAs.Enable(False)
		
		self.bExport = wx.BitmapButton(self, wx.ID_ANY, self.images.pngExport, size=BUTTONDIM)
		self.bExport.SetToolTip("Export the plate to the toolbox")
		self.Bind(wx.EVT_BUTTON, self.doExport, self.bExport)
		self.bExport.Enable(False)
		
		self.bView = wx.BitmapButton(self, wx.ID_ANY, self.images.pngView, size=BUTTONDIM)
		self.bView.SetToolTip("View the currently selected object")
		self.Bind(wx.EVT_BUTTON, self.doView, self.bView)
		self.bView.Enable(False)
		
		self.bViewPlate = wx.BitmapButton(self, wx.ID_ANY, self.images.pngViewplate, size=BUTTONDIM)
		self.bViewPlate.SetToolTip("View the entire plate")
		self.Bind(wx.EVT_BUTTON, self.doViewPlate, self.bViewPlate)
		self.bViewPlate.Enable(False)
		
		self.cbPreview = wx.CheckBox(self, wx.ID_ANY, "3D Preview")
		self.cbPreview.SetValue(self.settings.preview)
		self.Bind(wx.EVT_CHECKBOX, self.onCbPreview, self.cbPreview)
		
		self.cbCenterOnArrange = wx.CheckBox(self, wx.ID_ANY, "Center Plate After Arrange")
		self.cbCenterOnArrange.SetValue(self.settings.centeronarrange)
		self.Bind(wx.EVT_CHECKBOX, self.onCbCenterOnArrange, self.cbCenterOnArrange)
		
		self.cbAutoExport = wx.CheckBox(self, wx.ID_ANY, "Automatically export when saving")
		self.cbAutoExport.SetValue(self.settings.autoexport)
		self.Bind(wx.EVT_CHECKBOX, self.onCbAutoExport, self.cbAutoExport)
		
		self.cbAutoEnqueue = wx.CheckBox(self, wx.ID_ANY, "Automatically enqueue the file when exporting")
		self.cbAutoEnqueue.SetValue(self.settings.autoenqueue)
		self.Bind(wx.EVT_CHECKBOX, self.onCbAutoEnqueue, self.cbAutoEnqueue)
		
		self.strategyList = ['column', 'row', 'spiral']
		self.rbStrategy = wx.RadioBox(
				self, -1, "Arrange Strategy", wx.DefaultPosition, wx.DefaultSize,
				self.strategyList, 1, wx.RA_SPECIFY_COLS
				)
		
		self.Bind(wx.EVT_RADIOBOX, self.onStrategy, self.rbStrategy)
		self.rbStrategy.SetToolTip("Choose the strategy for auto-arrange")
		if not self.settings.arrangestrategy in self.strategyList:
			self.settings.arrangestrategy = self.strategyList[0]
		self.rbStrategy.SetStringSelection(self.settings.arrangestrategy)
		
		self.scMargin = wx.SpinCtrl(self, wx.ID_ANY, "Arrange Margin", size=(40, -1))
		self.scMargin.SetRange(1,5)
		self.scMargin.SetValue(self.settings.arrangemargin)
		self.scMargin.SetToolTip("Choose the distance between objects")
		self.Bind(wx.EVT_SPINCTRL, self.onScMargin, self.scMargin)

		
		szFrame = wx.BoxSizer(wx.HORIZONTAL)
		szLeft = wx.BoxSizer(wx.VERTICAL)
		
		szCanvas = wx.BoxSizer(wx.VERTICAL)
		szCanvas.AddSpacer(20)
		szCanvas.Add(self.stlCanvas)
		szCanvas.AddSpacer(10)
		
		szLeft.Add(szCanvas)
		szRight = wx.BoxSizer(wx.VERTICAL)
		
		self.files = FileList(self)
		self.Bind(wx.EVT_LISTBOX, self.doFileSelect, self.files)
		szRight.AddSpacer(20)
		szRight.Add(self.files)
		szRight.AddSpacer(10)
		
		szBtn = wx.BoxSizer(wx.VERTICAL)
		szBtnLn1 = wx.BoxSizer(wx.HORIZONTAL)
		szBtnLn2 = wx.BoxSizer(wx.HORIZONTAL)
		szBtnLn3 = wx.BoxSizer(wx.HORIZONTAL)
		szOptions = wx.BoxSizer(wx.HORIZONTAL)
		szOptionsL = wx.BoxSizer(wx.VERTICAL)
		szOptionsR = wx.BoxSizer(wx.VERTICAL)
		
		szBtnLn1.Add(self.bAdd)
		szBtnLn1.Add(self.bDel)
		szBtnLn1.Add(self.bDelall)
		szBtnLn1.AddSpacer(BUTTONDIM[0])
		szBtnLn1.Add(self.bView)
		szBtnLn1.Add(self.bViewPlate)
		szBtnLn1.AddSpacer(BUTTONDIM[0])
		
		szBtnLn2.Add(self.bArrange)
		szBtnLn2.Add(self.bCenter)
		szBtnLn2.AddSpacer(BUTTONDIM[0])
		szBtnLn2.Add(self.bClone)
		szBtnLn2.Add(self.bGrid)
		szBtnLn2.AddSpacer(BUTTONDIM[0])
		szBtnLn2.Add(self.bSplit)
		szBtnLn2.AddSpacer(BUTTONDIM[0])
		
		szBtnLn3.Add(self.bMirror)
		szBtnLn3.Add(self.bRotate)
		szBtnLn3.Add(self.bTranslate)
		szBtnLn3.Add(self.bScale)
		szBtnLn3.AddSpacer(BUTTONDIM[0])
		szBtnLn3.Add(self.bSaveAs)
		szBtnLn3.Add(self.bExport)
		
		szBtn.Add(szBtnLn1)
		szBtn.Add(szBtnLn2)
		szBtn.Add(szBtnLn3)
		
		szRight.Add(szBtn, 1, wx.ALIGN_CENTER_HORIZONTAL)
		szRight.AddSpacer(5)
		
		szOptionsL.Add(self.cbPreview)
		szOptionsL.AddSpacer(5)
		szOptionsL.Add(self.cbCenterOnArrange)
		szOptionsL.AddSpacer(10)
		szOptionsL.Add(self.cbAutoExport)
		szOptionsL.AddSpacer(5)
		szOptionsL.Add(self.cbAutoEnqueue)

		szOptionsR.Add(self.rbStrategy)
		szOptionsR.AddSpacer(5)
		szMargin = wx.BoxSizer(wx.HORIZONTAL)
		szMargin.Add(wx.StaticText(self, wx.ID_ANY, "Arrange margin:"))
		szMargin.AddSpacer(5)
		szMargin.Add(self.scMargin)
		szOptionsR.Add(szMargin)
		
		szOptions.AddSpacer(10)
		szOptions.Add(szOptionsL)
		szOptions.AddSpacer(30)
		szOptions.Add(szOptionsR)
		szOptions.AddSpacer(10)
		
		szRight.Add(szOptions, 1, wx.ALIGN_CENTER_HORIZONTAL)
		#szRight.AddSpacer(10)

		szFrame.AddSpacer(20)		
		szFrame.Add(szLeft)
		szFrame.AddSpacer(20)		
		szFrame.Add(szRight)
		szFrame.AddSpacer(20)		
		
		self.SetSizer(szFrame)
		self.Layout()
		self.Fit()
コード例 #13
0
ファイル: plater.py プロジェクト: jbernardis/repraptoolbox
class PlaterDlg(wx.Frame):
	def __init__(self, parent):
		wx.Frame.__init__(self, None, wx.ID_ANY, 'Plater', size=(600, 600))
		self.parent = parent
		self.log = self.parent.log
		self.t = 0
		self.seq = 0
		self.modified = False
		self.settings = Settings(cmdFolder)
		self.Show()
		ico = wx.Icon(os.path.join(cmdFolder, "images", "platerico.png"), wx.BITMAP_TYPE_PNG)
		self.SetIcon(ico)
		
		self.savedfile = None
		
		self.Bind(wx.EVT_CLOSE, self.onClose)
		self.Bind(EVT_SPLIT_UPDATE, self.splitUpdate)
		
		self.images = Images(os.path.join(cmdFolder, "images"))
		
		self.stlCanvas = StlFrame(self, self.settings)
		
		self.bAdd = wx.BitmapButton(self, wx.ID_ANY, self.images.pngAdd, size=BUTTONDIM)
		self.bAdd.SetToolTip("Add an STL file to the plate")
		self.Bind(wx.EVT_BUTTON, self.doAdd, self.bAdd)
		
		self.bClone = wx.BitmapButton(self, wx.ID_ANY, self.images.pngClone, size=BUTTONDIM)
		self.bClone.SetToolTip("Add a copy of the selected object")
		self.Bind(wx.EVT_BUTTON, self.doClone, self.bClone)
		self.bClone.Enable(False)
		
		self.bDel = wx.BitmapButton(self, wx.ID_ANY, self.images.pngDel, size=BUTTONDIM)
		self.bDel.SetToolTip("Delete the selected object from the plate")
		self.Bind(wx.EVT_BUTTON, self.doDel, self.bDel)
		self.bDel.Enable(False)
		
		self.bDelall = wx.BitmapButton(self, wx.ID_ANY, self.images.pngDelall, size=BUTTONDIM)
		self.bDelall.SetToolTip("Delete ALL objects from the plate")
		self.Bind(wx.EVT_BUTTON, self.doDelall, self.bDelall)
		self.bDelall.Enable(False)
		
		self.bArrange = wx.BitmapButton(self, wx.ID_ANY, self.images.pngArrange, size=BUTTONDIM)
		self.bArrange.SetToolTip("Arrange the objects on the plate")
		self.Bind(wx.EVT_BUTTON, self.doArrange, self.bArrange)
		self.bArrange.Enable(False)
		
		self.bCenter = wx.BitmapButton(self, wx.ID_ANY, self.images.pngCenter, size=BUTTONDIM)
		self.bCenter.SetToolTip("Center the plate")
		self.Bind(wx.EVT_BUTTON, self.doCenter, self.bCenter)
		self.bCenter.Enable(False)
		
		self.bGrid = wx.BitmapButton(self, wx.ID_ANY, self.images.pngGrid, size=BUTTONDIM)
		self.bGrid.SetToolTip("Create a grid of the selected object")
		self.Bind(wx.EVT_BUTTON, self.doGrid, self.bGrid)
		self.bGrid.Enable(False)
		
		self.bMirror = wx.BitmapButton(self, wx.ID_ANY, self.images.pngMirror, size=BUTTONDIM)
		self.bMirror.SetToolTip("Mirror the selected object")
		self.Bind(wx.EVT_BUTTON, self.doMirror, self.bMirror)
		self.bMirror.Enable(False)
		
		self.bRotate = wx.BitmapButton(self, wx.ID_ANY, self.images.pngRotate, size=BUTTONDIM)
		self.bRotate.SetToolTip("Rotate the selected object")
		self.Bind(wx.EVT_BUTTON, self.doRotate, self.bRotate)
		self.bRotate.Enable(False)
		
		self.bTranslate = wx.BitmapButton(self, wx.ID_ANY, self.images.pngTranslate, size=BUTTONDIM)
		self.bTranslate.SetToolTip("Translate the selected object")
		self.Bind(wx.EVT_BUTTON, self.doTranslate, self.bTranslate)
		self.bTranslate.Enable(False)
		
		self.bScale = wx.BitmapButton(self, wx.ID_ANY, self.images.pngScale, size=BUTTONDIM)
		self.bScale.SetToolTip("Scale the selected object")
		self.Bind(wx.EVT_BUTTON, self.doScale, self.bScale)
		self.bScale.Enable(False)
		
		self.bSplit = wx.BitmapButton(self, wx.ID_ANY, self.images.pngSplit, size=BUTTONDIM)
		self.bSplit.SetToolTip("Split the selected object")
		self.Bind(wx.EVT_BUTTON, self.doSplit, self.bSplit)
		self.bSplit.Enable(False)
		
		self.bSaveAs = wx.BitmapButton(self, wx.ID_ANY, self.images.pngFilesaveas, size=BUTTONDIM)
		self.bSaveAs.SetToolTip("Save the plate to an STL file")
		self.Bind(wx.EVT_BUTTON, self.doSaveAs, self.bSaveAs)
		self.bSaveAs.Enable(False)
		
		self.bExport = wx.BitmapButton(self, wx.ID_ANY, self.images.pngExport, size=BUTTONDIM)
		self.bExport.SetToolTip("Export the plate to the toolbox")
		self.Bind(wx.EVT_BUTTON, self.doExport, self.bExport)
		self.bExport.Enable(False)
		
		self.bView = wx.BitmapButton(self, wx.ID_ANY, self.images.pngView, size=BUTTONDIM)
		self.bView.SetToolTip("View the currently selected object")
		self.Bind(wx.EVT_BUTTON, self.doView, self.bView)
		self.bView.Enable(False)
		
		self.bViewPlate = wx.BitmapButton(self, wx.ID_ANY, self.images.pngViewplate, size=BUTTONDIM)
		self.bViewPlate.SetToolTip("View the entire plate")
		self.Bind(wx.EVT_BUTTON, self.doViewPlate, self.bViewPlate)
		self.bViewPlate.Enable(False)
		
		self.cbPreview = wx.CheckBox(self, wx.ID_ANY, "3D Preview")
		self.cbPreview.SetValue(self.settings.preview)
		self.Bind(wx.EVT_CHECKBOX, self.onCbPreview, self.cbPreview)
		
		self.cbCenterOnArrange = wx.CheckBox(self, wx.ID_ANY, "Center Plate After Arrange")
		self.cbCenterOnArrange.SetValue(self.settings.centeronarrange)
		self.Bind(wx.EVT_CHECKBOX, self.onCbCenterOnArrange, self.cbCenterOnArrange)
		
		self.cbAutoExport = wx.CheckBox(self, wx.ID_ANY, "Automatically export when saving")
		self.cbAutoExport.SetValue(self.settings.autoexport)
		self.Bind(wx.EVT_CHECKBOX, self.onCbAutoExport, self.cbAutoExport)
		
		self.cbAutoEnqueue = wx.CheckBox(self, wx.ID_ANY, "Automatically enqueue the file when exporting")
		self.cbAutoEnqueue.SetValue(self.settings.autoenqueue)
		self.Bind(wx.EVT_CHECKBOX, self.onCbAutoEnqueue, self.cbAutoEnqueue)
		
		self.strategyList = ['column', 'row', 'spiral']
		self.rbStrategy = wx.RadioBox(
				self, -1, "Arrange Strategy", wx.DefaultPosition, wx.DefaultSize,
				self.strategyList, 1, wx.RA_SPECIFY_COLS
				)
		
		self.Bind(wx.EVT_RADIOBOX, self.onStrategy, self.rbStrategy)
		self.rbStrategy.SetToolTip("Choose the strategy for auto-arrange")
		if not self.settings.arrangestrategy in self.strategyList:
			self.settings.arrangestrategy = self.strategyList[0]
		self.rbStrategy.SetStringSelection(self.settings.arrangestrategy)
		
		self.scMargin = wx.SpinCtrl(self, wx.ID_ANY, "Arrange Margin", size=(40, -1))
		self.scMargin.SetRange(1,5)
		self.scMargin.SetValue(self.settings.arrangemargin)
		self.scMargin.SetToolTip("Choose the distance between objects")
		self.Bind(wx.EVT_SPINCTRL, self.onScMargin, self.scMargin)

		
		szFrame = wx.BoxSizer(wx.HORIZONTAL)
		szLeft = wx.BoxSizer(wx.VERTICAL)
		
		szCanvas = wx.BoxSizer(wx.VERTICAL)
		szCanvas.AddSpacer(20)
		szCanvas.Add(self.stlCanvas)
		szCanvas.AddSpacer(10)
		
		szLeft.Add(szCanvas)
		szRight = wx.BoxSizer(wx.VERTICAL)
		
		self.files = FileList(self)
		self.Bind(wx.EVT_LISTBOX, self.doFileSelect, self.files)
		szRight.AddSpacer(20)
		szRight.Add(self.files)
		szRight.AddSpacer(10)
		
		szBtn = wx.BoxSizer(wx.VERTICAL)
		szBtnLn1 = wx.BoxSizer(wx.HORIZONTAL)
		szBtnLn2 = wx.BoxSizer(wx.HORIZONTAL)
		szBtnLn3 = wx.BoxSizer(wx.HORIZONTAL)
		szOptions = wx.BoxSizer(wx.HORIZONTAL)
		szOptionsL = wx.BoxSizer(wx.VERTICAL)
		szOptionsR = wx.BoxSizer(wx.VERTICAL)
		
		szBtnLn1.Add(self.bAdd)
		szBtnLn1.Add(self.bDel)
		szBtnLn1.Add(self.bDelall)
		szBtnLn1.AddSpacer(BUTTONDIM[0])
		szBtnLn1.Add(self.bView)
		szBtnLn1.Add(self.bViewPlate)
		szBtnLn1.AddSpacer(BUTTONDIM[0])
		
		szBtnLn2.Add(self.bArrange)
		szBtnLn2.Add(self.bCenter)
		szBtnLn2.AddSpacer(BUTTONDIM[0])
		szBtnLn2.Add(self.bClone)
		szBtnLn2.Add(self.bGrid)
		szBtnLn2.AddSpacer(BUTTONDIM[0])
		szBtnLn2.Add(self.bSplit)
		szBtnLn2.AddSpacer(BUTTONDIM[0])
		
		szBtnLn3.Add(self.bMirror)
		szBtnLn3.Add(self.bRotate)
		szBtnLn3.Add(self.bTranslate)
		szBtnLn3.Add(self.bScale)
		szBtnLn3.AddSpacer(BUTTONDIM[0])
		szBtnLn3.Add(self.bSaveAs)
		szBtnLn3.Add(self.bExport)
		
		szBtn.Add(szBtnLn1)
		szBtn.Add(szBtnLn2)
		szBtn.Add(szBtnLn3)
		
		szRight.Add(szBtn, 1, wx.ALIGN_CENTER_HORIZONTAL)
		szRight.AddSpacer(5)
		
		szOptionsL.Add(self.cbPreview)
		szOptionsL.AddSpacer(5)
		szOptionsL.Add(self.cbCenterOnArrange)
		szOptionsL.AddSpacer(10)
		szOptionsL.Add(self.cbAutoExport)
		szOptionsL.AddSpacer(5)
		szOptionsL.Add(self.cbAutoEnqueue)

		szOptionsR.Add(self.rbStrategy)
		szOptionsR.AddSpacer(5)
		szMargin = wx.BoxSizer(wx.HORIZONTAL)
		szMargin.Add(wx.StaticText(self, wx.ID_ANY, "Arrange margin:"))
		szMargin.AddSpacer(5)
		szMargin.Add(self.scMargin)
		szOptionsR.Add(szMargin)
		
		szOptions.AddSpacer(10)
		szOptions.Add(szOptionsL)
		szOptions.AddSpacer(30)
		szOptions.Add(szOptionsR)
		szOptions.AddSpacer(10)
		
		szRight.Add(szOptions, 1, wx.ALIGN_CENTER_HORIZONTAL)
		#szRight.AddSpacer(10)

		szFrame.AddSpacer(20)		
		szFrame.Add(szLeft)
		szFrame.AddSpacer(20)		
		szFrame.Add(szRight)
		szFrame.AddSpacer(20)		
		
		self.SetSizer(szFrame)
		self.Layout()
		self.Fit()
		
	def enableButtons(self):
		v = (self.files.countFiles() > 0)
		ud = self.files.getSelection()
		
		self.bAdd.Enable(True)
		self.bClone.Enable(v and not ud is None)
		self.bGrid.Enable(v and not ud is None)
		self.bDel.Enable(v and not ud is None)
		self.bView.Enable(v and not ud is None)
		self.bMirror.Enable(v and not ud is None)
		self.bRotate.Enable(v and not ud is None)
		self.bTranslate.Enable(v and not ud is None)
		self.bScale.Enable(v and not ud is None)
		self.bSplit.Enable(v and not ud is None)
		self.bDelall.Enable(v)
		self.bArrange.Enable(v)
		self.bCenter.Enable(v)
		self.bSaveAs.Enable(v)
		self.bExport.Enable(v and not self.settings.autoexport and self.savedfile is not None)
		self.bViewPlate.Enable(v)
		
	def disableButtons(self):
		self.bAdd.Enable(False)
		self.bClone.Enable(False)
		self.bGrid.Enable(False)
		self.bDel.Enable(False)
		self.bView.Enable(False)
		self.bMirror.Enable(False)
		self.bRotate.Enable(False)
		self.bTranslate.Enable(False)
		self.bScale.Enable(False)
		self.bSplit.Enable(False)
		self.bDelall.Enable(False)
		self.bArrange.Enable(False)
		self.bCenter.Enable(False)
		self.bSaveAs.Enable(False)
		self.bExport.Enable(False)
		self.bViewPlate.Enable(False)
		
	def onScMargin(self, evt):
		self.settings.arrangemargin = self.scMargin.GetValue()

	def onCbPreview(self, evt):
		self.settings.preview = self.cbPreview.GetValue()
		
	def onStrategy(self, evt):
		self.settings.arrangestrategy = self.strategyList[evt.GetInt()]

	def onCbCenterOnArrange(self, evt):
		self.settings.centeronarrange = self.cbCenterOnArrange.GetValue()

	def doAdd(self, evt):
		wildcard = "STL (*.stl)|*.stl;*.STL|"	 \
			"All files (*.*)|*.*"
			
		dlg = wx.FileDialog(
			self, message="Choose an STL file",
			defaultDir=self.settings.lastdirectory, 
			defaultFile="",
			wildcard=wildcard,
			style=wx.FD_OPEN)

		rc = dlg.ShowModal()
		if rc == wx.ID_OK:
			path = dlg.GetPath().encode('ascii','ignore')
		dlg.Destroy()
		if rc != wx.ID_OK:
			return
		
		self.settings.lastdirectory = os.path.dirname(path)
		
		if self.settings.preview:
			stlObj = stl(filename = path)
			dlg = StlViewer(self, stlObj, path, True, self.images, self.settings)
			rc = dlg.ShowModal()
			dlg.Destroy()
			dlg = None
		
		if not self.settings.preview or rc == wx.ID_OK:
			ud = UserData(path, stlObj, self.seq)
			self.files.addFile(ud)
			self.stlCanvas.addHull(stlObj, self.seq)
			self.seq += 1
			self.modified = True
			self.enableButtons()
			
	def setFilesSelection(self, seq):
		self.files.setSelection(seq)
		self.enableButtons()
		
	def setHullSelection(self, seq):
		self.stlCanvas.setSelection(seq)
		self.enableButtons()
		
	def doClone(self, evt):
		self.clone()
		
	def clone(self):
		self.stlCanvas.commitDeltas(None)
		ud = self.files.getSelection()
		if ud is None:
			return None
		
		mySeq = self.seq
		self.seq += 1
		udNew = ud.clone(mySeq)
		
		self.files.addFile(udNew)
		self.stlCanvas.addHull(udNew.getStlObj(), mySeq)
			
		self.modified = True
		self.enableButtons()
		return mySeq
		
	def doDel(self, evt):
		fx = self.files.getSelectionIndex()
		if fx == wx.NOT_FOUND:
			return
		
		ud = self.files.getUserDataByIndex(fx)
		if not ud is None:
			self.stlCanvas.delHull(ud.getSeqNbr())
			
		self.files.delFileByIndex(fx)
		if self.files.countFiles() > 0:
			self.modified = True
		else:
			self.modified = False
			self.seq = 0

		self.enableButtons()
		
	def doDelall(self, evt):
		dlg = wx.MessageDialog(self,
			"This will delete ALL items.\nAre you sure you want to do this?",
			"Confirm Delete All",
			wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
		rc = dlg.ShowModal()
		dlg.Destroy()
		if rc == wx.ID_YES:
			self.modified = False
			self.files.delAll()
			self.stlCanvas.delAllHulls()
			self.seq = 0
			self.enableButtons()
		
	def doArrange(self, evt):
		self.stlCanvas.arrange()
		self.modified = True
		
	def findUserDataBySeq(self, seq):
		return self.files.findUserDataBySeq(seq)
		
	def doMirror(self, evt):
		dlg = MirrorDlg(self, self.stlCanvas, self.images, wx.GetMousePosition())
		dlg.ShowModal()
		dlg.Destroy()
			
	def doRotate(self, evt):
		dlg = RotateDlg(self, self.stlCanvas, self.images, wx.GetMousePosition())
		dlg.ShowModal()
		dlg.Destroy()
			
	def doTranslate(self, evt):
		dlg = TranslateDlg(self, self.stlCanvas, self.images, wx.GetMousePosition())
		dlg.ShowModal()
		dlg.Destroy()
			
	def doScale(self, evt):
		dlg = ScaleDlg(self, self.stlCanvas, self.images, wx.GetMousePosition())
		dlg.ShowModal()
		dlg.Destroy()
		
	def doCenter(self, evt):
		self.stlCanvas.centerPlate()
		self.modified = True
		
	def doGrid(self, evt):
		ud = self.files.getSelection()
		if ud is None:
			return
		
		masterSeq = ud.getSeqNbr()
		dlg = GridParamsDlg(self, self.images, wx.GetMousePosition())
		rc = dlg.ShowModal()
		if rc == wx.ID_OK:
			rows, cols = dlg.getValues()
			
		dlg.Destroy()
		if rc != wx.ID_OK:
			return
		
		copies = rows * cols - 1
		if copies == 1:
			return
		
		self.modified = True
		
		seqNbrs = [masterSeq]
		for i in range(copies):
			seqNbrs.append(self.clone())
			
		self.stlCanvas.gridArrange(seqNbrs, rows, cols)
		
	def doSplit(self, evt):
		ud = self.files.getSelection()
		if ud is None:
			return
	
		self.disableButtons()	
		obj = ud.getStlObj()
		self.part = 0
		self.partfn = ud.getFn()
		self.splitter = SplitThread(self, obj)
		self.splitter.Start()
		
	def splitUpdate(self, evt):
		finished = False
		if evt.state == SPLIT_LAST_OBJECT:
			finished = True
			if self.part == 0:
				dlg = wx.MessageDialog(self,
					"Object consists of a single mesh",
					"Cannot Split",
					wx.OK | wx.ICON_EXCLAMATION)
				dlg.ShowModal()
				dlg.Destroy()
				self.splitter = None
				self.enableButtons()
				return
			
		nf = evt.facets
		if self.part == 0:
			ud = self.files.getSelection()
			ud.getStlObj().setFacets(nf)
			ud.setPart(self.part)
			self.files.refreshFilesList(ud.getSeqNbr())
			self.stlCanvas.refreshHull(ud.getSeqNbr())
		else:
			nobj = stl(filename=None)
			nobj.setFacets(nf)
			ud = UserData(self.partfn, nobj, self.seq)
			ud.setPart(self.part)
			self.files.addFile(ud)
			self.stlCanvas.addHull(nobj, self.seq)
			self.seq += 1
			
		self.part += 1
		
		if finished:
			self.modified = True
			self.splitter = None
			self.enableButtons()
		else:
			self.disableButtons()
			
	def onCbAutoEnqueue(self, evt):
		self.settings.autoenqueue = self.cbAutoEnqueue.GetValue()
		
	def onCbAutoExport(self, evt):
		self.settings.autoexport = self.cbAutoExport.GetValue()
		self.bExport.Enable(not self.settings.autoexport and self.savedfile is not None)

	def doExport(self, evt):
		self.parent.exportStlFile(self.savedfile, True, self.settings.autoenqueue)
		
	def doSaveAs(self, evt):
		wildcard = "STL (*.stl)|*.stl;*.STL"
		dlg = wx.FileDialog(
			self, message="Save file as ...", defaultDir=self.settings.lastdirectory, 
			defaultFile="", wildcard=wildcard, style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT
			)
		
		rc = dlg.ShowModal()
		if rc == wx.ID_OK:
			path = dlg.GetPath().encode('ascii','ignore')
			if os.path.splitext(path)[1].lower() != ".stl":
				path += ".stl"
			
		dlg.Destroy()
		if rc != wx.ID_OK:
			return
		
		self.stlCanvas.commitDeltas(None)
		objs = self.files.getStlObjects()
		facets = []
		for o in objs:
			facets.extend(o.facets)
			
		self.savedfile = path
		
		emitstl(path, facets=facets, objname="PlaterObject", binary=False)
		self.modified = False
		
		dlg = wx.MessageDialog(self,
			"File '%s' written" % path,
			"Save",
			wx.OK | wx.ICON_INFORMATION)
		
		self.parent.exportStlFile(self.savedfile, self.settings.autoexport, self.settings.autoenqueue)

		dlg.ShowModal()
		dlg.Destroy()
		self.enableButtons()

	def doView(self, evt):
		self.viewObject()
		
	def viewObject(self):
		self.stlCanvas.commitDeltas(None)
		ud = self.files.getSelection()
		dlg = StlViewer(self, ud.getStlObj(), ud.getName(), False, self.images, self.settings)
		dlg.ShowModal()
		dlg.Destroy()
		
	def doViewPlate(self, evt):
		self.stlCanvas.commitDeltas(None)
		objs = self.files.getStlObjects()
		
		plateStl = StlProxy()
		plateStl.facets = []
		for o in objs:
			plateStl.facets.extend(o.facets)
		dlg = StlViewer(self, plateStl, "Plate", False, self.images, self.settings)
		dlg.ShowModal()
		dlg.Destroy()

		
	def doFileSelect(self, evt):
		self.enableButtons()
			
	def onClose(self, evt):
		self.settings.save()
		if self.modified:
			dlg = wx.MessageDialog(self,
				"You have unsaved changes.\nAre you sure you want to exit?",
				"Confirm Exit With Pending Changes",
				wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
			rc = dlg.ShowModal()
			dlg.Destroy()
			if rc == wx.ID_YES:
				self.parent.platerClosed()
		else:
			self.parent.platerClosed()
コード例 #14
0
    def run(self):
        if self.isActive:
            time = datetime.now().replace(microsecond=0)
            self.log.emit('{}. Processing started.'.format(time))
            directory_name = self.configuration['directory_name']

        files = FileList.get(directory_name) if self.isActive else []

        for filename in files:

            if self.isActive:
                self.log.emit('Reading \'{}\' from \'{}\'...'.format(
                    filename, directory_name))
                data = self.read_input_file(directory_name + '/' + filename)
                if data is None or not data:
                    self.log.emit('No data available in file.')
                    continue

            if self.isActive:
                data = self.filter(data, self.configuration)
                num = len(data)
                if num > 1:
                    self.log.emit('{} passes were found.'.format(num))
                elif num == 1:
                    self.log.emit('1 pass was found.')
                else:
                    self.log.emit('No passes were found.')
                    continue

            if self.isActive:
                proxy_host = self.configuration['proxy_host']
                proxy_port = self.configuration['proxy_port']
                proxy = {
                    'proxy_host': proxy_host,
                    'proxy_port': proxy_port
                } if proxy_host else None
                iri = IriModelAccess(proxy)
                igrf = IgrfModelAccess(proxy)

            if self.isActive:
                self.log.emit(Formats.HEADER)

            n = 0
            for d in data:

                mlt = None
                date = d['date']
                l_shell = -1

                if wnd.checkLocalTime.isChecked():

                    if self.isActive:
                        try:
                            print('Req. 1')
                            mlt = float(
                                iri.get_data(date, d['lat'], d['long'], 3,
                                             False)[0])
                        except ValueError:
                            self.finished.emit(False)
                            return

                        if mlt is None:
                            self.finished.emit(False)
                            return

                    if self.isActive:
                        print('Req. 2')
                        iri_result = iri.get_data_cached(
                            date, self.configuration['point_lat'],
                            self.configuration['point_long'], 3)

                        if iri_result[0]:
                            try:
                                times = [float(x) for x in iri_result]
                            except ValueError:
                                self.finished.emit(False)
                                return

                            delta = float('inf')
                            k = 0
                            for i, v in enumerate(times):
                                if abs(v - mlt) < delta:
                                    k = i
                                    delta = abs(v - mlt)
                            kt = k * 0.025

                            date_out = datetime(date.year, date.month,
                                                date.day)
                            date_out += timedelta(seconds=int(kt * 3600.0))

                            delta = date_out - date
                            if abs(delta.total_seconds()) > 12 * 60 * 60:
                                if delta.total_seconds() > 0:
                                    date_out += timedelta(days=-1)
                                else:
                                    date_out += timedelta(days=1)
                            date_out = date_out.isoformat()
                        else:
                            kt = -1
                            date_out = '{:>20s}'.format('-1')

                else:
                    mlt = -1
                    kt = -1
                    date_out = '{:>20s}'.format('-1')

                if wnd.checkLShell.isChecked():
                    if self.isActive:
                        cgm = self.configuration['cgm']
                        l_shell = float(
                            igrf.get_data(date.year,
                                          d['lat'],
                                          d['long'],
                                          d['alt'],
                                          1,
                                          cgm=cgm)[0])

                if self.isActive:

                    out_str = Formats.ROW_FORMAT.format(
                        n + 1, d['sat_id'], d['lat'], d['long'], d['alt'],
                        d['ti'], d['te'], d['ne'], d['po'], d['ph'], d['phe'],
                        d['rpa'], d['idm'],
                        date.replace(microsecond=0).isoformat(),
                        date.hour + date.minute / 60.0 + date.second / 3600.0,
                        d['mlt'], mlt, kt, date_out, l_shell)

                if self.isActive:
                    needFiltering = wnd.shellFilterCheckBox.isChecked()
                    if needFiltering and l_shell > 0:
                        l_shell_set = self.configuration['l_shell_set']
                        dl_shell_set = self.configuration['dl_shell_set']
                        if abs(l_shell_set - l_shell) < dl_shell_set:
                            self.log.emit(out_str)
                            n += 1
                    elif not needFiltering or l_shell < 0:
                        self.log.emit(out_str)
                        n += 1

        self.finished.emit(True)