From dd72ea6ab08ef12084e29a829cb4c8ae91ef2959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tr=C3=B6ger?= Date: Fri, 1 Jan 2016 20:19:55 +0100 Subject: [PATCH] FEM Post: Clean up work --- src/Mod/Fem/App/FemPostFilter.cpp | 9 +++- src/Mod/Fem/App/FemPostFilter.h | 1 + src/Mod/Fem/App/FemPostPipeline.cpp | 32 ++++++++++++- .../Fem/Gui/ViewProviderFemPostFunction.cpp | 20 +------- src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp | 46 +++++-------------- .../Fem/Gui/ViewProviderFemPostPipeline.cpp | 6 +-- 6 files changed, 51 insertions(+), 63 deletions(-) diff --git a/src/Mod/Fem/App/FemPostFilter.cpp b/src/Mod/Fem/App/FemPostFilter.cpp index f20e36d6f..f21773638 100644 --- a/src/Mod/Fem/App/FemPostFilter.cpp +++ b/src/Mod/Fem/App/FemPostFilter.cpp @@ -67,7 +67,6 @@ void FemPostFilter::setActiveFilterPipeline(std::string name) { DocumentObjectExecReturn* FemPostFilter::execute(void) { - Base::Console().Message("Recalculate filter\n"); if(!m_pipelines.empty() && !m_activePipeline.empty()) { FemPostFilter::FilterPipeline& pipe = m_pipelines[m_activePipeline]; @@ -76,7 +75,6 @@ DocumentObjectExecReturn* FemPostFilter::execute(void) { Data.setValue(pipe.target->GetOutputDataObject(0)); } - Base::Console().Message("Done Recalculate filter\n"); return StdReturn; } @@ -165,6 +163,13 @@ short int FemPostClipFilter::mustExecute(void) const { else return App::DocumentObject::mustExecute(); } +DocumentObjectExecReturn* FemPostClipFilter::execute(void) { + + if(!m_extractor->GetImplicitFunction()) + return StdReturn; + + return Fem::FemPostFilter::execute(); +} diff --git a/src/Mod/Fem/App/FemPostFilter.h b/src/Mod/Fem/App/FemPostFilter.h index 17773a1ff..e5ed2d355 100644 --- a/src/Mod/Fem/App/FemPostFilter.h +++ b/src/Mod/Fem/App/FemPostFilter.h @@ -86,6 +86,7 @@ public: return "FemGui::ViewProviderFemPostClip"; } virtual short int mustExecute(void) const; + virtual App::DocumentObjectExecReturn* execute(void); protected: virtual void onChanged(const App::Property* prop); diff --git a/src/Mod/Fem/App/FemPostPipeline.cpp b/src/Mod/Fem/App/FemPostPipeline.cpp index 304d10fc5..2e5ed2b58 100644 --- a/src/Mod/Fem/App/FemPostPipeline.cpp +++ b/src/Mod/Fem/App/FemPostPipeline.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include #include #include @@ -76,15 +77,42 @@ FemPostPipeline::~FemPostPipeline() short FemPostPipeline::mustExecute(void) const { - return 1; + if(Mode.isTouched()) + return 1; + + return FemPostFilter::mustExecute(); } DocumentObjectExecReturn* FemPostPipeline::execute(void) { - + //if we are the toplevel pipeline our data object is not created by filters, we are the main source! + if(!Input.getValue()) + return StdReturn; + + //now if we are a filter than our data object is created by the filter we hold + //if we are in serial mode we just copy over the data of the last filter, //but if we are in parallel we need to combine all filter results + if(Mode.getValue() == 0) { + //serial + Data.setValue(getLastPostObject()->Data.getValue()); + } + else { + + //parallel. go through all filters and append the result + const std::vector& filters = Filter.getValues(); + std::vector::const_iterator it = filters.begin(); + + vtkSmartPointer append = vtkSmartPointer::New(); + for(;it != filters.end(); ++it) { + + append->AddInputDataObject(static_cast(*it)->Data.getValue()); + } + + append->Update(); + Data.setValue(append->GetOutputDataObject(0)); + } return Fem::FemPostObject::execute(); diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostFunction.cpp b/src/Mod/Fem/Gui/ViewProviderFemPostFunction.cpp index c3242936a..fabd6136b 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostFunction.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemPostFunction.cpp @@ -249,7 +249,6 @@ void ViewProviderFemPostFunction::dragFinishCallback(void *data, SoDragger *) void ViewProviderFemPostFunction::dragMotionCallback(void *data, SoDragger *drag) { - Base::Console().Message("dragger callback\n"); ViewProviderFemPostFunction* that = reinterpret_cast(data); that->draggerUpdate(drag); @@ -346,8 +345,6 @@ ViewProviderFemPostPlaneFunction::~ViewProviderFemPostPlaneFunction() { void ViewProviderFemPostPlaneFunction::draggerUpdate(SoDragger* m) { - Base::Console().Message("dragger udate\n"); - Fem::FemPostPlaneFunction* func = static_cast(getObject()); SoCenterballDragger* dragger = static_cast(m); @@ -360,18 +357,10 @@ void ViewProviderFemPostPlaneFunction::draggerUpdate(SoDragger* m) { func->Origin.setValue(center[0], center[1], center[2]); func->Normal.setValue(norm[0],norm[1],norm[2]); - SbVec3f c = static_cast(getManipulator())->center.getValue(); SbVec3f t = static_cast(getManipulator())->translation.getValue(); - SbVec3f s = static_cast(getManipulator())->scaleFactor.getValue(); SbVec3f rt, irt; dragger->rotation.getValue().multVec(t,rt); dragger->rotation.getValue().inverse().multVec(t,irt); - Base::Console().Message("Center: %f, %f, %f\n", c[0], c[1], c[2]); - Base::Console().Message("Translation: %f, %f, %f\n", t[0], t[1], t[2]); - Base::Console().Message("Rot Translation: %f, %f, %f\n", rt[0], rt[1], rt[2]); - Base::Console().Message("I Rot Translation: %f, %f, %f\n", irt[0], irt[1], irt[2]); - Base::Console().Message("Normal %f, %f, %f\n", norm[0], norm[1], norm[2]); - Base::Console().Message("Scale %f, %f, %f\n", s[0], s[1], s[2]); } void ViewProviderFemPostPlaneFunction::updateData(const App::Property* p) { @@ -382,9 +371,7 @@ void ViewProviderFemPostPlaneFunction::updateData(const App::Property* p) { Base::Vector3d trans = func->Origin.getValue(); Base::Vector3d norm = func->Normal.getValue(); - Base::Console().Message("Translation: %f, %f, %f\n", trans.x, trans.y, trans.z); - Base::Console().Message("Normal %f, %f, %f\n", norm.x, norm.y, norm.z); - + norm = norm / norm.Length(); SbRotation rot(SbVec3f(0.,0.,1.), SbVec3f(norm.x, norm.y, norm.z)); @@ -393,9 +380,6 @@ void ViewProviderFemPostPlaneFunction::updateData(const App::Property* p) { translate.setTranslate(SbVec3f(trans.x, trans.y, trans.z)); t.multRight(translate); getManipulator()->setMatrix(t); - - Base::Console().Message("Matrix:\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n%f %f %f %f\n\n", t[0][0], t[0][1], t[0][2], t[0][3], - t[1][0], t[1][1], t[1][2], t[1][3], t[2][0], t[2][1], t[2][2], t[2][3], t[3][0], t[3][1], t[3][2], t[3][3]); } Gui::ViewProviderDocumentObject::updateData(p); } @@ -533,8 +517,6 @@ SoTransformManip* ViewProviderFemPostSphereFunction::setupManipulator() { void ViewProviderFemPostSphereFunction::draggerUpdate(SoDragger* m) { - Base::Console().Message("dragger udate\n"); - Fem::FemPostSphereFunction* func = static_cast(getObject()); SoHandleBoxDragger* dragger = static_cast(m); diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp b/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp index c346007b2..46f9eefb1 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemPostObject.cpp @@ -91,6 +91,8 @@ ViewProviderFemPostObject::ViewProviderFemPostObject() : m_blockPropertyChanges( m_lines->ref(); m_drawStyle = new SoDrawStyle(); m_drawStyle->ref(); + m_drawStyle->lineWidth.setValue(2); + m_drawStyle->pointSize.setValue(3); m_seperator = new SoSeparator(); m_seperator->ref(); @@ -129,30 +131,17 @@ void ViewProviderFemPostObject::attach(App::DocumentObject *pcObj) { ViewProviderDocumentObject::attach(pcObj); - // flat - SoGroup* pcFlatRoot = new SoGroup(); // face nodes - pcFlatRoot->addChild(m_coordinates); - pcFlatRoot->addChild(m_shapeHints); - pcFlatRoot->addChild(m_material); - pcFlatRoot->addChild(m_materialBinding); - pcFlatRoot->addChild(m_faces); - - // line - SoGroup* pcWireRoot = new SoGroup(); - pcWireRoot->addChild(m_coordinates); - pcWireRoot->addChild(m_drawStyle); - pcWireRoot->addChild(m_lines); - - // Points - SoGroup* pcPointsRoot = new SoSeparator(); - pcPointsRoot->addChild(m_coordinates); - pcPointsRoot->addChild(m_markers); + m_seperator->addChild(m_shapeHints); + m_seperator->addChild(m_drawStyle); + m_seperator->addChild(m_materialBinding); + m_seperator->addChild(m_material); + m_seperator->addChild(m_coordinates); + m_seperator->addChild(m_markers); + m_seperator->addChild(m_lines); + m_seperator->addChild(m_faces); //all - m_seperator->addChild(pcFlatRoot); - m_seperator->addChild(pcWireRoot); - m_seperator->addChild(pcPointsRoot); addDisplayMaskMode(m_seperator, "Default"); setDisplayMaskMode("Default"); @@ -291,7 +280,6 @@ void ViewProviderFemPostObject::update3D() { // write out polys if any if (pd->GetNumberOfPolys() > 0) { - Base::Console().Message("render polys: %i\n", pd->GetNumberOfPolys()); m_faces->coordIndex.startEditing(); int soidx = 0; cells = pd->GetPolys(); @@ -314,7 +302,6 @@ void ViewProviderFemPostObject::update3D() { // write out tstrips if any if (pd->GetNumberOfStrips() > 0) { - Base::Console().Message("render strips\n"); int soidx = 0; cells = pd->GetStrips(); m_triangleStrips->coordIndex.startEditing(); @@ -336,7 +323,6 @@ void ViewProviderFemPostObject::update3D() { // write out lines if any if (pd->GetNumberOfLines() > 0) { - Base::Console().Message("render lines: %i\n", pd->GetNumberOfLines()); int soidx = 0; cells = pd->GetLines(); m_lines->coordIndex.startEditing(); @@ -357,7 +343,6 @@ void ViewProviderFemPostObject::update3D() { // write out verts if any if (pd->GetNumberOfVerts() > 0){ - Base::Console().Message("render verts: %i\n", pd->GetNumberOfVerts()); int soidx = 0; cells = pd->GetVerts(); m_markers->coordIndex.startEditing(); @@ -381,9 +366,6 @@ void ViewProviderFemPostObject::WritePointData(vtkPoints* points, vtkDataArray* if(!points) return; - Base::Console().Message("render points: %i", points->GetNumberOfPoints()); - Base::Console().Message("\n"); - m_coordinates->point.startEditing(); m_coordinates->point.setNum(points->GetNumberOfPoints()); for (i = 0; i < points->GetNumberOfPoints(); i++) { @@ -395,7 +377,6 @@ void ViewProviderFemPostObject::WritePointData(vtkPoints* points, vtkDataArray* // write out the point normal data if (normals) { - Base::Console().Message("Write normals: %i\n", normals->GetNumberOfTuples()); m_normals->vector.startEditing(); m_normals->vector.setNum(normals->GetNumberOfTuples()); for (i = 0; i < normals->GetNumberOfTuples(); i++) { @@ -464,12 +445,7 @@ void ViewProviderFemPostObject::WriteColorData() { void ViewProviderFemPostObject::WriteTransperency() { float trans = float(Transperency.getValue()) / 100.; - - m_material->transparency.startEditing(); - for(int i=0; idiffuseColor.getNum(); ++i) - m_material->transparency.set1Value(i, trans); - - m_material->transparency.finishEditing(); + m_material->transparency.setValue(trans); } diff --git a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp index f6fb84a25..8687c9cb6 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemPostPipeline.cpp @@ -51,7 +51,6 @@ std::vector< App::DocumentObject* > ViewProviderFemPostPipeline::claimChildren(v children.push_back(pipeline->Functions.getValue()); children.insert(children.end(), pipeline->Filter.getValues().begin(), pipeline->Filter.getValues().end()); - Base::Console().Message("claim children pipeline: %i\n", children.size()); return children; } @@ -63,10 +62,7 @@ std::vector< App::DocumentObject* > ViewProviderFemPostPipeline::claimChildren3D void ViewProviderFemPostPipeline::updateData(const App::Property* prop) { FemGui::ViewProviderFemPostObject::onChanged(prop); - if(strcmp(prop->getName(), "ModificationTime") == 0) { - updateFunctionSize(); - } - else if(strcmp(prop->getName(), "Function") == 0) { + if(strcmp(prop->getName(), "Function") == 0) { updateFunctionSize(); }