Beispiel #1
0
def closeStudy():
    """
    This method is called when salome study is closed (Salome desktop button File -> close -> close w/o saving button) and Salome Main window desktop is already available
    """
    log.debug("closeStudy")
    if salome_version.getVersion() >= '7.5.0':
        dsk = sgPyQt.getDesktop()
        CFDSTUDYGUI_SolverGUI._c_CFDGUI.cleanAllDock(dsk)
        ActionHandler = _DesktopMgr.getActionHandler(dsk)
        ActionHandler._SolverGUI.resizeObjBrowserDock()
Beispiel #2
0
def runSalomeShellSession(context):
    import os,subprocess
    import salome_version
    version = salome_version.getVersion(full=True)
    kernel_appli_dir = os.environ['KERNEL_ROOT_DIR']
    command = ""
    if os.path.exists("/usr/bin/gnome-terminal"):
      command = 'gnome-terminal -t "SALOME %s - Shell session" -e "%s/salome shell" &'%(version,kernel_appli_dir)
    elif os.path.exists("/usr/bin/konsole"):
      command = 'PATH="/usr/bin:/sbin:/bin" LD_LIBRARY_PATH="" konsole -e "%s/salome shell" &'%(kernel_appli_dir)
    elif os.path.exists("/usr/bin/xterm"):
      command = 'xterm -T "SALOME %s - Shell session" -e "%s/salome shell" &'%(version,kernel_appli_dir)
    else:
      print "Neither xterm nor gnome-terminal nor konsole is installed."

    if command is not "":
      try:
        subprocess.check_call(command, shell = True)
      except Exception, e:
        print "Error: ",e
Beispiel #3
0
def activate():
    """
    This method is called when GUI module is being activated.

    @rtype: C{True} or C{False}
    @return: C{True} only if the activation is successful.
    """
    log.debug("activate")
    global d_activation, studyId
    dsk = sgPyQt.getDesktop()
    studyId = sgPyQt.getStudyId()
    dsk.setTabPosition(Qt.RightDockWidgetArea, QTabWidget.South)
    dsk.setTabPosition(Qt.LeftDockWidgetArea, QTabWidget.South)

    if salome_version.getVersion() <= '7.4.0':
        if salome.myStudy.FindComponent(__MODULE_NAME__) == None:
            CFDSTUDYGUI_SolverGUI._c_CFDGUI.cleanAllDock(sgPyQt.getDesktop())
            log.debug(
                "activate ->  CFDSTUDYGUI_SolverGUI._c_CFDGUI.d_CfdCases = %s"
                % CFDSTUDYGUI_SolverGUI._c_CFDGUI.d_CfdCases)
    # instance of the CFDSTUDYGUI_ActionsHandler class for the current desktop
    ActionHandler = _DesktopMgr.getActionHandler(dsk)

    if studyId not in list(d_activation.keys()):
        d_activation[studyId] = 1

    if d_activation[studyId] == 1:
        d_activation[studyId] = 0
        env_saturne, mess1 = CheckCFD_CodeEnv(CFD_Saturne)
        env_neptune, mess2 = CheckCFD_CodeEnv(CFD_Neptune)

        log.debug("activate -> env_saturne = %s" % env_saturne)
        log.debug("activate -> env_neptune = %s" % env_neptune)

        if not env_saturne and not env_neptune:
            QMessageBox.critical(ActionHandler.dskAgent().workspace(), "Error",
                                 mess1, QMessageBox.Ok, 0)
            QMessageBox.critical(ActionHandler.dskAgent().workspace(), "Error",
                                 mess2, QMessageBox.Ok, 0)
            d_activation[studyId] = 1
            return False

        if env_neptune:
            if mess2 != "":
                mess = cfdstudyMess.trMessage(
                    ObjectTR.tr("CFDSTUDY_INVALID_ENV"), []) + " ; " + mess2
                cfdstudyMess.aboutMessage(mess)
                d_activation[studyId] = 1
                return False
            else:
                ActionHandler.DialogCollector.InfoDialog.setCode(
                    env_saturne, env_neptune)

        elif env_saturne:
            if mess1 != "":
                mess = cfdstudyMess.trMessage(
                    ObjectTR.tr("CFDSTUDY_INVALID_ENV"), []) + " ; " + mess2
                cfdstudyMess.aboutMessage(mess)
                d_activation[studyId] = 1
                return False
            else:
                ActionHandler.DialogCollector.InfoDialog.setCode(
                    env_saturne, False)

    ActionHandler._SalomeSelection.currentSelectionChanged.connect(
        ActionHandler.updateActions)

    ActionHandler.connectSolverGUI()
    ActionHandler.updateObjBrowser()

    # Hide the Python Console window layout
    for dock in sgPyQt.getDesktop().findChildren(QDockWidget):
        dockTitle = dock.windowTitle()
        log.debug("activate -> QDockWidget: %s" % dockTitle)
        if dockTitle in ("Python Console", "Console Python", "Message Window"):
            dock.setVisible(False)

    return True
