Salome HOME
Bug 0020072: GHS3DPRLPLUGIN update. Integrating the attached patch.
[modules/smesh.git] / src / SMESH_SWIG / batchmode_smesh.py
index eef9e1d502f01c11be0cc697a9f3e78003d0d2d3..d6688362ddff587d09c609b49de396f8dbbed1fd 100644 (file)
@@ -1,13 +1,31 @@
-#  Copyright (C) 2003  CEA/DEN, EDF R&D
+#  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
 #
+#  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #
+#  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.
+#
+#  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 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
 #
 #  File   : batchmode_smesh.py
 #  Author : Oksana TCHEBANOVA
 #  Module : SMESH
 #  $Header$
-
+#
 from batchmode_salome import *
+from batchmode_geompy import ShapeType
 import SMESH
 
 #--------------------------------------------------------------------------
@@ -19,188 +37,180 @@ myStudyBuilder = myStudy.NewBuilder()
 if myStudyBuilder is None:
        raise RuntimeError, " Null myStudyBuilder"
 
-father = myStudy.FindComponent("MESH")
+father = myStudy.FindComponent("SMESH")
 if father is None:
-        father = myStudyBuilder.NewComponent("MESH")
-        A1 = myStudyBuilder.FindOrCreateAttribute(father, "AttributeName");
-        FName = A1._narrow(SALOMEDS.AttributeName)
-        #FName.SetValue("Mesh")        
-       Comp = modulecatalog.GetComponent( "SMESH" )
-       FName.SetValue( Comp._get_componentusername() )
-       A2 = myStudyBuilder.FindOrCreateAttribute(father, "AttributePixMap");
-       aPixmap = A2._narrow(SALOMEDS.AttributePixMap);
-       aPixmap.SetPixMap( "ICON_OBJBROWSER_Mesh" );
+        father = myStudyBuilder.NewComponent("SMESH")
+        FName = myStudyBuilder.FindOrCreateAttribute(father, "AttributeName")
+       Comp = modulecatalog.GetComponent("SMESH")
+       FName.SetValue(Comp._get_componentusername())
+       aPixmap = myStudyBuilder.FindOrCreateAttribute(father, "AttributePixMap")
+       aPixmap.SetPixMap("ICON_OBJBROWSER_Mesh")
 
 myStudyBuilder.DefineComponentInstance(father,smesh)
 
 mySComponentMesh = father._narrow(SALOMEDS.SComponent)
 
-Tag_HypothesisRoot  = 1;
-Tag_AlgorithmsRoot  = 2;
+Tag_HypothesisRoot  = 1
+Tag_AlgorithmsRoot  = 2
   
-Tag_RefOnShape      = 1;
-Tag_RefOnAppliedHypothesis = 2;
-Tag_RefOnAppliedAlgorithms = 3;
+Tag_RefOnShape      = 1
+Tag_RefOnAppliedHypothesis = 2
+Tag_RefOnAppliedAlgorithms = 3
   
-Tag_SubMeshOnVertex = 4;
-Tag_SubMeshOnEdge = 5;
-Tag_SubMeshOnFace = 6;
-Tag_SubMeshOnSolid = 7;
-Tag_SubMeshOnCompound = 8;
+Tag_SubMeshOnVertex = 4
+Tag_SubMeshOnEdge = 5
+Tag_SubMeshOnFace = 6
+Tag_SubMeshOnSolid = 7
+Tag_SubMeshOnCompound = 8
 
 Tag = {"HypothesisRoot":1,"AlgorithmsRoot":2,"RefOnShape":1,"RefOnAppliedHypothesis":2,"RefOnAppliedAlgorithms":3,"SubMeshOnVertex":4,"SubMeshOnEdge":5,"SubMeshOnFace":6,"SubMeshOnSolid":7,"SubMeshOnCompound":8}
 
