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()
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
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
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())
def getVersion(self): import salome_version return salome_version.getVersion("first_app", True)
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))
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)
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
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())