Beispiel #4
0
def closeStudy(aStudyId):
    """
    This method is called when salome study is closed (Salome desktop button File -> close -> close w/o saving button) and Salome Main window desktop is already available
    """
    if salome_version.getVersion() >= '7.5.0':
        CFDSTUDYGUI_SolverGUI._c_CFDGUI.cleanAllDock(sgPyQt.getDesktop())
Beispiel #5
0
 def getVersion(self):
     import salome_version
     return salome_version.getVersion("first_app", True)
Beispiel #6
0
def GetVersionString():
    """returns the versions of the plugin as a string with versions separated by "."
    e.g. "9.4.0"
    """
    return salome_version.getVersion()
    def create(self):
        # Read data from input file
        with open(self.dataFilename) as dataFile:
            data = json.load(dataFile)

        elements = data['elements']
        connections = data['connections']
        # --> Delete this reference data and repopulate it with the objects
        # while going through elements
        for conn in connections:
            conn['relatedElements'] = []
        # End <--

        meshSize = self.meshSize

        dec = 7  # 4 decimals for length in mm
        tol = 10**(-dec - 3 + 1)

        self.tolLoc = tol * 10 * 2
        tolLoc = self.tolLoc

        NEW_SALOME = int(salome_version.getVersion()[0]) >= 9
        salome.salome_init()
        theStudy = salome.myStudy
        notebook = salome_notebook.NoteBook(theStudy)

        ###
        ### GEOM component
        ###
        import GEOM
        from salome.geom import geomBuilder
        import math
        import SALOMEDS

        gg = salome.ImportComponentGUI('GEOM')
        if NEW_SALOME:
            geompy = geomBuilder.New()
        else:
            geompy = geomBuilder.New(theStudy)
        self.geompy = geompy

        O = geompy.MakeVertex(0, 0, 0)
        OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
        OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
        OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
        geompy.addToStudy(O, 'O')
        geompy.addToStudy(OX, 'OX')
        geompy.addToStudy(OY, 'OY')
        geompy.addToStudy(OZ, 'OZ')

        if len([e for e in elements if e['geometryType'] == 'line']) > 0:
            buildingShapeType = 'EDGE'
        if len([e for e in elements if e['geometryType'] == 'surface']) > 0:
            buildingShapeType = 'FACE'

        ### Define entities ###
        start_time = time.time()
        print('Defining Object Geometry')
        init_time = start_time

        # Loop 1
        for el in elements:
            el['elemObj'] = self.makeObject(el['geometry'], el['geometryType'])

            el['connObjs'] = [None for _ in el['connections']]
            el['linkObjs'] = [None for _ in el['connections']]
            el['linkPointObjs'] = [[None, None] for _ in el['connections']]
            for j, rel in enumerate(el['connections']):
                conn = [
                    c for c in connections
                    if c['ifcName'] == rel['relatedConnection']
                ][0]
                if rel['eccentricity']:
                    rel['index'] = len(conn['relatedElements']) + 1
                conn['relatedElements'].append(rel)

                if not rel['eccentricity']:
                    el['connObjs'][j] = self.makeObject(
                        conn['geometry'], conn['geometryType'])
                else:
                    if conn['geometryType'] == 'point':
                        geometry = self.getLinkGeometry(
                            rel['eccentricity'], el['orientation'],
                            conn['geometry'])
                        el['connObjs'][j] = self.makeObject(
                            geometry[0], conn['geometryType'])

                        el['linkPointObjs'][j][0] = self.geompy.MakeVertex(
                            geometry[0][0], geometry[0][1], geometry[0][2])
                        el['linkPointObjs'][j][1] = self.geompy.MakeVertex(
                            geometry[1][0], geometry[1][1], geometry[1][2])
                        el['linkObjs'][j] = self.geompy.MakeLineTwoPnt(
                            el['linkPointObjs'][j][0],
                            el['linkPointObjs'][j][1])
                    else:
                        print('Eccentricity defined for a %s geometryType' %
                              conn['geometryType'])

            el['partObj'] = self.makePartition(
                [el['elemObj']] + el['connObjs'], el['geometryType'])

            el['elemObj'] = geompy.GetInPlace(el['partObj'], el['elemObj'])
            for j, rel in enumerate(el['connections']):
                el['connObjs'][j] = geompy.GetInPlace(el['partObj'],
                                                      el['connObjs'][j])

        for conn in connections:
            conn['connObj'] = self.makeObject(conn['geometry'],
                                              conn['geometryType'])

        # Make assemble of Building Object
        bldObjs = []
        bldObjs.extend([el['partObj'] for el in elements])
        bldObjs.extend(
            flatten([[link for link in el['linkObjs'] if link]
                     for el in elements]))
        bldObjs.extend([conn['connObj'] for conn in connections])

        bldComp = geompy.MakeCompound(bldObjs)
        # bldComp = geompy.MakePartition(bldObjs, [], [], [], self.geompy.ShapeType[buildingShapeType], 0, [], 1)
        geompy.addToStudy(bldComp, 'bldComp')

        # Loop 2
        for el in elements:
            # geompy.addToStudy(el['partObj'], self.getGroupName(el['ifcName']))
            geompy.addToStudyInFather(el['partObj'], el['elemObj'],
                                      self.getGroupName(el['ifcName']))
            for j, rel in enumerate(el['connections']):
                conn = [
                    c for c in connections
                    if c['ifcName'] == rel['relatedConnection']
                ][0]
                rel['conn_string'] = None
                if conn['geometryType'] == 'point':
                    rel['conn_string'] = '_0DC_'
                if conn['geometryType'] == 'line':
                    rel['conn_string'] = '_1DC_'
                if conn['geometryType'] == 'surface':
                    rel['conn_string'] = '_2DC_'
                geompy.addToStudyInFather(
                    el['partObj'], el['connObjs'][j],
                    self.getGroupName(el['ifcName']) + rel['conn_string'] +
                    self.getGroupName(rel['relatedConnection']))
                if rel['eccentricity']:
                    pass
                    # geompy.addToStudy(el['linkObjs'][j], self.getGroupName(el['ifcName']) + '_1DR_' + self.getGroupName(rel['relatedConnection']))
                    # geompy.addToStudyInFather(el['linkObjs'][j], el['linkPointObjs'][j][0], self.getGroupName(rel['relatedConnection']) + '_0DC_' + self.getGroupName(el['ifcName']))
                    # geompy.addToStudyInFather(el['linkObjs'][j], el['linkPointObjs'][j][0], self.getGroupName(rel['relatedConnection']) + '_0DC_%g' % rel['index'])

        for conn in connections:
            # geompy.addToStudy(conn['connObj'], self.getGroupName(conn['ifcName']))
            geompy.addToStudyInFather(conn['connObj'], conn['connObj'],
                                      self.getGroupName(conn['ifcName']))

        elapsed_time = time.time() - init_time
        init_time += elapsed_time
        print('Building Geometry Defined in %g sec' % (elapsed_time))

        if len([e for e in elements if e['geometryType'] == 'line']) > 0:
            buildingShapeType = 'EDGE'
        if len([e for e in elements if e['geometryType'] == 'surface']) > 0:
            buildingShapeType = 'FACE'

        # Define and add groups for all curve and surface members
        if len([e for e in elements if e['geometryType'] == 'line']) > 0:
            # Make compound of requested group
            compoundTemp = geompy.MakeCompound([
                e['elemObj'] for e in elements if e['geometryType'] == 'line'
            ])
            # Define group object and add to study
            curveCompound = geompy.GetInPlace(bldComp, compoundTemp)
            geompy.addToStudyInFather(bldComp, curveCompound, 'CurveMembers')

        if len([e for e in elements if e['geometryType'] == 'surface']) > 0:
            # Make compound of requested group
            compoundTemp = geompy.MakeCompound([
                e['elemObj'] for e in elements
                if e['geometryType'] == 'surface'
            ])
            # Define group object and add to study
            surfaceCompound = geompy.GetInPlace(bldComp, compoundTemp)
            geompy.addToStudyInFather(bldComp, surfaceCompound,
                                      'SurfaceMembers')

        # Loop 3
        for el in elements:
            # el['partObj'] = geompy.RestoreGivenSubShapes(bldComp, [el['partObj']], GEOM.FSM_GetInPlace, False, False)[0]
            geompy.addToStudyInFather(bldComp, el['elemObj'],
                                      self.getGroupName(el['ifcName']))

            for j, rel in enumerate(el['connections']):
                geompy.addToStudyInFather(
                    bldComp, el['connObjs'][j],
                    self.getGroupName(el['ifcName']) + rel['conn_string'] +
                    self.getGroupName(rel['relatedConnection']))
                if rel['eccentricity']:  # point geometry
                    geompy.addToStudyInFather(
                        bldComp, el['linkObjs'][j],
                        self.getGroupName(el['ifcName']) + '_1DR_' +
                        self.getGroupName(rel['relatedConnection']))
                    geompy.addToStudyInFather(
                        bldComp, el['linkPointObjs'][j][0],
                        self.getGroupName(rel['relatedConnection']) + '_0DC_' +
                        self.getGroupName(el['ifcName']))
                    geompy.addToStudyInFather(
                        bldComp, el['linkPointObjs'][j][1],
                        self.getGroupName(rel['relatedConnection']) +
                        '_0DC_%g' % rel['index'])

        for conn in connections:
            # conn['connObj'] = geompy.RestoreGivenSubShapes(bldComp, [conn['connObj']], GEOM.FSM_GetInPlace, False, False)[0]
            geompy.addToStudyInFather(bldComp, conn['connObj'],
                                      self.getGroupName(conn['ifcName']))

        elapsed_time = time.time() - init_time
        init_time += elapsed_time
        print('Building Geometry Groups Defined in %g sec' % (elapsed_time))

        ###
        ### SMESH component
        ###

        import SMESH
        from salome.smesh import smeshBuilder

        print('Defining Mesh Components')

        if NEW_SALOME:
            smesh = smeshBuilder.New()
        else:
            smesh = smeshBuilder.New(theStudy)
        bldMesh = smesh.Mesh(bldComp)
        Regular_1D = bldMesh.Segment()
        Local_Length_1 = Regular_1D.LocalLength(meshSize, None, tolLoc)

        if buildingShapeType == 'FACE':
            NETGEN2D_ONLY = bldMesh.Triangle(algo=smeshBuilder.NETGEN_2D)
            NETGEN2D_Pars = NETGEN2D_ONLY.Parameters()
            NETGEN2D_Pars.SetMaxSize(meshSize)
            NETGEN2D_Pars.SetOptimize(1)
            NETGEN2D_Pars.SetFineness(2)
            NETGEN2D_Pars.SetMinSize(meshSize / 5.0)
            NETGEN2D_Pars.SetUseSurfaceCurvature(1)
            NETGEN2D_Pars.SetQuadAllowed(1)
            NETGEN2D_Pars.SetSecondOrder(0)
            NETGEN2D_Pars.SetFuseEdges(254)

        isDone = bldMesh.Compute()

        ## Set names of Mesh objects
        smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
        smesh.SetName(Local_Length_1, 'Local_Length_1')

        if buildingShapeType == 'FACE':
            smesh.SetName(NETGEN2D_ONLY.GetAlgorithm(), 'NETGEN2D_ONLY')
            smesh.SetName(NETGEN2D_Pars, 'NETGEN2D_Pars')

        smesh.SetName(bldMesh.GetMesh(), 'bldMesh')

        elapsed_time = time.time() - init_time
        init_time += elapsed_time
        print('Meshing Operations Completed in %g sec' % (elapsed_time))

        # Define and add groups for all curve and surface members
        if len([e for e in elements if e['geometryType'] == 'line']) > 0:
            tempgroup = bldMesh.GroupOnGeom(curveCompound, 'CurveMembers',
                                            SMESH.EDGE)
            smesh.SetName(tempgroup, 'CurveMembers')

        if len([e for e in elements if e['geometryType'] == 'surface']) > 0:
            tempgroup = bldMesh.GroupOnGeom(surfaceCompound, 'SurfaceMembers',
                                            SMESH.FACE)
            smesh.SetName(tempgroup, 'SurfaceMembers')

        # Define groups in Mesh
        for el in elements:
            if el['geometryType'] == 'line':
                shapeType = SMESH.EDGE
            if el['geometryType'] == 'surface':
                shapeType = SMESH.FACE
            tempgroup = bldMesh.GroupOnGeom(el['elemObj'],
                                            self.getGroupName(el['ifcName']),
                                            shapeType)
            smesh.SetName(tempgroup, self.getGroupName(el['ifcName']))

            for j, rel in enumerate(el['connections']):
                tempgroup = bldMesh.GroupOnGeom(
                    el['connObjs'][j],
                    self.getGroupName(el['ifcName']) + rel['conn_string'] +
                    self.getGroupName(rel['relatedConnection']), SMESH.NODE)
                smesh.SetName(
                    tempgroup,
                    self.getGroupName(el['ifcName']) + rel['conn_string'] +
                    self.getGroupName(rel['relatedConnection']))
                rel['node'] = (bldMesh.GetIDSource(tempgroup.GetNodeIDs(),
                                                   SMESH.NODE)).GetIDs()[0]
                if rel['eccentricity']:
                    tempgroup = bldMesh.GroupOnGeom(
                        el['linkObjs'][j],
                        self.getGroupName(el['ifcName']) + '_1DR_' +
                        self.getGroupName(rel['relatedConnection']),
                        SMESH.EDGE)
                    smesh.SetName(
                        tempgroup,
                        self.getGroupName(el['ifcName']) + '_1DR_' +
                        self.getGroupName(rel['relatedConnection']))

                    tempgroup = bldMesh.GroupOnGeom(
                        el['linkPointObjs'][j][0],
                        self.getGroupName(rel['relatedConnection']) + '_0DC_' +
                        self.getGroupName(el['ifcName']), SMESH.NODE)
                    smesh.SetName(
                        tempgroup,
                        self.getGroupName(rel['relatedConnection']) + '_0DC_' +
                        self.getGroupName(el['ifcName']))
                    rel['eccNode'] = (bldMesh.GetIDSource(
                        tempgroup.GetNodeIDs(), SMESH.NODE)).GetIDs()[0]

                    tempgroup = bldMesh.GroupOnGeom(
                        el['linkPointObjs'][j][1],
                        self.getGroupName(rel['relatedConnection']) + '_0DC_' +
                        self.getGroupName(rel['relatedConnection']),
                        SMESH.NODE)
                    smesh.SetName(
                        tempgroup,
                        self.getGroupName(rel['relatedConnection']) +
                        '_0DC_%g' % rel['index'])

        for conn in connections:
            tempgroup = bldMesh.GroupOnGeom(conn['connObj'],
                                            self.getGroupName(conn['ifcName']),
                                            SMESH.NODE)
            smesh.SetName(tempgroup, self.getGroupName(conn['ifcName']))
            nodesId = bldMesh.GetIDSource(tempgroup.GetNodeIDs(), SMESH.NODE)
            tempgroup = bldMesh.Add0DElementsToAllNodes(
                nodesId, self.getGroupName(conn['ifcName']))
            smesh.SetName(tempgroup,
                          self.getGroupName(conn['ifcName'] + '_0D'))
            if conn['geometryType'] == 'point':
                conn['node'] = nodesId.GetIDs()[0]
            if conn['geometryType'] == 'line':
                tempgroup = bldMesh.GroupOnGeom(
                    conn['connObj'], self.getGroupName(conn['ifcName']),
                    SMESH.EDGE)
                smesh.SetName(tempgroup, self.getGroupName(conn['ifcName']))
            if conn['geometryType'] == 'surface':
                tempgroup = bldMesh.GroupOnGeom(
                    conn['connObj'], self.getGroupName(conn['ifcName']),
                    SMESH.FACE)
                smesh.SetName(tempgroup, self.getGroupName(conn['ifcName']))

        # create 1D SEG2 spring elements
        for el in elements:
            for j, rel in enumerate(el['connections']):
                conn = [
                    c for c in connections
                    if c['ifcName'] == rel['relatedConnection']
                ][0]
                if conn['geometryType'] == 'point':
                    grpName = bldMesh.CreateEmptyGroup(
                        SMESH.EDGE,
                        self.getGroupName(el['ifcName']) + '_1DS_' +
                        self.getGroupName(rel['relatedConnection']))
                    smesh.SetName(
                        grpName,
                        self.getGroupName(el['ifcName']) + '_1DS_' +
                        self.getGroupName(rel['relatedConnection']))
                    if not rel['eccentricity']:
                        conn = [
                            conn for conn in connections
                            if conn['ifcName'] == rel['relatedConnection']
                        ][0]
                        grpName.Add(
                            [bldMesh.AddEdge([conn['node'], rel['node']])])
                    else:
                        grpName.Add(
                            [bldMesh.AddEdge([rel['eccNode'], rel['node']])])

        self.mesh = bldMesh
        self.meshNodes = bldMesh.GetNodesId()

        elapsed_time = time.time() - init_time
        init_time += elapsed_time
        print('Mesh Groups Defined in %g sec' % (elapsed_time))

        try:
            if NEW_SALOME:
                bldMesh.ExportMED(self.medFilename,
                                  auto_groups=0,
                                  minor=40,
                                  overwrite=1,
                                  meshPart=None,
                                  autoDimension=0)
            else:
                bldMesh.ExportMED(self.medFilename, 0, SMESH.MED_V2_2, 1, None,
                                  0)
        except:
            print('ExportMED() failed. Invalid file name?')

        if salome.sg.hasDesktop():
            if NEW_SALOME:
                salome.sg.updateObjBrowser()
            else:
                salome.sg.updateObjBrowser(1)

        elapsed_time = init_time - start_time
        print('ALL Operations Completed in %g sec' % (elapsed_time))