-# -- enumeration --
-ShapeTypeCompSolid = 1
-ShapeTypeSolid     = 2
-ShapeTypeShell     = 3
-ShapeTypeFace      = 4
-ShapeTypeWire      = 5
-ShapeTypeEdge      = 6
-ShapeTypeVertex    = 7
-
-# -- enumeration ShapeType as a dictionary --
-ShapeType = {"CompSolid":1, "Solid":2, "Shell":3, "Face":4, "Wire":5, "Edge":6, "Vertex":7}
-
 #------------------------------------------------------------
 def Init():
         pass
 #------------------------------------------------------------
 def AddNewMesh(IOR):
+       # VSR: added temporarily - objects are published automatically by the engine
+       aSO = myStudy.FindObjectIOR( IOR )
+       if aSO is not None:
+               return aSO.GetID()
+       # VSR ######################################################################
+       
        res,HypothesisRoot = mySComponentMesh.FindSubObject ( Tag_HypothesisRoot )
        if HypothesisRoot is None or res == 0:
                HypothesisRoot = myStudyBuilder.NewObjectToTag(mySComponentMesh, Tag_HypothesisRoot)
-               anAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeName")
-               aName = anAttr._narrow(SALOMEDS.AttributeName)
-               aName.SetValue("Hypothesis Definition")
-               anAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributePixMap")
-               aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap)
+               aName = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeName")
+               aName.SetValue("Hypotheses")
+               aPixmap = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributePixMap")
                aPixmap.SetPixMap( "mesh_tree_hypo.png" )
-               anAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable")
-               aSelAttr = anAttr._narrow(SALOMEDS.AttributeSelectable)
-               aSelAttr.SetSelectable(0);
+               aSelAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable")
+               aSelAttr.SetSelectable(0)
 
        res, AlgorithmsRoot = mySComponentMesh.FindSubObject (Tag_AlgorithmsRoot)
        if AlgorithmsRoot is None  or res == 0:
                AlgorithmsRoot = myStudyBuilder.NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot)
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeName")
-               aName = anAttr._narrow(SALOMEDS.AttributeName)
-               aName.SetValue("Algorithms Definition");
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
-               aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap);
-               aPixmap.SetPixMap( "mesh_tree_algo.png" );
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable");
-               aSelAttr = anAttr._narrow(SALOMEDS.AttributeSelectable);
-               aSelAttr.SetSelectable(0);
+               aName = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeName")
+               aName.SetValue("Algorithms")
+               aPixmap = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap")
+               aPixmap.SetPixMap( "mesh_tree_algo.png" )
+               aSelAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable")
+               aSelAttr.SetSelectable(0)
 
        HypothesisRoot = HypothesisRoot._narrow(SALOMEDS.SObject)
        newMesh = myStudyBuilder.NewObject(mySComponentMesh)
-       newMesh = newMesh._narrow(SALOMEDS.SObject)
-       anAttr = myStudyBuilder.FindOrCreateAttribute(newMesh, "AttributePixMap")
-       aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap)
+       aPixmap = myStudyBuilder.FindOrCreateAttribute(newMesh, "AttributePixMap")
        aPixmap.SetPixMap( "mesh_tree_mesh.png" )
-       anAttr = myStudyBuilder.FindOrCreateAttribute(newMesh, "AttributeIOR")
-       anIOR = anAttr._narrow(SALOMEDS.AttributeIOR)
+       anIOR = myStudyBuilder.FindOrCreateAttribute(newMesh, "AttributeIOR")
        anIOR.SetValue(IOR)
        return newMesh.GetID()
 
 #------------------------------------------------------------  
 def AddNewHypothesis(IOR):
+       # VSR: added temporarily - objects are published automatically by the engine
+       aSO = myStudy.FindObjectIOR( IOR )
+       if aSO is not None:
+               return aSO.GetID()
+       # VSR ######################################################################
+
        res, HypothesisRoot = mySComponentMesh.FindSubObject (Tag_HypothesisRoot)
        if HypothesisRoot is None or res == 0:
                HypothesisRoot = myStudyBuilder.NewObjectToTag (mySComponentMesh, Tag_HypothesisRoot)
