Esempio n. 1
0
    def __init__(self, app, parent=None):
        """Constructor for main class.

        Keyword arguments:
        app -- the application

        """
        super(ChEsher, self).__init__(parent)
        self._app = app
        
        # setup user interface of main window
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # variables
        self.directory = ""

        # setup instance of module DXF2BK
        self.moduleDXF2BK = WrapDXF2BK(self.directory)
        self.widgetDXF2BK = self.moduleDXF2BK.widget
        self.ui.stackedWidget.insertWidget(0, self.widgetDXF2BK)        

        # setup instance of module BK2DXF
        self.moduleBK2DXF = WrapBK2DXF(self.directory)
        self.widgetBK2DXF = self.moduleBK2DXF.widget
        self.ui.stackedWidget.insertWidget(1, self.widgetBK2DXF)   

        # setup instance of module Mesh
        self.moduleMesh = WrapMesh(self.directory)
        self.widgetMesh = self.moduleMesh.widget
        self.ui.stackedWidget.insertWidget(2, self.widgetMesh)   

        # setup instance of module LandXML
        self.moduleLandXML = WrapLandXML(self.directory)
        self.widgetLandXML = self.moduleLandXML.widget
        self.ui.stackedWidget.insertWidget(3, self.widgetLandXML)   
        
        # setup instance of module ScalarDXF
        self.moduleScalarDXF = WrapScalarDXF(self.directory)
        self.widgetScalarDXF = self.moduleScalarDXF.widget
        self.ui.stackedWidget.insertWidget(4, self.widgetScalarDXF)  

        # setup instance of module VectorDXF
        self.moduleVectorDXF = WrapVectorDXF(self.directory)
        self.widgetVectorDXF = self.moduleVectorDXF.widget
        self.ui.stackedWidget.insertWidget(5, self.widgetVectorDXF)  

        # setup instance of module CS
        self.moduleCS = WrapCS(self.directory)
        self.widgetCS = self.moduleCS.widget
        self.ui.stackedWidget.insertWidget(6, self.widgetCS)  

        # setup instance of module 2DM2BK
        self.module2DM2BK = Wrap2DM2BK(self.directory)
        self.widget2DM2BK = self.module2DM2BK.widget
        self.ui.stackedWidget.insertWidget(7, self.widget2DM2BK)  

        # setup instance of module Cont2DXF
        self.moduleCont2DXF = WrapCont2DXF(self.directory)
        self.widgetCont2DXF = self.moduleCont2DXF.widget
        self.ui.stackedWidget.insertWidget(8, self.widgetCont2DXF)  
        
        # setup instance of module Tube
        self.moduleTube = WrapTube(self.directory)
        self.widgetTube = self.moduleTube.widget
        self.ui.stackedWidget.insertWidget(9, self.widgetTube)  

        # setup instance of module XYZ2Profiles
        self.moduleXYZ2Profiles = WrapXYZ2Profiles(self.directory)
        self.widgetXYZ2Profiles = self.moduleXYZ2Profiles.widget
        self.ui.stackedWidget.insertWidget(10, self.widgetXYZ2Profiles)    

        # setup instance of module ProfilesDXF
        self.moduleProfilesDXF = WrapProfilesDXF(self.directory)
        self.widgetProfilesDXF = self.moduleProfilesDXF.widget
        self.ui.stackedWidget.insertWidget(11, self.widgetProfilesDXF)   
        
        # setup instance of module HEC2DXF
        self.moduleHEC2DXF = WrapHEC2DXF(self.directory)
        self.widgetHEC2DXF = self.moduleHEC2DXF.widget
        self.ui.stackedWidget.insertWidget(12, self.widgetHEC2DXF)  
        
        # setup instance of module XYZ2DXF
        self.moduleXYZ2DXF = WrapXYZ2DXF(self.directory)
        self.widgetXYZ2DXF = self.moduleXYZ2DXF.widget
        self.ui.stackedWidget.insertWidget(13, self.widgetXYZ2DXF)                

        # setup instance of module HyDesign
        self.moduleHyDesign = WrapHyDesign()
        self.widgetHyDesign = self.moduleHyDesign.widget
        self.ui.stackedWidget.insertWidget(14, self.widgetHyDesign)
        
        # actions in menu
        self.fileSetDirectory = self.createAction("Set working directory", slot=self.setDirectory)
        self.fileQuitAction = self.createAction("Close", slot=self.close, \
            shortcut="Ctrl+Q")
        self.fileSetExamples = self.createAction("Initialize examples", slot=self.initializeModules)
        self.helpAction = self.createAction("Help", slot=self.help, shortcut="F1")
        self.setDXFtoBKAction = self.createAction("DXF2BK", slot=self.setDXF2BK)
        self.setBK2DXFAction = self.createAction("BK2DXF", slot=self.setBK2DXF)
        self.setMeshAction = self.createAction("Mesh", slot=self.setMesh)
        self.setXMLAction = self.createAction("LandXML", slot=self.setLandXML)
        self.setScalarAction = self.createAction("ScalarDXF", slot=self.setScalarDXF)
        self.setVectorAction = self.createAction("VectorDXF", slot=self.setVectorDXF)
        self.setCSAction = self.createAction("CS", slot=self.setCS)
        self.set2DMAction = self.createAction("2DM2BK", slot=self.set2DM2BK)
        self.setCont2DXFAction = self.createAction("Cont2DXF", slot=self.setCont2DXF)
        self.setTubeAction = self.createAction("Tube", slot=self.setTube)
        self.setProfilesAction = self.createAction("XYZ2Profiles", slot=self.setXYZ2Profiles)
        self.setProfilesDXFAction = self.createAction("ProfilesDXF", slot=self.setProfilesDXF)
        self.setHEC2DXFAction = self.createAction("HEC2DXF", slot=self.setHEC2DXF)
        self.setXYZ2DXFAction = self.createAction("XYZ2DXF", slot=self.setXYZ2DXF)        
        self.setHyDesignAction = self.createAction("HyDesign", slot=self.setHyDesign)
        
        self.helpAboutAction = self.createAction("&About", \
            self.helpAbout)
        
        # create menu
        self.fileMenu = self.menuBar().addMenu("ChEsher")
        self.moduleMenu = self.menuBar().addMenu("Module")
        self.helpMenu = self.menuBar().addMenu("Help")
        
        # add actions to menu
        self.addActions(self.fileMenu, ( \
            self.fileSetDirectory, 
            self.fileSetExamples, 
            None, 
            self.fileQuitAction
            ))
            
        self.addActions(self.moduleMenu, ( \
            self.setDXFtoBKAction, \
            self.setBK2DXFAction,
            self.setMeshAction, 
            self.setXMLAction, 
            self.setScalarAction, 
            self.setVectorAction, 
            self.setCSAction, 
            self.set2DMAction,
            self.setCont2DXFAction,
            self.setTubeAction,
            self.setProfilesAction,
            self.setProfilesDXFAction,
            self.setHEC2DXFAction,
            self.setXYZ2DXFAction,
            self.setHyDesignAction
            ))
            
        self.addActions(self.helpMenu, (self.helpAction, None, self.helpAboutAction))