Beispiel #8
0
    def create(self):
        # Read data from input file
        with open(self.dataFilename) as dataFile:
            data = json.load(dataFile)

        # print(len(data['elements']))
        # elements = self.select(data['elements'])
        # print(len(elements))
        elements = data["elements"]
        connections = data["connections"]
        # --> Delete this reference data and repopulate it with the objects
        # while going through elements
        for conn in connections:
            conn["relatedElements"] = []
        # End <--

        meshSize = self.meshSize
        zGround = self.zGround

        dec = 5  # 4 decimals for length in mm
        tol = 10**(-dec - 3 + 1)

        self.tolLoc = tol * 10 * 2
        tolLoc = self.tolLoc

        NEW_SALOME = int(salome_version.getVersion()[0]) >= 9
        salome.salome_init()
        theStudy = salome.myStudy
        notebook = salome_notebook.NoteBook(theStudy)

        ###
        ### GEOM component
        ###
        import GEOM
        from salome.geom import geomBuilder
        import math
        import SALOMEDS

        gg = salome.ImportComponentGUI("GEOM")
        if NEW_SALOME:
            geompy = geomBuilder.New()
        else:
            geompy = geomBuilder.New(theStudy)
        self.geompy = geompy

        O = geompy.MakeVertex(0, 0, 0)
        OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
        OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
        OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
        geompy.addToStudy(O, "O")
        geompy.addToStudy(OX, "OX")
        geompy.addToStudy(OY, "OY")
        geompy.addToStudy(OZ, "OZ")

        if len([e for e in elements if e["geometryType"] == "line"]) > 0:
            buildingShapeType = "EDGE"
        if len([e for e in elements if e["geometryType"] == "surface"]) > 0:
            buildingShapeType = "FACE"

        ### Define entities ###
        start_time = time.time()
        print("Defining Object Geometry")
        init_time = start_time

        # Loop 1
        for el in elements:
            el["elemObj"] = self.makeObject(el["geometry"], el["geometryType"])

            el["linkObjs"] = [None for _ in el["connections"]]
            for j, rel in enumerate(el["connections"]):
                conn = [
                    c for c in connections
                    if c["referenceName"] == rel["relatedConnection"]
                ][0]
                if rel["eccentricity"]:
                    rel["index"] = len(conn["relatedElements"]) + 1

                    geometry = self.getLinkGeometry(rel["eccentricity"],
                                                    el["orientation"],
                                                    conn["geometry"])
                    el["linkObjs"][j] = self.makeObject(geometry, "line")
                conn["relatedElements"].append(rel)

        # Make assemble of Building Object
        bldObjs = []
        bldObjs.extend([el["elemObj"] for el in elements])
        bldObjs.extend(
            flatten([[link for link in el["linkObjs"] if link]
                     for el in elements]))

        # bldComp = geompy.MakeCompound(bldObjs)
        bldComp = geompy.MakePartition(
            bldObjs, [], [], [], self.geompy.ShapeType[buildingShapeType], 0,
            [], 1)
        geompy.addToStudy(bldComp, "bldComp")

        elapsed_time = time.time() - init_time
        init_time += elapsed_time
        print("Building Geometry Defined in %g sec" % (elapsed_time))

        # Define and add groups for all curve, surface and rigid members
        if len([e for e in elements if e["geometryType"] == "line"]) > 0:
            # Make compound of requested group
            compoundTemp = geompy.MakeCompound([
                e["elemObj"] for e in elements if e["geometryType"] == "line"
            ])
            # Define group object and add to study
            curveCompound = geompy.GetInPlace(bldComp, compoundTemp, True)
            geompy.addToStudyInFather(bldComp, curveCompound, "CurveMembers")

        if len([e for e in elements if e["geometryType"] == "surface"]) > 0:
            # Make compound of requested group
            compoundTemp = geompy.MakeCompound([
                e["elemObj"] for e in elements
                if e["geometryType"] == "surface"
            ])
            # Define group object and add to study
            surfaceCompound = geompy.GetInPlace(bldComp, compoundTemp, True)
            geompy.addToStudyInFather(bldComp, surfaceCompound,
                                      "SurfaceMembers")

        linkObjs = list(
            flatten([[obj for obj in el["linkObjs"] if obj]
                     for el in elements]))
        if len(linkObjs) > 0:
            # Make compound of requested group
            compoundTemp = geompy.MakeCompound(linkObjs)
            # Define group object and add to study
            rigidCompound = geompy.GetInPlace(bldComp, compoundTemp, True)
            geompy.addToStudyInFather(bldComp, rigidCompound, "RigidMembers")

        for el in elements:
            # el['partObj'] = geompy.RestoreGivenSubShapes(bldComp, [el['partObj']], GEOM.FSM_GetInPlace, False, False)[0]
            el["elemObj"] = geompy.GetInPlace(bldComp, el["elemObj"], True)
            geompy.addToStudyInFather(bldComp, el["elemObj"],
                                      self.getGroupName(el["referenceName"]))

            for j, rel in enumerate(el["connections"]):
                if rel["eccentricity"]:  # point geometry
                    el["linkObjs"][j] = geompy.GetInPlace(
                        bldComp, el["linkObjs"][j], True)
                    geompy.addToStudyInFather(
                        bldComp,
                        el["linkObjs"][j],
                        self.getGroupName(el["referenceName"]) + "_1DR_" +
                        self.getGroupName(rel["relatedConnection"]),
                    )

        elapsed_time = time.time() - init_time
        init_time += elapsed_time
        print("Building Geometry Groups Defined in %g sec" % (elapsed_time))

        ###
        ### SMESH component
        ###

        import SMESH
        from salome.smesh import smeshBuilder

        print("Defining Mesh Components")

        if NEW_SALOME:
            smesh = smeshBuilder.New()
        else:
            smesh = smeshBuilder.New(theStudy)
        bldMesh = smesh.Mesh(bldComp)
        Regular_1D = bldMesh.Segment()
        Local_Length_1 = Regular_1D.LocalLength(meshSize, None, tolLoc)

        if buildingShapeType == "FACE":
            NETGEN2D_ONLY = bldMesh.Triangle(algo=smeshBuilder.NETGEN_2D)
            NETGEN2D_Pars = NETGEN2D_ONLY.Parameters()
            NETGEN2D_Pars.SetMaxSize(meshSize)
            NETGEN2D_Pars.SetOptimize(1)
            NETGEN2D_Pars.SetFineness(2)
            NETGEN2D_Pars.SetMinSize(meshSize / 5.0)
            NETGEN2D_Pars.SetUseSurfaceCurvature(1)
            NETGEN2D_Pars.SetQuadAllowed(1)
            NETGEN2D_Pars.SetSecondOrder(0)
            NETGEN2D_Pars.SetFuseEdges(254)

        isDone = bldMesh.Compute()
        coincident_nodes_on_part = bldMesh.FindCoincidentNodesOnPart([bldMesh],
                                                                     tolLoc,
                                                                     [], 0)
        if coincident_nodes_on_part:
            # bldMesh.MergeNodes(coincident_nodes_on_part, [], 0)
            # print(f'{len(coincident_nodes_on_part)} Sets of Coincident Nodes Found and Merged')
            print(
                f"{len(coincident_nodes_on_part)} Sets of Coincident Nodes Found"
            )
            print(f"{coincident_nodes_on_part}")

        ## Set names of Mesh objects
        smesh.SetName(Regular_1D.GetAlgorithm(), "Regular_1D")
        smesh.SetName(Local_Length_1, "Local_Length_1")

        if buildingShapeType == "FACE":
            smesh.SetName(NETGEN2D_ONLY.GetAlgorithm(), "NETGEN2D_ONLY")
            smesh.SetName(NETGEN2D_Pars, "NETGEN2D_Pars")

        smesh.SetName(bldMesh.GetMesh(), "bldMesh")

        elapsed_time = time.time() - init_time
        init_time += elapsed_time
        print("Meshing Operations Completed in %g sec" % (elapsed_time))

        # Define and add groups for all curve, surface and rigid members
        if len([e for e in elements if e["geometryType"] == "line"]) > 0:
            tempgroup = bldMesh.GroupOnGeom(curveCompound, "CurveMembers",
                                            SMESH.EDGE)
            smesh.SetName(tempgroup, "CurveMembers")

        if len([e for e in elements if e["geometryType"] == "surface"]) > 0:
            tempgroup = bldMesh.GroupOnGeom(surfaceCompound, "SurfaceMembers",
                                            SMESH.FACE)
            smesh.SetName(tempgroup, "SurfaceMembers")

        if len(linkObjs) > 0:
            tempgroup = bldMesh.GroupOnGeom(rigidCompound, "RigidMembers",
                                            SMESH.EDGE)
            smesh.SetName(tempgroup, "RigidMembers")

        # Define groups in Mesh
        for el in elements:
            if el["geometryType"] == "line":
                shapeType = SMESH.EDGE
            if el["geometryType"] == "surface":
                shapeType = SMESH.FACE
            tempgroup = bldMesh.GroupOnGeom(
                el["elemObj"], self.getGroupName(el["referenceName"]),
                shapeType)
            smesh.SetName(tempgroup, self.getGroupName(el["referenceName"]))

            for j, rel in enumerate(el["connections"]):
                if rel["eccentricity"]:
                    tempgroup = bldMesh.GroupOnGeom(
                        el["linkObjs"][j],
                        self.getGroupName(el["referenceName"]) + "_1DR_" +
                        self.getGroupName(rel["relatedConnection"]),
                        SMESH.EDGE,
                    )
                    smesh.SetName(
                        tempgroup,
                        self.getGroupName(el["referenceName"]) + "_1DR_" +
                        self.getGroupName(rel["relatedConnection"]),
                    )

        self.mesh = bldMesh
        self.meshNodes = bldMesh.GetNodesId()

        # Find ground supports and extract node coordinates
        grdSupps = bldMesh.CreateEmptyGroup(SMESH.NODE, "grdSupps")

        for node in self.meshNodes:
            coords = bldMesh.GetNodeXYZ(node)
            if abs(coords[2] - self.zGround) < tolLoc:
                grdSupps.Add([node])

        smesh.SetName(grdSupps, "grdSupps")

        elapsed_time = time.time() - init_time
        init_time += elapsed_time
        print("Mesh Groups Defined in %g sec" % (elapsed_time))

        try:
            if NEW_SALOME:
                bldMesh.ExportMED(
                    self.medFilename,
                    auto_groups=0,
                    minor=40,
                    overwrite=1,
                    meshPart=None,
                    autoDimension=0,
                )
            else:
                bldMesh.ExportMED(self.medFilename, 0, SMESH.MED_V2_2, 1, None,
                                  0)
        except:
            print("ExportMED() failed. Invalid file name?")

        if salome.sg.hasDesktop():
            if NEW_SALOME:
                salome.sg.updateObjBrowser()
            else:
                salome.sg.updateObjBrowser(1)

        elapsed_time = init_time - start_time
        print("ALL Operations Completed in %g sec" % (elapsed_time))
 def getVersion( self ):
     import salome_version
     return salome_version.getVersion("PARAVIS", True)
