def updateCardsInCombo(self): '''updates the contents of the materials combo with existing material cards''' mat_prefs = FreeCAD.ParamGet( "User parameter:BaseApp/Preferences/Mod/Material/Cards") sort_by_resources = mat_prefs.GetBool("SortByResources", False) # get all available materials (fill self.materials, self.cards and self.icons) from materialtools.cardutils import import_materials as getmats self.materials, self.cards, self.icons = getmats() card_name_list = [] # [ [card_name, card_path, icon_path], ... ] if sort_by_resources is True: for a_path in sorted(self.materials.keys()): 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.keys()): a_path = card_names_tmp[a_name] card_name_list.append([a_name, a_path, self.icons[a_path]]) card_name_list.insert(0, [None, '', '']) for mat in card_name_list: self.widget.ComboMaterial.addItem(QtGui.QIcon(mat[2]), mat[0], mat[1])
def __init__(self, obj): FreeCAD.Console.PrintMessage('\n') # empty line on start task panel self.obj = obj self.material = self.obj.Material # FreeCAD material dictionary of current material self.card_path = '' self.materials = {} # { card_path : FreeCAD material dict, ... } self.cards = {} # { card_path : card_names, ... } self.icons = {} # { card_path : icon_path, ... } # 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 self.has_transient_mat = False # parameter widget self.parameterWidget = FreeCADGui.PySideUic.loadUi( FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/Material.ui" ) # globals QtCore.QObject.connect( self.parameterWidget.cb_materials, QtCore.SIGNAL("activated(int)"), self.choose_material ) QtCore.QObject.connect( self.parameterWidget.chbu_allow_edit, QtCore.SIGNAL("clicked()"), self.toggleInputFieldsReadOnly ) QtCore.QObject.connect( self.parameterWidget.pushButton_editMat, QtCore.SIGNAL("clicked()"), self.edit_material ) # basic properties must be provided QtCore.QObject.connect( self.parameterWidget.input_fd_density, QtCore.SIGNAL("editingFinished()"), self.density_changed ) # mechanical properties QtCore.QObject.connect( self.parameterWidget.input_fd_young_modulus, QtCore.SIGNAL("editingFinished()"), self.ym_changed ) QtCore.QObject.connect( self.parameterWidget.spinBox_poisson_ratio, QtCore.SIGNAL("editingFinished()"), self.pr_changed ) # thermal properties QtCore.QObject.connect( self.parameterWidget.input_fd_thermal_conductivity, QtCore.SIGNAL("editingFinished()"), self.tc_changed ) QtCore.QObject.connect( self.parameterWidget.input_fd_expansion_coefficient, QtCore.SIGNAL("editingFinished()"), self.tec_changed ) QtCore.QObject.connect( self.parameterWidget.input_fd_specific_heat, QtCore.SIGNAL("editingFinished()"), self.sh_changed ) # fluidic properties, only volumetric thermal expansion coeff makes sense QtCore.QObject.connect( self.parameterWidget.input_fd_kinematic_viscosity, QtCore.SIGNAL("editingFinished()"), self.kinematic_viscosity_changed ) QtCore.QObject.connect( self.parameterWidget.input_fd_vol_expansion_coefficient, QtCore.SIGNAL("editingFinished()"), self.vtec_changed ) # init all parameter input files with read only self.parameterWidget.chbu_allow_edit.setCheckState(QtCore.Qt.CheckState.Unchecked) self.toggleInputFieldsReadOnly() # hide some groupBox according to material category self.parameterWidget.label_category.setText(self.obj.Category) if self.obj.Category == 'Fluid': self.parameterWidget.groupBox_mechanical.setVisible(0) self.parameterWidget.label_expansion_coefficient.setVisible(0) self.parameterWidget.input_fd_expansion_coefficient.setVisible(0) else: self.parameterWidget.groupBox_fluidic.setVisible(0) self.parameterWidget.label_vol_expansion_coefficient.setVisible(0) self.parameterWidget.input_fd_vol_expansion_coefficient.setVisible(0) # get all available materials (fill self.materials, self.cards and self.icons) from materialtools.cardutils import import_materials as getmats self.materials, self.cards, self.icons = getmats() # fill the material comboboxes with material cards self.add_cards_to_combo_box() # search for exact this mat_card in all known cards, choose the current material self.card_path = self.get_material_card(self.material) FreeCAD.Console.PrintLog('card_path: {}'.format(self.card_path)) if not self.card_path: # 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 can not be found in material directories. " "Add document material.\n" ) self.card_path = '_document_material' self.materials[self.card_path] = self.material self.parameterWidget.cb_materials.addItem( QtGui.QIcon(":/icons/help-browser.svg"), self.card_path, self.card_path ) index = self.parameterWidget.cb_materials.findData(self.card_path) # print(index) # fill input fields and set the current material in the cb widget self.choose_material(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.findData(self.card_path) # print(index) # fill input fields and set the current material in the cb widget self.choose_material(index) # geometry selection widget self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection( obj.References, ['Solid', 'Face', 'Edge'], False ) # start with Solid in list! # form made from param and selection widget self.form = [self.parameterWidget, self.selectionWidget] # check references, has to be after initialisation of selectionWidget self.selectionWidget.has_equal_references_shape_types()
def __init__(self, obj): FreeCAD.Console.PrintMessage('\n') # empty line on start task panel self.obj = obj self.material = self.obj.Material # FreeCAD material dictionary of current material self.card_path = '' self.materials = {} # { card_path : FreeCAD material dict, ... } self.cards = {} # { card_path : card_names, ... } self.icons = {} # { card_path : icon_path, ... } # 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 self.has_transient_mat = False # parameter widget self.parameterWidget = FreeCADGui.PySideUic.loadUi( FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/Material.ui" ) # globals QtCore.QObject.connect( self.parameterWidget.cb_materials, QtCore.SIGNAL("activated(int)"), self.choose_material ) QtCore.QObject.connect( self.parameterWidget.chbu_allow_edit, QtCore.SIGNAL("clicked()"), self.toggleInputFieldsReadOnly ) QtCore.QObject.connect( self.parameterWidget.pushButton_editMat, QtCore.SIGNAL("clicked()"), self.edit_material ) # basic properties must be provided QtCore.QObject.connect( self.parameterWidget.input_fd_density, QtCore.SIGNAL("editingFinished()"), self.density_changed ) # mechanical properties QtCore.QObject.connect( self.parameterWidget.input_fd_young_modulus, QtCore.SIGNAL("editingFinished()"), self.ym_changed ) QtCore.QObject.connect( self.parameterWidget.spinBox_poisson_ratio, QtCore.SIGNAL("editingFinished()"), self.pr_changed ) # thermal properties QtCore.QObject.connect( self.parameterWidget.input_fd_thermal_conductivity, QtCore.SIGNAL("editingFinished()"), self.tc_changed ) QtCore.QObject.connect( self.parameterWidget.input_fd_expansion_coefficient, QtCore.SIGNAL("editingFinished()"), self.tec_changed ) QtCore.QObject.connect( self.parameterWidget.input_fd_specific_heat, QtCore.SIGNAL("editingFinished()"), self.sh_changed ) # fluidic properties, only volumetric thermal expansion coeff makes sense QtCore.QObject.connect( self.parameterWidget.input_fd_kinematic_viscosity, QtCore.SIGNAL("editingFinished()"), self.kinematic_viscosity_changed ) QtCore.QObject.connect( self.parameterWidget.input_fd_vol_expansion_coefficient, QtCore.SIGNAL("editingFinished()"), self.vtec_changed ) # init all parameter input files with read only self.parameterWidget.chbu_allow_edit.setCheckState(QtCore.Qt.CheckState.Unchecked) self.toggleInputFieldsReadOnly() # hide some groupBox according to material category self.parameterWidget.label_category.setText(self.obj.Category) if self.obj.Category == 'Fluid': self.parameterWidget.groupBox_mechanical.setVisible(0) self.parameterWidget.label_expansion_coefficient.setVisible(0) self.parameterWidget.input_fd_expansion_coefficient.setVisible(0) else: self.parameterWidget.groupBox_fluidic.setVisible(0) self.parameterWidget.label_vol_expansion_coefficient.setVisible(0) self.parameterWidget.input_fd_vol_expansion_coefficient.setVisible(0) # get all available materials (fill self.materials, self.cards and self.icons) from materialtools.cardutils import import_materials as getmats self.materials, self.cards, self.icons = getmats() # fill the material comboboxes with material cards self.add_cards_to_combo_box() # search for exact this mat_card in all known cards, choose the current material self.card_path = self.get_material_card(self.material) FreeCAD.Console.PrintLog('card_path: {}'.format(self.card_path)) if not self.card_path: # 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 can not be found in material directories. " "Add document material.\n" ) self.card_path = '_document_material' self.materials[self.card_path] = self.material self.parameterWidget.cb_materials.addItem( QtGui.QIcon(":/icons/help-browser.svg"), self.card_path, self.card_path ) index = self.parameterWidget.cb_materials.findData(self.card_path) # print(index) # fill input fields and set the current material in the cb widget self.choose_material(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.findData(self.card_path) # print(index) # fill input fields and set the current material in the cb widget self.choose_material(index) # geometry selection widget self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection( obj.References, ['Solid', 'Face', 'Edge'], False ) # start with Solid in list! # form made from param and selection widget self.form = [self.parameterWidget, self.selectionWidget] # check references, has to be after initialisation of selectionWidget self.selectionWidget.has_equal_references_shape_types()
def __init__(self, obj): FreeCAD.Console.PrintMessage("\n") # empty line on start task panel self.obj = 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 } # parameter widget self.parameterWidget = FreeCADGui.PySideUic.loadUi( FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MaterialReinforcement.ui") # globals 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) # get all available materials (fill self.materials, self.cards and self.icons) from materialtools.cardutils import import_materials as getmats self.materials, self.cards, self.icons = getmats() # fill the material comboboxes with material cards self.add_cards_to_combo_boxes() # 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("card_path: {}\n".format(self.card_path_m)) 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) # print(index) # 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("card_path: {}\n".format(self.card_path_r)) 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) # print(index) # 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