diff --git a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp index d2da267889..36ef6edf8f 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemMesh.cpp @@ -194,6 +194,7 @@ ViewProviderFemMesh::ViewProviderFemMesh() ShapeColor.setValue(App::Color(1.0f,0.7f,0.0f)); ADD_PROPERTY(BackfaceCulling,(true)); ADD_PROPERTY(ShowInner, (false)); + ADD_PROPERTY(MaxFacesShowInner,(50000)); onlyEdges = false; @@ -368,7 +369,7 @@ void ViewProviderFemMesh::updateData(const App::Property* prop) ViewProviderFEMMeshBuilder builder; resetColorByNodeId(); resetDisplacementByNodeId(); - builder.createMesh(prop, pcCoords, pcFaces, pcLines, vFaceElementIdx, vNodeElementIdx, onlyEdges, ShowInner.getValue()); + builder.createMesh(prop, pcCoords, pcFaces, pcLines, vFaceElementIdx, vNodeElementIdx, onlyEdges, ShowInner.getValue(), MaxFacesShowInner.getValue()); } Gui::ViewProviderGeometryObject::updateData(prop); } @@ -394,7 +395,7 @@ void ViewProviderFemMesh::onChanged(const App::Property* prop) else if (prop == &ShowInner ) { // recalc mesh with new settings ViewProviderFEMMeshBuilder builder; - builder.createMesh(&(dynamic_cast(this->pcObject)->FemMesh), pcCoords, pcFaces, pcLines, vFaceElementIdx, vNodeElementIdx, onlyEdges, ShowInner.getValue()); + builder.createMesh(&(dynamic_cast(this->pcObject)->FemMesh), pcCoords, pcFaces, pcLines, vFaceElementIdx, vNodeElementIdx, onlyEdges, ShowInner.getValue(), MaxFacesShowInner.getValue()); } else if (prop == &LineWidth) { pcDrawStyle->lineWidth = LineWidth.getValue(); @@ -689,7 +690,7 @@ void ViewProviderFEMMeshBuilder::buildNodes(const App::Property* prop, std::vect std::vector vFaceElementIdx; std::vector vNodeElementIdx; bool onlyEdges; - createMesh(prop, pcPointsCoord, pcFaces,pcLines,vFaceElementIdx,vNodeElementIdx,onlyEdges,false); + createMesh(prop, pcPointsCoord, pcFaces,pcLines,vFaceElementIdx,vNodeElementIdx,onlyEdges,false,0); } } @@ -716,7 +717,8 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, std::vector &vFaceElementIdx, std::vector &vNodeElementIdx, bool &onlyEdges, - bool ShowInner) const + bool ShowInner, + int MaxFacesShowInner) const { const Fem::PropertyFemMesh* mesh = static_cast(prop); @@ -922,7 +924,7 @@ void ViewProviderFEMMeshBuilder::createMesh(const App::Property* prop, int FaceSize = facesHelper.size(); - if( FaceSize < 5000){ + if( FaceSize < MaxFacesShowInner){ Base::Console().Log(" %f: Start eliminate internal faces SIMPLE\n",Base::TimeInfo::diffTimeF(Start,Base::TimeInfo())); // search for double (inside) faces and hide them diff --git a/src/Mod/Fem/Gui/ViewProviderFemMesh.h b/src/Mod/Fem/Gui/ViewProviderFemMesh.h index 6ba9f90c76..f83c7c114f 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemMesh.h +++ b/src/Mod/Fem/Gui/ViewProviderFemMesh.h @@ -53,7 +53,8 @@ public: std::vector&, std::vector&, bool &edgeOnly, - bool ShowInner + bool ShowInner, + int MaxFacesShowInner ) const; }; @@ -74,6 +75,7 @@ public: App::PropertyFloatConstraint LineWidth; App::PropertyBool BackfaceCulling; App::PropertyBool ShowInner; + App::PropertyInteger MaxFacesShowInner; void attach(App::DocumentObject *pcObject); void setDisplayMode(const char* ModeName);