Beispiel #10
0
def activate():
    """
    This method is called when GUI module is being activated.

    @rtype: C{True} or C{False}
    @return: C{True} only if the activation is successful.
    """
    log.debug("activate")
    global d_activation, studyId

    dsk = sgPyQt.getDesktop()
    studyId = sgPyQt.getStudyId()
    dsk.setTabPosition(Qt.RightDockWidgetArea,QTabWidget.South)
    dsk.setTabPosition(Qt.LeftDockWidgetArea,QTabWidget.South)

    if salome_version.getVersion() <= '7.4.0' :
        if salome.myStudy.FindComponent(__MODULE_NAME__) == None :
            CFDSTUDYGUI_SolverGUI._c_CFDGUI.cleanAllDock(sgPyQt.getDesktop())
            log.debug("activate ->  CFDSTUDYGUI_SolverGUI._c_CFDGUI.d_CfdCases = %s" % CFDSTUDYGUI_SolverGUI._c_CFDGUI.d_CfdCases)
    # instance of the CFDSTUDYGUI_ActionsHandler class for the current desktop
    ActionHandler = _DesktopMgr.getActionHandler(dsk)

    if studyId not in d_activation.keys():
        d_activation[studyId] = 1

    if d_activation[studyId] == 1:
        d_activation[studyId] = 0
        env_saturne, mess1 = CheckCFD_CodeEnv(CFD_Saturne)
        env_neptune, mess2 = CheckCFD_CodeEnv(CFD_Neptune)

        log.debug("activate -> env_saturne = %s" % env_saturne)
        log.debug("activate -> env_neptune = %s" % env_neptune)

        if not env_saturne and not env_neptune:
            QMessageBox.critical(ActionHandler.dskAgent().workspace(),
                                 "Error", mess1, QMessageBox.Ok, 0)
            QMessageBox.critical(ActionHandler.dskAgent().workspace(),
                                 "Error", mess2, QMessageBox.Ok, 0)
            d_activation[studyId] = 1
            return False

        if env_neptune:
            if mess2 != "":
                Error = "Error: "+ ObjectTR.tr("CFDSTUDY_INVALID_ENV")
                QMessageBox.critical(ActionHandler.dskAgent().workspace(),
                                     Error, mess2, QMessageBox.Ok, 0)
                d_activation[studyId] = 1
                return False
            else:
                ActionHandler.DialogCollector.InfoDialog.setCode(env_saturne, env_neptune)

        elif env_saturne:
            if mess1 != "":
                Error = "Error: "+ ObjectTR.tr("CFDSTUDY_INVALID_ENV")
                QMessageBox.critical(ActionHandler.dskAgent().workspace(),
                                     Error, mess1, QMessageBox.Ok, 0)
                d_activation[studyId] = 1
                return False
            else:
                ActionHandler.DialogCollector.InfoDialog.setCode(env_saturne, False)

        ActionHandler.slotStudyLocation()

    ActionHandler.connect(ActionHandler._SalomeSelection,
                          SIGNAL('currentSelectionChanged()'),
                          ActionHandler.updateActions)

    ActionHandler.connectSolverGUI()
    ActionHandler.updateObjBrowser()

    # Hide the Python Console window layout
    for dock in sgPyQt.getDesktop().findChildren(QDockWidget):
        dockTitle = dock.windowTitle()
        log.debug("activate -> QDockWidget: %s" % dockTitle)
        if dockTitle in (u"Python Console", u"Console Python",  u"Message Window"):
            dock.setVisible(False)

    return True
Beispiel #11
0
def closeStudy(aStudyId) :
    """
    This method is called when salome study is closed (Salome desktop button File -> close -> close w/o saving button) and Salome Main window desktop is already available
    """
    if salome_version.getVersion() >= '7.5.0' :
        CFDSTUDYGUI_SolverGUI._c_CFDGUI.cleanAllDock(sgPyQt.getDesktop())