-               anAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeName");
-               aName = anAttr._narrow(SALOMEDS.AttributeName);
-               aName.SetValue("Hypothesis Definition");
-               anAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable");
-               aSelAttr = anAttr._narrow(SALOMEDS.AttributeSelectable);
-               aSelAttr.SetSelectable(0);
-               anAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributePixMap");
-               aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap);
-               aPixmap.SetPixMap( "mesh_tree_hypo.png" );
+               aName = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeName")
+               aName.SetValue("Hypotheses")
+               aSelAttr = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributeSelectable")
+               aSelAttr.SetSelectable(0)
+               aPixmap = myStudyBuilder.FindOrCreateAttribute(HypothesisRoot, "AttributePixMap")
+               aPixmap.SetPixMap( "mesh_tree_hypo.png" )
  
        # Add New Hypothesis
        newHypo = myStudyBuilder.NewObject(HypothesisRoot)
-       newHypo = newHypo._narrow(SALOMEDS.SObject)
-       anAttr  = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributePixMap")
-       aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap)
+       aPixmap = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributePixMap")
        H = orb.string_to_object(IOR)
-       H = H._narrow( SMESH.SMESH_Hypothesis );
-       aType = H.GetName();
-       aPixmap.SetPixMap( "mesh_tree_hypo.png_" + aType );
-       anAttr = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributeIOR");
-       anIOR = anAttr._narrow(SALOMEDS.AttributeIOR);
-       anIOR.SetValue(IOR);
-       return newHypo.GetID();
+       aType = H.GetName()
+       aPixmap.SetPixMap( "mesh_tree_hypo.png_" + aType )
+       anIOR = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributeIOR")
+       anIOR.SetValue(IOR)
+       return newHypo.GetID()
 
 #------------------------------------------------------------
 def AddNewAlgorithms(IOR):
+       # VSR: added temporarily - objects are published automatically by the engine
+       aSO = myStudy.FindObjectIOR( IOR )
+       if aSO is not None:
+               return aSO.GetID()
+       # VSR ######################################################################
+
        res, AlgorithmsRoot = mySComponentMesh.FindSubObject (Tag_AlgorithmsRoot)
        if  AlgorithmsRoot is None or res == 0:
                AlgorithmsRoot = myStudyBuilde.NewObjectToTag (mySComponentMesh, Tag_AlgorithmsRoot)
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeName")
-               aName = anAttr._narrow(SALOMEDS.AttributeName);
-               aName.SetValue("Algorithms Definition");
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable")
-               aSelAttr = anAttr._narrow(SALOMEDS.AttributeSelectable);
-               aSelAttr.SetSelectable(0);
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap");
-               aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap);
-               aPixmap.SetPixMap( "mesh_tree_algo.png" );
+               aName = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeName")
+               aName.SetValue("Algorithms")
+               aSelAttr = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributeSelectable")
+               aSelAttr.SetSelectable(0)
+               aPixmap = myStudyBuilder.FindOrCreateAttribute(AlgorithmsRoot, "AttributePixMap")
+               aPixmap.SetPixMap( "mesh_tree_algo.png" )
 
   # Add New Algorithms
        newHypo = myStudyBuilder.NewObject(AlgorithmsRoot)
-       newHypo = newHypo._narrow(SALOMEDS.SObject)
-       anAttr = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributePixMap");
-       aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap);
+       aPixmap = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributePixMap")
+       aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap)
        H = orb.string_to_object(IOR)
-       H = H._narrow( SMESH.SMESH_Hypothesis);
        aType = H.GetName();    #QString in fact
-       aPixmap.SetPixMap( "mesh_tree_algo.png_" + aType );
-       anAttr = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributeIOR");
-       anIOR = anAttr._narrow(SALOMEDS.AttributeIOR);
-       anIOR.SetValue(IOR);
-       return newHypo.GetID();
+       aPixmap.SetPixMap( "mesh_tree_algo.png_" + aType )
+       anIOR = myStudyBuilder.FindOrCreateAttribute(newHypo, "AttributeIOR")
+       anIOR.SetValue(IOR)
+       return newHypo.GetID()
 
 
 #------------------------------------------------------------
 def SetShape(ShapeEntry, MeshEntry):
-
        SO_MorSM = myStudy.FindObjectID( MeshEntry )
