Skip to content

Commit

Permalink
FEM: constraint plane rotation: object implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
stoflap authored and wwmayer committed Aug 4, 2016
1 parent 9107e92 commit fdee687
Show file tree
Hide file tree
Showing 13 changed files with 904 additions and 5 deletions.
6 changes: 4 additions & 2 deletions src/Mod/Fem/App/AppFem.cpp
Expand Up @@ -51,6 +51,7 @@
#include "FemConstraintGear.h"
#include "FemConstraintPulley.h"
#include "FemConstraintDisplacement.h"
#include "FemConstraintPlaneRotation.h"
#include "FemConstraintContact.h"

#include "FemResultObject.h"
Expand Down Expand Up @@ -148,12 +149,13 @@ PyMODINIT_FUNC initFem()
Fem::ConstraintGear ::init();
Fem::ConstraintPulley ::init();
Fem::ConstraintDisplacement ::init();
Fem::ConstraintContact ::init();
Fem::ConstraintPlaneRotation ::init();
Fem::ConstraintContact ::init();

Fem::FemResultObject ::init();
Fem::FemSolverObject ::init();
Fem::FemSolverObjectPython ::init();

#ifdef FC_USE_VTK
Fem::FemPostObject ::init();
Fem::FemPostPipeline ::init();
Expand Down
2 changes: 2 additions & 0 deletions src/Mod/Fem/App/CMakeLists.txt
Expand Up @@ -200,6 +200,8 @@ SET(FemConstraints_SRCS
FemConstraintPulley.h
FemConstraintDisplacement.h
FemConstraintDisplacement.cpp
FemConstraintPlaneRotation.cpp
FemConstraintPlaneRotation.h
FemConstraintContact.cpp
FemConstraintContact.h
)
Expand Down
78 changes: 78 additions & 0 deletions src/Mod/Fem/App/FemConstraintPlaneRotation.cpp
@@ -0,0 +1,78 @@
/***************************************************************************
* Copyright (c) 2013 Jan Rheinländer <jrheinlaender[at]users.sourceforge.net> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/


#include "PreCompiled.h"

#ifndef _PreComp_
#include <BRepAdaptor_Curve.hxx>
#include <BRepAdaptor_Surface.hxx>
#include <Precision.hxx>
#include <TopoDS.hxx>
#include <gp_Lin.hxx>
#include <gp_Pln.hxx>
#include <gp_Pnt.hxx>
#endif

#include "FemConstraintPlaneRotation.h"

using namespace Fem;

PROPERTY_SOURCE(Fem::ConstraintPlaneRotation, Fem::Constraint);

ConstraintPlaneRotation::ConstraintPlaneRotation()
{

ADD_PROPERTY_TYPE(Points,(Base::Vector3d()),"ConstraintPlaneRotation",App::PropertyType(App::Prop_ReadOnly|App::Prop_Output),
"Points where symbols are drawn");
ADD_PROPERTY_TYPE(Normals,(Base::Vector3d()),"ConstraintPlaneRotation",App::PropertyType(App::Prop_ReadOnly|App::Prop_Output),
"Normals where symbols are drawn");
Points.setValues(std::vector<Base::Vector3d>());
Normals.setValues(std::vector<Base::Vector3d>());
}

App::DocumentObjectExecReturn *ConstraintPlaneRotation::execute(void)
{
return Constraint::execute();
}

const char* ConstraintPlaneRotation::getViewProviderName(void) const
{
return "FemGui::ViewProviderFemConstraintPlaneRotation";
}

void ConstraintPlaneRotation::onChanged(const App::Property* prop)
{
Constraint::onChanged(prop);

if (prop == &References) {
std::vector<Base::Vector3d> points;
std::vector<Base::Vector3d> normals;
int scale = 1; //OvG: Enforce use of scale
if (getPoints(points, normals, &scale)) {
Points.setValues(points);
Normals.setValues(normals);
Scale.setValue(scale); //OvG: Scale
Points.touch(); // This triggers ViewProvider::updateData()
}
}
}
59 changes: 59 additions & 0 deletions src/Mod/Fem/App/FemConstraintPlaneRotation.h
@@ -0,0 +1,59 @@
/***************************************************************************
* Copyright (c) 2013 Jan Rheinländer <jrheinlaender[at]users.sourceforge.net> *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/


#ifndef FEM_CONSTRAINTPLANEROTATION_H
#define FEM_CONSTRAINTPLANEROTATION_H

#include "FemConstraint.h"

namespace Fem
{

class AppFemExport ConstraintPlaneRotation : public Fem::Constraint
{
PROPERTY_HEADER(Fem::ConstraintPlaneRotation);

public:
/// Constructor
ConstraintPlaneRotation(void);

// Read-only (calculated values). These trigger changes in the ViewProvider
App::PropertyVectorList Points;
App::PropertyVectorList Normals;


/// recalculate the object
virtual App::DocumentObjectExecReturn *execute(void);

/// returns the type name of the ViewProvider
const char* getViewProviderName(void) const;

protected:
virtual void onChanged(const App::Property* prop);

};

} //namespace Fem


#endif // FEM_CONSTRAINTPLANEROTATION_H
6 changes: 4 additions & 2 deletions src/Mod/Fem/Gui/AppFemGui.cpp
Expand Up @@ -51,6 +51,7 @@
#include "ViewProviderFemConstraintGear.h"
#include "ViewProviderFemConstraintPulley.h"
#include "ViewProviderFemConstraintDisplacement.h"
#include "ViewProviderFemConstraintPlaneRotation.h"
#include "ViewProviderFemConstraintContact.h"
#include "ViewProviderResult.h"
#include "Workbench.h"
Expand Down Expand Up @@ -117,11 +118,12 @@ PyMODINIT_FUNC initFemGui()
FemGui::ViewProviderFemConstraintGear ::init();
FemGui::ViewProviderFemConstraintPulley ::init();
FemGui::ViewProviderFemConstraintDisplacement ::init();
FemGui::ViewProviderFemConstraintContact ::init();
FemGui::ViewProviderFemConstraintPlaneRotation::init();
FemGui::ViewProviderFemConstraintContact ::init();
FemGui::ViewProviderResult ::init();
FemGui::ViewProviderResultPython ::init();
FemGui::PropertyFemMeshItem ::init();

#ifdef FC_USE_VTK
FemGui::ViewProviderFemPostObject ::init();
FemGui::ViewProviderFemPostPipeline ::init();
Expand Down
7 changes: 7 additions & 0 deletions src/Mod/Fem/Gui/CMakeLists.txt
Expand Up @@ -64,6 +64,7 @@ set(FemGui_MOC_HDRS
TaskFemConstraintGear.h
TaskFemConstraintPulley.h
TaskFemConstraintDisplacement.h
TaskFemConstraintPlaneRotation.h
TaskFemConstraintContact.h
TaskTetParameter.h
TaskAnalysisInfo.h
Expand Down Expand Up @@ -91,6 +92,7 @@ set(FemGui_UIC_SRCS
TaskFemConstraintForce.ui
TaskFemConstraintPressure.ui
TaskFemConstraintDisplacement.ui
TaskFemConstraintPlaneRotation.ui
TaskFemConstraintContact.ui
TaskTetParameter.ui
TaskAnalysisInfo.ui
Expand Down Expand Up @@ -137,6 +139,9 @@ SET(FemGui_DLG_SRCS
TaskFemConstraintDisplacement.ui
TaskFemConstraintDisplacement.cpp
TaskFemConstraintDisplacement.h
TaskFemConstraintPlaneRotation.ui
TaskFemConstraintPlaneRotation.cpp
TaskFemConstraintPlaneRotation.h
TaskFemConstraintContact.ui
TaskFemConstraintContact.cpp
TaskFemConstraintContact.h
Expand Down Expand Up @@ -184,6 +189,8 @@ SET(FemGui_SRCS_ViewProvider
ViewProviderFemConstraintPulley.h
ViewProviderFemConstraintDisplacement.cpp
ViewProviderFemConstraintDisplacement.h
ViewProviderFemConstraintPlaneRotation.cpp
ViewProviderFemConstraintPlaneRotation.h
ViewProviderFemConstraintContact.cpp
ViewProviderFemConstraintContact.h
ViewProviderResult.cpp
Expand Down
44 changes: 43 additions & 1 deletion src/Mod/Fem/Gui/Command.cpp
Expand Up @@ -354,6 +354,47 @@ bool CmdFemConstraintFixed::isActive(void)

//=====================================================================================

DEF_STD_CMD_A(CmdFemConstraintPlaneRotation);

CmdFemConstraintPlaneRotation::CmdFemConstraintPlaneRotation()
: Command("Fem_ConstraintPlaneRotation")
{
sAppModule = "Fem";
sGroup = QT_TR_NOOP("Fem");
sMenuText = QT_TR_NOOP("Constraint plane rotation");
sToolTipText = QT_TR_NOOP("Creates a FEM constraint for plane rotation face");
sWhatsThis = "Fem_ConstraintPlaneRotation";
sStatusTip = sToolTipText;
sPixmap = "fem-constraint-planerotation";
}

void CmdFemConstraintPlaneRotation::activated(int iMsg)
{
Fem::FemAnalysis *Analysis;

if(getConstraintPrerequisits(&Analysis))
return;

std::string FeatName = getUniqueObjectName("FemConstraintPlaneRotation");

openCommand("Make FEM constraint Plane Rotation face");
doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintPlaneRotation\",\"%s\")",FeatName.c_str());
doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1
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 CmdFemConstraintPlaneRotation::isActive(void)
{
return FemGui::ActiveAnalysisObserver::instance()->hasActiveObject();
}

//=====================================================================================
DEF_STD_CMD_A(CmdFemConstraintContact);

CmdFemConstraintContact::CmdFemConstraintContact()
Expand Down Expand Up @@ -1188,7 +1229,8 @@ void CreateFemCommands(void)
rcCmdMgr.addCommand(new CmdFemConstraintGear());
rcCmdMgr.addCommand(new CmdFemConstraintPulley());
rcCmdMgr.addCommand(new CmdFemConstraintDisplacement());
rcCmdMgr.addCommand(new CmdFemConstraintContact());
rcCmdMgr.addCommand(new CmdFemConstraintPlaneRotation());
rcCmdMgr.addCommand(new CmdFemConstraintContact());

#ifdef FC_USE_VTK
rcCmdMgr.addCommand(new CmdFemPostCreateClipFilter);
Expand Down

0 comments on commit fdee687

Please sign in to comment.