diff --git a/src/Mod/Fem/Gui/Command.cpp b/src/Mod/Fem/Gui/Command.cpp
index 0f86c667e4..36e8a5a999 100644
--- a/src/Mod/Fem/Gui/Command.cpp
+++ b/src/Mod/Fem/Gui/Command.cpp
@@ -525,6 +525,52 @@ bool CmdFemConstraintForce::isActive(void)
return FemGui::ActiveAnalysisObserver::instance()->hasActiveObject();
}
+
+
+//=====================================================================================
+
+DEF_STD_CMD_A(CmdFemConstraintFluidBoundary);
+
+CmdFemConstraintFluidBoundary::CmdFemConstraintFluidBoundary()
+ : Command("Fem_ConstraintFluidBoundary")
+{
+ sAppModule = "Fem";
+ sGroup = QT_TR_NOOP("Fem");
+ sMenuText = QT_TR_NOOP("Create fluid condition condition");
+ sToolTipText = QT_TR_NOOP("Create fluid boundary condition on face entity");
+ sWhatsThis = "Fem_ConstraintFluidBoundary";
+ sStatusTip = sToolTipText;
+ sPixmap = "fem-constraint-fluid-boundary";
+}
+
+void CmdFemConstraintFluidBoundary::activated(int iMsg)
+{
+ Fem::FemAnalysis *Analysis;
+
+ if(getConstraintPrerequisits(&Analysis))
+ return;
+
+ std::string FeatName = getUniqueObjectName("ConstraintFluidBoundary");
+
+ openCommand("Create fluid boundary condition on face geometry");
+ doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintFluidBoundary\",\"%s\")",FeatName.c_str());
+ doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1
+ //BoundaryValue is already the default value
+ doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",
+ Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str());
+
+ doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts
+ updateActive();
+
+ doCommand(Gui,"Gui.activeDocument().setEdit('%s')",FeatName.c_str());
+}
+
+bool CmdFemConstraintFluidBoundary::isActive(void)
+{
+ return FemGui::ActiveAnalysisObserver::instance()->hasActiveObject();
+}
+
+
//=====================================================================================
DEF_STD_CMD_A(CmdFemConstraintPressure);
@@ -1363,7 +1409,7 @@ void CreateFemCommands(void)
rcCmdMgr.addCommand(new CmdFemConstraintInitialTemperature());
rcCmdMgr.addCommand(new CmdFemConstraintPlaneRotation());
rcCmdMgr.addCommand(new CmdFemConstraintContact());
-
+ rcCmdMgr.addCommand(new CmdFemConstraintFluidBoundary());
#ifdef FC_USE_VTK
rcCmdMgr.addCommand(new CmdFemPostCreateClipFilter);
rcCmdMgr.addCommand(new CmdFemPostCreateScalarClipFilter);
diff --git a/src/Mod/Fem/Gui/Resources/Fem.qrc b/src/Mod/Fem/Gui/Resources/Fem.qrc
index 647f7550f5..9e93196c3c 100755
--- a/src/Mod/Fem/Gui/Resources/Fem.qrc
+++ b/src/Mod/Fem/Gui/Resources/Fem.qrc
@@ -3,6 +3,8 @@
icons/fem-fem-mesh-from-shape.svg
icons/fem-fem-mesh-create-node-by-poly.svg
icons/fem-analysis.svg
+ icons/fem-cfd-analysis.svg
+ icons/fem-constraint-fluid-boundary.svg
icons/fem-solver.svg
icons/fem-constraint-displacement.svg
icons/fem-constraint-selfweight.svg
diff --git a/src/Mod/Fem/Gui/Resources/icons/fem-cfd-analysis.svg b/src/Mod/Fem/Gui/Resources/icons/fem-cfd-analysis.svg
new file mode 100644
index 0000000000..9a54242061
--- /dev/null
+++ b/src/Mod/Fem/Gui/Resources/icons/fem-cfd-analysis.svg
@@ -0,0 +1,135 @@
+
+
+
+
diff --git a/src/Mod/Fem/Gui/Resources/icons/fem-constraint-fluid-boundary.svg b/src/Mod/Fem/Gui/Resources/icons/fem-constraint-fluid-boundary.svg
new file mode 100644
index 0000000000..62a78bf5d8
--- /dev/null
+++ b/src/Mod/Fem/Gui/Resources/icons/fem-constraint-fluid-boundary.svg
@@ -0,0 +1,183 @@
+
+
+
+
diff --git a/src/Mod/Fem/Gui/Workbench.cpp b/src/Mod/Fem/Gui/Workbench.cpp
index ee927b57b1..aaf82f1157 100755
--- a/src/Mod/Fem/Gui/Workbench.cpp
+++ b/src/Mod/Fem/Gui/Workbench.cpp
@@ -68,7 +68,7 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
<< "Fem_ConstraintFixed"
<< "Fem_ConstraintDisplacement"
<< "Fem_ConstraintPlaneRotation"
- << "Fem_ConstraintContact"
+ << "Fem_ConstraintContact"
<< "Separator"
<< "Fem_ConstraintSelfWeight"
<< "Fem_ConstraintForce"
@@ -77,11 +77,13 @@ Gui::ToolBarItem* Workbench::setupToolBars() const
<< "Fem_ConstraintBearing"
<< "Fem_ConstraintGear"
<< "Fem_ConstraintPulley"
+ << "Separator"
+ << "Fem_ConstraintFluidBoundary"
<< "Separator"
<< "Fem_ConstraintTemperature"
<< "Fem_ConstraintHeatflux"
- << "Fem_ConstraintInitialTemperature"
- << "Separator"
+ << "Fem_ConstraintInitialTemperature"
+ << "Separator"
<< "Fem_ControlSolver"
<< "Fem_RunSolver"
<< "Separator"
@@ -125,7 +127,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const
<< "Fem_ConstraintFixed"
<< "Fem_ConstraintDisplacement"
<< "Fem_ConstraintPlaneRotation"
- << "Fem_ConstraintContact"
+ << "Fem_ConstraintContact"
<< "Separator"
<< "Fem_ConstraintSelfWeight"
<< "Fem_ConstraintForce"
@@ -135,10 +137,12 @@ Gui::MenuItem* Workbench::setupMenuBar() const
<< "Fem_ConstraintGear"
<< "Fem_ConstraintPulley"
<< "Separator"
+ << "Fem_ConstraintFluidBoundary"
+ << "Separator"
<< "Fem_ConstraintTemperature"
<< "Fem_ConstraintHeatflux"
- << "Fem_ConstraintInitialTemperature"
- << "Separator"
+ << "Fem_ConstraintInitialTemperature"
+ << "Separator"
<< "Fem_ControlSolver"
<< "Fem_RunSolver"
<< "Separator"