]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
[bos #38044][EDF] (2023-T3) Support for automatic reparation. Fixed import error...
authorKonstantin Leontev <Konstantin.LEONTEV@opencascade.com>
Wed, 10 Jul 2024 18:48:01 +0000 (19:48 +0100)
committerKonstantin Leontev <Konstantin.LEONTEV@opencascade.com>
Wed, 10 Jul 2024 18:48:01 +0000 (19:48 +0100)
src/GEOM/GEOM_Engine.cxx
src/RepairGUIAdv/geomrepairadv_execute.py

index 13aea9601b606aade95657920fd67df2db75b5ff..e26f2139b5b44684d3e06b14f4d0988c8887c71e 100644 (file)
@@ -205,6 +205,13 @@ namespace
   {
     MESSAGE("Start check function dependencies...");
 
+    // Special case for function dumped from Python, because it's appended to
+    // description of other function that should be rejected early.
+    if (IsFunctionSetFromPython(aDescr)) {
+      MESSAGE("Function set from Python. Do process with updated description.");
+      return UPDATE_DESCRIPTION;
+    }
+
     TDF_LabelSequence aSeq;
     theFunction->GetDependency(aSeq);
     const Standard_Integer aLen = aSeq.Length();
@@ -236,16 +243,6 @@ namespace
       }
 
       if (!theProcessed.Contains(aDepLabel)) {
-        // Special case for function dumped from Python, because it's appended to
-        // description of other function that should be rejected early.
-        // TODO: it's not clear if we need to check every given function or
-        // checking on this level is enough. At this moment it's better to stay here 
-        // for performance reason.
-        if (IsFunctionSetFromPython(aDescr)) {
-          MESSAGE("Function set from Python. Do process with updated description.");
-          return UPDATE_DESCRIPTION;
-        }
-
         MESSAGE("The dependency label is not in processed list. Do not process.");
         return NOT_PROCESS;
       }
index 78c4a678d9aa313071c3f5fa7afd2b58e315e730..f2c959eb411ad009f769d7c1af84cd7e9ad96842 100644 (file)
@@ -85,6 +85,60 @@ def module_from_filename(filename):
     return module
 
 
+def make_dump_args(algo_name, args_dict_str, is_dump_on, is_copy_on):
+    """
+    Prepares a string with arguments for writing the execute() function to a python dump.
+
+    Args:
+        algo_name - an algorithm's name.
+        args_dict_str - string with all the args passed into the given algo.
+        is_dump_on - do we need to write to dump.
+        is_copy_on - do we need to copy selected object.
+
+    Returns:
+        A string with arguments divided by comma.
+    """
+
+    algo_name_str = str(algo_name)
+    is_dump_str = str(is_dump_on)
+    is_copy_str = str(is_copy_on)
+
+    return '\'' + algo_name_str + '\', ' + args_dict_str + ', ' + is_dump_str + ', ' + is_copy_str
+
+
+def save_to_dump(geompy, selected_object, result_object, args_str):
+    """
+    Record the function call for a python dump.
+
+    Args:
+        geompy - geomBuilder object.
+        selected_object - an object selected for repairation.
+        result_object - a result object after algo applied.
+        args_str - string with all the args for execute() function.
+
+    Returns:
+        None.
+    """
+
+    # Importing everything from GEOM is a shorter way to fix arguments like GEOM.EDGE,
+    # because calling str(GEOM.EDGE) results with 'EDGE' instead of 'GEOM.EDGE',
+    # that leads to 'NameError: name 'EDGE' is not defined' on attempt to load the dump.
+    # Could be narrowed down to 'from GEOM import EDGE, FACE' and so on,
+    # if we are sure about limited set of definitions.
+    import_str = 'from salome.geom.geomrepairadv import geomrepairadv_execute\nfrom GEOM import *\n'
+    func_name = 'geomrepairadv_execute.execute'
+
+    geompy.FuncToPythonDump(
+        selected_object,
+        result_object,
+        import_str,
+        func_name,
+        args_str
+    )
+
+    logger.debug(f'{func_name} function prepared for Python dump with args: \n\t{args_str}')
+
+
 def execute(selected_object, algo_name, args_dict, is_dump_on = True, is_copy_on = True):
     """
     Executes GEOM advanced repair algorithm.
@@ -143,13 +197,8 @@ def execute(selected_object, algo_name, args_dict, is_dump_on = True, is_copy_on
             return None
 
         if is_dump_on:
-            geompy.FuncToPythonDump(
-                selected_object,
-                result_object,
-                'from salome.geom.geomrepairadv import geomrepairadv_execute\n',
-                'geomrepairadv_execute.execute',
-                '\'' + str(algo_name) + '\', ' + args_dict_str
-            )
+            args_str = make_dump_args(algo_name, args_dict_str, is_dump_on, is_copy_on)
+            save_to_dump(geompy, selected_object, result_object, args_str)
 
         return result_object