diff --git a/src/Mod/Fem/App/FemMesh.cpp b/src/Mod/Fem/App/FemMesh.cpp index 935627b01..59dc65f2a 100755 --- a/src/Mod/Fem/App/FemMesh.cpp +++ b/src/Mod/Fem/App/FemMesh.cpp @@ -890,3 +890,25 @@ Data::Segment* FemMesh::getSubElement(const char* Type, unsigned long n) const //return new ShapeSegment(getSubShape(temp.c_str())); return 0; } + +struct Fem::FemMesh::FemMeshInfo FemMesh::getInfo(void) const{ + + struct FemMeshInfo rtrn; + + SMESHDS_Mesh* data = const_cast(getSMesh())->GetMeshDS(); + const SMDS_MeshInfo& info = data->GetMeshInfo(); + rtrn.numFaces = data->NbFaces(); + rtrn.numNode = info.NbNodes(); + rtrn.numTria = info.NbTriangles(); + rtrn.numQuad = info.NbQuadrangles(); + rtrn.numPoly = info.NbPolygons(); + rtrn.numVolu = info.NbVolumes(); + rtrn.numTetr = info.NbTetras(); + rtrn.numHexa = info.NbHexas(); + rtrn.numPyrd = info.NbPyramids(); + rtrn.numPris = info.NbPrisms(); + rtrn.numHedr = info.NbPolyhedrons(); + + return rtrn; + +} \ No newline at end of file diff --git a/src/Mod/Fem/App/FemMesh.h b/src/Mod/Fem/App/FemMesh.h index 726845637..dd382005b 100755 --- a/src/Mod/Fem/App/FemMesh.h +++ b/src/Mod/Fem/App/FemMesh.h @@ -104,6 +104,23 @@ public: void transformGeometry(const Base::Matrix4D &rclMat); //@} + struct FemMeshInfo { + int numFaces; + int numNode; + int numTria; + int numQuad; + int numPoly; + int numVolu; + int numTetr; + int numHexa; + int numPyrd; + int numPris; + int numHedr; + }; + + /// + struct FemMeshInfo getInfo(void) const; + /// import from files void read(const char *FileName); void write(const char *FileName) const; diff --git a/src/Mod/Fem/Gui/TaskDlgMeshShapeNetgen.cpp b/src/Mod/Fem/Gui/TaskDlgMeshShapeNetgen.cpp index 5822b4149..3dc737336 100644 --- a/src/Mod/Fem/Gui/TaskDlgMeshShapeNetgen.cpp +++ b/src/Mod/Fem/Gui/TaskDlgMeshShapeNetgen.cpp @@ -77,11 +77,13 @@ void TaskDlgMeshShapeNetgen::open() void TaskDlgMeshShapeNetgen::clicked(int button) { try { - if(QDialogButtonBox::Apply == button) + if(QDialogButtonBox::Apply == button && param->touched) { Gui::WaitCursor wc; // May throw an exception which we must handle here FemMeshShapeNetgenObject->execute(); + param->setInfo(); + param->touched = false; } } catch (const Base::Exception& e) { @@ -92,8 +94,11 @@ void TaskDlgMeshShapeNetgen::clicked(int button) bool TaskDlgMeshShapeNetgen::accept() { try { - Gui::WaitCursor wc; - FemMeshShapeNetgenObject->recompute(); + if(param->touched) + { + Gui::WaitCursor wc; + FemMeshShapeNetgenObject->recompute(); + } //FemSetNodesObject->Label.setValue(name->name); Gui::Command::doCommand(Gui::Command::Gui,"Gui.activeDocument().resetEdit()"); diff --git a/src/Mod/Fem/Gui/TaskTetParameter.cpp b/src/Mod/Fem/Gui/TaskTetParameter.cpp index 55ead33e3..da1177678 100644 --- a/src/Mod/Fem/Gui/TaskTetParameter.cpp +++ b/src/Mod/Fem/Gui/TaskTetParameter.cpp @@ -40,6 +40,7 @@ #include #include #include +#include using namespace FemGui; @@ -77,6 +78,12 @@ TaskTetParameter::TaskTetParameter(Fem::FemMeshShapeNetgenObject *pcObject,QWidg QObject::connect(ui->spinBox_SegsPerRadius,SIGNAL(valueChanged (int)),this,SLOT(setSegsPerRadius(int))); QObject::connect(ui->checkBox_Optimize,SIGNAL(stateChanged (int)),this,SLOT(setOptimize(int))); + if(pcObject->FemMesh.getValue().getInfo().numNode == 0) + touched = true; + else + touched = false; + + setInfo(); } TaskTetParameter::~TaskTetParameter() @@ -97,45 +104,64 @@ void TaskTetParameter::SwitchMethod(int Value) } pcObject->Fininess.setValue(Value); + touched = true; } void TaskTetParameter::maxSizeValueChanged(double Value) { pcObject->MaxSize.setValue(Value); + touched = true; + } void TaskTetParameter::setQuadric(int s) { pcObject->SecondOrder.setValue(s!=0); + touched = true; } void TaskTetParameter::setGrothRate(double v) { pcObject->GrothRate.setValue(v); + touched = true; + } void TaskTetParameter::setSegsPerEdge(int v) { pcObject->NbSegsPerEdge.setValue(v); + touched = true; } void TaskTetParameter::setSegsPerRadius(int v) { pcObject->NbSegsPerRadius.setValue(v); + touched = true; } void TaskTetParameter::setOptimize(int v) { pcObject->Optimize.setValue(v!=0); + touched = true; } +void TaskTetParameter::setInfo(void) +{ + Fem::FemMesh::FemMeshInfo info = pcObject->FemMesh.getValue().getInfo(); + //Base::BoundBox3d bndBox = pcObject->FemMesh.getValue().getBoundBox(); + + + ui->lineEdit_InfoNodes ->setText(QString::number(info.numNode)); + ui->lineEdit_InfoTriangle ->setText(QString::number(info.numFaces)); + ui->lineEdit_InfoTet ->setText(QString::number(info.numTetr)); +} + + - - #include "moc_TaskTetParameter.cpp" diff --git a/src/Mod/Fem/Gui/TaskTetParameter.h b/src/Mod/Fem/Gui/TaskTetParameter.h index 2e14557be..685345490 100644 --- a/src/Mod/Fem/Gui/TaskTetParameter.h +++ b/src/Mod/Fem/Gui/TaskTetParameter.h @@ -59,6 +59,9 @@ public: ~TaskTetParameter(); ViewProviderFemMeshShapeNetgen * MeshViewProvider; + void setInfo(void); + + bool touched; private Q_SLOTS: void SwitchMethod(int Value); diff --git a/src/Mod/Fem/Gui/TaskTetParameter.ui b/src/Mod/Fem/Gui/TaskTetParameter.ui index efca147c3..ca5dabf5d 100644 --- a/src/Mod/Fem/Gui/TaskTetParameter.ui +++ b/src/Mod/Fem/Gui/TaskTetParameter.ui @@ -7,7 +7,7 @@ 0 0 221 - 196 + 311 @@ -148,6 +148,62 @@ + + + + Qt::Horizontal + + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Node count: + + + + + + + true + + + + + + + Triangle count: + + + + + + + true + + + + + + + Tetraeder count: + + + + + + + true + + + + +