From bf1ea8e223e93acd9fc0b3037ea82120c92bf6a2 Mon Sep 17 00:00:00 2001 From: marioalexis Date: Sun, 5 Jan 2025 21:30:13 -0300 Subject: [PATCH] Fem: Use new material editor in Reinforced material task panel - fixes #18692 --- .../Gui/Resources/ui/MaterialReinforcement.ui | 125 ++---- src/Mod/Fem/femexamples/rc_wall_2d.py | 2 +- src/Mod/Fem/femobjects/material_common.py | 40 +- src/Mod/Fem/femobjects/material_reinforced.py | 41 +- .../Fem/femtaskpanels/task_material_common.py | 46 +-- .../femtaskpanels/task_material_reinforced.py | 379 +++--------------- 6 files changed, 149 insertions(+), 484 deletions(-) diff --git a/src/Mod/Fem/Gui/Resources/ui/MaterialReinforcement.ui b/src/Mod/Fem/Gui/Resources/ui/MaterialReinforcement.ui index cc02b9a88b..78a7372b82 100755 --- a/src/Mod/Fem/Gui/Resources/ui/MaterialReinforcement.ui +++ b/src/Mod/Fem/Gui/Resources/ui/MaterialReinforcement.ui @@ -1,7 +1,7 @@ - FemMaterial - + FemMaterialReinforcement + 0 @@ -11,7 +11,7 @@ - FEM material + FEM material reinforcement Qt::LeftToRight @@ -30,63 +30,22 @@ - + + + + - + - Material + - - - - - - - Choose - - - - - - - - Properties - - - - - - - Edit - - - - - - - Name - - - - - - - TextLabel + + true - - - - Description - - - true - - - @@ -104,62 +63,21 @@ + + + - + - Material + - - - - - - - Choose - - - - - - - - Properties - - - - - - - Edit - - - - - - - Name - - - - - - - TextLabel + + true - - - - Description - - - true - - - @@ -178,6 +96,13 @@ + + + MatGui::MaterialTreeWidget + QWidget +
Mod/Material/Gui/MaterialTreeWidget.h
+
+
diff --git a/src/Mod/Fem/femexamples/rc_wall_2d.py b/src/Mod/Fem/femexamples/rc_wall_2d.py index 5f582448ee..47780ed50c 100644 --- a/src/Mod/Fem/femexamples/rc_wall_2d.py +++ b/src/Mod/Fem/femexamples/rc_wall_2d.py @@ -128,7 +128,7 @@ def setup(doc=None, solvertype="ccxtools"): # material matrixprop = {} - matrixprop["Name"] = "Concrete-EN-C35/45" + matrixprop["Name"] = "Concrete-EN-C35_45" matrixprop["YoungsModulus"] = "32000 MPa" matrixprop["PoissonRatio"] = "0.17" matrixprop["CompressiveStrength"] = "15.75 MPa" diff --git a/src/Mod/Fem/femobjects/material_common.py b/src/Mod/Fem/femobjects/material_common.py index c4b1280a5d..c85653f446 100644 --- a/src/Mod/Fem/femobjects/material_common.py +++ b/src/Mod/Fem/femobjects/material_common.py @@ -1,6 +1,7 @@ # *************************************************************************** # * Copyright (c) 2013 Juergen Riegel * # * Copyright (c) 2016 Bernd Hahnebach * +# * Copyright (c) 2024 Mario Passaglia * # * * # * This file is part of the FreeCAD CAx development system. * # * * @@ -23,14 +24,16 @@ # *************************************************************************** __title__ = "FreeCAD FEM material document object" -__author__ = "Juergen Riegel, Bernd Hahnebach" +__author__ = "Juergen Riegel, Bernd Hahnebach, Mario Passaglia" __url__ = "https://www.freecad.org" ## @package material_common # \ingroup FEM # \brief material common object -from FreeCAD import Base +from FreeCAD import Base, Units +import Materials + from . import base_fempythonobject _PropHelper = base_fempythonobject._PropHelper @@ -97,9 +100,42 @@ class MaterialCommon(base_fempythonobject.BaseFemPythonObject): # change References to App::PropertyLinkSubListGlobal prop.handle_change_type(obj, old_type="App::PropertyLinkSubList") + # try update UUID from Material + if not obj.UUID: + obj.UUID = self._get_material_uuid(obj.Material) + if not obj.hasExtension("App::SuppressibleExtensionPython"): obj.addExtension("App::SuppressibleExtensionPython") + def _get_material_uuid(self, material): + if not material: + return "" + + material_manager = Materials.MaterialManager() + + for a_mat in material_manager.Materials: + unmatched_item = True + a_mat_prop = material_manager.getMaterial(a_mat).Properties + for it in material: + if it in a_mat_prop: + # first try to compare quantities + try: + unmatched_item = Units.Quantity(material[it]) != Units.Quantity( + a_mat_prop[it] + ) + except ValueError: + # if there is no quantity, compare values directly + unmatched_item = material[it] != a_mat_prop[it] + + if unmatched_item: + break + + if not unmatched_item: + # all material items are found in a_mat + return a_mat + + return "" + """ Some remarks to the category. Not finished, thus to be continued. diff --git a/src/Mod/Fem/femobjects/material_reinforced.py b/src/Mod/Fem/femobjects/material_reinforced.py index a86c4bf2e8..85d740fabf 100644 --- a/src/Mod/Fem/femobjects/material_reinforced.py +++ b/src/Mod/Fem/femobjects/material_reinforced.py @@ -1,5 +1,6 @@ # *************************************************************************** # * Copyright (c) 2019 Bernd Hahnebach * +# * Copyright (c) 2024 Mario Passaglia * # * * # * This file is part of the FreeCAD CAx development system. * # * * @@ -22,7 +23,7 @@ # *************************************************************************** __title__ = "FreeCAD FEM reinforced material" -__author__ = "Bernd Hahnebach" +__author__ = "Bernd Hahnebach, Mario Passaglia" __url__ = "https://www.freecad.org" ## @package material_reinforced @@ -30,6 +31,7 @@ __url__ = "https://www.freecad.org" # \brief reinforced object from . import material_common +from .base_fempythonobject import _PropHelper class MaterialReinforced(material_common.MaterialCommon): @@ -42,10 +44,37 @@ class MaterialReinforced(material_common.MaterialCommon): def __init__(self, obj): super().__init__(obj) - obj.addProperty( - "App::PropertyMap", "Reinforcement", "Composites", "Reinforcement material properties" - ) - obj.setPropertyStatus("Reinforcement", "LockDynamic") - # overwrite Category enumeration obj.Category = ["Solid"] + + def _get_properties(self): + prop = super()._get_properties() + + prop.append( + _PropHelper( + type="App::PropertyMap", + name="Reinforcement", + group="Composites", + doc="Reinforcement material properties", + value={}, + ) + ) + prop.append( + _PropHelper( + type="App::PropertyString", + name="ReinforcementUUID", + group="Composites", + doc="Reinforcement material UUID", + hidden=True, + value="", + ) + ) + + return prop + + def onDocumentRestored(self, obj): + super().onDocumentRestored(obj) + + # try update Reinforcement UUID from Reinforcement + if not obj.ReinforcementUUID: + obj.ReinforcementUUID = self._get_material_uuid(obj.Reinforcement) diff --git a/src/Mod/Fem/femtaskpanels/task_material_common.py b/src/Mod/Fem/femtaskpanels/task_material_common.py index d3c2a0ff98..e1c9498632 100644 --- a/src/Mod/Fem/femtaskpanels/task_material_common.py +++ b/src/Mod/Fem/femtaskpanels/task_material_common.py @@ -135,7 +135,7 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): self.form = [self.parameterWidget, self.selectionWidget] # check references, has to be after initialisation of selectionWidget - self.material_tree.UUID = self.get_material_uuid(self.material) + self.material_tree.UUID = self.uuid self.set_mat_params_in_input_fields(self.material) self.selectionWidget.has_equal_references_shape_types() @@ -170,50 +170,6 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): material_filter.RequiredModels = [uuids.Fluid] self.material_tree.setFilter(material_filter) - def get_material_uuid(self, material): - if self.uuid: - try: - self.material_manager.getMaterial(self.uuid) - return self.uuid - except: - return "" - - if not self.material: - return "" - - for a_mat in self.material_manager.Materials: - # check if every item of the current material fits to a known material card - # if all items were found we know it is the right card - # we can hereby not simply perform - # set(self.materials[a_mat].items()) ^ set(material.items()) - # because entries are often identical, just appear in the set in a different order - unmatched_item = False - a_mat_prop = self.material_manager.getMaterial(a_mat).Properties.items() - for item in material.items(): - if item not in a_mat_prop: - unmatched_item = True - # often the difference is just a decimal e.g. "120" to "120.0" - # therefore first check if the item name exists - for a_mat_item in a_mat_prop: - if item[0] == a_mat_item[0]: - # now check if we have a number value in a unit - if item[1].split() and not self.isfloat(item[1].split()[0]): - break - if item[1].split() and float(item[1].split()[0]) == float( - a_mat_item[1].split()[0] - ): - unmatched_item = False - elif not item[1].split(): - # handle the case where item[1] is an empty string - if not self.isfloat(item[1]): - break - if float(item[1]) == float(a_mat_item[1]): - unmatched_item = False - break - if not unmatched_item: - return a_mat - return "" - def toggleInputFieldsReadOnly(self): if self.parameterWidget.chbu_allow_edit.isChecked(): self.parameterWidget.qsb_density.setReadOnly(False) diff --git a/src/Mod/Fem/femtaskpanels/task_material_reinforced.py b/src/Mod/Fem/femtaskpanels/task_material_reinforced.py index 816248cb20..08fde73e06 100644 --- a/src/Mod/Fem/femtaskpanels/task_material_reinforced.py +++ b/src/Mod/Fem/femtaskpanels/task_material_reinforced.py @@ -1,5 +1,6 @@ # *************************************************************************** # * Copyright (c) 2019 Bernd Hahnebach * +# * Copyright (c) 2024 Mario Passaglia * # * * # * This file is part of the FreeCAD CAx development system. * # * * @@ -22,7 +23,7 @@ # *************************************************************************** __title__ = "FreeCAD FEM material reinforced task panel for the document object" -__author__ = "Bernd Hahnebach" +__author__ = "Bernd Hahnebach, Mario Passaglia" __url__ = "https://www.freecad.org" ## @package task_material_reinforced @@ -34,6 +35,9 @@ from PySide import QtGui import FreeCAD import FreeCADGui +import Materials +import MatGui + from . import base_femtaskpanel @@ -45,349 +49,64 @@ class _TaskPanel(base_femtaskpanel._BaseTaskPanel): def __init__(self, obj): super().__init__(obj) - # init matrix and reinforcement material - self.material_m = self.obj.Material - self.card_path_m = "" - self.has_transient_mat_m = False - self.material_r = self.obj.Reinforcement - self.card_path_r = "" - self.has_transient_mat_r = False - # mat_card is the FCMat file - # card_name is the file name of the mat_card - # card_path is the whole file path of the mat_card - # material_name is the value of the key name in FreeCAD material dictionary - # they might not match because of special letters in the material_name which are - # changed in the card_name to english standard characters - - # init for collecting all mat data and icons - self.materials = {} # { card_path : FreeCAD material dict } - self.cards = {} # { card_path : card_names, ... } - self.icons = {} # { card_path : icon_path } + self.material = self.obj.Material + self.uuid = self.obj.UUID + self.reinf = self.obj.Reinforcement + self.reinf_uuid = self.obj.ReinforcementUUID + self.material_manager = Materials.MaterialManager() # parameter widget - self.parameterWidget = FreeCADGui.PySideUic.loadUi( + self.parameter_widget = FreeCADGui.PySideUic.loadUi( FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MaterialReinforcement.ui" ) - # globals + self.material_tree = MatGui.MaterialTreeWidget(self.parameter_widget.wgt_material_tree) + self.material_tree.expanded = False + self.material_tree.IncludeEmptyFolders = False + self.material_tree.IncludeEmptyLibraries = False + + self.reinf_tree = MatGui.MaterialTreeWidget(self.parameter_widget.wgt_reinf_tree) + self.reinf_tree.expanded = False + self.reinf_tree.IncludeEmptyFolders = False + self.reinf_tree.IncludeEmptyLibraries = False + + self.form = self.parameter_widget + QtCore.QObject.connect( - self.parameterWidget.cb_materials_m, - QtCore.SIGNAL("activated(int)"), - self.choose_material_m, - ) - QtCore.QObject.connect( - self.parameterWidget.pb_edit_m, QtCore.SIGNAL("clicked()"), self.edit_material_m - ) - QtCore.QObject.connect( - self.parameterWidget.cb_materials_r, - QtCore.SIGNAL("activated(int)"), - self.choose_material_r, - ) - QtCore.QObject.connect( - self.parameterWidget.pb_edit_r, QtCore.SIGNAL("clicked()"), self.edit_material_r + self.parameter_widget.wgt_material_tree, + QtCore.SIGNAL("onMaterial(QString)"), + self.set_material, ) - # get all available materials (fill self.materials, self.cards and self.icons) - from materialtools.cardutils import import_materials as getmats + QtCore.QObject.connect( + self.parameter_widget.wgt_reinf_tree, + QtCore.SIGNAL("onMaterial(QString)"), + self.set_reinforcement, + ) - self.materials, self.cards, self.icons = getmats() - # fill the material comboboxes with material cards - self.add_cards_to_combo_boxes() + self.material_tree.UUID = self.uuid + self.reinf_tree.UUID = self.reinf_uuid - # search for exact the mat_card_m and mat_card_r in all known cards - # choose the current matrix material - self.card_path_m = self.get_material_card(self.material_m) - FreeCAD.Console.PrintLog(f"card_path: {self.card_path_m}\n") - if not self.card_path_m: - # we have not found our material in self.materials dict :-( - # we're going to add a user-defined temporary material: a document material - FreeCAD.Console.PrintMessage( - "Previously used material card cannot be found in material directories. " - "Add document material.\n" - ) - self.card_path_m = "_Document_Matrix_Material" - self.materials[self.card_path_m] = self.material_m - self.parameterWidget.cb_materials_m.addItem( - QtGui.QIcon(":/icons/help-browser.svg"), self.card_path_m, self.card_path_m - ) - index = self.parameterWidget.cb_materials_m.findData(self.card_path_m) - # fill input fields and set the current material in the cb widget - self.choose_material_m(index) - else: - # we found our exact material in self.materials dict :-) - FreeCAD.Console.PrintLog( - "Previously used material card was found in material directories. " - "We will use this material.\n" - ) - index = self.parameterWidget.cb_materials_m.findData(self.card_path_m) - # set the current material in the cb widget - self.choose_material_m(index) - - # choose the current reinforcement material - self.card_path_r = self.get_material_card(self.material_r) - FreeCAD.Console.PrintLog(f"card_path: {self.card_path_r}\n") - if not self.card_path_r: - # we have not found our material in self.materials dict :-( - # we're going to add a user-defined temporary material: a document material - FreeCAD.Console.PrintMessage( - "Previously used material card cannot be found in material directories. " - "Add document material.\n" - ) - self.card_path_r = "_Document_Reinforcement_Material" - self.materials[self.card_path_r] = self.material_r - self.parameterWidget.cb_materials_r.addItem( - QtGui.QIcon(":/icons/help-browser.svg"), self.card_path_r, self.card_path_r - ) - index = self.parameterWidget.cb_materials_r.findData(self.card_path_r) - # set the current material in the cb widget - self.choose_material_r(index) - else: - # we found our exact material in self.materials dict :-) - FreeCAD.Console.PrintLog( - "Previously used material card was found in material directories. " - "We will use this material.\n" - ) - index = self.parameterWidget.cb_materials_r.findData(self.card_path_r) - # fill input fields and set the current material in the cb widget - self.choose_material_r(index) - - # set up the form - self.form = self.parameterWidget - - # leave task panel *************************************************************************** def accept(self): - from materialtools.cardutils import check_mat_units as checkunits + self.obj.Material = self.material + self.obj.UUID = self.uuid + self.obj.Reinforcement = self.reinf + self.obj.ReinforcementUUID = self.reinf_uuid - if checkunits(self.material_m) is True and checkunits(self.material_r) is True: - self.obj.Material = self.material_m - self.obj.Reinforcement = self.material_r - else: - error_message = ( - "Due to some wrong material quantity units in the changed " - "material data, the task panel changes where not accepted.\n" - ) - FreeCAD.Console.PrintError(error_message) - QtGui.QMessageBox.critical(None, "Material data not changed", error_message) return super().accept() - def reject(self): - return super().reject() - - # choose material card *********************************************************************** - def get_material_card(self, material): - for a_mat in self.materials: - unmatched_items = set(self.materials[a_mat].items()) ^ set(material.items()) - # print(a_mat + " --> unmatched_items = " + str(len(unmatched_items))) - if len(unmatched_items) < 4: - FreeCAD.Console.PrintLog(f"{unmatched_items}\n") - if len(unmatched_items) == 0: - return a_mat - return "" - - def choose_material_m(self, index): - if index < 0: + def set_material(self, value): + if not value: return - # get the whole card path - self.card_path_m = self.parameterWidget.cb_materials_m.itemData(index) - FreeCAD.Console.PrintMessage( - f"choose_material in FEM material task panel:\n {self.card_path_m}\n" - ) - self.material_m = self.materials[self.card_path_m] - self.parameterWidget.cb_materials_m.setCurrentIndex(index) - gen_mat_desc = "" - gen_mat_name = "" - if "Description" in self.material_m: - gen_mat_desc = self.material_m["Description"] - if "Name" in self.material_m: - gen_mat_name = self.material_m["Name"] - self.parameterWidget.l_description_m.setText(gen_mat_desc) - self.parameterWidget.l_name_m.setText(gen_mat_name) + mat = self.material_manager.getMaterial(value) + self.material = mat.Properties + self.uuid = mat.UUID + self.parameter_widget.lbl_material_descr.setText(self.material["Description"]) - def choose_material_r(self, index): - if index < 0: + def set_reinforcement(self, value): + if not value: return - # get the whole card path - self.card_path_r = self.parameterWidget.cb_materials_r.itemData(index) - FreeCAD.Console.PrintMessage( - f"choose_material in FEM material task panel:\n {self.card_path_r}\n" - ) - self.material_r = self.materials[self.card_path_r] - self.parameterWidget.cb_materials_r.setCurrentIndex(index) - gen_mat_desc = "" - gen_mat_name = "" - if "Description" in self.material_r: - gen_mat_desc = self.material_r["Description"] - if "Name" in self.material_r: - gen_mat_name = self.material_r["Name"] - self.parameterWidget.l_description_r.setText(gen_mat_desc) - self.parameterWidget.l_name_r.setText(gen_mat_name) - - # transient material is needed if the user changed mat parameter by the mat editor - def set_transient_material_m(self): - self.card_path_m = "_Transient_Matrix_Material" - self.materials[self.card_path_m] = self.material_m # = the current matrix mat dict - index = self.parameterWidget.cb_materials_m.findData(self.card_path_m) - self.choose_material_m(index) - - def add_transient_material_m(self): - self.has_transient_mat_m = True - self.card_path_m = "_Transient_Matrix_Material" - self.parameterWidget.cb_materials_m.addItem( - QtGui.QIcon(":/icons/help-browser.svg"), self.card_path_m, self.card_path_m - ) - self.set_transient_material_m() - - def set_transient_material_r(self): - self.card_path_r = "_Transient_Reinforcement_Material" - self.materials[self.card_path_r] = self.material_r # = the current reinforced mat dict - index = self.parameterWidget.cb_materials_r.findData(self.card_path_r) - self.choose_material_r(index) - - def add_transient_material_r(self): - self.has_transient_mat_r = True - self.card_path_r = "_Transient_Reinforcement_Material" - self.parameterWidget.cb_materials_r.addItem( - QtGui.QIcon(":/icons/help-browser.svg"), self.card_path_r, self.card_path_r - ) - self.set_transient_material_r() - - # edit material parameter ******************************************************************** - # TODO, also all mat parameter checks should be moved to material editor - # and mat parameter checks should be done on analysis precheck in according to the analysis - # should be checked if all needed parameter are defined and have all right values and units - def edit_material_m(self): - # opens the material editor to choose a material or edit material params - import MaterialEditor - - if self.card_path_m not in self.cards: - FreeCAD.Console.PrintLog( - "Card path not in cards, material dict will be used to open Material Editor.\n" - ) - new_material_params = MaterialEditor.editMaterial(material=self.material_m) - else: - new_material_params = MaterialEditor.editMaterial(card_path=self.card_path_m) - # material editor returns the mat_dict only, not a card_path - # if the material editor was canceled a empty dict will be returned - # do not change the self.material - # check if dict is not empty (do not use "is True") - if new_material_params: - # check material quantity units - from materialtools.cardutils import check_mat_units as checkunits - - if checkunits(new_material_params) is True: - self.material_m = new_material_params - self.card_path_m = self.get_material_card(self.material_m) - FreeCAD.Console.PrintMessage(f"card_path: {self.card_path_m}\n") - if not self.card_path_m: - FreeCAD.Console.PrintMessage( - "Material card chosen by the material editor " - "was not found in material directories.\n" - "Either the card does not exist or some material " - "parameter where changed in material editor.\n" - ) - if self.has_transient_mat_m is False: - self.add_transient_material_m() - else: - self.set_transient_material_m() - else: - # we found our exact material in self.materials dict :-) - FreeCAD.Console.PrintLog( - "Material card chosen by the material editor " - "was found in material directories. " - "The found material card will be used.\n" - ) - index = self.parameterWidget.cb_materials_m.findData(self.card_path_m) - # set the current material in the cb widget - self.choose_material_m(index) - else: - error_message = ( - "Due to some wrong material quantity units in data passed " - "by the material editor, the material data was not changed.\n" - ) - FreeCAD.Console.PrintError(error_message) - QtGui.QMessageBox.critical(None, "Material data not changed", error_message) - else: - FreeCAD.Console.PrintMessage("No changes where made by the material editor.\n") - - def edit_material_r(self): - # opens the material editor to choose a material or edit material params - import MaterialEditor - - if self.card_path_r not in self.cards: - FreeCAD.Console.PrintLog( - "Card path not in cards, material dict will be used to open Material Editor.\n" - ) - new_material_params = MaterialEditor.editMaterial(material=self.material_r) - else: - new_material_params = MaterialEditor.editMaterial(card_path=self.card_path_r) - # material editor returns the mat_dict only, not a card_path - # if the material editor was canceled a empty dict will be returned - # do not change the self.material - # check if dict is not empty (do not use "is True") - if new_material_params: - # check material quantity units - from materialtools.cardutils import check_mat_units as checkunits - - if checkunits(new_material_params) is True: - self.material_r = new_material_params - self.card_path_r = self.get_material_card(self.material_r) - FreeCAD.Console.PrintMessage(f"card_path: {self.card_path_r}\n") - if not self.card_path_r: - FreeCAD.Console.PrintMessage( - "Material card chosen by the material editor " - "was not found in material directories.\n" - "Either the card does not exist or some material " - "parameter where changed in material editor.\n" - ) - if self.has_transient_mat_r is False: - self.add_transient_material_r() - else: - self.set_transient_material_r() - else: - # we found our exact material in self.materials dict :-) - FreeCAD.Console.PrintLog( - "Material card chosen by the material editor " - "was found in material directories. " - "The found material card will be used.\n" - ) - index = self.parameterWidget.cb_materials_r.findData(self.card_path_r) - # set the current material in the cb widget - self.choose_material_r(index) - else: - error_message = ( - "Due to some wrong material quantity units in data passed " - "by the material editor, the material data was not changed.\n" - ) - FreeCAD.Console.PrintError(error_message) - QtGui.QMessageBox.critical(None, "Material data not changed", error_message) - else: - FreeCAD.Console.PrintMessage("No changes where made by the material editor.\n") - - # fill the combo box with cards ************************************************************** - def add_cards_to_combo_boxes(self): - # fill comboboxes, in combo box the card name is used not the material name - self.parameterWidget.cb_materials_m.clear() - self.parameterWidget.cb_materials_r.clear() - - mat_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Material/Cards") - sort_by_resources = mat_prefs.GetBool("SortByResources", False) - - card_name_list = [] # [ [card_name, card_path, icon_path], ... ] - - if sort_by_resources is True: - for a_path in sorted(self.materials): - card_name_list.append([self.cards[a_path], a_path, self.icons[a_path]]) - else: - card_names_tmp = {} - for path, name in self.cards.items(): - card_names_tmp[name] = path - for a_name in sorted(card_names_tmp): - a_path = card_names_tmp[a_name] - card_name_list.append([a_name, a_path, self.icons[a_path]]) - - for mat in card_name_list: - self.parameterWidget.cb_materials_m.addItem(QtGui.QIcon(mat[2]), mat[0], mat[1]) - self.parameterWidget.cb_materials_r.addItem(QtGui.QIcon(mat[2]), mat[0], mat[1]) - # the whole card path is added to the combo box to make it unique - # see def choose_material: - # for assignment of self.card_path the path form the parameterWidget is used + mat = self.material_manager.getMaterial(value) + self.reinf = mat.Properties + self.reinf_uuid = mat.UUID + self.parameter_widget.lbl_reinf_descr.setText(self.reinf["Description"])