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()
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
# ------------------------------------------------------------- # 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)
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()
def get_filelist(self, directory): result = [] for filename in FileList.get(directory): if fnmatch(filename, '????????_????_iono.ion'): result.append(filename) return result
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)
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)
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) # -----------------------------------------
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)
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", "生成贝塞尔关键点"))
# 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()
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()
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()
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)