X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_PY%2Fsmeshstudytools.py;h=1f9cdd5b54d6cf19396fa50054f4d56d8672acff;hb=864f448dc47f6cf1425dcd955470f28c4129f514;hp=0545efae6b04354ab76b8c3f949bc8b15eb0ce0c;hpb=d8f644ca3d4ce62f2ef41d4aacb52f5bb1221df3;p=modules%2Fsmesh.git diff --git a/src/SMESH_PY/smeshstudytools.py b/src/SMESH_PY/smeshstudytools.py index 0545efae6..1f9cdd5b5 100644 --- a/src/SMESH_PY/smeshstudytools.py +++ b/src/SMESH_PY/smeshstudytools.py @@ -1,22 +1,22 @@ # -*- coding: utf-8 -*- # -# Copyright (C) 2007-2009 EDF R&D -# -# This file is part of PAL_SRC. +# Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE # -# PAL_SRC is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. # -# PAL_SRC is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. # -# You should have received a copy of the GNU General Public License -# along with PAL_SRC; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # """ This module provides a new class :class:`SMeshStudyTools` to facilitate the @@ -27,6 +27,10 @@ import salome SMESH = None # SMESH module is loaded only when needed from salome.kernel.studyedit import getStudyEditor +try: + from salome.gui import helper +except ImportError: + pass class SMeshStudyTools: """ @@ -51,7 +55,15 @@ class SMeshStudyTools: if studyEditor is None: studyEditor = getStudyEditor() self.editor = studyEditor + self.smeshGui = None + def updateStudy(self, studyId=None): + """ + This function updates the tools so that it works on the + specified study. + """ + self.editor = getStudyEditor(studyId) + def getMeshFromGroup(self, meshGroupItem): """ Get the mesh item owning the mesh group `meshGroupItem`. @@ -69,3 +81,134 @@ class SMeshStudyTools: meshObj = group.GetMesh() meshItem = salome.ObjectToSObject(meshObj) return meshItem + + + def getMeshObjectSelected(self): + ''' + Returns the MESH object currently selected in the active study. + ''' + sobject, entry = helper.getSObjectSelected() + meshObject = self.getMeshObjectFromEntry(entry) + return meshObject + + def getMeshObjectFromEntry(self, entry): + ''' + Returns the MESH object associated to the specified entry, + (the entry is the identifier of an item in the objects browser). + ''' + if entry is None: + return None + import smesh + smesh.SetCurrentStudy(self.editor.study) + meshObject=smesh.IDToObject(entry) + return meshObject + + def getMeshObjectFromSObject(self, sobject): + ''' + Returns the SMESH object associated to the specified SObject, + (the SObject is an item in the objects browser). + ''' + if sobject is None: + return None + + obj = self.editor.getOrLoadObject(sobject) + meshObject = obj._narrow(SMESH.SMESH_Mesh) + return meshObject + + def displayMeshObjectFromEntry(self,entry): + ''' + Display the SMESH object associated to the specified entry + (the entry is the identifier of an item in the objects browser). + ''' + if self.smeshGui is None: + self.smeshGui = salome.ImportComponentGUI("SMESH") + + if not helper.SalomeGUI.hasDesktop(): + print "displayMeshObject: no desktop available" + return + self.smeshGui.CreateAndDisplayActor(entry) + +# +# ================================================================== +# Use cases and demo functions +# ================================================================== +# + +# CAUTION: Before running this test functions, you first have to +# create (or import) an smesh object and select this object in the +# objects browser. You can run the box mesh creation procedure below +# instead. + +# How to test? +# 1. Run a SALOME application including GEOM and SMESH, and create a new study +# 2. In the console, enter: +# >>> from salome.smesh import smeshstudytools +# >>> smeshstudytools.TEST_createBoxMesh() +# 3. Select the object named "boxmesh" in the browser +# 4. In the console, enter: +# >>> smeshstudytools.TEST_selectAndExport_01() +# >>> smeshstudytools.TEST_selectAndExport_02() +# >>> smeshstudytools.TEST_display() + + +def TEST_createBoxMesh(): + theStudy = helper.getActiveStudy() + + import geompy + geompy.init_geom(theStudy) + box = geompy.MakeBoxDXDYDZ(200, 200, 200) + + import smesh, SMESH, SALOMEDS + smesh.SetCurrentStudy(theStudy) + import StdMeshers + boxmesh = smesh.Mesh(box) + Regular_1D = boxmesh.Segment() + Nb_Segments_1 = Regular_1D.NumberOfSegments(15) + Nb_Segments_1.SetDistrType( 0 ) + Quadrangle_2D = boxmesh.Quadrangle() + Hexa_3D = smesh.CreateHypothesis('Hexa_3D') + status = boxmesh.AddHypothesis(Hexa_3D) + isDone = boxmesh.Compute() + + smesh.SetName(boxmesh.GetMesh(), 'boxmesh') + if salome.sg.hasDesktop(): + salome.sg.updateObjBrowser(1) + +# +# Definitions: +# - the SObject is an item in the study (Study Object). +# - the entry is the identifier of an item. +# - the object (geom object or smesh object) is a CORBA servant +# embedded in the SALOME component container and with a reference in +# the SALOME study, so that it can be retrieved. +# + +def TEST_selectAndExport_01(): + tool = SMeshStudyTools() + myMesh = tool.getMeshObjectSelected() + myMesh.ExportUNV("/tmp/myMesh.unv") + +def TEST_selectAndExport_02(): + # In this case, we want to retrieve the name of the mesh in the + # object browser. Note that in SALOME, a mesh object has no + # name. Only the SObject in the object browser has a name + # attribute. + tool = SMeshStudyTools() + + mySObject, myEntry = helper.getSObjectSelected() + myName = mySObject.GetName() + + myMesh = tool.getMeshObjectFromEntry(myEntry) + exportFileName = "/tmp/"+myName+".unv" + myMesh.ExportUNV(exportFileName) + +def TEST_display(): + mySObject, myEntry = helper.getSObjectSelected() + + tool = SMeshStudyTools() + tool.displayMeshObjectFromEntry(myEntry) + +if __name__ == "__main__": + TEST_selectAndExport_01() + TEST_selectAndExport_02() + TEST_display()