2020-11-23 09:34:13 +01:00
|
|
|
import os
|
2021-02-02 12:34:14 +11:00
|
|
|
import sys
|
|
|
|
|
import bimtester.run
|
2020-11-23 09:34:13 +01:00
|
|
|
from PySide2 import QtCore
|
|
|
|
|
from PySide2 import QtGui
|
|
|
|
|
from PySide2 import QtWidgets
|
|
|
|
|
|
|
|
|
|
|
2021-02-02 12:34:14 +11:00
|
|
|
def run():
|
|
|
|
|
app = QtWidgets.QApplication(sys.argv)
|
|
|
|
|
form = GuiWidgetBimTester()
|
|
|
|
|
form.show()
|
|
|
|
|
sys.exit(app.exec_())
|
2020-11-23 09:34:13 +01:00
|
|
|
|
|
|
|
|
|
2021-02-02 12:34:14 +11:00
|
|
|
class GuiWidgetBimTester(QtWidgets.QWidget):
|
|
|
|
|
def __init__(self, args=[]):
|
2020-11-23 09:34:13 +01:00
|
|
|
super(GuiWidgetBimTester, self).__init__()
|
2021-01-14 15:53:14 +01:00
|
|
|
self.args = args
|
2020-11-27 17:52:23 +01:00
|
|
|
|
2020-11-23 09:34:13 +01:00
|
|
|
self._setup_ui()
|
|
|
|
|
|
2021-02-02 12:34:14 +11:00
|
|
|
# http://forum.freecadweb.org/viewtopic.php?f=18&t=10732&start=10#p86493
|
|
|
|
|
def __del__(self):
|
2020-11-23 09:34:13 +01:00
|
|
|
return
|
|
|
|
|
|
|
|
|
|
def _setup_ui(self):
|
|
|
|
|
package_path = os.path.dirname(os.path.realpath(__file__))
|
2021-02-02 12:34:14 +11:00
|
|
|
iconpath = os.path.join(package_path, "resources", "icons", "bimtester.ico")
|
|
|
|
|
|
2020-11-23 09:34:13 +01:00
|
|
|
"""
|
|
|
|
|
# as svg
|
|
|
|
|
# https://stackoverflow.com/a/35138314
|
|
|
|
|
theicon = QtSvg.QSvgWidget(iconpath)
|
|
|
|
|
# none works ...
|
|
|
|
|
#theicon.setGeometry(20,20,200,200)
|
2020-11-30 07:49:03 +01:00
|
|
|
#theicon.setSizePolicy(
|
|
|
|
|
# QtGui.QSizePolicy.Policy.Maximum,
|
|
|
|
|
# QtGui.QSizePolicy.Policy.Maximum
|
|
|
|
|
#)
|
2020-11-23 09:34:13 +01:00
|
|
|
#theicon.sizeHint()
|
|
|
|
|
"""
|
2021-02-02 12:34:14 +11:00
|
|
|
|
2020-11-23 09:34:13 +01:00
|
|
|
# as pixmap
|
|
|
|
|
theicon = QtWidgets.QLabel(self)
|
|
|
|
|
iconpixmap = QtGui.QPixmap(iconpath)
|
|
|
|
|
iconpixmap = iconpixmap.scaled(100, 100, QtCore.Qt.KeepAspectRatio)
|
|
|
|
|
theicon.setPixmap(iconpixmap)
|
|
|
|
|
|
|
|
|
|
# ifc file
|
|
|
|
|
_ifcfile_label = QtWidgets.QLabel("IFC file", self)
|
|
|
|
|
self.ifcfile_text = QtWidgets.QLineEdit()
|
|
|
|
|
_ifcfile_browse_btn = QtWidgets.QToolButton()
|
|
|
|
|
_ifcfile_browse_btn.setText("...")
|
|
|
|
|
_ifcfile_browse_btn.clicked.connect(self.select_ifcfile)
|
|
|
|
|
|
|
|
|
|
# feature files path
|
|
|
|
|
# use a layout with a frame and a title, see solver framework tp
|
|
|
|
|
# beside button
|
2021-02-02 12:34:14 +11:00
|
|
|
ffifc_str = "Feature files in a directory 'features' beside the IFC file."
|
2020-11-23 09:34:13 +01:00
|
|
|
featuredirfromifc_label = QtWidgets.QLabel(ffifc_str, self)
|
|
|
|
|
|
|
|
|
|
# path browser and line edit
|
2021-02-02 12:34:14 +11:00
|
|
|
_ffdir_str = "Feature files directory. " "'features' directory has to be in there."
|
2020-11-23 09:34:13 +01:00
|
|
|
_featurefilesdir_label = QtWidgets.QLabel(_ffdir_str, self)
|
|
|
|
|
self.featurefilesdir_text = QtWidgets.QLineEdit()
|
|
|
|
|
self.feafilesdir_browse_btn = QtWidgets.QToolButton()
|
|
|
|
|
self.feafilesdir_browse_btn.setText("...")
|
2021-02-02 12:34:14 +11:00
|
|
|
self.feafilesdir_browse_btn.clicked.connect(self.select_featurefilesdir)
|
2020-11-23 09:34:13 +01:00
|
|
|
|
|
|
|
|
# buttons
|
2021-02-02 12:34:14 +11:00
|
|
|
self.run_button = QtWidgets.QPushButton(QtGui.QIcon.fromTheme("document-new"), "Run")
|
|
|
|
|
self.close_button = QtWidgets.QPushButton(QtGui.QIcon.fromTheme("window-close"), "Close")
|
2020-11-23 09:34:13 +01:00
|
|
|
self.run_button.clicked.connect(self.run_bimtester)
|
|
|
|
|
self.close_button.clicked.connect(self.close_widget)
|
|
|
|
|
_buttons = QtWidgets.QHBoxLayout()
|
|
|
|
|
_buttons.addWidget(self.run_button)
|
|
|
|
|
_buttons.addWidget(self.close_button)
|
|
|
|
|
|
|
|
|
|
# Layout:
|
|
|
|
|
layout = QtWidgets.QGridLayout()
|
|
|
|
|
layout.addWidget(theicon, 1, 0, alignment=QtCore.Qt.AlignRight)
|
2020-11-30 07:49:03 +01:00
|
|
|
|
|
|
|
|
layout.addWidget(featuredirfromifc_label, 2, 0)
|
|
|
|
|
|
|
|
|
|
layout.addWidget(_featurefilesdir_label, 3, 0)
|
|
|
|
|
layout.addWidget(self.featurefilesdir_text, 4, 0)
|
|
|
|
|
layout.addWidget(self.feafilesdir_browse_btn, 4, 1)
|
|
|
|
|
|
|
|
|
|
layout.addWidget(_ifcfile_label, 5, 0)
|
|
|
|
|
layout.addWidget(self.ifcfile_text, 6, 0)
|
|
|
|
|
layout.addWidget(_ifcfile_browse_btn, 6, 1)
|
|
|
|
|
|
2020-11-23 09:34:13 +01:00
|
|
|
layout.addLayout(_buttons, 7, 0)
|
|
|
|
|
# row stretches by 10 compared to the others, std is 0
|
|
|
|
|
# first parameter is the row number
|
|
|
|
|
# second is the stretch factor.
|
|
|
|
|
layout.setRowStretch(0, 10)
|
|
|
|
|
self.setLayout(layout)
|
|
|
|
|
|
|
|
|
|
def select_ifcfile(self):
|
2021-02-02 12:34:14 +11:00
|
|
|
ifcfile = QtWidgets.QFileDialog.getOpenFileName(self, dir=self.get_ifcfile())[0]
|
2020-11-23 09:34:13 +01:00
|
|
|
self.set_ifcfile(ifcfile)
|
|
|
|
|
|
|
|
|
|
def set_ifcfile(self, a_file):
|
|
|
|
|
self.ifcfile_text.setText(a_file)
|
|
|
|
|
|
|
|
|
|
def get_ifcfile(self):
|
|
|
|
|
return self.ifcfile_text.text()
|
|
|
|
|
|
|
|
|
|
def select_featurefilesdir(self):
|
|
|
|
|
thedir = self.featurefilesdir_text.text()
|
|
|
|
|
features_path = QtWidgets.QFileDialog.getExistingDirectory(
|
|
|
|
|
self,
|
|
|
|
|
caption="Choose features directory ...",
|
|
|
|
|
dir=thedir,
|
2021-02-02 12:34:14 +11:00
|
|
|
options=QtWidgets.QFileDialog.HideNameFilterDetails,
|
2020-11-23 09:34:13 +01:00
|
|
|
)
|
|
|
|
|
self.set_featurefilesdir(features_path)
|
|
|
|
|
|
|
|
|
|
def set_featurefilesdir(self, a_directory):
|
|
|
|
|
self.featurefilesdir_text.setText(a_directory)
|
|
|
|
|
|
|
|
|
|
def get_featurefilesdir(self):
|
|
|
|
|
return self.featurefilesdir_text.text()
|
|
|
|
|
|
|
|
|
|
def run_bimtester(self):
|
2021-01-14 15:53:14 +01:00
|
|
|
print("Run BIMTester by the GUI")
|
2020-11-23 09:34:13 +01:00
|
|
|
QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
|
|
|
|
|
|
2021-02-02 12:34:14 +11:00
|
|
|
the_features_path = self.get_featurefilesdir()
|
2020-11-23 09:34:13 +01:00
|
|
|
print(the_features_path)
|
2020-11-30 07:49:03 +01:00
|
|
|
|
|
|
|
|
# get ifc file
|
|
|
|
|
the_ifcfile = self.get_ifcfile()
|
2020-11-27 17:52:23 +01:00
|
|
|
print(the_ifcfile)
|
2020-11-23 09:34:13 +01:00
|
|
|
|
2021-01-14 15:53:14 +01:00
|
|
|
# overwrite the_features_path and ifcfile in args
|
|
|
|
|
patched_args = self.args
|
|
|
|
|
patched_args["featuresdir"] = the_features_path
|
|
|
|
|
patched_args["ifcfile"] = the_ifcfile
|
|
|
|
|
|
2021-02-02 12:34:14 +11:00
|
|
|
bimtester.run.TestRunner("file.ifc").run({})
|
2020-11-23 09:34:13 +01:00
|
|
|
|
|
|
|
|
QtWidgets.QApplication.restoreOverrideCursor()
|
|
|
|
|
|
|
|
|
|
def close_widget(self):
|
|
|
|
|
self.close()
|
|
|
|
|
|
|
|
|
|
def closeEvent(self, ev):
|
|
|
|
|
pw = self.parentWidget()
|
|
|
|
|
if pw and pw.inherits("QDockWidget"):
|
|
|
|
|
pw.deleteLater()
|