]> SALOME platform Git repositories - modules/shaper_study.git/blobdiff - src/PY/SHAPERSTUDY.py
Salome HOME
Copyright update 2021
[modules/shaper_study.git] / src / PY / SHAPERSTUDY.py
index 414dc4aeabb9f06788cf50410a5e802e7162ca77..f7d50d21fb90ef70a33b3e7a28dc14b5e8cbba31 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2019-2020  CEA/DEN, EDF R&D
+# Copyright (C) 2019-2021  CEA/DEN, EDF R&D
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -37,10 +37,7 @@ salome.salome_init(1)
 __entry2IOR__ = {}
 __entry2DumpName__ = {}
 
-class SHAPERSTUDY(SHAPERSTUDY_ORB__POA.Gen,
-                  SALOME_ComponentPy.SALOME_ComponentPy_i,
-                  SALOME_DriverPy.SALOME_DriverPy_i):
-
+class SHAPERSTUDY_Gen(SHAPERSTUDY_ORB__POA.Gen, SALOME_ComponentPy.SALOME_ComponentPy_i, SALOME_DriverPy.SALOME_DriverPy_i):
 
     ShapeType = {"AUTO":-1, "COMPOUND":0, "COMPSOLID":1, "SOLID":2, "SHELL":3, "FACE":4, "WIRE":5, "EDGE":6, "VERTEX":7, "SHAPE":8, "FLAT":9}
     
@@ -56,25 +53,6 @@ class SHAPERSTUDY(SHAPERSTUDY_ORB__POA.Gen,
         GEOM.FLAT:"face.png"
         }
 
-    def __init__ ( self, orb, poa, contID, containerName, instanceName, interfaceName ):
-        """
-        Construct an instance of SHAPERSTUDY module engine.
-        The class SHAPERSTUDY implements CORBA interface Gen (see SHAPERSTUDY_Gen.idl).
-        It is inherited (via GEOM_Gen) from the classes SALOME_ComponentPy_i (implementation of
-        Engines::EngineComponent CORBA interface - SALOME component) and SALOME_DriverPy_i
-        (implementation of SALOMEDS::Driver CORBA interface - SALOME module's engine).
-        """
-        global __entry2IOR__, __entry2DumpName__
-        __entry2IOR__.clear()
-        __entry2DumpName__.clear()
-        SALOME_ComponentPy.SALOME_ComponentPy_i.__init__(self, orb, poa,
-                    contID, containerName, instanceName, interfaceName, False)
-        SALOME_DriverPy.SALOME_DriverPy_i.__init__(self, interfaceName)
-        #
-        #self._naming_service = SALOME_ComponentPy.SALOME_NamingServicePy_i( self._orb )
-        #
-        pass
-
     def FindOrCreateShape( self, theInternalEntry ):
         """
         Searches existing or creates a new SHAPERSTUDY_Object to interact with SHAPER
@@ -414,6 +392,33 @@ class SHAPERSTUDY(SHAPERSTUDY_ORB__POA.Gen,
           return "model.featureStringId(" + __entry2DumpName__[anEntry] + anArg + ")"
         return "\"" + theShapeObj.GetEntry() + "\""
 
+    def OrderGroups(self, theStudy, theStartSO, theIsGroup):
+        """
+        An internal method for returning sub-groups or sub-fields in a correct order basing on their IDs
+        """
+        aResult = []
+        anIter = theStudy.NewChildIterator(theStartSO)
+        anOrder = {} # entry to object
+        while anIter.More():
+          anSO = anIter.Value()
+          anIter.Next()
+          anIOR = anSO.GetIOR()
+          if len(anIOR):
+            anObj = salome.orb.string_to_object(anIOR)
+            if (theIsGroup and isinstance(anObj, SHAPERSTUDY_ORB._objref_SHAPER_Group)) or \
+               (not theIsGroup and isinstance(anObj, SHAPERSTUDY_ORB._objref_SHAPER_Field)):
+              anEntry = anObj.GetEntry()
+              aSplit = anEntry.split(":")
+              if len(aSplit) > 1 and aSplit[1].isdecimal():
+                anID = int(aSplit[1])
+                anOrder[anID] = anObj
+
+        for aKey in sorted(anOrder.keys()):
+          aResult.append(anOrder[aKey])
+
+        return aResult
+
+
     def DumpPython( self, isPublished, isMultiFile ):
         """
         Dump module data to the Python script.
