-# 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
__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}
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
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.
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
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)
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