Salome HOME
0021921: [CEA 690] GetVolume applied on many elements has performance issue
authoreap <eap@opencascade.com>
Wed, 24 Oct 2012 15:46:31 +0000 (15:46 +0000)
committereap <eap@opencascade.com>
Wed, 24 Oct 2012 15:46:31 +0000 (15:46 +0000)
 Optimize _valueFromFunctor()

src/SMESH_SWIG/smeshDC.py

index c57c6773d6218fbae4535967dc02c58bd9864e61..87d32ec81e4abe9bb7e1f4da4ca04b6854db2da7 100644 (file)
@@ -957,6 +957,7 @@ class Mesh:
     geom = 0
     mesh = 0
     editor = 0
+    functors = [None] * SMESH.FT_Undefined._v
 
     ## Constructor
     #
@@ -4056,9 +4057,16 @@ class Mesh:
     def CreateHoleSkin(self, radius, theShape, groupName, theNodesCoords):
         return self.editor.CreateHoleSkin( radius, theShape, groupName, theNodesCoords )
 
+    def _getFunctor(self, funcType ):
+        fn = self.functors[ funcType._v ]
+        if not fn:
+            fn = self.smeshpyD.GetFunctor(funcType)
+            fn.SetMesh(self.mesh)
+            self.functors[ funcType._v ] = fn
+        return fn
+
     def _valueFromFunctor(self, funcType, elemId):
-        fn = self.smeshpyD.GetFunctor(funcType)
-        fn.SetMesh(self.mesh)
+        fn = self._getFunctor( funcType )
         if fn.GetElementType() == self.GetElementType(elemId, True):
             val = fn.GetValue(elemId)
         else: