Salome HOME
Issue #2660: Update data model before save.
[modules/shaper.git] / src / ConnectorPlugin / ConnectorPlugin_ExportFeature.py
index 953b31c374cd6fc880c5a5b3e10582d5f77a5ca8..1fccfcef6009f6f86177797a7d96017fba0905c7 100644 (file)
-"""
-Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-"""
+## Copyright (C) 2014-2017  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
+## License as published by the Free Software Foundation; either
+## version 2.1 of the License, or (at your option) any later version.
+##
+## 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<mailto:webmaster.salome@opencascade.com>
+##
+
+## @package Plugins
+#  ExportFeature class definition
 
 import ModelAPI
+import ExchangeAPI
+
 import salome
 from salome.geom import geomBuilder
 
+from salome.shaper import model
 
-class ExportFeature(ModelAPI.ModelAPI_Feature):
+import os
 
-    "Feature to create a box by drawing a sketch and extruding it"
+def getTmpFileName(ext):
+    import tempfile
+    tempdir = tempfile.gettempdir()
+    tmp_file = tempfile.NamedTemporaryFile(suffix=".%s"%ext, prefix='shaper_', dir=tempdir, delete=False)
+    tmp_filename = tmp_file.name
+    if os.name == "nt":
+        tmp_filename.replace("\\", "/")
+    return tmp_filename
 
+## @ingroup Plugins
+#  Feature to export all shapes and groups into the GEOM module
+class ExportFeature(ModelAPI.ModelAPI_Feature):
+
+    ## The constructor.
     def __init__(self):
         ModelAPI.ModelAPI_Feature.__init__(self)
+        pass
 
     @staticmethod
+    ## Export kind. Static.
     def ID():
         return "ExportToGEOM"
 
+    ## Returns the kind of a feature.
     def getKind(self):
         return ExportFeature.ID()
 
-    # This feature is action: has no property pannel and executes immideately
+    ## This feature is action: has no property pannel and executes immediately.
     def isAction(self):
         return True
 
+    ## This feature has no attributes, as it is action.
     def initAttributes(self):
-        # This feature has no attributes, but should perfore some actions on initialization
-        aSession = ModelAPI.ModelAPI_Session.get()
-        aPart = aSession.activeDocument()
-        # Get all bodies
-        kResultBodyType = "ResultBody"
-        aPartSize = aPart.size(kResultBodyType)
-        if aPartSize == 0:
-            print "No results in the active document"
-            return
+      pass
 
-        aResultList = [aPart.object(kResultBodyType, idx) for idx in xrange(aPartSize)]
-        for idx, aResult in enumerate(aResultList):
-            aBodyResult = modelAPI_ResultBody(aResult)
-            if not aBodyResult:
-                continue
-            aShape = aBodyResult.shape()
-            aDump = aShape.getShapeStream()
-            # Load shape to SALOME Geom
-            geompy = geomBuilder.New(salome.myStudy)
-            aBrep = geompy.RestoreShape(aDump)
-            geompy.addToStudy(aBrep, "NewGeomShape_{0}".format(idx))
+    ## Export the results, groups and fields via XAO
+    def exportViaXAO(self):
+        tmpXAOFile = getTmpFileName("xao")
+        self.tmpXAOFile = tmpXAOFile
+        #print "Export to %s"%tmpXAOFile
+        exportXAO = ExchangeAPI.exportToXAO(self.Part, tmpXAOFile, "automatic_shaper_export_to_XAO")
+        if not os.path.exists(tmpXAOFile) or os.stat(tmpXAOFile).st_size == 0:
+            exportXAO.feature().setError("Error in exportToXAO. No XAO file has been created.")
+            return
+        imported, shape, subShapes, groups, fields = self.geompy.ImportXAO(tmpXAOFile)
+        self.geompy.addToStudy( shape, shape.GetName() )
+        # add sub-shapes and groups to the object browser
+        for obj in subShapes + groups:
+            name = obj.GetName()
+            self.geompy.addToStudyInFather(shape, obj, name)
+        # add fields to the object browser
+        for field in fields:
+            name = field.GetName()
+            self.geompy.addToStudyInFather(shape, field, name)
+            # add steps to the object browser
+            steps = field.getSteps()
+            for i_step in steps:
+                step = field.getStep(i_step)
+                i_stamp = step.GetStamp()
+                step_name = "Step %i %i"%(i_step, i_stamp)
+                self.geompy.addToStudyInFather( field, step, step_name )
+        # Remove the temporary file
+        os.remove(tmpXAOFile)
+        pass
 
+    ## Exports all shapes and groups into the GEOM module.
     def execute(self):
-        # Nothing to execute: all logic would be in the initAttributes
-        pass
+        aSession = ModelAPI.ModelAPI_Session.get()
+        ## Get active document
+        self.Part = aSession.activeDocument()
+        ## List of objects created in the old geom for later use
+        self.geomObjects = []
+        ## geomBuilder tool
+        salome.salome_init(1)
+        self.geompy = geomBuilder.New()
+
+        self.exportViaXAO()
 
-# TEST
-"""
-if __name__=='__main__':
-  session = ModelAPI.ModelAPI_Session.get()
-  part = session.activeDocument()
-  session.startOperation()
-  feature = part.addFeature('Box')
-  feature.real('box_width').setValue(10)
-  feature.real('box_length').setValue(10)
-  feature.real('box_height').setValue(10)
-  feature.execute()
-  session.finishOperation()
-"""
+        pass