| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| __title__ = "FreeCAD FEM solver Elmer equation base object" |
| __author__ = "Markus Hovorka" |
| __url__ = "https://www.freecad.org" |
|
|
| |
| |
|
|
| import FreeCAD as App |
| from ... import equationbase |
| from femtools import membertools |
|
|
| if App.GuiUp: |
| import FreeCADGui as Gui |
| from femguiutils import selection_widgets |
|
|
|
|
| class Proxy(equationbase.BaseProxy): |
|
|
| def __init__(self, obj): |
| super().__init__(obj) |
| obj.addProperty( |
| "App::PropertyInteger", |
| "Priority", |
| "Base", |
| ( |
| "Number of your choice\n" |
| "The equation with highest number\n" |
| "will be solved first." |
| ), |
| locked=True, |
| ) |
|
|
|
|
| class ViewProxy(equationbase.BaseViewProxy): |
|
|
| def setEdit(self, vobj, mode=0): |
| task = _TaskPanel(vobj.Object) |
| Gui.Control.showDialog(task) |
|
|
| def unsetEdit(self, vobj, mode=0): |
| Gui.Control.closeDialog() |
|
|
| def doubleClicked(self, vobj): |
| if Gui.Control.activeDialog(): |
| Gui.Control.closeDialog() |
| vobj.Document.setEdit(vobj.Object.Name) |
| return True |
|
|
| def getTaskWidget(self, vobj): |
| return None |
|
|
|
|
| class _TaskPanel: |
|
|
| def __init__(self, obj): |
| self._obj = obj |
| self._selectionWidget = selection_widgets.GeometryElementsSelection( |
| obj.References, ["Solid", "Face"], False, True |
| ) |
| |
| self._selectionWidget.rb_solid.setChecked(True) |
| propWidget = obj.ViewObject.Proxy.getTaskWidget(obj.ViewObject) |
| if propWidget is None: |
| self.form = self._selectionWidget |
| else: |
| self.form = [self._selectionWidget, propWidget] |
| analysis = obj.getParentGroup() |
| self._mesh = membertools.get_single_member(analysis, "Fem::FemMeshObject") |
| self._part = self._mesh.Shape if self._mesh is not None else None |
| self._partVisible = None |
| self._meshVisible = None |
|
|
| def open(self): |
| if self._mesh is not None and self._part is not None: |
| self._meshVisible = self._mesh.ViewObject.isVisible() |
| self._partVisible = self._part.ViewObject.isVisible() |
| self._mesh.ViewObject.hide() |
| self._part.ViewObject.show() |
|
|
| def reject(self): |
| self._selectionWidget.finish_selection() |
| self._recomputeAndRestore() |
| return True |
|
|
| def accept(self): |
| if self._obj.References != self._selectionWidget.references: |
| self._obj.References = self._selectionWidget.references |
| self._selectionWidget.finish_selection() |
| self._recomputeAndRestore() |
| return True |
|
|
| def _restoreVisibility(self): |
| if self._mesh is not None and self._part is not None: |
| if self._meshVisible: |
| self._mesh.ViewObject.show() |
| else: |
| self._mesh.ViewObject.hide() |
| if self._partVisible: |
| self._part.ViewObject.show() |
| else: |
| self._part.ViewObject.hide() |
|
|
| def _recomputeAndRestore(self): |
| doc = Gui.getDocument(self._obj.Document) |
| doc.Document.recompute() |
| self._restoreVisibility() |
| |
| |
| doc.resetEdit() |
|
|
|
|
| |
|
|