#        self.setDXF2BK()
#        self.setCont2DXF()
#        self.setTube()
#        self.setHEC2DXF()
#        self.setXYZ2Profiles()
        self.setProfilesDXF()
        self.initialize()
Esempio n. 2
0
class ChEsher(QtGui.QMainWindow):
    """Main class.

    Create menubar, toolbar, actions.
    Translate the application.
    Switch between module ENGINEERING and EDUCATION.

    """
    def __init__(self, app, parent=None):
        """Constructor for main class.

        Keyword arguments:
        app -- the application

        """
        super(ChEsher, self).__init__(parent)
        self._app = app
        
        # setup user interface of main window
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        # variables
        self.directory = ""

        # setup instance of module DXF2BK
        self.moduleDXF2BK = WrapDXF2BK(self.directory)
        self.widgetDXF2BK = self.moduleDXF2BK.widget
        self.ui.stackedWidget.insertWidget(0, self.widgetDXF2BK)        

        # setup instance of module BK2DXF
        self.moduleBK2DXF = WrapBK2DXF(self.directory)
        self.widgetBK2DXF = self.moduleBK2DXF.widget
        self.ui.stackedWidget.insertWidget(1, self.widgetBK2DXF)   

        # setup instance of module Mesh
        self.moduleMesh = WrapMesh(self.directory)
        self.widgetMesh = self.moduleMesh.widget
        self.ui.stackedWidget.insertWidget(2, self.widgetMesh)   

        # setup instance of module LandXML
        self.moduleLandXML = WrapLandXML(self.directory)
        self.widgetLandXML = self.moduleLandXML.widget
        self.ui.stackedWidget.insertWidget(3, self.widgetLandXML)   
        
        # setup instance of module ScalarDXF
        self.moduleScalarDXF = WrapScalarDXF(self.directory)
        self.widgetScalarDXF = self.moduleScalarDXF.widget
        self.ui.stackedWidget.insertWidget(4, self.widgetScalarDXF)  

        # setup instance of module VectorDXF
        self.moduleVectorDXF = WrapVectorDXF(self.directory)
        self.widgetVectorDXF = self.moduleVectorDXF.widget
        self.ui.stackedWidget.insertWidget(5, self.widgetVectorDXF)  

        # setup instance of module CS
        self.moduleCS = WrapCS(self.directory)
        self.widgetCS = self.moduleCS.widget
        self.ui.stackedWidget.insertWidget(6, self.widgetCS)  

        # setup instance of module 2DM2BK
        self.module2DM2BK = Wrap2DM2BK(self.directory)
        self.widget2DM2BK = self.module2DM2BK.widget
        self.ui.stackedWidget.insertWidget(7, self.widget2DM2BK)  

        # setup instance of module Cont2DXF
        self.moduleCont2DXF = WrapCont2DXF(self.directory)
        self.widgetCont2DXF = self.moduleCont2DXF.widget
        self.ui.stackedWidget.insertWidget(8, self.widgetCont2DXF)  
        
        # setup instance of module Tube
        self.moduleTube = WrapTube(self.directory)
        self.widgetTube = self.moduleTube.widget
        self.ui.stackedWidget.insertWidget(9, self.widgetTube)  

        # setup instance of module XYZ2Profiles
        self.moduleXYZ2Profiles = WrapXYZ2Profiles(self.directory)
        self.widgetXYZ2Profiles = self.moduleXYZ2Profiles.widget
        self.ui.stackedWidget.insertWidget(10, self.widgetXYZ2Profiles)    

        # setup instance of module ProfilesDXF
        self.moduleProfilesDXF = WrapProfilesDXF(self.directory)
        self.widgetProfilesDXF = self.moduleProfilesDXF.widget
        self.ui.stackedWidget.insertWidget(11, self.widgetProfilesDXF)   
        
        # setup instance of module HEC2DXF
        self.moduleHEC2DXF = WrapHEC2DXF(self.directory)
        self.widgetHEC2DXF = self.moduleHEC2DXF.widget
        self.ui.stackedWidget.insertWidget(12, self.widgetHEC2DXF)  
        
        # setup instance of module XYZ2DXF
        self.moduleXYZ2DXF = WrapXYZ2DXF(self.directory)
        self.widgetXYZ2DXF = self.moduleXYZ2DXF.widget
        self.ui.stackedWidget.insertWidget(13, self.widgetXYZ2DXF)                

        # setup instance of module HyDesign
        self.moduleHyDesign = WrapHyDesign()
        self.widgetHyDesign = self.moduleHyDesign.widget
        self.ui.stackedWidget.insertWidget(14, self.widgetHyDesign)
        
        # actions in menu
        self.fileSetDirectory = self.createAction("Set working directory", slot=self.setDirectory)
        self.fileQuitAction = self.createAction("Close", slot=self.close, \
            shortcut="Ctrl+Q")
        self.fileSetExamples = self.createAction("Initialize examples", slot=self.initializeModules)
        self.helpAction = self.createAction("Help", slot=self.help, shortcut="F1")
        self.setDXFtoBKAction = self.createAction("DXF2BK", slot=self.setDXF2BK)
        self.setBK2DXFAction = self.createAction("BK2DXF", slot=self.setBK2DXF)
        self.setMeshAction = self.createAction("Mesh", slot=self.setMesh)
        self.setXMLAction = self.createAction("LandXML", slot=self.setLandXML)
        self.setScalarAction = self.createAction("ScalarDXF", slot=self.setScalarDXF)
        self.setVectorAction = self.createAction("VectorDXF", slot=self.setVectorDXF)
        self.setCSAction = self.createAction("CS", slot=self.setCS)
        self.set2DMAction = self.createAction("2DM2BK", slot=self.set2DM2BK)
        self.setCont2DXFAction = self.createAction("Cont2DXF", slot=self.setCont2DXF)
        self.setTubeAction = self.createAction("Tube", slot=self.setTube)
        self.setProfilesAction = self.createAction("XYZ2Profiles", slot=self.setXYZ2Profiles)
        self.setProfilesDXFAction = self.createAction("ProfilesDXF", slot=self.setProfilesDXF)
        self.setHEC2DXFAction = self.createAction("HEC2DXF", slot=self.setHEC2DXF)
        self.setXYZ2DXFAction = self.createAction("XYZ2DXF", slot=self.setXYZ2DXF)        
        self.setHyDesignAction = self.createAction("HyDesign", slot=self.setHyDesign)
        
        self.helpAboutAction = self.createAction("&About", \
            self.helpAbout)
        
        # create menu
        self.fileMenu = self.menuBar().addMenu("ChEsher")
        self.moduleMenu = self.menuBar().addMenu("Module")
        self.helpMenu = self.menuBar().addMenu("Help")
        
        # add actions to menu
        self.addActions(self.fileMenu, ( \
            self.fileSetDirectory, 
            self.fileSetExamples, 
            None, 
            self.fileQuitAction
            ))
            
        self.addActions(self.moduleMenu, ( \
            self.setDXFtoBKAction, \
            self.setBK2DXFAction,
            self.setMeshAction, 
            self.setXMLAction, 
            self.setScalarAction, 
            self.setVectorAction, 
            self.setCSAction, 
            self.set2DMAction,
            self.setCont2DXFAction,
            self.setTubeAction,
            self.setProfilesAction,
            self.setProfilesDXFAction,
            self.setHEC2DXFAction,
            self.setXYZ2DXFAction,
            self.setHyDesignAction
            ))
            
        self.addActions(self.helpMenu, (self.helpAction, None, self.helpAboutAction))

