From 5452d213844bb128679b0f0f51077f3d758db846 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 14 May 2015 11:03:48 -0300 Subject: [PATCH] Added thumbnail preview to macro script --- PartsLibrary.FCMacro | 55 ++++++++++++++++++++++++++++++++------------ 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/PartsLibrary.FCMacro b/PartsLibrary.FCMacro index 3febf086..498aafbc 100644 --- a/PartsLibrary.FCMacro +++ b/PartsLibrary.FCMacro @@ -52,7 +52,7 @@ which you can browse and install items from the library. LIBRARYPATH = "/home/yorik/Sources/FreeCAD-library" # END CONFIGURATION - THAT'S DONE, NO NEED TO EDIT ANYTHING MORE -import FreeCAD, FreeCADGui, Part +import FreeCAD, FreeCADGui, Part, zipfile, tempfile from PySide import QtGui, QtCore class ExpFileSystemModel(QtGui.QFileSystemModel): @@ -78,26 +78,51 @@ class ExpDockWidget(QtGui.QDockWidget): # setting up a directory model that shows only fcstd and step self.dirmodel = ExpFileSystemModel() self.dirmodel.setRootPath(LIBRARYPATH) - self.dirmodel.setNameFilters(["*.fcstd","*.FcStd","*.FCSTD","*.stp","*.STP","*.step","*.STEP", "*.brep", "*.BREP"]) + self.dirmodel.setNameFilters(["*.fcstd","*.FcStd","*.FCSTD","*.stp","*.STP","*.step","*.STEP", "*.brp", "*.BRP", "*.brep", "*.BREP"]) self.dirmodel.setNameFilterDisables(0) - self.folder_view = QtGui.QTreeView(); - self.folder_view.setModel(self.dirmodel) - self.folder_view.doubleClicked[QtCore.QModelIndex].connect(self.clicked) + container = QtGui.QWidget() + layout = QtGui.QVBoxLayout(container) + folder = QtGui.QTreeView() + folder.setModel(self.dirmodel) + folder.clicked[QtCore.QModelIndex].connect(self.clicked) + folder.doubleClicked[QtCore.QModelIndex].connect(self.doubleclicked) # Don't show columns for size, file type, and last modified - self.folder_view.setHeaderHidden(True) - self.folder_view.hideColumn(1) - self.folder_view.hideColumn(2) - self.folder_view.hideColumn(3) - self.folder_view.setRootIndex(self.dirmodel.index(LIBRARYPATH)) - - self.setWidget(self.folder_view) - + folder.setHeaderHidden(True) + folder.hideColumn(1) + folder.hideColumn(2) + folder.hideColumn(3) + folder.setRootIndex(self.dirmodel.index(LIBRARYPATH)) + layout.addWidget(folder) + self.preview = QtGui.QLabel() + self.preview.setFixedHeight(128) + layout.addWidget(self.preview) + self.setWidget(container) + def clicked(self, index): path = self.dirmodel.filePath(index) - if path.lower().endswith(".stp") or path.lower().endswith(".step") or path.lower().endswith(".brep"): + if path.lower().endswith(".fcstd"): + zfile=zipfile.ZipFile(path) + files=zfile.namelist() + # check for meta-file if it's really a FreeCAD document + if files[0] == "Document.xml": + image="thumbnails/Thumbnail.png" + if image in files: + image=zfile.read(image) + thumbfile = tempfile.mkstemp(suffix='.png')[1] + thumb = open(thumbfile,"wb") + thumb.write(image) + thumb.close() + im = QtGui.QPixmap(thumbfile) + self.preview.setPixmap(im) + return + self.preview.clear() + + def doubleclicked(self, index): + path = self.dirmodel.filePath(index) + if path.lower().endswith(".stp") or path.lower().endswith(".step") or path.lower().endswith(".brp") or path.lower().endswith(".brep"): Part.show(Part.read(path)) - else: + elif path.lower().endswith(".fcstd"): FreeCADGui.ActiveDocument.mergeProject(path) if QtCore.QDir(LIBRARYPATH).exists():