FEM: code formating, max line length < 100, fem gui objects
This commit is contained in:
@@ -233,14 +233,21 @@ class GeometryElementsSelection(QtGui.QWidget):
|
||||
|
||||
def initElemTypes(self, eltypes):
|
||||
self.sel_elem_types = eltypes
|
||||
# FreeCAD.Console.PrintMessage('Selection of: {} is allowed.\n'.format(self.sel_elem_types))
|
||||
# FreeCAD.Console.PrintMessage(
|
||||
# 'Selection of: {} is allowed.\n'.format(self.sel_elem_types)
|
||||
# )
|
||||
self.sel_elem_text = ''
|
||||
for e in self.sel_elem_types:
|
||||
self.sel_elem_text += (e + ', ')
|
||||
self.sel_elem_text = self.sel_elem_text.rstrip(', ')
|
||||
# FreeCAD.Console.PrintMessage('Selection of: ' + self.sel_elem_text + ' is allowed.\n')
|
||||
self.selection_mode_std_print_message = "Single click on a " + self.sel_elem_text + " will add it to the list"
|
||||
self.selection_mode_solid_print_message = "Single click on a Face or Edge which belongs to one Solid will add the Solid to the list"
|
||||
self.selection_mode_std_print_message = (
|
||||
"Single click on a " + self.sel_elem_text + " will add it to the list"
|
||||
)
|
||||
self.selection_mode_solid_print_message = (
|
||||
"Single click on a Face or Edge which belongs "
|
||||
"to one Solid will add the Solid to the list"
|
||||
)
|
||||
|
||||
def initUI(self):
|
||||
# auch ArchPanel ist coded ohne ui-file
|
||||
@@ -280,10 +287,26 @@ class GeometryElementsSelection(QtGui.QWidget):
|
||||
# signals and slots
|
||||
self.list_References.itemSelectionChanged.connect(self.select_clicked_reference_shape)
|
||||
self.list_References.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
|
||||
self.list_References.connect(self.list_References, QtCore.SIGNAL("customContextMenuRequested(QPoint)"), self.references_list_right_clicked)
|
||||
QtCore.QObject.connect(self.pushButton_Add, QtCore.SIGNAL("clicked()"), self.add_references)
|
||||
QtCore.QObject.connect(self.rb_standard, QtCore.SIGNAL("toggled(bool)"), self.choose_selection_mode_standard)
|
||||
QtCore.QObject.connect(self.rb_solid, QtCore.SIGNAL("toggled(bool)"), self.choose_selection_mode_solid)
|
||||
self.list_References.connect(
|
||||
self.list_References,
|
||||
QtCore.SIGNAL("customContextMenuRequested(QPoint)"),
|
||||
self.references_list_right_clicked
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.pushButton_Add,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.add_references
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.rb_standard,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.choose_selection_mode_standard
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.rb_solid,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.choose_selection_mode_solid
|
||||
)
|
||||
|
||||
def get_references(self):
|
||||
for ref in self.tuplereferences:
|
||||
@@ -324,10 +347,15 @@ class GeometryElementsSelection(QtGui.QWidget):
|
||||
self.obj_notvisible.append(ref[0])
|
||||
ref[0].ViewObject.Visibility = True
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
if ref[1].startswith('Solid') and (ref[0].Shape.ShapeType == 'Compound' or ref[0].Shape.ShapeType == 'CompSolid'):
|
||||
# selection of Solids of Compounds or CompSolids is not possible, because a Solid is no Subelement
|
||||
# since only Subelements can be selected, we're going to select all Faces of said Solids
|
||||
solid = FemMeshTools.get_element(ref[0], ref[1]) # the method getElement(element) doesn't return Solid elements
|
||||
ref_sh_type = ref[0].Shape.ShapeType
|
||||
if ref[1].startswith('Solid') \
|
||||
and (ref_sh_type == 'Compound' or ref_sh_type == 'CompSolid'):
|
||||
# selection of Solids of Compounds or CompSolids is not possible
|
||||
# because a Solid is no Subelement
|
||||
# since only Subelements can be selected
|
||||
# we're going to select all Faces of said Solids
|
||||
# the method getElement(element)doesn't return Solid elements
|
||||
solid = FemMeshTools.get_element(ref[0], ref[1])
|
||||
if not solid:
|
||||
return
|
||||
faces = []
|
||||
@@ -359,8 +387,16 @@ class GeometryElementsSelection(QtGui.QWidget):
|
||||
if not self.references:
|
||||
menu_item_remove_selected.setDisabled(True)
|
||||
menu_item_remove_all.setDisabled(True)
|
||||
self.connect(menu_item_remove_selected, QtCore.SIGNAL("triggered()"), self.remove_selected_reference)
|
||||
self.connect(menu_item_remove_all, QtCore.SIGNAL("triggered()"), self.remove_all_references)
|
||||
self.connect(
|
||||
menu_item_remove_selected,
|
||||
QtCore.SIGNAL("triggered()"),
|
||||
self.remove_selected_reference
|
||||
)
|
||||
self.connect(
|
||||
menu_item_remove_all,
|
||||
QtCore.SIGNAL("triggered()"),
|
||||
self.remove_all_references
|
||||
)
|
||||
parentPosition = self.list_References.mapToGlobal(QtCore.QPoint(0, 0))
|
||||
self.contextMenu.move(parentPosition + QPos)
|
||||
self.contextMenu.show()
|
||||
@@ -401,12 +437,17 @@ class GeometryElementsSelection(QtGui.QWidget):
|
||||
else:
|
||||
print_message = self.selection_mode_std_print_message
|
||||
if not self.sel_server:
|
||||
# if we do not check, we would start a new SelectionObserver on every click on addReference button
|
||||
# if we do not check, we would start a new SelectionObserver
|
||||
# on every click on addReference button
|
||||
# but close only one SelectionObserver on leaving the task panel
|
||||
self.sel_server = FemSelectionObserver(self.selectionParser, print_message)
|
||||
|
||||
def selectionParser(self, selection):
|
||||
print('selection: ', selection[0].Shape.ShapeType, ' ', selection[0].Name, ' ', selection[1])
|
||||
print('selection: {} {} {}'.format(
|
||||
selection[0].Shape.ShapeType,
|
||||
selection[0].Name,
|
||||
selection[1]
|
||||
))
|
||||
if hasattr(selection[0], "Shape") and selection[1]:
|
||||
elt = selection[0].Shape.getElement(selection[1])
|
||||
ele_ShapeType = elt.ShapeType
|
||||
@@ -422,7 +463,9 @@ class GeometryElementsSelection(QtGui.QWidget):
|
||||
if not found_edge:
|
||||
solid_to_add = str(i + 1)
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage('Edge belongs to more than one solid\n')
|
||||
FreeCAD.Console.PrintMessage(
|
||||
'Edge belongs to more than one solid\n'
|
||||
)
|
||||
solid_to_add = None
|
||||
found_edge = True
|
||||
elif ele_ShapeType == 'Face':
|
||||
@@ -433,45 +476,68 @@ class GeometryElementsSelection(QtGui.QWidget):
|
||||
if not found_face:
|
||||
solid_to_add = str(i + 1)
|
||||
else:
|
||||
FreeCAD.Console.PrintMessage('Face belongs to more than one solid\n')
|
||||
FreeCAD.Console.PrintMessage(
|
||||
'Face belongs to more than one solid\n'
|
||||
)
|
||||
solid_to_add = None
|
||||
found_face = True
|
||||
if solid_to_add:
|
||||
selection = (selection[0], 'Solid' + solid_to_add)
|
||||
ele_ShapeType = 'Solid'
|
||||
FreeCAD.Console.PrintMessage('selection variable adapted to hold the Solid: ' + selection[0].Shape.ShapeType + ' ' + selection[0].Name + ' ' + selection[1] + ' \n')
|
||||
FreeCAD.Console.PrintMessage(
|
||||
'selection variable adapted to hold the Solid: {} {} {}\n'
|
||||
.format(selection[0].Shape.ShapeType, selection[0].Name, selection[1])
|
||||
)
|
||||
else:
|
||||
return
|
||||
if ele_ShapeType in self.sel_elem_types:
|
||||
if (self.selection_mode_solid and ele_ShapeType == 'Solid') or self.selection_mode_solid is False:
|
||||
if (self.selection_mode_solid and ele_ShapeType == 'Solid') \
|
||||
or self.selection_mode_solid is False:
|
||||
if selection not in self.references:
|
||||
if self.allow_multiple_geom_types is False: # only equal shape types are allowed to add
|
||||
# only equal shape types are allowed to add
|
||||
if self.allow_multiple_geom_types is False:
|
||||
if self.has_equal_references_shape_types(ele_ShapeType):
|
||||
self.references.append(selection)
|
||||
self.rebuild_list_References(self.get_allitems_text().index(self.get_item_text(selection)))
|
||||
self.rebuild_list_References(
|
||||
self.get_allitems_text().index(self.get_item_text(selection))
|
||||
)
|
||||
else:
|
||||
FreeCADGui.Selection.clearSelection() # selected shape will not added to the list
|
||||
# selected shape will not added to the list
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
else: # multiple shape types are allowed to add
|
||||
self.references.append(selection)
|
||||
self.rebuild_list_References(self.get_allitems_text().index(self.get_item_text(selection)))
|
||||
self.rebuild_list_References(
|
||||
self.get_allitems_text().index(self.get_item_text(selection))
|
||||
)
|
||||
else:
|
||||
FreeCADGui.Selection.clearSelection() # selected shape will not added to the list
|
||||
message = self.get_item_text(selection) + ' is in reference list already!\n'
|
||||
# selected shape will not added to the list
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
message = (
|
||||
'{} is in reference list already!\n'
|
||||
.format(self.get_item_text(selection))
|
||||
)
|
||||
FreeCAD.Console.PrintMessage(message)
|
||||
QtGui.QMessageBox.critical(None, "Geometry already in list", message)
|
||||
else:
|
||||
FreeCADGui.Selection.clearSelection() # selected shape will not added to the list
|
||||
# selected shape will not added to the list
|
||||
FreeCADGui.Selection.clearSelection()
|
||||
message = ele_ShapeType + ' is not allowed to add to the list!\n'
|
||||
FreeCAD.Console.PrintMessage(message)
|
||||
QtGui.QMessageBox.critical(None, "Wrong shape type", message)
|
||||
|
||||
def has_equal_references_shape_types(self, ref_shty=''):
|
||||
for ref in self.references:
|
||||
r = FemMeshTools.get_element(ref[0], ref[1]) # the method getElement(element) does not return Solid elements
|
||||
# the method getElement(element) does not return Solid elements
|
||||
r = FemMeshTools.get_element(ref[0], ref[1])
|
||||
if not r:
|
||||
FreeCAD.Console.PrintError('Problem in retrieving element: {} \n'.format(ref[1]))
|
||||
FreeCAD.Console.PrintError(
|
||||
'Problem in retrieving element: {} \n'.format(ref[1])
|
||||
)
|
||||
continue
|
||||
# print(' ReferenceShape : ', r.ShapeType, ', ', ref[0].Name, ', ', ref[0].Label, ' --> ', ref[1])
|
||||
FreeCAD.Console.PrintLog(
|
||||
' ReferenceShape : {}, {}, {} --> {}'
|
||||
.format(r.ShapeType, ref[0].Name, ref[0].Label, ref[1])
|
||||
)
|
||||
if not ref_shty:
|
||||
ref_shty = r.ShapeType
|
||||
if r.ShapeType != ref_shty:
|
||||
|
||||
@@ -60,12 +60,14 @@ class ViewProxy(object):
|
||||
|
||||
def setEdit(self, vobj, mode=0):
|
||||
# needs to be overwritten if task panel exists
|
||||
# avoid edit mode by return False, https://forum.freecadweb.org/viewtopic.php?t=12139&start=10#p161062
|
||||
# avoid edit mode by return False
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=12139&start=10#p161062
|
||||
return False
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
|
||||
@@ -53,12 +53,14 @@ class _ViewProviderFemConstraintSelfWeight:
|
||||
return
|
||||
|
||||
def setEdit(self, vobj, mode=0):
|
||||
# avoid edit mode by return False, https://forum.freecadweb.org/viewtopic.php?t=12139&start=10#p161062
|
||||
# avoid edit mode by return False
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=12139&start=10#p161062
|
||||
return False
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
|
||||
@@ -87,7 +87,8 @@ class _ViewProviderFemElementFluid1D:
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
@@ -112,48 +113,188 @@ class _TaskPanelFemElementFluid1D:
|
||||
self.obj = obj
|
||||
|
||||
# parameter widget
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElementFluid1D.ui")
|
||||
QtCore.QObject.connect(self.parameterWidget.cb_section_type, QtCore.SIGNAL("activated(int)"), self.sectiontype_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.cb_liquid_section_type, QtCore.SIGNAL("activated(int)"), self.liquidsectiontype_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_manning_area, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.manning_area_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_manning_radius, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.manning_radius_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.sb_manning_coefficient, QtCore.SIGNAL("valueChanged(double)"), self.manning_coefficient_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_enlarge_area1, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.enlarge_area1_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_enlarge_area2, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.enlarge_area2_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_contract_area1, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.contract_area1_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_contract_area2, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.contract_area2_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_inletpressure, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.inlet_pressure_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_outletpressure, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.outlet_pressure_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_inletflowrate, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.inlet_flowrate_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_outletflowrate, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.outlet_flowrate_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.gb_inletpressure, QtCore.SIGNAL("clicked(bool)"), self.inlet_pressure_active)
|
||||
QtCore.QObject.connect(self.parameterWidget.gb_outletpressure, QtCore.SIGNAL("clicked(bool)"), self.outlet_pressure_active)
|
||||
QtCore.QObject.connect(self.parameterWidget.gb_inletflowrate, QtCore.SIGNAL("clicked(bool)"), self.inlet_flowrate_active)
|
||||
QtCore.QObject.connect(self.parameterWidget.gb_outletflowrate, QtCore.SIGNAL("clicked(bool)"), self.outlet_flowrate_active)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_entrance_pipe_area, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.entrance_pipe_area_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_entrance_area, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.entrance_area_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_diaphragm_pipe_area, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.diaphragm_pipe_area_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_diaphragm_area, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.diaphragm_area_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_bend_pipe_area, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.bend_pipe_area_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.sb_bradius_pdiameter, QtCore.SIGNAL("valueChanged(double)"), self.bradius_pdiameter_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.sb_bend_angle, QtCore.SIGNAL("valueChanged(double)"), self.bend_angle_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.sb_bend_loss_coefficient, QtCore.SIGNAL("valueChanged(double)"), self.bend_loss_coefficient_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_gatevalve_pipe_area, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.gatevalve_pipe_area_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.sb_gatevalve_closing_coeff, QtCore.SIGNAL("valueChanged(double)"), self.gatevalve_closing_coeff_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_colebrooke_pipe_area, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.colebrooke_pipe_area_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_colebrooke_radius, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.colebrooke_radius_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_colebrooke_grain_diameter, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.colebrooke_grain_diameter_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.sb_colebrooke_form_factor, QtCore.SIGNAL("valueChanged(double)"), self.colebrooke_form_factor_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.tw_pump_characteristics, QtCore.SIGNAL("cellChanged(int, int)"), self.pump_characteristics_changed)
|
||||
self.parameterWidget.cb_section_type.addItems(_FemElementFluid1D._FemElementFluid1D.known_fluid_types)
|
||||
self.parameterWidget.cb_liquid_section_type.addItems(_FemElementFluid1D._FemElementFluid1D.known_liquid_types)
|
||||
self.parameterWidget.cb_gas_section_type.addItems(_FemElementFluid1D._FemElementFluid1D.known_gas_types)
|
||||
self.parameterWidget.cb_channel_section_type.addItems(_FemElementFluid1D._FemElementFluid1D.known_channel_types)
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElementFluid1D.ui"
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.cb_section_type,
|
||||
QtCore.SIGNAL("activated(int)"),
|
||||
self.sectiontype_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.cb_liquid_section_type,
|
||||
QtCore.SIGNAL("activated(int)"),
|
||||
self.liquidsectiontype_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_manning_area,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.manning_area_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_manning_radius,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.manning_radius_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.sb_manning_coefficient,
|
||||
QtCore.SIGNAL("valueChanged(double)"),
|
||||
self.manning_coefficient_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_enlarge_area1,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.enlarge_area1_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_enlarge_area2,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.enlarge_area2_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_contract_area1,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.contract_area1_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_contract_area2,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.contract_area2_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_inletpressure,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.inlet_pressure_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_outletpressure,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.outlet_pressure_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_inletflowrate,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.inlet_flowrate_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_outletflowrate,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.outlet_flowrate_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.gb_inletpressure,
|
||||
QtCore.SIGNAL("clicked(bool)"),
|
||||
self.inlet_pressure_active
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.gb_outletpressure,
|
||||
QtCore.SIGNAL("clicked(bool)"),
|
||||
self.outlet_pressure_active
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.gb_inletflowrate,
|
||||
QtCore.SIGNAL("clicked(bool)"),
|
||||
self.inlet_flowrate_active
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.gb_outletflowrate,
|
||||
QtCore.SIGNAL("clicked(bool)"),
|
||||
self.outlet_flowrate_active
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_entrance_pipe_area,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.entrance_pipe_area_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_entrance_area,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.entrance_area_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_diaphragm_pipe_area,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.diaphragm_pipe_area_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_diaphragm_area,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.diaphragm_area_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_bend_pipe_area,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.bend_pipe_area_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.sb_bradius_pdiameter,
|
||||
QtCore.SIGNAL("valueChanged(double)"),
|
||||
self.bradius_pdiameter_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.sb_bend_angle,
|
||||
QtCore.SIGNAL("valueChanged(double)"),
|
||||
self.bend_angle_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.sb_bend_loss_coefficient,
|
||||
QtCore.SIGNAL("valueChanged(double)"),
|
||||
self.bend_loss_coefficient_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_gatevalve_pipe_area,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.gatevalve_pipe_area_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.sb_gatevalve_closing_coeff,
|
||||
QtCore.SIGNAL("valueChanged(double)"),
|
||||
self.gatevalve_closing_coeff_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_colebrooke_pipe_area,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.colebrooke_pipe_area_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_colebrooke_radius,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.colebrooke_radius_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_colebrooke_grain_diameter,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.colebrooke_grain_diameter_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.sb_colebrooke_form_factor,
|
||||
QtCore.SIGNAL("valueChanged(double)"),
|
||||
self.colebrooke_form_factor_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.tw_pump_characteristics,
|
||||
QtCore.SIGNAL("cellChanged(int, int)"),
|
||||
self.pump_characteristics_changed
|
||||
)
|
||||
self.parameterWidget.cb_section_type.addItems(
|
||||
_FemElementFluid1D._FemElementFluid1D.known_fluid_types
|
||||
)
|
||||
self.parameterWidget.cb_liquid_section_type.addItems(
|
||||
_FemElementFluid1D._FemElementFluid1D.known_liquid_types
|
||||
)
|
||||
self.parameterWidget.cb_gas_section_type.addItems(
|
||||
_FemElementFluid1D._FemElementFluid1D.known_gas_types
|
||||
)
|
||||
self.parameterWidget.cb_channel_section_type.addItems(
|
||||
_FemElementFluid1D._FemElementFluid1D.known_channel_types
|
||||
)
|
||||
self.get_fluidsection_props()
|
||||
self.updateParameterWidget()
|
||||
|
||||
# geometry selection widget
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(obj.References, ['Edge'])
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(
|
||||
obj.References, ['Edge']
|
||||
)
|
||||
|
||||
# form made from param and selection widget
|
||||
self.form = [self.parameterWidget, self.selectionWidget]
|
||||
@@ -251,7 +392,9 @@ class _TaskPanelFemElementFluid1D:
|
||||
index_sectiontype = self.parameterWidget.cb_section_type.findText(self.SectionType)
|
||||
self.parameterWidget.cb_section_type.setCurrentIndex(index_sectiontype)
|
||||
self.parameterWidget.sw_section_type.setCurrentIndex(index_sectiontype)
|
||||
index_liquidsectiontype = self.parameterWidget.cb_liquid_section_type.findText(self.LiquidSectionType)
|
||||
index_liquidsectiontype = self.parameterWidget.cb_liquid_section_type.findText(
|
||||
self.LiquidSectionType
|
||||
)
|
||||
self.parameterWidget.cb_liquid_section_type.setCurrentIndex(index_liquidsectiontype)
|
||||
self.parameterWidget.sw_liquid_section_type.setCurrentIndex(index_liquidsectiontype)
|
||||
self.parameterWidget.if_manning_area.setText(self.ManningArea.UserString)
|
||||
@@ -261,8 +404,12 @@ class _TaskPanelFemElementFluid1D:
|
||||
self.parameterWidget.if_enlarge_area2.setText(self.EnlargeArea2.UserString)
|
||||
self.parameterWidget.if_contract_area1.setText(self.ContractArea1.UserString)
|
||||
self.parameterWidget.if_contract_area2.setText(self.ContractArea2.UserString)
|
||||
self.parameterWidget.if_inletpressure.setText(FreeCAD.Units.Quantity(1000 * self.InletPressure, FreeCAD.Units.Pressure).UserString)
|
||||
self.parameterWidget.if_outletpressure.setText(FreeCAD.Units.Quantity(1000 * self.OutletPressure, FreeCAD.Units.Pressure).UserString)
|
||||
self.parameterWidget.if_inletpressure.setText(FreeCAD.Units.Quantity(
|
||||
1000 * self.InletPressure, FreeCAD.Units.Pressure).UserString
|
||||
)
|
||||
self.parameterWidget.if_outletpressure.setText(FreeCAD.Units.Quantity(
|
||||
1000 * self.OutletPressure, FreeCAD.Units.Pressure).UserString
|
||||
)
|
||||
self.parameterWidget.if_inletflowrate.setText(str(self.InletFlowRate))
|
||||
self.parameterWidget.if_outletflowrate.setText(str(self.OutletFlowRate))
|
||||
self.parameterWidget.gb_inletpressure.setChecked(self.InletPressureActive)
|
||||
@@ -281,25 +428,35 @@ class _TaskPanelFemElementFluid1D:
|
||||
self.parameterWidget.sb_gatevalve_closing_coeff.setValue(self.GateValveClosingCoeff)
|
||||
self.parameterWidget.if_colebrooke_pipe_area.setText(self.ColebrookeArea.UserString)
|
||||
self.parameterWidget.if_colebrooke_radius.setText(self.ColebrookeRadius.UserString)
|
||||
self.parameterWidget.if_colebrooke_grain_diameter.setText(self.ColebrookeGrainDiameter.UserString)
|
||||
self.parameterWidget.if_colebrooke_grain_diameter.setText(
|
||||
self.ColebrookeGrainDiameter.UserString
|
||||
)
|
||||
self.parameterWidget.sb_colebrooke_form_factor.setValue(self.ColebrookeFormFactor)
|
||||
for i in range(len(self.PumpFlowRate)):
|
||||
self.parameterWidget.tw_pump_characteristics.setItem(i, 0, QtGui.QTableWidgetItem(str(self.PumpFlowRate[i])))
|
||||
self.parameterWidget.tw_pump_characteristics.setItem(i, 1, QtGui.QTableWidgetItem(str(self.PumpHeadLoss[i])))
|
||||
self.parameterWidget.tw_pump_characteristics.setItem(
|
||||
i, 0, QtGui.QTableWidgetItem(str(self.PumpFlowRate[i]))
|
||||
)
|
||||
self.parameterWidget.tw_pump_characteristics.setItem(
|
||||
i, 1, QtGui.QTableWidgetItem(str(self.PumpHeadLoss[i]))
|
||||
)
|
||||
|
||||
def sectiontype_changed(self, index):
|
||||
if index < 0:
|
||||
return
|
||||
self.parameterWidget.cb_section_type.setCurrentIndex(index)
|
||||
self.parameterWidget.sw_section_type.setCurrentIndex(index)
|
||||
self.SectionType = str(self.parameterWidget.cb_section_type.itemText(index)) # parameterWidget returns unicode
|
||||
# parameterWidget returns unicode
|
||||
self.SectionType = str(self.parameterWidget.cb_section_type.itemText(index))
|
||||
|
||||
def liquidsectiontype_changed(self, index):
|
||||
if index < 0:
|
||||
return
|
||||
self.parameterWidget.cb_liquid_section_type.setCurrentIndex(index)
|
||||
self.parameterWidget.sw_liquid_section_type.setCurrentIndex(index)
|
||||
self.LiquidSectionType = str(self.parameterWidget.cb_liquid_section_type.itemText(index)) # parameterWidget returns unicode
|
||||
# parameterWidget returns unicode
|
||||
self.LiquidSectionType = str(
|
||||
self.parameterWidget.cb_liquid_section_type.itemText(index)
|
||||
)
|
||||
|
||||
def manning_area_changed(self, base_quantity_value):
|
||||
self.ManningArea = base_quantity_value
|
||||
@@ -323,16 +480,24 @@ class _TaskPanelFemElementFluid1D:
|
||||
self.ContractArea2 = base_quantity_value
|
||||
|
||||
def inlet_pressure_changed(self, base_quantity_value):
|
||||
self.InletPressure = float(FreeCAD.Units.Quantity(base_quantity_value).getValueAs("MPa"))
|
||||
self.InletPressure = float(
|
||||
FreeCAD.Units.Quantity(base_quantity_value).getValueAs("MPa")
|
||||
)
|
||||
|
||||
def outlet_pressure_changed(self, base_quantity_value):
|
||||
self.OutletPressure = float(FreeCAD.Units.Quantity(base_quantity_value).getValueAs("MPa"))
|
||||
self.OutletPressure = float(
|
||||
FreeCAD.Units.Quantity(base_quantity_value).getValueAs("MPa")
|
||||
)
|
||||
|
||||
def inlet_flowrate_changed(self, base_quantity_value):
|
||||
self.InletFlowRate = float(FreeCAD.Units.Quantity(base_quantity_value).getValueAs("kg/s"))
|
||||
self.InletFlowRate = float(
|
||||
FreeCAD.Units.Quantity(base_quantity_value).getValueAs("kg/s")
|
||||
)
|
||||
|
||||
def outlet_flowrate_changed(self, base_quantity_value):
|
||||
self.OutletFlowRate = float(FreeCAD.Units.Quantity(base_quantity_value).getValueAs("kg/s"))
|
||||
self.OutletFlowRate = float(
|
||||
FreeCAD.Units.Quantity(base_quantity_value).getValueAs("kg/s")
|
||||
)
|
||||
|
||||
def inlet_pressure_active(self, active):
|
||||
self.InletPressureActive = active
|
||||
@@ -390,6 +555,10 @@ class _TaskPanelFemElementFluid1D:
|
||||
|
||||
def pump_characteristics_changed(self, row, column):
|
||||
if column == 0:
|
||||
self.PumpFlowRate[row] = float(self.parameterWidget.tw_pump_characteristics.item(row, column).text())
|
||||
self.PumpFlowRate[row] = float(
|
||||
self.parameterWidget.tw_pump_characteristics.item(row, column).text()
|
||||
)
|
||||
else:
|
||||
self.PumpHeadLoss[row] = float(self.parameterWidget.tw_pump_characteristics.item(row, column).text())
|
||||
self.PumpHeadLoss[row] = float(
|
||||
self.parameterWidget.tw_pump_characteristics.item(row, column).text()
|
||||
)
|
||||
|
||||
@@ -84,7 +84,8 @@ class _ViewProviderFemElementGeometry1D:
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
@@ -109,19 +110,52 @@ class _TaskPanelFemElementGeometry1D:
|
||||
self.obj = obj
|
||||
|
||||
# parameter widget
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElementGeometry1D.ui")
|
||||
QtCore.QObject.connect(self.parameterWidget.cb_crosssectiontype, QtCore.SIGNAL("activated(int)"), self.sectiontype_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_rec_height, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.rec_height_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_rec_width, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.rec_width_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_circ_diameter, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.circ_diameter_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_pipe_diameter, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.pipe_diameter_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.if_pipe_thickness, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.pipe_thickness_changed)
|
||||
self.parameterWidget.cb_crosssectiontype.addItems(_FemElementGeometry1D._FemElementGeometry1D.known_beam_types) # it is inside the class thus double _FemElementGeometry1D
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElementGeometry1D.ui"
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.cb_crosssectiontype,
|
||||
QtCore.SIGNAL("activated(int)"),
|
||||
self.sectiontype_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_rec_height,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.rec_height_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_rec_width,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.rec_width_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_circ_diameter,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.circ_diameter_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_pipe_diameter,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.pipe_diameter_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_pipe_thickness,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.pipe_thickness_changed
|
||||
)
|
||||
|
||||
# it is inside the class thus double _FemElementGeometry1D
|
||||
self.parameterWidget.cb_crosssectiontype.addItems(
|
||||
_FemElementGeometry1D._FemElementGeometry1D.known_beam_types
|
||||
)
|
||||
self.get_beamsection_props()
|
||||
self.updateParameterWidget()
|
||||
|
||||
# geometry selection widget
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(obj.References, ['Edge'])
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(
|
||||
obj.References,
|
||||
['Edge']
|
||||
)
|
||||
|
||||
# form made from param and selection widget
|
||||
self.form = [self.parameterWidget, self.selectionWidget]
|
||||
@@ -162,7 +196,9 @@ class _TaskPanelFemElementGeometry1D:
|
||||
|
||||
def updateParameterWidget(self):
|
||||
'fills the widgets'
|
||||
index_crosssectiontype = self.parameterWidget.cb_crosssectiontype.findText(self.SectionType)
|
||||
index_crosssectiontype = self.parameterWidget.cb_crosssectiontype.findText(
|
||||
self.SectionType
|
||||
)
|
||||
self.parameterWidget.cb_crosssectiontype.setCurrentIndex(index_crosssectiontype)
|
||||
self.parameterWidget.if_rec_height.setText(self.RectHeight.UserString)
|
||||
self.parameterWidget.if_rec_width.setText(self.RectWidth.UserString)
|
||||
@@ -174,7 +210,8 @@ class _TaskPanelFemElementGeometry1D:
|
||||
if index < 0:
|
||||
return
|
||||
self.parameterWidget.cb_crosssectiontype.setCurrentIndex(index)
|
||||
self.SectionType = str(self.parameterWidget.cb_crosssectiontype.itemText(index)) # parameterWidget returns unicode
|
||||
# parameterWidget returns unicode
|
||||
self.SectionType = str(self.parameterWidget.cb_crosssectiontype.itemText(index))
|
||||
|
||||
def rec_height_changed(self, base_quantity_value):
|
||||
self.RectHeight = base_quantity_value
|
||||
|
||||
@@ -83,7 +83,8 @@ class _ViewProviderFemElementGeometry2D:
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
@@ -108,12 +109,21 @@ class _TaskPanelFemElementGeometry2D:
|
||||
self.obj = obj
|
||||
|
||||
# parameter widget
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElementGeometry2D.ui")
|
||||
QtCore.QObject.connect(self.parameterWidget.if_thickness, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.thickness_changed)
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElementGeometry2D.ui"
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_thickness,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.thickness_changed
|
||||
)
|
||||
self.init_parameter_widget()
|
||||
|
||||
# geometry selection widget
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(obj.References, ['Face'])
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(
|
||||
obj.References,
|
||||
['Face']
|
||||
)
|
||||
|
||||
# form made from param and selection widget
|
||||
self.form = [self.parameterWidget, self.selectionWidget]
|
||||
|
||||
@@ -84,12 +84,14 @@ class _ViewProviderFemElementRotation1D:
|
||||
'''
|
||||
|
||||
def setEdit(self, vobj, mode=0):
|
||||
# avoid edit mode by return False, https://forum.freecadweb.org/viewtopic.php?t=12139&start=10#p161062
|
||||
# avoid edit mode by return False
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=12139&start=10#p161062
|
||||
return False
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
@@ -113,13 +115,22 @@ class _TaskPanelFemElementRotation1D:
|
||||
self.obj = obj
|
||||
|
||||
# parameter widget
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElementRotation1D.ui")
|
||||
QtCore.QObject.connect(self.parameterWidget.if_rotation, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.rotation_changed)
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ElementRotation1D.ui"
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_rotation,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.rotation_changed
|
||||
)
|
||||
self.rotation = self.obj.Rotation
|
||||
self.parameterWidget.if_rotation.setText(self.rotation.UserString)
|
||||
|
||||
# geometry selection widget
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(obj.References, ['Edge'])
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(
|
||||
obj.References,
|
||||
['Edge']
|
||||
)
|
||||
|
||||
# form made from param and selection widget
|
||||
self.form = [self.parameterWidget, self.selectionWidget]
|
||||
|
||||
@@ -63,12 +63,14 @@ class _ViewProviderFemMaterialMechanicalNonlinear:
|
||||
return
|
||||
|
||||
def setEdit(self, vobj, mode=0):
|
||||
# avoid edit mode by return False, https://forum.freecadweb.org/viewtopic.php?t=12139&start=10#p161062
|
||||
# avoid edit mode by return False
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=12139&start=10#p161062
|
||||
return False
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
|
||||
@@ -83,7 +83,8 @@ class _ViewProviderFemMeshBoundaryLayer:
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
@@ -108,14 +109,33 @@ class _TaskPanelFemMeshBoundaryLayer:
|
||||
self.obj = obj
|
||||
|
||||
# parameter widget
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MeshBoundaryLayer.ui")
|
||||
QtCore.QObject.connect(self.parameterWidget.bl_number_of_layers, QtCore.SIGNAL("valueChanged(int)"), self.bl_number_of_layers_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.bl_min_thickness, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.bl_min_thickness_changed)
|
||||
QtCore.QObject.connect(self.parameterWidget.bl_growth_rate, QtCore.SIGNAL("valueChanged(double)"), self.bl_growth_rate_changed) # becareful of signal signature for QDoubleSpinbox
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MeshBoundaryLayer.ui"
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.bl_number_of_layers,
|
||||
QtCore.SIGNAL("valueChanged(int)"),
|
||||
self.bl_number_of_layers_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.bl_min_thickness,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.bl_min_thickness_changed
|
||||
)
|
||||
# be careful of signal signature for QDoubleSpinbox
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.bl_growth_rate,
|
||||
QtCore.SIGNAL("valueChanged(double)"),
|
||||
self.bl_growth_rate_changed
|
||||
)
|
||||
self.init_parameter_widget()
|
||||
|
||||
# geometry selection widget
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(obj.References, ['Solid', 'Face', 'Edge', 'Vertex']) # start with Solid in list!
|
||||
# start with Solid in list!
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(
|
||||
obj.References,
|
||||
['Solid', 'Face', 'Edge', 'Vertex']
|
||||
)
|
||||
|
||||
# form made from param and selection widget
|
||||
self.form = [self.parameterWidget, self.selectionWidget]
|
||||
|
||||
@@ -80,11 +80,14 @@ class _ViewProviderFemMeshGmsh:
|
||||
return True
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
# Group meshing is only active on active analysis, we should make sure the analysis the mesh belongs too is active
|
||||
# Group meshing is only active on active analysis
|
||||
# we should make sure the analysis the mesh belongs too is active
|
||||
gui_doc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
if not gui_doc.getInEdit():
|
||||
# may be go the other way around and just activate the analysis the user has doubleClicked on ?!
|
||||
# not a fast one, we need to iterate over all member of all analysis to know to which analysis the object belongs too!!!
|
||||
# may be go the other way around and just activate the
|
||||
# analysis the user has doubleClicked on ?!
|
||||
# not a fast one, we need to iterate over all member of all
|
||||
# analysis to know to which analysis the object belongs too!!!
|
||||
# first check if there is an analysis in the active document
|
||||
found_an_analysis = False
|
||||
for o in gui_doc.Document.Objects:
|
||||
@@ -98,7 +101,10 @@ class _ViewProviderFemMeshGmsh:
|
||||
if not gui_doc.getInEdit():
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
FreeCAD.Console.PrintError('Activate the analysis this Gmsh FEM mesh object belongs too!\n')
|
||||
FreeCAD.Console.PrintError(
|
||||
'Activate the analysis this Gmsh FEM '
|
||||
'mesh object belongs too!\n'
|
||||
)
|
||||
else:
|
||||
print('Gmsh FEM mesh object does not belong to the active analysis.')
|
||||
found_mesh_analysis = False
|
||||
@@ -108,16 +114,27 @@ class _ViewProviderFemMeshGmsh:
|
||||
if m == self.Object:
|
||||
found_mesh_analysis = True
|
||||
FemGui.setActiveAnalysis(o)
|
||||
print('The analysis the Gmsh FEM mesh object belongs too was found and activated: ' + o.Name)
|
||||
print(
|
||||
'The analysis the Gmsh FEM mesh object '
|
||||
'belongs to was found and activated: {}'
|
||||
.format(o.Name)
|
||||
)
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
break
|
||||
if not found_mesh_analysis:
|
||||
print('Gmsh FEM mesh object does not belong to an analysis. Analysis group meshing will be deactivated.')
|
||||
print(
|
||||
'Gmsh FEM mesh object does not belong to an analysis. '
|
||||
'Analysis group meshing will be deactivated.'
|
||||
)
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
FreeCAD.Console.PrintError('Active analysis is not in active document.')
|
||||
else:
|
||||
print('No active analysis in active document, we are going to have a look if the Gmsh FEM mesh object belongs to a non active analysis.')
|
||||
print(
|
||||
'No active analysis in active document, '
|
||||
'we are going to have a look if the Gmsh FEM mesh object '
|
||||
'belongs to a non active analysis.'
|
||||
)
|
||||
found_mesh_analysis = False
|
||||
for o in gui_doc.Document.Objects:
|
||||
if o.isDerivedFrom('Fem::FemAnalysisPython'):
|
||||
@@ -125,11 +142,17 @@ class _ViewProviderFemMeshGmsh:
|
||||
if m == self.Object:
|
||||
found_mesh_analysis = True
|
||||
FemGui.setActiveAnalysis(o)
|
||||
print('The analysis the Gmsh FEM mesh object belongs to was found and activated: ' + o.Name)
|
||||
print(
|
||||
'The analysis the Gmsh FEM mesh object '
|
||||
'belongs to was found and activated: {}'.format(o.Name)
|
||||
)
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
break
|
||||
if not found_mesh_analysis:
|
||||
print('Gmsh FEM mesh object does not belong to an analysis. Analysis group meshing will be deactivated.')
|
||||
print(
|
||||
'Gmsh FEM mesh object does not belong to an analysis. '
|
||||
'Analysis group meshing will be deactivated.'
|
||||
)
|
||||
gui_doc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
print('No analysis in the active document.')
|
||||
@@ -148,7 +171,10 @@ class _ViewProviderFemMeshGmsh:
|
||||
return None
|
||||
|
||||
def claimChildren(self):
|
||||
return (self.Object.MeshRegionList + self.Object.MeshGroupList + self.Object.MeshBoundaryLayerList)
|
||||
reg_childs = self.Object.MeshRegionList
|
||||
gro_childs = self.Object.MeshGroupList
|
||||
bou_childs = self.Object.MeshBoundaryLayerList
|
||||
return (reg_childs + gro_childs + bou_childs)
|
||||
|
||||
def onDelete(self, feature, subelements):
|
||||
try:
|
||||
@@ -165,11 +191,14 @@ class _ViewProviderFemMeshGmsh:
|
||||
return True
|
||||
|
||||
def canDragObject(self, dragged_object):
|
||||
if hasattr(dragged_object, "Proxy") and dragged_object.Proxy.Type == "Fem::FemMeshBoundaryLayer":
|
||||
if hasattr(dragged_object, "Proxy") \
|
||||
and dragged_object.Proxy.Type == "Fem::FemMeshBoundaryLayer":
|
||||
return True
|
||||
elif hasattr(dragged_object, "Proxy") and dragged_object.Proxy.Type == "Fem::FemMeshGroup":
|
||||
elif hasattr(dragged_object, "Proxy") \
|
||||
and dragged_object.Proxy.Type == "Fem::FemMeshGroup":
|
||||
return True
|
||||
elif hasattr(dragged_object, "Proxy") and dragged_object.Proxy.Type == "Fem::FemMeshRegion":
|
||||
elif hasattr(dragged_object, "Proxy") \
|
||||
and dragged_object.Proxy.Type == "Fem::FemMeshRegion":
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
@@ -192,15 +221,18 @@ class _ViewProviderFemMeshGmsh:
|
||||
self.Object.MeshRegionList = objs
|
||||
|
||||
def dropObject(self, selfvp, incoming_object):
|
||||
if hasattr(incoming_object, "Proxy") and incoming_object.Proxy.Type == "Fem::FemMeshBoundaryLayer":
|
||||
if hasattr(incoming_object, "Proxy") \
|
||||
and incoming_object.Proxy.Type == "Fem::FemMeshBoundaryLayer":
|
||||
objs = self.Object.MeshBoundaryLayerList
|
||||
objs.append(incoming_object)
|
||||
self.Object.MeshBoundaryLayerList = objs
|
||||
elif hasattr(incoming_object, "Proxy") and incoming_object.Proxy.Type == "Fem::FemMeshGroup":
|
||||
elif hasattr(incoming_object, "Proxy") \
|
||||
and incoming_object.Proxy.Type == "Fem::FemMeshGroup":
|
||||
objs = self.Object.MeshGroupList
|
||||
objs.append(incoming_object)
|
||||
self.Object.MeshGroupList = objs
|
||||
elif hasattr(incoming_object, "Proxy") and incoming_object.Proxy.Type == "Fem::FemMeshRegion":
|
||||
elif hasattr(incoming_object, "Proxy") \
|
||||
and incoming_object.Proxy.Type == "Fem::FemMeshRegion":
|
||||
objs = self.Object.MeshRegionList
|
||||
objs.append(incoming_object)
|
||||
self.Object.MeshRegionList = objs
|
||||
@@ -208,30 +240,54 @@ class _ViewProviderFemMeshGmsh:
|
||||
|
||||
|
||||
class _TaskPanelFemMeshGmsh:
|
||||
'''The TaskPanel for editing References property of FemMeshGmsh objects and creation of new FEM mesh'''
|
||||
'''The TaskPanel for editing References property of
|
||||
FemMeshGmsh objects and creation of new FEM mesh'''
|
||||
|
||||
def __init__(self, obj):
|
||||
self.mesh_obj = obj
|
||||
self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MeshGmsh.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MeshGmsh.ui"
|
||||
)
|
||||
|
||||
self.Timer = QtCore.QTimer()
|
||||
self.Timer.start(100) # 100 milli seconds
|
||||
self.gmsh_runs = False
|
||||
self.console_message_gmsh = ''
|
||||
|
||||
QtCore.QObject.connect(self.form.if_max, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.max_changed)
|
||||
QtCore.QObject.connect(self.form.if_min, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.min_changed)
|
||||
QtCore.QObject.connect(self.form.cb_dimension, QtCore.SIGNAL("activated(int)"), self.choose_dimension)
|
||||
QtCore.QObject.connect(self.Timer, QtCore.SIGNAL("timeout()"), self.update_timer_text)
|
||||
QtCore.QObject.connect(
|
||||
self.form.if_max,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.max_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.if_min,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.min_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.cb_dimension,
|
||||
QtCore.SIGNAL("activated(int)"),
|
||||
self.choose_dimension
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.Timer,
|
||||
QtCore.SIGNAL("timeout()"),
|
||||
self.update_timer_text
|
||||
)
|
||||
|
||||
self.form.cb_dimension.addItems(_FemMeshGmsh._FemMeshGmsh.known_element_dimensions)
|
||||
self.form.cb_dimension.addItems(
|
||||
_FemMeshGmsh._FemMeshGmsh.known_element_dimensions
|
||||
)
|
||||
|
||||
self.get_mesh_params()
|
||||
self.get_active_analysis()
|
||||
self.update()
|
||||
|
||||
def getStandardButtons(self):
|
||||
return int(QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel)
|
||||
button_value = int(
|
||||
QtGui.QDialogButtonBox.Ok | QtGui.QDialogButtonBox.Apply | QtGui.QDialogButtonBox.Cancel
|
||||
)
|
||||
return button_value
|
||||
# show a OK, a apply and a Cancel button
|
||||
# def reject() is called on Cancel button
|
||||
# def clicked(self, button) is needed, to access the apply button
|
||||
@@ -272,8 +328,10 @@ class _TaskPanelFemMeshGmsh:
|
||||
def console_log(self, message="", color="#000000"):
|
||||
if (not isinstance(message, bytes)) and (sys.version_info.major < 3):
|
||||
message = message.encode('utf-8', 'replace')
|
||||
self.console_message_gmsh = self.console_message_gmsh + '<font color="#0000FF">{0:4.1f}:</font> <font color="{1}">{2}</font><br>'.\
|
||||
format(time.time() - self.Start, color, message)
|
||||
self.console_message_gmsh = self.console_message_gmsh + (
|
||||
'<font color="#0000FF">{0:4.1f}:</font> <font color="{1}">{2}</font><br>'
|
||||
.format(time.time() - self.Start, color, message)
|
||||
)
|
||||
self.form.te_output.setText(self.console_message_gmsh)
|
||||
self.form.te_output.moveCursor(QtGui.QTextCursor.End)
|
||||
|
||||
@@ -300,14 +358,27 @@ class _TaskPanelFemMeshGmsh:
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
part = self.obj.Part
|
||||
if self.mesh_obj.MeshRegionList:
|
||||
if part.Shape.ShapeType == "Compound" and hasattr(part, "Proxy"): # other part obj might not have a Proxy, thus an exception would be raised
|
||||
if (part.Proxy.Type == "FeatureBooleanFragments" or part.Proxy.Type == "FeatureSlice" or part.Proxy.Type == "FeatureXOR"):
|
||||
# other part obj might not have a Proxy, thus an exception would be raised
|
||||
if part.Shape.ShapeType == "Compound" and hasattr(part, "Proxy"):
|
||||
if part.Proxy.Type == "FeatureBooleanFragments" \
|
||||
or part.Proxy.Type == "FeatureSlice" \
|
||||
or part.Proxy.Type == "FeatureXOR":
|
||||
error_message = (
|
||||
'The mesh to shape is a boolean split tools Compound and the mesh has mesh region list. '
|
||||
'The shape to mesh is a boolean split tools Compound '
|
||||
'and the mesh has mesh region list. '
|
||||
'Gmsh could return unexpected meshes in such circumstances. '
|
||||
'It is strongly recommended to extract the shape to mesh from the Compound and use this one.'
|
||||
'It is strongly recommended to extract the shape '
|
||||
'to mesh from the Compound and use this one.'
|
||||
)
|
||||
qtbox_title = (
|
||||
"Shape to mesh is a BooleanFragmentsCompound "
|
||||
"and mesh regions are defined"
|
||||
)
|
||||
QtGui.QMessageBox.critical(
|
||||
None,
|
||||
qtbox_title,
|
||||
error_message
|
||||
)
|
||||
QtGui.QMessageBox.critical(None, "Shape to mesh is a BooleanFragmentsCompound and mesh regions are defined", error_message)
|
||||
self.Start = time.time()
|
||||
self.form.l_time.setText('Time: {0:4.1f}: '.format(time.time() - self.Start))
|
||||
self.console_message_gmsh = ''
|
||||
|
||||
@@ -82,7 +82,8 @@ class _ViewProviderFemMeshGroup:
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
@@ -107,13 +108,27 @@ class _TaskPanelFemMeshGroup:
|
||||
self.obj = obj
|
||||
|
||||
# parameter widget
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MeshGroup.ui")
|
||||
QtCore.QObject.connect(self.parameterWidget.rb_name, QtCore.SIGNAL("toggled(bool)"), self.choose_exportidentifier_name)
|
||||
QtCore.QObject.connect(self.parameterWidget.rb_label, QtCore.SIGNAL("toggled(bool)"), self.choose_exportidentifier_label)
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MeshGroup.ui"
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.rb_name,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.choose_exportidentifier_name
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.rb_label,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.choose_exportidentifier_label
|
||||
)
|
||||
self.init_parameter_widget()
|
||||
|
||||
# geometry selection widget
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(obj.References, ['Solid', 'Face', 'Edge', 'Vertex']) # start with Solid in list!
|
||||
# start with Solid in list!
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(
|
||||
obj.References,
|
||||
['Solid', 'Face', 'Edge', 'Vertex']
|
||||
)
|
||||
|
||||
# form made from param and selection widget
|
||||
self.form = [self.parameterWidget, self.selectionWidget]
|
||||
|
||||
@@ -83,7 +83,8 @@ class _ViewProviderFemMeshRegion:
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
@@ -108,12 +109,22 @@ class _TaskPanelFemMeshRegion:
|
||||
self.obj = obj
|
||||
|
||||
# parameter widget
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MeshRegion.ui")
|
||||
QtCore.QObject.connect(self.parameterWidget.if_elelen, QtCore.SIGNAL("valueChanged(Base::Quantity)"), self.elelen_changed)
|
||||
self.parameterWidget = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/MeshRegion.ui"
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.parameterWidget.if_elelen,
|
||||
QtCore.SIGNAL("valueChanged(Base::Quantity)"),
|
||||
self.elelen_changed
|
||||
)
|
||||
self.init_parameter_widget()
|
||||
|
||||
# geometry selection widget
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(obj.References, ['Solid', 'Face', 'Edge', 'Vertex']) # start with Solid in list!
|
||||
# start with Solid in list!
|
||||
self.selectionWidget = FemSelectionWidgets.GeometryElementsSelection(
|
||||
obj.References,
|
||||
['Solid', 'Face', 'Edge', 'Vertex']
|
||||
)
|
||||
|
||||
# form made from param and selection widget
|
||||
self.form = [self.parameterWidget, self.selectionWidget]
|
||||
|
||||
@@ -65,7 +65,8 @@ class _ViewProviderFemResultMechanical:
|
||||
|
||||
def doubleClicked(self, vobj):
|
||||
guidoc = FreeCADGui.getDocument(vobj.Object.Document)
|
||||
# check if another VP is in edit mode, https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
# check if another VP is in edit mode
|
||||
# https://forum.freecadweb.org/viewtopic.php?t=13077#p104702
|
||||
if not guidoc.getInEdit():
|
||||
guidoc.setEdit(vobj.Object.Name)
|
||||
else:
|
||||
@@ -93,7 +94,8 @@ class _ViewProviderFemResultMechanical:
|
||||
|
||||
def unsetEdit(self, vobj, mode=0):
|
||||
FreeCADGui.Control.closeDialog()
|
||||
self.Object.Mesh.ViewObject.hide() # hide the mesh after result viewing is finished, but do not reset the coloring
|
||||
# hide the mesh after result viewing is finished, but do not reset the coloring
|
||||
self.Object.Mesh.ViewObject.hide()
|
||||
return True
|
||||
|
||||
def __getstate__(self):
|
||||
@@ -121,37 +123,118 @@ class _TaskPanelFemResultShow:
|
||||
self.result_obj = obj
|
||||
self.mesh_obj = self.result_obj.Mesh
|
||||
# task panel should be started by use of setEdit of view provider
|
||||
# in view provider checks: Mesh, active analysis and if Mesh and result are in active analysis
|
||||
# in view provider checks: Mesh, active analysis and
|
||||
# if Mesh and result are in active analysis
|
||||
|
||||
self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ResultShow.ui")
|
||||
self.fem_prefs = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Fem/General")
|
||||
self.restore_result_settings_in_dialog = self.fem_prefs.GetBool("RestoreResultDialog", True)
|
||||
self.form = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/ResultShow.ui"
|
||||
)
|
||||
self.fem_prefs = FreeCAD.ParamGet(
|
||||
"User parameter:BaseApp/Preferences/Mod/Fem/General"
|
||||
)
|
||||
self.restore_result_settings_in_dialog = self.fem_prefs.GetBool(
|
||||
"RestoreResultDialog", True
|
||||
)
|
||||
|
||||
# Connect Signals and Slots
|
||||
# result type radio buttons
|
||||
QtCore.QObject.connect(self.form.rb_none, QtCore.SIGNAL("toggled(bool)"), self.none_selected)
|
||||
QtCore.QObject.connect(self.form.rb_abs_displacement, QtCore.SIGNAL("toggled(bool)"), self.abs_displacement_selected)
|
||||
QtCore.QObject.connect(self.form.rb_x_displacement, QtCore.SIGNAL("toggled(bool)"), self.x_displacement_selected)
|
||||
QtCore.QObject.connect(self.form.rb_y_displacement, QtCore.SIGNAL("toggled(bool)"), self.y_displacement_selected)
|
||||
QtCore.QObject.connect(self.form.rb_z_displacement, QtCore.SIGNAL("toggled(bool)"), self.z_displacement_selected)
|
||||
QtCore.QObject.connect(self.form.rb_temperature, QtCore.SIGNAL("toggled(bool)"), self.temperature_selected)
|
||||
QtCore.QObject.connect(self.form.rb_vm_stress, QtCore.SIGNAL("toggled(bool)"), self.vm_stress_selected)
|
||||
QtCore.QObject.connect(self.form.rb_maxprin, QtCore.SIGNAL("toggled(bool)"), self.max_prin_selected)
|
||||
QtCore.QObject.connect(self.form.rb_minprin, QtCore.SIGNAL("toggled(bool)"), self.min_prin_selected)
|
||||
QtCore.QObject.connect(self.form.rb_max_shear_stress, QtCore.SIGNAL("toggled(bool)"), self.max_shear_selected)
|
||||
QtCore.QObject.connect(self.form.rb_massflowrate, QtCore.SIGNAL("toggled(bool)"), self.massflowrate_selected)
|
||||
QtCore.QObject.connect(self.form.rb_networkpressure, QtCore.SIGNAL("toggled(bool)"), self.networkpressure_selected)
|
||||
QtCore.QObject.connect(self.form.rb_peeq, QtCore.SIGNAL("toggled(bool)"), self.peeq_selected)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_none, QtCore.SIGNAL("toggled(bool)"),
|
||||
self.none_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_abs_displacement,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.abs_displacement_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_x_displacement,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.x_displacement_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_y_displacement,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.y_displacement_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_z_displacement,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.z_displacement_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_temperature,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.temperature_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_vm_stress,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.vm_stress_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_maxprin,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.max_prin_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_minprin,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.min_prin_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_max_shear_stress,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.max_shear_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_massflowrate,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.massflowrate_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_networkpressure,
|
||||
QtCore.SIGNAL("toggled(bool)"),
|
||||
self.networkpressure_selected
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_peeq, QtCore.SIGNAL("toggled(bool)"),
|
||||
self.peeq_selected
|
||||
)
|
||||
|
||||
# displacement
|
||||
QtCore.QObject.connect(self.form.cb_show_displacement, QtCore.SIGNAL("clicked(bool)"), self.show_displacement)
|
||||
QtCore.QObject.connect(self.form.hsb_displacement_factor, QtCore.SIGNAL("valueChanged(int)"), self.hsb_disp_factor_changed)
|
||||
QtCore.QObject.connect(self.form.sb_displacement_factor, QtCore.SIGNAL("valueChanged(int)"), self.sb_disp_factor_changed)
|
||||
QtCore.QObject.connect(self.form.sb_displacement_factor_max, QtCore.SIGNAL("valueChanged(int)"), self.sb_disp_factor_max_changed)
|
||||
QtCore.QObject.connect(
|
||||
self.form.cb_show_displacement,
|
||||
QtCore.SIGNAL("clicked(bool)"),
|
||||
self.show_displacement
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.hsb_displacement_factor,
|
||||
QtCore.SIGNAL("valueChanged(int)"),
|
||||
self.hsb_disp_factor_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.sb_displacement_factor,
|
||||
QtCore.SIGNAL("valueChanged(int)"),
|
||||
self.sb_disp_factor_changed
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.sb_displacement_factor_max,
|
||||
QtCore.SIGNAL("valueChanged(int)"),
|
||||
self.sb_disp_factor_max_changed
|
||||
)
|
||||
|
||||
# user defined equation
|
||||
QtCore.QObject.connect(self.form.user_def_eq, QtCore.SIGNAL("textchanged()"), self.user_defined_text)
|
||||
QtCore.QObject.connect(self.form.calculate, QtCore.SIGNAL("clicked()"), self.calculate)
|
||||
QtCore.QObject.connect(
|
||||
self.form.user_def_eq,
|
||||
QtCore.SIGNAL("textchanged()"),
|
||||
self.user_defined_text
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.calculate,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.calculate
|
||||
)
|
||||
|
||||
self.update()
|
||||
if self.restore_result_settings_in_dialog:
|
||||
@@ -259,7 +342,10 @@ class _TaskPanelFemResultShow:
|
||||
FreeCAD.FEM_dialog["results_type"] = "Sabs"
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.StressValues)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.StressValues
|
||||
)
|
||||
(minm, avg, maxm) = self.get_result_stats("Sabs")
|
||||
self.set_result_stats("MPa", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
@@ -268,7 +354,10 @@ class _TaskPanelFemResultShow:
|
||||
FreeCAD.FEM_dialog["results_type"] = "MaxShear"
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.MaxShear)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.MaxShear
|
||||
)
|
||||
(minm, avg, maxm) = self.get_result_stats("MaxShear")
|
||||
self.set_result_stats("MPa", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
@@ -277,7 +366,10 @@ class _TaskPanelFemResultShow:
|
||||
FreeCAD.FEM_dialog["results_type"] = "MaxPrin"
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.PrincipalMax)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.PrincipalMax
|
||||
)
|
||||
(minm, avg, maxm) = self.get_result_stats("MaxPrin")
|
||||
self.set_result_stats("MPa", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
@@ -286,7 +378,10 @@ class _TaskPanelFemResultShow:
|
||||
FreeCAD.FEM_dialog["results_type"] = "Temp"
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.Temperature)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.Temperature
|
||||
)
|
||||
(minm, avg, maxm) = self.get_result_stats("Temp")
|
||||
self.set_result_stats("K", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
@@ -295,7 +390,10 @@ class _TaskPanelFemResultShow:
|
||||
FreeCAD.FEM_dialog["results_type"] = "MFlow"
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.MassFlowRate)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.MassFlowRate
|
||||
)
|
||||
(minm, avg, maxm) = self.get_result_stats("MFlow")
|
||||
self.set_result_stats("kg/s", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
@@ -304,7 +402,10 @@ class _TaskPanelFemResultShow:
|
||||
FreeCAD.FEM_dialog["results_type"] = "NPress"
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.NetworkPressure)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.NetworkPressure
|
||||
)
|
||||
(minm, avg, maxm) = self.get_result_stats("NPress")
|
||||
self.set_result_stats("MPa", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
@@ -313,7 +414,10 @@ class _TaskPanelFemResultShow:
|
||||
FreeCAD.FEM_dialog["results_type"] = "MinPrin"
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.PrincipalMin)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.PrincipalMin
|
||||
)
|
||||
(minm, avg, maxm) = self.get_result_stats("MinPrin")
|
||||
self.set_result_stats("MPa", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
@@ -322,7 +426,10 @@ class _TaskPanelFemResultShow:
|
||||
FreeCAD.FEM_dialog["results_type"] = "Peeq"
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.Peeq)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.Peeq
|
||||
)
|
||||
(minm, avg, maxm) = self.get_result_stats("Peeq")
|
||||
self.set_result_stats("", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
@@ -369,22 +476,36 @@ class _TaskPanelFemResultShow:
|
||||
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, UserDefinedFormula)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
UserDefinedFormula
|
||||
)
|
||||
self.set_result_stats("", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
del x, y, z, T, Von, Peeq, P1, P2, P3, sxx, syy, szz, sxy, sxz, syz, exx, eyy, ezz, exy, exz, eyz, MF, NP # Dummy use of the variables to get around flake8 error
|
||||
# Dummy use of the variables to get around flake8 error
|
||||
del x, y, z, T, Von, Peeq, P1, P2, P3
|
||||
del sxx, syy, szz, sxy, sxz, syz
|
||||
del exx, eyy, ezz, exy, exz, eyz
|
||||
del MF, NP
|
||||
|
||||
def select_displacement_type(self, disp_type):
|
||||
QApplication.setOverrideCursor(Qt.WaitCursor)
|
||||
if disp_type == "Uabs":
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, self.result_obj.DisplacementLengths)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.DisplacementLengths
|
||||
)
|
||||
else:
|
||||
match = {"U1": 0, "U2": 1, "U3": 2}
|
||||
d = list(zip(*self.result_obj.DisplacementVectors)) # list is needed, as zib-object is not subscriptable in py3
|
||||
# list is needed, as zib-object is not subscriptable in py3
|
||||
d = list(zip(*self.result_obj.DisplacementVectors))
|
||||
displacements = list(d[match[disp_type]])
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(self.result_obj.NodeNumbers, displacements)
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(
|
||||
self.result_obj.NodeNumbers,
|
||||
displacements
|
||||
)
|
||||
(minm, avg, maxm) = self.get_result_stats(disp_type)
|
||||
self.set_result_stats("mm", minm, avg, maxm)
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
@@ -413,7 +534,10 @@ class _TaskPanelFemResultShow:
|
||||
self.update_displacement()
|
||||
FreeCAD.FEM_dialog["result_obj"] = self.result_obj
|
||||
if self.suitable_results:
|
||||
self.mesh_obj.ViewObject.setNodeDisplacementByVectors(self.result_obj.NodeNumbers, self.result_obj.DisplacementVectors)
|
||||
self.mesh_obj.ViewObject.setNodeDisplacementByVectors(
|
||||
self.result_obj.NodeNumbers,
|
||||
self.result_obj.DisplacementVectors
|
||||
)
|
||||
self.update_displacement()
|
||||
QtGui.QApplication.restoreOverrideCursor()
|
||||
|
||||
@@ -473,7 +597,10 @@ class _TaskPanelFemResultShow:
|
||||
hide_parts_constraints()
|
||||
else:
|
||||
if not self.mesh_obj.FemMesh.VolumeCount:
|
||||
error_message = 'FEM: Graphical bending stress output for beam or shell FEM Meshes not yet supported.\n'
|
||||
error_message = (
|
||||
'FEM: Graphical bending stress output '
|
||||
'for beam or shell FEM Meshes not yet supported.\n'
|
||||
)
|
||||
FreeCAD.Console.PrintError(error_message)
|
||||
QtGui.QMessageBox.critical(None, 'No result object', error_message)
|
||||
else:
|
||||
@@ -492,7 +619,9 @@ class _TaskPanelFemResultShow:
|
||||
self.mesh_obj.ViewObject.setNodeColorByScalars(node_numbers, zero_values)
|
||||
|
||||
def reject(self):
|
||||
FreeCADGui.Control.closeDialog() # if the tasks panel is called from Command obj is not in edit mode thus reset edit does not close the dialog, maybe don't call but set in edit instead
|
||||
# if the tasks panel is called from Command obj is not in edit mode
|
||||
# thus reset edit does not close the dialog, maybe don't call but set in edit instead
|
||||
FreeCADGui.Control.closeDialog()
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
|
||||
|
||||
|
||||
@@ -95,7 +95,9 @@ class _TaskPanelFemSolverCalculix:
|
||||
'''The TaskPanel for CalculiX ccx tools solver object'''
|
||||
|
||||
def __init__(self, solver_object):
|
||||
self.form = FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/SolverCalculix.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/Fem/Resources/ui/SolverCalculix.ui"
|
||||
)
|
||||
|
||||
from femtools.ccxtools import CcxTools as ccx
|
||||
# we do not need to pass the analysis, it will be found on fea init
|
||||
@@ -110,21 +112,71 @@ class _TaskPanelFemSolverCalculix:
|
||||
self.fem_console_message = ''
|
||||
|
||||
# Connect Signals and Slots
|
||||
QtCore.QObject.connect(self.form.tb_choose_working_dir, QtCore.SIGNAL("clicked()"), self.choose_working_dir)
|
||||
QtCore.QObject.connect(self.form.pb_write_inp, QtCore.SIGNAL("clicked()"), self.write_input_file_handler)
|
||||
QtCore.QObject.connect(self.form.pb_edit_inp, QtCore.SIGNAL("clicked()"), self.editCalculixInputFile)
|
||||
QtCore.QObject.connect(self.form.pb_run_ccx, QtCore.SIGNAL("clicked()"), self.runCalculix)
|
||||
QtCore.QObject.connect(self.form.rb_static_analysis, QtCore.SIGNAL("clicked()"), self.select_static_analysis)
|
||||
QtCore.QObject.connect(self.form.rb_frequency_analysis, QtCore.SIGNAL("clicked()"), self.select_frequency_analysis)
|
||||
QtCore.QObject.connect(self.form.rb_thermomech_analysis, QtCore.SIGNAL("clicked()"), self.select_thermomech_analysis)
|
||||
QtCore.QObject.connect(self.form.rb_check_mesh, QtCore.SIGNAL("clicked()"), self.select_check_mesh)
|
||||
|
||||
QtCore.QObject.connect(self.Calculix, QtCore.SIGNAL("started()"), self.calculixStarted)
|
||||
QtCore.QObject.connect(self.Calculix, QtCore.SIGNAL("stateChanged(QProcess::ProcessState)"), self.calculixStateChanged)
|
||||
QtCore.QObject.connect(self.Calculix, QtCore.SIGNAL("error(QProcess::ProcessError)"), self.calculixError)
|
||||
QtCore.QObject.connect(self.Calculix, QtCore.SIGNAL("finished(int)"), self.calculixFinished)
|
||||
|
||||
QtCore.QObject.connect(self.Timer, QtCore.SIGNAL("timeout()"), self.UpdateText)
|
||||
QtCore.QObject.connect(
|
||||
self.form.tb_choose_working_dir,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.choose_working_dir
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.pb_write_inp,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.write_input_file_handle
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.pb_edit_inp,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.editCalculixInputFile
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.pb_run_ccx,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.runCalculix
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_static_analysis,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.select_static_analysis
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_frequency_analysis,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.select_frequency_analysis
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_thermomech_analysis,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.select_thermomech_analysis
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.rb_check_mesh,
|
||||
QtCore.SIGNAL("clicked()"),
|
||||
self.select_check_mesh
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.Calculix,
|
||||
QtCore.SIGNAL("started()"),
|
||||
self.calculixStarted
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.Calculix,
|
||||
QtCore.SIGNAL("stateChanged(QProcess::ProcessState)"),
|
||||
self.calculixStateChanged
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.Calculix,
|
||||
QtCore.SIGNAL("error(QProcess::ProcessError)"),
|
||||
self.calculixError
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.Calculix,
|
||||
QtCore.SIGNAL("finished(int)"),
|
||||
self.calculixFinished
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.Timer,
|
||||
QtCore.SIGNAL("timeout()"),
|
||||
self.UpdateText
|
||||
)
|
||||
|
||||
self.update()
|
||||
|
||||
@@ -152,8 +204,10 @@ class _TaskPanelFemSolverCalculix:
|
||||
def femConsoleMessage(self, message="", color="#000000"):
|
||||
if sys.version_info.major < 3:
|
||||
message = message.encode("utf-8", "replace")
|
||||
self.fem_console_message = self.fem_console_message + '<font color="#0000FF">{0:4.1f}:</font> <font color="{1}">{2}</font><br>'.\
|
||||
format(time.time() - self.Start, color, message)
|
||||
self.fem_console_message = self.fem_console_message + (
|
||||
'<font color="#0000FF">{0:4.1f}:</font> <font color="{1}">{2}</font><br>'
|
||||
.format(time.time() - self.Start, color, message)
|
||||
)
|
||||
self.form.textEdit_Output.setText(self.fem_console_message)
|
||||
self.form.textEdit_Output.moveCursor(QtGui.QTextCursor.End)
|
||||
|
||||
@@ -298,7 +352,10 @@ class _TaskPanelFemSolverCalculix:
|
||||
if ext_editor_path:
|
||||
self.start_ext_editor(ext_editor_path, self.fea.inp_file_name)
|
||||
else:
|
||||
print("External editor is not defined in FEM preferences. Falling back to internal editor")
|
||||
print(
|
||||
"External editor is not defined in FEM preferences. "
|
||||
"Falling back to internal editor"
|
||||
)
|
||||
FemGui.open(self.fea.inp_file_name)
|
||||
|
||||
def runCalculix(self):
|
||||
@@ -309,7 +366,10 @@ class _TaskPanelFemSolverCalculix:
|
||||
self.femConsoleMessage("Run CalculiX...")
|
||||
|
||||
# run Calculix
|
||||
print('run CalculiX at: {} with: {}'.format(self.fea.ccx_binary, os.path.splitext(self.fea.inp_file_name)[0]))
|
||||
print(
|
||||
'run CalculiX at: {} with: {}'
|
||||
.format(self.fea.ccx_binary, os.path.splitext(self.fea.inp_file_name)[0])
|
||||
)
|
||||
# change cwd because ccx may crash if directory has no write permission
|
||||
# there is also a limit of the length of file names so jump to the document directory
|
||||
self.cwd = QtCore.QDir.currentPath()
|
||||
|
||||
Reference in New Issue
Block a user