FEM: mesh view provider, add property to adjust max faces to show inner mesh data

This commit is contained in:
Bernd Hahnebach
2017-02-28 11:51:33 +01:00
committed by wmayer
parent aa5fffce2e
commit 0e71f8f3d0
2 changed files with 10 additions and 6 deletions

View File

@@ -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<Fem::FemMeshObject*>(this->pcObject)->FemMesh), pcCoords, pcFaces, pcLines, vFaceElementIdx, vNodeElementIdx, onlyEdges, ShowInner.getValue());
builder.createMesh(&(dynamic_cast<Fem::FemMeshObject*>(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<unsigned long> vFaceElementIdx;
std::vector<unsigned long> 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<unsigned long> &vFaceElementIdx,
std::vector<unsigned long> &vNodeElementIdx,
bool &onlyEdges,
bool ShowInner) const
bool ShowInner,
int MaxFacesShowInner) const
{
const Fem::PropertyFemMesh* mesh = static_cast<const Fem::PropertyFemMesh*>(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

View File

@@ -53,7 +53,8 @@ public:
std::vector<unsigned long>&,
std::vector<unsigned long>&,
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);