| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | __title__ = "FreeCAD FEM material task panel for the document object" |
| | __author__ = "Juergen Riegel, Bernd Hahnebach, Qingfeng Xia" |
| | __url__ = "https://www.freecad.org" |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | from PySide import QtCore |
| |
|
| | import FreeCAD |
| | import FreeCADGui |
| | from FreeCAD import Units |
| | import Materials |
| | import MatGui |
| |
|
| | from femguiutils import selection_widgets |
| | from . import base_femtaskpanel |
| |
|
| |
|
| | class _TaskPanel(base_femtaskpanel._BaseTaskPanel): |
| | """ |
| | The editmode TaskPanel for FemMaterial objects |
| | """ |
| |
|
| | def __init__(self, obj): |
| | super().__init__(obj) |
| |
|
| | |
| | self.material = self.obj.Material |
| | self.uuid = self.obj.UUID |
| | self.material_manager = Materials.MaterialManager() |
| |
|
| | |
| | self.parameterWidget = FreeCADGui.PySideUic.loadUi( |
| | FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/Material.ui" |
| | ) |
| | self.material_tree = MatGui.MaterialTreeWidget(self.parameterWidget.wgt_material_tree) |
| | self.material_tree.expanded = False |
| | self.material_tree.IncludeEmptyFolders = False |
| | self.material_tree.IncludeEmptyLibraries = False |
| |
|
| | QtCore.QObject.connect( |
| | self.parameterWidget.chbu_allow_edit, |
| | QtCore.SIGNAL("clicked()"), |
| | self.toggleInputFieldsReadOnly, |
| | ) |
| | |
| | QtCore.QObject.connect( |
| | self.parameterWidget.qsb_density, |
| | QtCore.SIGNAL("editingFinished()"), |
| | self.density_changed, |
| | ) |
| | |
| | QtCore.QObject.connect( |
| | self.parameterWidget.qsb_young_modulus, |
| | QtCore.SIGNAL("editingFinished()"), |
| | self.ym_changed, |
| | ) |
| | QtCore.QObject.connect( |
| | self.parameterWidget.qsb_poisson_ratio, |
| | QtCore.SIGNAL("editingFinished()"), |
| | self.pr_changed, |
| | ) |
| | |
| | QtCore.QObject.connect( |
| | self.parameterWidget.qsb_thermal_conductivity, |
| | QtCore.SIGNAL("editingFinished()"), |
| | self.tc_changed, |
| | ) |
| | QtCore.QObject.connect( |
| | self.parameterWidget.qsb_expansion_coefficient, |
| | QtCore.SIGNAL("editingFinished()"), |
| | self.tec_changed, |
| | ) |
| | QtCore.QObject.connect( |
| | self.parameterWidget.qsb_expansion_reference_temperature, |
| | QtCore.SIGNAL("editingFinished()"), |
| | self.tec_changed, |
| | ) |
| | QtCore.QObject.connect( |
| | self.parameterWidget.qsb_specific_heat, |
| | QtCore.SIGNAL("editingFinished()"), |
| | self.sh_changed, |
| | ) |
| | |
| | QtCore.QObject.connect( |
| | self.parameterWidget.qsb_kinematic_viscosity, |
| | QtCore.SIGNAL("editingFinished()"), |
| | self.kinematic_viscosity_changed, |
| | ) |
| | QtCore.QObject.connect( |
| | self.parameterWidget.wgt_material_tree, |
| | QtCore.SIGNAL("onMaterial(QString)"), |
| | self.set_from_editor, |
| | ) |
| |
|
| | |
| | self.parameterWidget.chbu_allow_edit.setCheckState(QtCore.Qt.CheckState.Unchecked) |
| | self.toggleInputFieldsReadOnly() |
| |
|
| | |
| | if self.obj.Category == "Fluid": |
| | self.filter_models(self.obj.Category) |
| | self.parameterWidget.groupBox_mechanical.setVisible(0) |
| | else: |
| | self.parameterWidget.groupBox_fluidic.setVisible(0) |
| |
|
| | |
| | self.selectionWidget = selection_widgets.GeometryElementsSelection( |
| | obj.References, ["Solid", "Face", "Edge"], False, True |
| | ) |
| |
|
| | |
| | self.form = [self.parameterWidget, self.selectionWidget] |
| |
|
| | |
| | self.material_tree.UUID = self.uuid |
| | self.set_mat_params_in_input_fields(self.material) |
| |
|
| | self.selectionWidget.has_equal_references_shape_types() |
| |
|
| | |
| | def accept(self): |
| | if self.selectionWidget.has_equal_references_shape_types(): |
| | self.obj.Material = self.material |
| | self.obj.UUID = self.uuid |
| | self.obj.References = self.selectionWidget.references |
| |
|
| | self.selectionWidget.finish_selection() |
| | return super().accept() |
| |
|
| | def reject(self): |
| | self.selectionWidget.finish_selection() |
| | return super().reject() |
| |
|
| | |
| | def filter_models(self, category): |
| | material_filter = Materials.MaterialFilter() |
| | models = set(Materials.ModelManager().Models.keys()) |
| | uuids = Materials.UUIDs() |
| | if category == "Fluid": |
| | material_filter.RequiredModels = [uuids.Fluid] |
| | self.material_tree.setFilter(material_filter) |
| |
|
| | def toggleInputFieldsReadOnly(self): |
| | if self.parameterWidget.chbu_allow_edit.isChecked(): |
| | self.parameterWidget.qsb_density.setDisabled(False) |
| | self.parameterWidget.qsb_young_modulus.setDisabled(False) |
| | self.parameterWidget.qsb_poisson_ratio.setDisabled(False) |
| | self.parameterWidget.qsb_thermal_conductivity.setDisabled(False) |
| | self.parameterWidget.qsb_expansion_coefficient.setDisabled(False) |
| | self.parameterWidget.qsb_expansion_reference_temperature.setDisabled(False) |
| | self.parameterWidget.qsb_specific_heat.setDisabled(False) |
| | self.parameterWidget.qsb_kinematic_viscosity.setDisabled(False) |
| | self.parameterWidget.wgt_material_tree.setEnabled(False) |
| | self.uuid = "" |
| | self.mat_from_input_fields() |
| | else: |
| | self.parameterWidget.qsb_density.setDisabled(True) |
| | self.parameterWidget.qsb_young_modulus.setDisabled(True) |
| | self.parameterWidget.qsb_poisson_ratio.setDisabled(True) |
| | self.parameterWidget.qsb_thermal_conductivity.setDisabled(True) |
| | self.parameterWidget.qsb_expansion_coefficient.setDisabled(True) |
| | self.parameterWidget.qsb_expansion_reference_temperature.setDisabled(True) |
| | self.parameterWidget.qsb_specific_heat.setDisabled(True) |
| | self.parameterWidget.qsb_kinematic_viscosity.setDisabled(True) |
| | self.parameterWidget.wgt_material_tree.setEnabled(True) |
| | self.set_from_editor(self.material_tree.UUID) |
| |
|
| | |
| | |
| | def ym_changed(self): |
| | if self.parameterWidget.chbu_allow_edit.isChecked(): |
| | self.material["YoungsModulus"] = self.parameterWidget.qsb_young_modulus.property( |
| | "value" |
| | ).UserString |
| |
|
| | def density_changed(self): |
| | if self.parameterWidget.chbu_allow_edit.isChecked(): |
| | self.material["Density"] = self.parameterWidget.qsb_density.property("value").UserString |
| |
|
| | def pr_changed(self): |
| | if self.parameterWidget.chbu_allow_edit.isChecked(): |
| | self.material["PoissonRatio"] = str( |
| | self.parameterWidget.qsb_poisson_ratio.property("value").Value |
| | ) |
| |
|
| | |
| | def tc_changed(self): |
| | if self.parameterWidget.chbu_allow_edit.isChecked(): |
| | self.material["ThermalConductivity"] = ( |
| | self.parameterWidget.qsb_thermal_conductivity.property("value").UserString |
| | ) |
| |
|
| | def tec_changed(self): |
| | if self.parameterWidget.chbu_allow_edit.isChecked(): |
| | self.material["ThermalExpansionCoefficient"] = ( |
| | self.parameterWidget.qsb_expansion_coefficient.property("value").UserString |
| | ) |
| |
|
| | def tec_changed(self): |
| | if self.parameterWidget.chbu_allow_edit.isChecked(): |
| | self.material["ThermalExpansionReferenceTemperature"] = ( |
| | self.parameterWidget.qsb_expansion_reference_temperature.property( |
| | "value" |
| | ).UserString |
| | ) |
| |
|
| | def sh_changed(self): |
| | if self.parameterWidget.chbu_allow_edit.isChecked(): |
| | self.material["SpecificHeat"] = self.parameterWidget.qsb_specific_heat.property( |
| | "value" |
| | ).UserString |
| |
|
| | |
| | def kinematic_viscosity_changed(self): |
| | if self.parameterWidget.chbu_allow_edit.isChecked(): |
| | self.material["KinematicViscosity"] = ( |
| | self.parameterWidget.qsb_kinematic_viscosity.property("value").UserString |
| | ) |
| |
|
| | def set_mat_params_in_input_fields(self, matmap): |
| | if "YoungsModulus" in matmap: |
| | self.parameterWidget.qsb_young_modulus.setProperty( |
| | "value", Units.Quantity(matmap["YoungsModulus"]) |
| | ) |
| | else: |
| | self.parameterWidget.qsb_young_modulus.setProperty("rawValue", 0.0) |
| |
|
| | if "PoissonRatio" in matmap: |
| | self.parameterWidget.qsb_poisson_ratio.setProperty( |
| | "value", Units.Quantity(matmap["PoissonRatio"]) |
| | ) |
| | else: |
| | self.parameterWidget.qsb_poisson_ratio.setProperty("rawValue", 0.0) |
| | |
| | if "KinematicViscosity" in matmap: |
| | self.parameterWidget.qsb_kinematic_viscosity.setProperty( |
| | "value", Units.Quantity(matmap["KinematicViscosity"]) |
| | ) |
| | else: |
| | self.parameterWidget.qsb_kinematic_viscosity.setProperty("rawValue", 0.0) |
| |
|
| | if "Density" in matmap: |
| | self.parameterWidget.qsb_density.setProperty("value", Units.Quantity(matmap["Density"])) |
| | else: |
| | self.parameterWidget.qsb_density.setProperty("rawValue", 0.0) |
| | |
| | if "ThermalConductivity" in matmap: |
| | self.parameterWidget.qsb_thermal_conductivity.setProperty( |
| | "value", Units.Quantity(matmap["ThermalConductivity"]) |
| | ) |
| | else: |
| | self.parameterWidget.qsb_thermal_conductivity.setProperty("rawValue", 0.0) |
| |
|
| | if "ThermalExpansionCoefficient" in matmap: |
| | v = Units.Quantity(matmap["ThermalExpansionCoefficient"]) |
| | v.Format = {"Precision": 3} |
| | self.parameterWidget.qsb_expansion_coefficient.setProperty("value", v) |
| | else: |
| | self.parameterWidget.qsb_expansion_coefficient.setProperty("rawValue", 0.0) |
| | if "ThermalExpansionReferenceTemperature" in matmap: |
| | self.parameterWidget.qsb_expansion_reference_temperature.setProperty( |
| | "value", Units.Quantity(matmap["ThermalExpansionReferenceTemperature"]) |
| | ) |
| | else: |
| | self.parameterWidget.qsb_expansion_reference_temperature.setProperty("rawValue", 0.0) |
| | if "SpecificHeat" in matmap: |
| | self.parameterWidget.qsb_specific_heat.setProperty( |
| | "value", Units.Quantity(matmap["SpecificHeat"]) |
| | ) |
| | else: |
| | self.parameterWidget.qsb_specific_heat.setProperty("rawValue", 0.0) |
| |
|
| | def set_from_editor(self, value): |
| | if not value: |
| | return |
| | mat = self.material_manager.getMaterial(value) |
| | self.material = mat.Properties |
| | self.uuid = mat.UUID |
| | self.set_mat_params_in_input_fields(self.material) |
| |
|
| | def mat_from_input_fields(self): |
| | d = {} |
| | d["Name"] = "Custom" |
| | p = self.parameterWidget |
| | d["Density"] = p.qsb_density.property("value").UserString |
| | d["ThermalConductivity"] = p.qsb_thermal_conductivity.property("value").UserString |
| | d["ThermalExpansionCoefficient"] = p.qsb_expansion_coefficient.property("value").UserString |
| | d["ThermalExpansionReferenceTemperature"] = p.qsb_expansion_reference_temperature.property( |
| | "value" |
| | ).UserString |
| | d["SpecificHeat"] = p.qsb_specific_heat.property("value").UserString |
| | if self.obj.Category == "Solid": |
| | d["YoungsModulus"] = p.qsb_young_modulus.property("value").UserString |
| | d["PoissonRatio"] = str(p.qsb_poisson_ratio.property("value").Value) |
| | elif self.obj.Category == "Fluid": |
| | d["KinematicViscosity"] = p.qsb_kinematic_viscosity.property("value").UserString |
| | self.material = d |
| |
|