From 0e7f7e7813142b1a4da8bca90a68e7c5bed76dbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Sun, 15 Jun 2025 13:03:26 +0200 Subject: [PATCH] FEM: Extraction code CodeQL updated and typo fix --- src/Mod/AddonManager | 2 +- src/Mod/Fem/femguiutils/extract_link_view.py | 3 -- src/Mod/Fem/femguiutils/post_visualization.py | 4 +- src/Mod/Fem/femguiutils/vtk_table_view.py | 8 ++++ .../Fem/femobjects/base_fempostextractors.py | 2 +- .../femobjects/base_fempostvisualizations.py | 4 +- src/Mod/Fem/femobjects/post_extract1D.py | 5 +-- src/Mod/Fem/femobjects/post_extract2D.py | 5 +-- src/Mod/Fem/femobjects/post_lineplot.py | 2 +- .../Fem/femtaskpanels/base_fempostpanel.py | 2 - .../Fem/femtaskpanels/task_post_extractor.py | 4 -- .../femtaskpanels/task_post_glyphfilter.py | 43 ------------------- src/Mod/Fem/femtaskpanels/task_post_table.py | 4 -- .../view_base_fempostextractors.py | 1 - 14 files changed, 19 insertions(+), 70 deletions(-) diff --git a/src/Mod/AddonManager b/src/Mod/AddonManager index 69a6e0dc7b..34d433a02c 160000 --- a/src/Mod/AddonManager +++ b/src/Mod/AddonManager @@ -1 +1 @@ -Subproject commit 69a6e0dc7b8f5fe17547f4d1234df1617b78c45e +Subproject commit 34d433a02c7ec5c73bec9c57d0a27ea70b36c90d diff --git a/src/Mod/Fem/femguiutils/extract_link_view.py b/src/Mod/Fem/femguiutils/extract_link_view.py index 37e8e82c62..a6f6067080 100644 --- a/src/Mod/Fem/femguiutils/extract_link_view.py +++ b/src/Mod/Fem/femguiutils/extract_link_view.py @@ -590,7 +590,6 @@ class ExtractLinkView(QtGui.QWidget): candidates = self._object.OutList # get all widgets from the candidates - extractors = [] for candidate in candidates: if extr.is_extractor_object(candidate): summary = self._build_summary_widget(candidate) @@ -620,8 +619,6 @@ class ExtractLinkView(QtGui.QWidget): QtCore.Slot(object, object) # visualization data, extraction data def newVisualization(self, vis_data, ext_data): - doc = self._object.Document - FreeCADGui.addModule(vis_data.module) FreeCADGui.addModule(ext_data.module) FreeCADGui.addModule("FemGui") diff --git a/src/Mod/Fem/femguiutils/post_visualization.py b/src/Mod/Fem/femguiutils/post_visualization.py index 9975db127b..6724fda779 100644 --- a/src/Mod/Fem/femguiutils/post_visualization.py +++ b/src/Mod/Fem/femguiutils/post_visualization.py @@ -40,8 +40,8 @@ from PySide import QtCore import FreeCAD -# Registry to handle visulization commands -# ######################################## +# Registry to handle visualization commands +# ######################################### _registry = {} diff --git a/src/Mod/Fem/femguiutils/vtk_table_view.py b/src/Mod/Fem/femguiutils/vtk_table_view.py index c1263150ac..f126640d24 100644 --- a/src/Mod/Fem/femguiutils/vtk_table_view.py +++ b/src/Mod/Fem/femguiutils/vtk_table_view.py @@ -83,6 +83,8 @@ class VtkTableModel(QtCore.QAbstractTableModel): col = self._table.GetColumn(index.column()) return col.GetTuple(index.row())[0] + return None + def headerData(self, section, orientation, role): if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole: @@ -98,6 +100,8 @@ class VtkTableModel(QtCore.QAbstractTableModel): if orientation == QtCore.Qt.Vertical and role == QtCore.Qt.DisplayRole: return section + return None + def getTable(self): return self._table @@ -134,6 +138,8 @@ class VtkTableSummaryModel(QtCore.QAbstractTableModel): range = col.GetRange() return range[index.column()] + return None + def headerData(self, section, orientation, role): if orientation == QtCore.Qt.Horizontal and role == QtCore.Qt.DisplayRole: @@ -142,6 +148,8 @@ class VtkTableSummaryModel(QtCore.QAbstractTableModel): if orientation == QtCore.Qt.Vertical and role == QtCore.Qt.DisplayRole: return self._table.GetColumnName(section) + return None + def getTable(self): return self._table diff --git a/src/Mod/Fem/femobjects/base_fempostextractors.py b/src/Mod/Fem/femobjects/base_fempostextractors.py index e42d2adf1b..48bd9c4951 100644 --- a/src/Mod/Fem/femobjects/base_fempostextractors.py +++ b/src/Mod/Fem/femobjects/base_fempostextractors.py @@ -123,7 +123,7 @@ class Extractor(base_fempythonobject.BaseFemPythonObject): case _: return ["Not a vector"] - def get_representive_fieldname(self): + def get_representive_fieldname(self, obj): # should return the representive field name, e.g. Position (X) return "" diff --git a/src/Mod/Fem/femobjects/base_fempostvisualizations.py b/src/Mod/Fem/femobjects/base_fempostvisualizations.py index 396694a652..ffaa94ee8f 100644 --- a/src/Mod/Fem/femobjects/base_fempostvisualizations.py +++ b/src/Mod/Fem/femobjects/base_fempostvisualizations.py @@ -160,8 +160,8 @@ class PostVisualization(base_fempythonobject.BaseFemPythonObject): array.SetNumberOfComponents(c_array.GetNumberOfComponents()) array.SetNumberOfTuples(rows) array.Fill(0) # so that all non-used entries are set to 0 - for i in range(c_array.GetNumberOfTuples()): - array.SetTuple(i, c_array.GetTuple(i)) + for j in range(c_array.GetNumberOfTuples()): + array.SetTuple(j, c_array.GetTuple(j)) array.SetName(f"{child.Source.Name}: {c_array.GetName()}") table.AddColumn(array) diff --git a/src/Mod/Fem/femobjects/post_extract1D.py b/src/Mod/Fem/femobjects/post_extract1D.py index f04d90bfad..8fcec6e2da 100644 --- a/src/Mod/Fem/femobjects/post_extract1D.py +++ b/src/Mod/Fem/femobjects/post_extract1D.py @@ -77,17 +77,16 @@ class PostFieldData1D(base_fempostextractors.Extractor1D): obj.Table = table return - frames = False + timesteps=[] if obj.ExtractFrames: # check if we have timesteps info = obj.Source.getOutputAlgorithm().GetOutputInformation(0) if info.Has(vtkStreamingDemandDrivenPipeline.TIME_STEPS()): timesteps = info.Get(vtkStreamingDemandDrivenPipeline.TIME_STEPS()) - frames = True else: FreeCAD.Console.PrintWarning("No frames available in data, ignoring \"ExtractFrames\" property") - if not frames: + if not timesteps: # get the dataset and extract the correct array array = self._x_array_from_dataset(obj, dataset) if array.GetNumberOfComponents() > 1: diff --git a/src/Mod/Fem/femobjects/post_extract2D.py b/src/Mod/Fem/femobjects/post_extract2D.py index ed7d0faf47..86827d7a7e 100644 --- a/src/Mod/Fem/femobjects/post_extract2D.py +++ b/src/Mod/Fem/femobjects/post_extract2D.py @@ -78,17 +78,16 @@ class PostFieldData2D(base_fempostextractors.Extractor2D): obj.Table = table return - frames = False + timesteps = [] if obj.ExtractFrames: # check if we have timesteps info = obj.Source.getOutputAlgorithm().GetOutputInformation(0) if info.Has(vtkStreamingDemandDrivenPipeline.TIME_STEPS()): timesteps = info.Get(vtkStreamingDemandDrivenPipeline.TIME_STEPS()) - frames = True else: FreeCAD.Console.PrintWarning("No frames available in data, ignoring \"ExtractFrames\" property") - if not frames: + if not timesteps: # get the dataset and extract the correct array xarray = self._x_array_from_dataset(obj, dataset) if xarray.GetNumberOfComponents() > 1: diff --git a/src/Mod/Fem/femobjects/post_lineplot.py b/src/Mod/Fem/femobjects/post_lineplot.py index e3483b0bf5..8d4b725128 100644 --- a/src/Mod/Fem/femobjects/post_lineplot.py +++ b/src/Mod/Fem/femobjects/post_lineplot.py @@ -1,4 +1,4 @@ -2# *************************************************************************** +# *************************************************************************** # * Copyright (c) 2025 Stefan Tröger * # * * # * This file is part of the FreeCAD CAx development system. * diff --git a/src/Mod/Fem/femtaskpanels/base_fempostpanel.py b/src/Mod/Fem/femtaskpanels/base_fempostpanel.py index 08c067de7f..5efa1aa12a 100644 --- a/src/Mod/Fem/femtaskpanels/base_fempostpanel.py +++ b/src/Mod/Fem/femtaskpanels/base_fempostpanel.py @@ -32,9 +32,7 @@ __url__ = "https://www.freecad.org" from PySide import QtCore, QtGui import FreeCAD -import FreeCADGui -from femguiutils import selection_widgets from . import base_femtaskpanel translate = FreeCAD.Qt.translate diff --git a/src/Mod/Fem/femtaskpanels/task_post_extractor.py b/src/Mod/Fem/femtaskpanels/task_post_extractor.py index 6d29a305e8..56fdd998b5 100644 --- a/src/Mod/Fem/femtaskpanels/task_post_extractor.py +++ b/src/Mod/Fem/femtaskpanels/task_post_extractor.py @@ -31,10 +31,6 @@ __url__ = "https://www.freecad.org" from PySide import QtCore, QtGui -import FreeCAD -import FreeCADGui - -from femguiutils import selection_widgets from . import base_fempostpanel diff --git a/src/Mod/Fem/femtaskpanels/task_post_glyphfilter.py b/src/Mod/Fem/femtaskpanels/task_post_glyphfilter.py index 8804951067..a9a13139e9 100644 --- a/src/Mod/Fem/femtaskpanels/task_post_glyphfilter.py +++ b/src/Mod/Fem/femtaskpanels/task_post_glyphfilter.py @@ -56,49 +56,6 @@ class _TaskPanel(base_fempostpanel._BasePostTaskPanel): # form made from param and selection widget self.form = [self.widget, vobj.createDisplayTaskWidget()] - # get the settings group - self.__settings_grp = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem") - - # Implement parent functions - # ########################## - - def getStandardButtons(self): - return ( - QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Cancel - ) - - def clicked(self, button): - # apply button hit? - if button == QtGui.QDialogButtonBox.Apply: - self.obj.Document.recompute() - - def accept(self): - # self.obj.CharacteristicLength = self.elelen - # self.obj.References = self.selection_widget.references - # self.selection_widget.finish_selection() - return super().accept() - - def reject(self): - # self.selection_widget.finish_selection() - return super().reject() - - # Helper functions - # ################## - - def _recompute(self): - # only recompute if the user wants automatic recompute - if self.__settings_grp.GetBool("PostAutoRecompute", True): - self.obj.Document.recompute() - - def _enumPropertyToCombobox(self, obj, prop, cbox): - cbox.blockSignals(True) - cbox.clear() - entries = obj.getEnumerationsOfProperty(prop) - for entry in entries: - cbox.addItem(entry) - - cbox.setCurrentText(getattr(obj, prop)) - cbox.blockSignals(False) # Setup functions # ############### diff --git a/src/Mod/Fem/femtaskpanels/task_post_table.py b/src/Mod/Fem/femtaskpanels/task_post_table.py index b75549eeb9..1eda150016 100644 --- a/src/Mod/Fem/femtaskpanels/task_post_table.py +++ b/src/Mod/Fem/femtaskpanels/task_post_table.py @@ -36,7 +36,6 @@ import FreeCADGui from . import base_fempostpanel from femguiutils import extract_link_view as elv -from femguiutils import vtk_table_view translate = FreeCAD.Qt.translate @@ -78,9 +77,6 @@ class _TaskPanel(base_fempostpanel._BasePostTaskPanel): # connect data widget self.data_widget.show_table.clicked.connect(self.showTable) - # set current values to view widget - viewObj = self.obj.ViewObject - @QtCore.Slot() def showTable(self): diff --git a/src/Mod/Fem/femviewprovider/view_base_fempostextractors.py b/src/Mod/Fem/femviewprovider/view_base_fempostextractors.py index 143cd8fba5..338aabb905 100644 --- a/src/Mod/Fem/femviewprovider/view_base_fempostextractors.py +++ b/src/Mod/Fem/femviewprovider/view_base_fempostextractors.py @@ -33,7 +33,6 @@ __url__ = "https://www.freecad.org" import FreeCAD import FreeCADGui -import FemGui from PySide import QtGui import femobjects.base_fempostextractors as fpe