@@ -445,23 +450,25 @@ class SHAPERSTUDY(SHAPERSTUDY_ORB__POA.Gen,
           script.append("import SHAPERSTUDY")
           for aShapeObj in aShapeObjects:
             # check this shape also has sub-groups and fields
+            anOrderedGroups = self.OrderGroups(aStudy, aShapeObj.GetSO(), True)
+            anOrderedFields = self.OrderGroups(aStudy, aShapeObj.GetSO(), False)
+            anObjects = anOrderedGroups + anOrderedFields
+
             aGroupVarNames = []
-            aSOIter = aStudy.NewChildIterator(aShapeObj.GetSO())
-            while aSOIter.More():
-              aGroupSO = aSOIter.Value()
-              anIOR = aGroupSO.GetIOR()
-              if len(anIOR):
-                aGroup = salome.orb.string_to_object(anIOR)
-                if isinstance(aGroup, SHAPERSTUDY_ORB._objref_SHAPER_Group) or \
-                   isinstance(aGroup, SHAPERSTUDY_ORB._objref_SHAPER_Field):
-                  aGroupVarName = self.UniqueDumpName(aGroup.GetName(), aGroupSO.GetID())
-                  aGroupVarNames.append(aGroupVarName)
-              aSOIter.Next()
+            for anObj in anObjects:
+              aGroupVarName = self.UniqueDumpName(anObj.GetName(), anObj.GetSO().GetID())
+              aGroupVarNames.append(aGroupVarName)
+
             aShapeVar = self.UniqueDumpName(aShapeObj.GetName(), aShapeObj.GetSO().GetID())
             aShapeStr = aShapeVar + ", "
             for aGName in aGroupVarNames:
               aShapeStr += aGName + ", "
-            aShapeStr += "= SHAPERSTUDY.shape(" + self.GetShaperEntry(aShapeObj) +")"
+            aShaperEntry = self.GetShaperEntry(aShapeObj)
+            aShapeStr += "= SHAPERSTUDY.shape(" + aShaperEntry +")"
+            # 18884 : comment the line with dead shapes for now
+            if aShaperEntry.startswith("\"dead"):
+              script.append("# This shape does not exist among the SHAPER results; if it is referenced by SMESH, this may cause an error")
+              aShapeStr = "# " + aShapeStr
             script.append(aShapeStr)
             # dump also dead-shapes with groups and fields in the XAO format
             aRes, aHistSO = aShapeObj.GetSO().FindSubObject(10000) # the History folder
@@ -482,33 +489,32 @@ class SHAPERSTUDY(SHAPERSTUDY_ORB__POA.Gen,
                     anArchiveNum += 1
                     aDeadVarName = self.UniqueDumpName(aDeadShape.GetName(), aDSO.GetID())
                     aDeadString += aDeadVarName + ", "
-                    aDGroupIter = aStudy.NewChildIterator(aDSO)
-
-                    while aDGroupIter.More():
-                      aDeadGroup = aDGroupIter.Value().GetObject()
-                      if isinstance(aDeadGroup, SHAPERSTUDY_ORB._objref_SHAPER_Group):
-                        aDGroupVarName = self.UniqueDumpName(aDeadGroup.GetName(), aDGroupIter.Value().GetID())
-                        aDeadString += aDGroupVarName + ", "
-                        aGroupID = aXAO.AddGroup(aDeadGroup.GetSelectionType(), aDGroupVarName)
-                        for aSel in aDeadGroup.GetSelection():
-                          aXAO.AddGroupSelection(aGroupID, aSel)
-                      elif isinstance(aDeadGroup, SHAPERSTUDY_ORB._objref_SHAPER_Field):
-                        aDeadField = aDeadGroup
-                        aDFieldVarName = self.UniqueDumpName(aDeadField.GetName(), aDGroupIter.Value().GetID())
-                        aDeadString += aDFieldVarName + ", "
-                        aComponents = aDeadField.GetComponents()
-                        aFieldID = aXAO.AddField(aDeadField.GetValuesType(), aDeadField.GetSelectionType(), \
-                          len(aComponents), aDFieldVarName)
-                        for aCompIndex in range(len(aComponents)):
-                          aXAO.SetFieldComponent(aFieldID, aCompIndex, aComponents[aCompIndex])
-                        aSteps = aDeadField.GetSteps()
-                        for aStep in aSteps:
-                          aFieldStep = aDeadField.GetStep(aStep)
-                          aXAO.AddStep(aFieldID, aStep, aFieldStep.GetStamp())
-                          aStepVals = aFieldStep.GetValues()
-                          for aValue in aStepVals:
-                            aXAO.AddStepValue(aFieldID, aStep, str(aValue))
-                      aDGroupIter.Next()
+
+                    aGroups = self.OrderGroups(aStudy, aDSO, True)
+                    for aDeadGroup in aGroups:
+                      aDGroupVarName = self.UniqueDumpName(aDeadGroup.GetName(), aDeadGroup.GetSO().GetID())
+                      aDeadString += aDGroupVarName + ", "
+                      aGroupID = aXAO.AddGroup(aDeadGroup.GetSelectionType(), aDGroupVarName)
+                      for aSel in aDeadGroup.GetSelection():
+                        aXAO.AddGroupSelection(aGroupID, aSel)
+
+                    aFields = self.OrderGroups(aStudy, aDSO, False)
+                    for aDeadField in aFields:
+                      aDFieldVarName = self.UniqueDumpName(aDeadField.GetName(), aDeadField.GetSO().GetID())
+                      aDeadString += aDFieldVarName + ", "
+                      aComponents = aDeadField.GetComponents()
+                      aFieldID = aXAO.AddField(aDeadField.GetValuesType(), aDeadField.GetSelectionType(), \
+                        len(aComponents), aDFieldVarName)
+                      for aCompIndex in range(len(aComponents)):
+                        aXAO.SetFieldComponent(aFieldID, aCompIndex, aComponents[aCompIndex])
+                      aSteps = aDeadField.GetSteps()
+                      for aStep in aSteps:
+                        aFieldStep = aDeadField.GetStep(aStep)
+                        aXAO.AddStep(aFieldID, aStep, aFieldStep.GetStamp())
+                        aStepVals = aFieldStep.GetValues()
+                        for aValue in aStepVals:
+                          aXAO.AddStepValue(aFieldID, aStep, str(aValue))
+
                     aXAO.Export(anArchiveName)
                     aDeadString += " = SHAPERSTUDY.archive(" + aShapeVar + ", \"" + anArchiveName + "\")"
                     script.append(aDeadString)
@@ -731,3 +737,34 @@ def breakLinkForSubElements(theMainShapeSO, theDeadShape):
               aBuilder.Addreference(aSubSO, aDeadSubSO)
           aDeadIter.Next()
   pass
+
+class SHAPERSTUDY(SHAPERSTUDY_Gen, SHAPERSTUDY_ORB__POA.Gen, SALOME_ComponentPy.SALOME_ComponentPy_i, SALOME_DriverPy.SALOME_DriverPy_i):
+    """
+    Implementation with naming_service server.
+    """
+    def __init__ ( self, orb, poa, contID, containerName, instanceName, interfaceName ):
+        """
+        Construct an instance of SHAPERSTUDY module engine.
+        The class SHAPERSTUDY implements CORBA interface Gen (see SHAPERSTUDY_Gen.idl).
+        It is inherited (via GEOM_Gen) from the classes SALOME_ComponentPy_i (implementation of
+        Engines::EngineComponent CORBA interface - SALOME component) and SALOME_DriverPy_i
+        (implementation of SALOMEDS::Driver CORBA interface - SALOME module's engine).
+        """
+        global __entry2IOR__, __entry2DumpName__
+        __entry2IOR__.clear()
+        __entry2DumpName__.clear()
+        SALOME_ComponentPy.SALOME_ComponentPy_i.__init__(self, orb, poa, contID, containerName, instanceName, interfaceName, False)
+        SALOME_DriverPy.SALOME_DriverPy_i.__init__(self, interfaceName)
+        pass
+
+class SHAPERSTUDY_No_Session(SHAPERSTUDY_Gen, SHAPERSTUDY_ORB__POA.Gen, SALOME_ComponentPy.SALOME_ComponentPy_Gen_i, SALOME_DriverPy.SALOME_DriverPy_i):
+    """
+    Implementation without naming_service server.
+    """
+    def __init__ ( self, orb, poa, contID, containerName, instanceName, interfaceName ):
+        global __entry2IOR__, __entry2DumpName__
+        __entry2IOR__.clear()
+        __entry2DumpName__.clear()
+        SALOME_ComponentPy.SALOME_ComponentPy_Gen_i.__init__(self, orb, poa, contID, containerName, instanceName, interfaceName, False)
+        SALOME_DriverPy.SALOME_DriverPy_i.__init__(self, interfaceName)
+        pass