From 09fe84abbf43d26bf62f0cd87e9287026edf9cc6 Mon Sep 17 00:00:00 2001 From: jriegel Date: Thu, 28 Nov 2013 23:30:21 +0100 Subject: [PATCH] Finish Displacement and animation of it. --- src/Mod/Fem/Gui/ViewProviderFemMesh.cpp | 23 +++++++++++++++++++- src/Mod/Fem/Gui/ViewProviderFemMeshPyImp.cpp | 11 +++++++--- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp index 1335d2b0f..6c40269b3 100755 --- a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp @@ -213,6 +213,7 @@ ViewProviderFemMesh::ViewProviderFemMesh() pcPointMaterial->ref(); //PointMaterial.touch(); + DisplacementFactor = 0; } ViewProviderFemMesh::~ViewProviderFemMesh() @@ -548,8 +549,28 @@ void ViewProviderFemMesh::resetDisplacementByNodeId(void) /// reaply the node displacement with a certain factor and do a redraw void ViewProviderFemMesh::animateNodes(double factor) { + float x,y,z; + // set the point coordinates + long sz = pcCoords->point.getNum(); + SbVec3f* verts = pcCoords->point.startEditing(); + for (long i=0;i < sz ;i++) { + verts[i].getValue(x,y,z); + // undo old factor# + Base::Vector3d oldDisp = DisplacementVector[i] * DisplacementFactor; + x -= oldDisp.x; + y -= oldDisp.y; + z -= oldDisp.z; + // apply new factor + Base::Vector3d newDisp = DisplacementVector[i] * factor; + x += newDisp.x; + y += newDisp.y; + z += newDisp.z; + // set the new value + verts[i].setValue(x,y,z); + } + pcCoords->point.finishEditing(); - + DisplacementFactor = factor; } diff --git a/src/Mod/Fem/Gui/ViewProviderFemMeshPyImp.cpp b/src/Mod/Fem/Gui/ViewProviderFemMeshPyImp.cpp index 75d738713..e19204b6c 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemMeshPyImp.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemMeshPyImp.cpp @@ -20,10 +20,15 @@ std::string ViewProviderFemMeshPy::representation(void) const -PyObject* ViewProviderFemMeshPy::animate(PyObject * /*args*/) +PyObject* ViewProviderFemMeshPy::animate(PyObject * args) { - PyErr_SetString(PyExc_NotImplementedError, "Not yet implemented"); - return 0; + double factor; + if (!PyArg_ParseTuple(args, "d", &factor)) + return 0; + + this->getViewProviderFemMeshPtr()->animateNodes(factor); + + Py_Return; }