-       SO_MorSM = SO_MorSM._narrow(SALOMEDS.SObject)
-       SO_GeomShape = myStudy.FindObjectID( ShapeEntry );
-       SO_GeomShape = SO_GeomShape._narrow(SALOMEDS.SObject)
+       SO_GeomShape = myStudy.FindObjectID( ShapeEntry )
 
        if SO_MorSM is not None and SO_GeomShape is not None :
-               SO = myStudyBuilder.NewObjectToTag (SO_MorSM, Tag_RefOnShape);
-               SO = SO._narrow(SALOMEDS.SObject)
-               myStudyBuilder.Addreference (SO,SO_GeomShape);
-  
+               # VSR: added temporarily - shape reference is published automatically by the engine
+               res, Ref = SO_MorSM.FindSubObject( Tag_RefOnShape )
+               if res == 1 :
+                       return
+               # VSR ######################################################################
+       
+               SO = myStudyBuilder.NewObjectToTag (SO_MorSM, Tag_RefOnShape)
+               myStudyBuilder.Addreference (SO,SO_GeomShape)
+
 
 #------------------------------------------------------------
 def SetHypothesis(Mesh_Or_SubMesh_Entry, Hypothesis_Entry):
-  SO_MorSM = myStudy.FindObjectID( Mesh_Or_SubMesh_Entry );
-  SO_Hypothesis =  myStudy.FindObjectID( Hypothesis_Entry );
+  SO_MorSM = myStudy.FindObjectID( Mesh_Or_SubMesh_Entry )
+  SO_Hypothesis =  myStudy.FindObjectID( Hypothesis_Entry )
 
   if  SO_MorSM is not None and SO_Hypothesis is not None : 
     
         #Find or Create Applied Hypothesis root
        res, AHR = SO_MorSM.FindSubObject (Tag_RefOnAppliedHypothesis)
        if  AHR is None or res == 0: 
-               AHR = myStudyBuilder.NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis);
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeName");
-               aName = anAttr._narrow(SALOMEDS.AttributeName);
-               aName.SetValue("Applied Hypothesis");
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeSelectable");
-               aSelAttr = anAttr._narrow(SALOMEDS.AttributeSelectable);
-               aSelAttr.SetSelectable(0);
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributePixMap");
-               aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap);
-               aPixmap.SetPixMap( "mesh_tree_hypo.png" );
-               
-               SO = myStudyBuilder.NewObject(AHR);
-               SO = SO._narrow(SALOMEDS.SObject)
-               myStudyBuilder.Addreference (SO,SO_Hypothesis);
+               AHR = myStudyBuilder.NewObjectToTag (SO_MorSM, Tag_RefOnAppliedHypothesis)
+               aName = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeName")
+               
+               # The same name as in SMESH_Mesh_i::AddHypothesis() ##################
+               aName.SetValue("Applied hypotheses")
+               
+               aSelAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeSelectable")
+               aSelAttr.SetSelectable(0)
+               aPixmap = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributePixMap")
+               aPixmap.SetPixMap( "mesh_tree_hypo.png" )
+               
+       # VSR: added temporarily - reference to applied hypothesis is published automatically by the engine
+       else :
+               it = myStudy.NewChildIterator(AHR)
+               while it.More() :
+                       res, Ref = it.Value().ReferencedObject()
+                       if res and Ref is not None and Ref.GetID() == Hypothesis_Entry :
+                               return
+                       it.Next()
+       # VSR ######################################################################
+       
+       SO = myStudyBuilder.NewObject(AHR)
+       myStudyBuilder.Addreference (SO,SO_Hypothesis)
 
 #------------------------------------------------------------
 def SetAlgorithms(Mesh_Or_SubMesh_Entry, Algorithms_Entry):
@@ -208,91 +218,104 @@ def SetAlgorithms(Mesh_Or_SubMesh_Entry, Algorithms_Entry):
     SO_Algorithms = myStudy.FindObjectID( Algorithms_Entry )
     if  SO_MorSM != None and SO_Algorithms != None : 
        #Find or Create Applied Algorithms root