#        self.setDXF2BK()
#        self.setCont2DXF()
#        self.setTube()
#        self.setHEC2DXF()
#        self.setXYZ2Profiles()
        self.setProfilesDXF()
        self.initialize()

    def setType(self):
        self.calcDischarge()
        self.updateUi()
  
    def initializeModules(self):
        answer = QMessageBox.question(self, "Initialize examples", "Do you really want to overwrite all inputs to initialize examples?", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
        if answer == QtGui.QMessageBox.Yes:
            self.initialize()
        elif answer == QtGui.QMessageBox.No:
            return
        
    def initialize(self):
        
        def makedir(dir):
            if not os.path.exists(dir):
                os.makedirs(dir)
        
        abs_path = os.path.abspath('.')
        self.directory = os.path.join(abs_path, 'examples/').replace('\\', '/')

        makedir(self.directory + "example_01/output/")
        makedir(self.directory + "example_02/output/")  
        makedir(self.directory + "example_03/output/")
        makedir(self.directory + "example_04/output/")
        makedir(self.directory + "example_05/output/")
        makedir(self.directory + "example_06/output/")
        makedir(self.directory + "example_07/output/")
        makedir(self.directory + "example_08/output/")
        makedir(self.directory + "example_09/output/")
        makedir(self.directory + "example_10/output/")
        makedir(self.directory + "example_12/output/")
        makedir(self.directory + "example_13/output/")
        
        self.moduleDXF2BK.initialize()
        self.moduleBK2DXF.initialize()
        self.moduleMesh.initialize()
        self.moduleLandXML.initialize()
        self.moduleScalarDXF.initialize()
        self.moduleVectorDXF.initialize()   
        self.moduleCS.initialize()
        self.module2DM2BK.initialize()
        self.moduleCont2DXF.initialize()
        self.moduleTube.initialize()
        self.moduleXYZ2Profiles.initialize()
        self.moduleHEC2DXF.initialize()
        self.moduleProfilesDXF.initialize()
        
    def setDXF2BK(self):
        self.ui.labelModule.setText("~   Module DXF2BK   ~")
        self.ui.stackedWidget.setCurrentIndex(0)

    def setBK2DXF(self):
        self.ui.labelModule.setText("~   Module BK2DXF   ~")
        self.ui.stackedWidget.setCurrentIndex(1)

    def setMesh(self):
        self.ui.labelModule.setText("~   Module Mesh   ~")
        self.ui.stackedWidget.setCurrentIndex(2)

    def setLandXML(self):
        self.ui.labelModule.setText("~   Module LandXML   ~")
        self.ui.stackedWidget.setCurrentIndex(3)
        
    def setScalarDXF(self):
        self.ui.labelModule.setText("~   Module ScalarDXF   ~")
        self.ui.stackedWidget.setCurrentIndex(4)
 
    def setVectorDXF(self):
        self.ui.labelModule.setText("~   Module VectorDXF   ~")
        self.ui.stackedWidget.setCurrentIndex(5)
        
    def setCS(self):
        self.ui.labelModule.setText("~   Module CS   ~")
        self.ui.stackedWidget.setCurrentIndex(6)
        
    def set2DM2BK(self):
        self.ui.labelModule.setText("~   Module 2DM2BK   ~")
        self.ui.stackedWidget.setCurrentIndex(7)

    def setCont2DXF(self):
        self.ui.labelModule.setText("~   Module Cont2DXF   ~")
        self.ui.stackedWidget.setCurrentIndex(8)

    def setTube(self):
        self.ui.labelModule.setText("~   Module Tube   ~")
        self.ui.stackedWidget.setCurrentIndex(9)

    def setXYZ2Profiles(self):
        self.ui.labelModule.setText("~   Module XYZ2Profiles   ~")
        self.ui.stackedWidget.setCurrentIndex(10)
        
    def setProfilesDXF(self):
        self.ui.labelModule.setText("~   Module ProfilesDXF   ~")
        self.ui.stackedWidget.setCurrentIndex(11)
        
    def setHEC2DXF(self):
        self.ui.labelModule.setText("~   HEC2DXF   ~")
        self.ui.stackedWidget.setCurrentIndex(12)
        
    def setXYZ2DXF(self):
        self.ui.labelModule.setText("~   XYZ2DXF   ~")
        self.ui.stackedWidget.setCurrentIndex(13)
 
    def setHyDesign(self):
        self.ui.labelModule.setText("~   Module HyDesign   ~")
        self.ui.stackedWidget.setCurrentIndex(14)

    def setDirectory(self):
        
        dir = QFileDialog.getExistingDirectory(self, "Select directory", self.directory)
        
        if dir != "":
            
            self.moduleDXF2BK.setDir(dir)
            self.moduleBK2DXF.setDir(dir)
            self.moduleMesh.setDir(dir)
            self.moduleLandXML.setDir(dir)
            self.moduleScalarDXF.setDir(dir)
            self.moduleVectorDXF.setDir(dir)
            self.moduleCS.setDir(dir)
            self.module2DM2BK.setDir(dir)
            self.moduleCont2DXF.setDir(dir)
            self.moduleTube.setDir(dir)
            self.moduleProfiles.setDir(dir)
            self.moduleHEC2DXF.setDir(dir)
            self.moduleProfilesDXF.setDir(dir)

            self.directory = dir

        else:
            return

#    def interpolatePoint(self, xa, ya, za, xb, yb, zb, xc, yc, zc, xp, yp):
#        dot1 = (yb - ya)*(xp - xa) + (-xb + xa)*(yp - ya)
#        dot2 = (yc - yb)*(xp - xb) + (-xc + xb)*(yp - yb)
#        dot3 = (ya - yc)*(xp - xc) + (-xa + xc)*(yp - yc)
#
#        zp = 0.0
#        counter = 0 
#        if dot1 <= 0.0 and dot2 <= 0.0 and dot3 <= 0.0:
#
#            #Determine two vectors from the points:
#            v1 = [xc - xa, yc - ya, zc - za]
#            v2 = [xb - xa, yb - ya, zb - za]
#
#            #Determine the cross product of the two vectors:
#            cp = [v1[1] * v2[2] - v1[2] * v2[1],
#                  v1[2] * v2[0] - v1[0] * v2[2],
#                  v1[0] * v2[1] - v1[1] * v2[0]]
#
#            #A plane can be described using a simple equation ax + by + cz = d. The three coefficients from the cross product are a, b and c, and d can be solved by substituting a known point, for example the first:
#            a, b, c = cp
#            d = a * xa + b * ya + c * za
#
#            #Determine the z value at x, y. Re-arrange the simple equation, and solve for z:
#            zp = (d - a * xp - b * yp) / float(c)            
#            counter = 1
#        else:
#            counter = 0
#        return zp, counter
#    
#    def insideBoundingBox(self, xa, ya, xb, yb, xc, yc, xp, yp):
#
#        xMin = min([xa, xb, xc])
#        xMax = max([xa, xb, xc])
#        yMin = min([ya, yb, yc])
#        yMax = max([ya, yb, yc])
#
#        if xp >= xMin and xp <= xMax and yp >= yMin and yp <= yMax:
#            return True
#        else:
#            return False
#
#    def getTriangles(self, mesh, nodesMajor, nodesMinor):
#
#        x = []
#        y = []
#        zMajor = []
#        zMinor = []
#        
#        triangles = []
#        for nID in nodesMajor:
#            x.append(nodesMajor[nID][0])
#            y.append(nodesMajor[nID][1])
#            zMajor.append(nodesMajor[nID][2])
#            if nodesMinor is not None:
#                zMinor.append(nodesMinor[nID][2])
# 
#        for eID in mesh:
#            n1 = mesh[eID][0]-1
#            n2 = mesh[eID][1]-1
#            n3 = mesh[eID][2]-1
#            triangles.append([n1,n2,n3])
#              
#        return x, y, zMajor, zMinor, triangles
    
    def createAction(self, text="", slot=None, shortcut=None, icon=None,
                     tip=None, checkable=False, signal="triggered()"):
        """Create action out of keyword arguments. Return action.

        Keyword arguments:
        text -- User visible text (default "")
        slot -- function to call (default None)
        shortcut -- Key sequence (default None)
        icon -- Name of icon file (default None)
        tip -- Tooltip (default None)
        checkable -- Should action be checkable (default None)
        signal -- Signal to emit (default "triggered()")

        """
        action = QAction(text, self)
        if icon is not None:
            action.setIcon(QIcon(":/resource/{0}.png".format(icon)))
        if shortcut is not None:
            action.setShortcut(shortcut)
        if tip is not None:
            action.setToolTip(tip)
            action.setStatusTip(tip)
        if slot is not None:
            self.connect(action, SIGNAL(signal), slot)
        if checkable:
            action.setCheckable(True)
        return action

    def addActions(self, target, actions):
        """Add action or separator to menu.

        Keyword arguments:
        target -- name of menu
        actions -- tuple with names of actions

        """
        for action in actions:
            if action is None:
                target.addSeparator()
            else:
                target.addAction(action)

    def help(self):
        
        abs_path = os.path.abspath('.')
        filename = os.path.join(abs_path, 'documentation/00_index.html')
        webbrowser.open(filename)

    def helpAbout(self):
        """Setup the About-dialog."""
        msg = u"""<p><b>ChEsher</b> V 1.0</p>
                    <p>Additional tool to <a href="http://www.nrc-cnrc.gc.ca/eng/solutions/advisory/blue_kenue_index.html">Blue Kenue&trade;</a> that is a pre and post processing software for the <a href="http://www.opentelemac.org/">open TELEMAC-MASCARET</a> system - an integrated suite of solvers for use in the field of free-surface flow of hydraulic modeling. </p>
                    <p>Copyright \u00A9 2016 <a href="mailto:[email protected]?subject=ChEsher">Reinhard Flei\xdfner</a></p>
                    <hr/>
                    <p>Python {0} - Qt {1} - PyQt {2} - {3}</p>""".format(
                    platform.python_version(),
                    QT_VERSION_STR,
                    PYQT_VERSION_STR,
                    platform.system()
                    )
        QMessageBox.about(self, "About ChEsher", msg)