-       res, AHR = SO_MorSM.FindSubObject (Tag_RefOnAppliedAlgorithms);
+       res, AHR = SO_MorSM.FindSubObject (Tag_RefOnAppliedAlgorithms)
        if AHR is None or res == 0: 
-               AHR = myStudyBuilder.NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms);
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeName");
-               aName = anAttr._narrow(SALOMEDS.AttributeName);
-               aName.SetValue("Applied Algorithm");
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeSelectable");
-               aSelAttr = anAttr._narrow(SALOMEDS.AttributeSelectable);
-               aSelAttr.SetSelectable(0);
-               anAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributePixMap");
-               aPixmap = anAttr._narrow(SALOMEDS.AttributePixMap);
-               aPixmap.SetPixMap( "mesh_tree_algo.png" );
-    
-       SO = myStudyBuilder.NewObject(AHR);
-       myStudyBuilder.Addreference (SO,SO_Algorithms);
+               AHR = myStudyBuilder.NewObjectToTag (SO_MorSM, Tag_RefOnAppliedAlgorithms)
+               aName = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeName")
+
+               # The same name as in SMESH_Mesh_i::AddHypothesis() ##################
+               aName.SetValue("Applied algorithms")
+               
+               aSelAttr = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributeSelectable")
+               aSelAttr.SetSelectable(0)
+               aPixmap = myStudyBuilder.FindOrCreateAttribute(AHR, "AttributePixMap")
+               aPixmap.SetPixMap( "mesh_tree_algo.png" )
+                       
+       # VSR: added temporarily - reference to applied hypothesis is published automatically by the engine
+       else :
+               it = myStudy.NewChildIterator(AHR)
+               while it.More() :
+                       res, Ref = it.Value().ReferencedObject()
+                       if res and Ref is not None and Ref.GetID() == Algorithms_Entry :
+                               return
+                       it.Next()
+       # VSR ######################################################################
+       
+       SO = myStudyBuilder.NewObject(AHR)
+       myStudyBuilder.Addreference (SO,SO_Algorithms)
   
 
 #------------------------------------------------------------
 def UnSetHypothesis( Applied_Hypothesis_Entry ):
-       SO_Applied_Hypothesis = myStudy.FindObjectID( Applied_Hypothesis_Entry );
+       SO_Applied_Hypothesis = myStudy.FindObjectID( Applied_Hypothesis_Entry )
        if SO_Applied_Hypothesis : 
-               myStudyBuilder.RemoveObject(SO_Applied_Hypothesis);
+               myStudyBuilder.RemoveObject(SO_Applied_Hypothesis)
        
 
 #------------------------------------------------------------
 def AddSubMesh ( SO_Mesh_Entry, SM_IOR, ST):
+       # VSR: added temporarily - objects are published automatically by the engine
+       aSO = myStudy.FindObjectIOR( SM_IOR )
+       if aSO is not None:
+               return aSO.GetID()
+       # VSR ######################################################################
+       
        SO_Mesh = myStudy.FindObjectID( SO_Mesh_Entry )
        if ( SO_Mesh ) : 
     
-               if  ST == ShapeTypeCompSolid : 
-                       Tag_Shape = Tag_SubMeshOnSolid;    
-                       Name = "SubMeshes On Solid";
-               elif ST == ShapeTypeFace :
-                       Tag_Shape = Tag_SubMeshOnFace;     
-                       Name = "SubMeshes On Face";
-               elif ST == ShapeTypeEdge :
-                       Tag_Shape = Tag_SubMeshOnEdge;     
-                       Name = "SubMeshes On Edge";
-               elif ST == ShapeTypeVertex :
-                       Tag_Shape = Tag_SubMeshOnVertex;   
-                       Name = "SubMeshes On Vertex";
+               if  ST == ShapeType["COMPSOLID"] : 
+                       Tag_Shape = Tag_SubMeshOnSolid
+                       Name = "SubMeshes on Solid"
+               elif ST == ShapeType["FACE"] :
+                       Tag_Shape = Tag_SubMeshOnFace
+                       Name = "SubMeshes on Face"
+               elif ST == ShapeType["EDGE"] :
+                       Tag_Shape = Tag_SubMeshOnEdge
+                       Name = "SubMeshes on Edge"
+               elif ST == ShapeType["VERTEX"] :
+                       Tag_Shape = Tag_SubMeshOnVertex
+                       Name = "SubMeshes on Vertex"
                else :
-                       Tag_Shape = Tag_SubMeshOnCompound
-                       Name = "SubMeshes On Compound";
+                       Tag_Shape = Tag_SubMeshOnCompound
+                       Name = "SubMeshes on Compound"
                
                res, SubmeshesRoot = SO_Mesh.FindSubObject (Tag_Shape)
                if SubmeshesRoot is None or res == 0:
-                       SubmeshesRoot = myStudyBuilder.NewObjectToTag (SO_Mesh, Tag_Shape);
-                       anAttr = myStudyBuilder.FindOrCreateAttribute(SubmeshesRoot, "AttributeName");
-                       
-                       aName = anAttr._narrow(SALOMEDS.AttributeName);
-                       aName.SetValue(Name);
-                       anAttr = myStudyBuilder.FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable");
-                       aSelAttr = anAttr._narrow(SALOMEDS.AttributeSelectable);
-                       aSelAttr.SetSelectable(0);
+                       SubmeshesRoot = myStudyBuilder.NewObjectToTag (SO_Mesh, Tag_Shape)
+                       aName = myStudyBuilder.FindOrCreateAttribute(SubmeshesRoot, "AttributeName")
+                       aName.SetValue(Name)
+                       aSelAttr = myStudyBuilder.FindOrCreateAttribute(SubmeshesRoot, "AttributeSelectable")
+                       aSelAttr.SetSelectable(0)
                
-               SO = myStudyBuilder.NewObject (SubmeshesRoot); 
-               SO = SO._narrow(SALOMEDS.SObject)
-               anAttr = myStudyBuilder.FindOrCreateAttribute(SO, "AttributeIOR");
-               anIOR = anAttr._narrow(SALOMEDS.AttributeIOR);
-               anIOR.SetValue(SM_IOR);
-               return  SO.GetID();
-        
-       return None;
+               SO = myStudyBuilder.NewObject (SubmeshesRoot)
+               anIOR = myStudyBuilder.FindOrCreateAttribute(SO, "AttributeIOR")
+               anIOR.SetValue(SM_IOR)
+               return  SO.GetID()
+
+       return None
 
 #------------------------------------------------------------
 def AddSubMeshOnShape (Mesh_Entry, GeomShape_Entry, SM_IOR, ST) :
-  SO_GeomShape = myStudy.FindObjectID( GeomShape_Entry );
-  if  SO_GeomShape != None : 
-       SM_Entry = AddSubMesh (Mesh_Entry,SM_IOR,ST);
-       SO_SM = myStudy.FindObjectID( SM_Entry );
-
-       if  SO_SM != None :
-               SetShape (GeomShape_Entry, SM_Entry);
-               return SO_SM.GetID();
-    
-  return None;
+       # VSR: added temporarily - objects are published automatically by the engine
+       aSO = myStudy.FindObjectIOR( SM_IOR )
+       if aSO is not None:
+               return aSO.GetID()
+       # VSR ######################################################################
+       SO_GeomShape = myStudy.FindObjectID( GeomShape_Entry )
+       if  SO_GeomShape != None : 
+               SM_Entry = AddSubMesh (Mesh_Entry,SM_IOR,ST)
+               SO_SM = myStudy.FindObjectID( SM_Entry )
+
+               if  SO_SM != None :
+                       SetShape (GeomShape_Entry, SM_Entry)
+                       return SM_Entry
+
+       return None
 
 
 #------------------------------------------------------------
 def SetName(Entry, Name):
-       SO = myStudy.FindObjectID( Entry );
+       SO = myStudy.FindObjectID( Entry )
        if SO != None : 
-               anAttr = myStudyBuilder.FindOrCreateAttribute(SO, "AttributeName");
-               aName = anAttr._narrow(SALOMEDS.AttributeName);
-               aName.SetValue(Name);
-  
-
+               aName = myStudyBuilder.FindOrCreateAttribute(SO, "AttributeName")
+               aName.SetValue(Name)