From ac4d4664438a7b7a83facbcc5c1fffd02ea55a68 Mon Sep 17 00:00:00 2001 From: vginkeo Date: Wed, 17 Feb 2016 09:13:47 +0200 Subject: [PATCH] FEM: Updated fix to constraint displacement reference deletion, update hide show, remove custom input writer, update vertice, edge, face selection. --- src/Base/QuantityLexer.c | 7 +- src/Mod/Fem/App/CMakeLists.txt | 1 - src/Mod/Fem/CMakeLists.txt | 2 - src/Mod/Fem/FemCommands.py | 4 +- src/Mod/Fem/Gui/Command.cpp | 23 ++--- src/Mod/Fem/Gui/TaskFemConstraint.cpp | 5 + src/Mod/Fem/Gui/TaskFemConstraint.h | 5 +- .../Fem/Gui/TaskFemConstraintDisplacement.cpp | 42 ++++++--- src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp | 11 +++ src/Mod/Fem/Gui/TaskFemConstraintFixed.h | 2 +- src/Mod/Fem/Gui/TaskFemConstraintForce.cpp | 2 + src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp | 4 +- src/Mod/Fem/Gui/TaskFemConstraintPulley.cpp | 11 +++ src/Mod/Fem/Gui/TaskFemConstraintPulley.h | 2 +- src/Mod/Fem/Gui/ViewProviderFemConstraint.cpp | 20 ++++ src/Mod/Fem/Gui/ViewProviderFemConstraint.h | 3 + .../ccxInpWriterFemConstraintDisplacement.py | 94 ------------------- 17 files changed, 109 insertions(+), 129 deletions(-) delete mode 100644 src/Mod/Fem/ccxInpWriterFemConstraintDisplacement.py diff --git a/src/Base/QuantityLexer.c b/src/Base/QuantityLexer.c index c70b69d62..49473e266 100644 --- a/src/Base/QuantityLexer.c +++ b/src/Base/QuantityLexer.c @@ -109,7 +109,10 @@ typedef unsigned int flex_uint32_t; #endif /* Returned upon end-of-file. */ -#define YY_NULL 0 +# ifdef YY_NULL +# undef YY_NULL +# define YY_NULL 0 +# endif /* Promotes a possibly negative, possibly signed char to an unsigned * integer for use as an array index. If the signed char is negative, @@ -686,7 +689,7 @@ static int input (void ); if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ - int n; \ + unsigned int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ diff --git a/src/Mod/Fem/App/CMakeLists.txt b/src/Mod/Fem/App/CMakeLists.txt index 1ef8c6f23..3d7a9fec0 100755 --- a/src/Mod/Fem/App/CMakeLists.txt +++ b/src/Mod/Fem/App/CMakeLists.txt @@ -110,7 +110,6 @@ SET(FemScripts_SRCS MechanicalMaterial.py SelectionObserverFem.py TestFem.py - ccxInpWriterFemConstraintDisplacement.py TaskPanelFemBeamSection.ui TaskPanelFemShellThickness.ui diff --git a/src/Mod/Fem/CMakeLists.txt b/src/Mod/Fem/CMakeLists.txt index 59b7a89f2..064341805 100755 --- a/src/Mod/Fem/CMakeLists.txt +++ b/src/Mod/Fem/CMakeLists.txt @@ -11,8 +11,6 @@ INSTALL( Init.py InitGui.py - ccxInpWriterFemConstraintDisplacement.py - convert2TetGen.py SelectionObserverFem.py diff --git a/src/Mod/Fem/FemCommands.py b/src/Mod/Fem/FemCommands.py index c9bfb2508..91ab4a96d 100644 --- a/src/Mod/Fem/FemCommands.py +++ b/src/Mod/Fem/FemCommands.py @@ -101,8 +101,8 @@ class FemCommands(object): def hide_parts_constraints_show_meshes(self): if FreeCAD.GuiUp: for acnstrmesh in FreeCAD.activeDocument().Objects: - if "Constraint" in acnstrmesh.TypeId: - acnstrmesh.ViewObject.Visibility = False + #if "Constraint" in acnstrmesh.TypeId: + # acnstrmesh.ViewObject.Visibility = False if "Mesh" in acnstrmesh.TypeId: aparttoshow = acnstrmesh.Name.replace("_Mesh","") for apart in FreeCAD.activeDocument().Objects: diff --git a/src/Mod/Fem/Gui/Command.cpp b/src/Mod/Fem/Gui/Command.cpp index 5c4e2a6b1..79d3a4e9e 100644 --- a/src/Mod/Fem/Gui/Command.cpp +++ b/src/Mod/Fem/Gui/Command.cpp @@ -81,11 +81,12 @@ bool getConstraintPrerequisits(Fem::FemAnalysis **Analysis) } //OvG: Visibility automation show parts and hide meshes on activation of a constraint -std::string gethideMeshShowPartStr() +std::string gethideMeshShowPartStr(std::string showConstr="") { - return - "for amesh in App.activeDocument().Objects:\n\ - if \"Mesh\" in amesh.TypeId:\n\ + return "for amesh in App.activeDocument().Objects:\n\ + if \""+showConstr+"\" == amesh.Name:\n\ + amesh.ViewObject.Visibility = True\n\ + elif \"Mesh\" in amesh.TypeId:\n\ aparttoshow = amesh.Name.replace(\"_Mesh\",\"\")\n\ for apart in App.activeDocument().Objects:\n\ if aparttoshow == apart.Name:\n\ @@ -291,7 +292,7 @@ void CmdFemConstraintBearing::activated(int iMsg) doCommand(Doc,"App.activeDocument().addObject(\"Fem::ConstraintBearing\",\"%s\")",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); - doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts + doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts updateActive(); @@ -333,7 +334,7 @@ void CmdFemConstraintFixed::activated(int iMsg) doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); - doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts + doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts updateActive(); @@ -377,7 +378,7 @@ void CmdFemConstraintForce::activated(int iMsg) doCommand(Doc,"App.activeDocument().%s.Scale = 1",FeatName.c_str()); //OvG: set initial scale to 1 doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); - doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts + doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts updateActive(); @@ -422,7 +423,7 @@ void CmdFemConstraintPressure::activated(int iMsg) doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); - doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts + doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts updateActive(); @@ -463,7 +464,7 @@ void CmdFemConstraintGear::activated(int iMsg) doCommand(Doc,"App.activeDocument().%s.Diameter = 100.0",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); - doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts + doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts updateActive(); @@ -509,7 +510,7 @@ void CmdFemConstraintPulley::activated(int iMsg) doCommand(Doc,"App.activeDocument().%s.TensionForce = 100.0",FeatName.c_str()); doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]",Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); - doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts + doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts updateActive(); @@ -551,7 +552,7 @@ void CmdFemConstraintDisplacement::activated(int iMsg) doCommand(Doc,"App.activeDocument().%s.Member = App.activeDocument().%s.Member + [App.activeDocument().%s]", Analysis->getNameInDocument(),Analysis->getNameInDocument(),FeatName.c_str()); - doCommand(Doc,"%s",gethideMeshShowPartStr().c_str()); //OvG: Hide meshes and show parts + doCommand(Doc,"%s",gethideMeshShowPartStr(FeatName).c_str()); //OvG: Hide meshes and show parts updateActive(); diff --git a/src/Mod/Fem/Gui/TaskFemConstraint.cpp b/src/Mod/Fem/Gui/TaskFemConstraint.cpp index 000b3bd1d..66ca65320 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraint.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraint.cpp @@ -181,6 +181,11 @@ const QString TaskFemConstraint::makeRefText(const App::DocumentObject* obj, con //==== calls from the TaskView =============================================================== +void TaskDlgFemConstraint::open() +{ + ConstraintView->setVisible(true); + Gui::Command::doCommand(Gui::Command::Doc,ViewProviderFemConstraint::gethideMeshShowPartStr((static_cast(ConstraintView->getObject()))->getNameInDocument()).c_str()); //OvG: Hide meshes and show parts +} bool TaskDlgFemConstraint::accept() { diff --git a/src/Mod/Fem/Gui/TaskFemConstraint.h b/src/Mod/Fem/Gui/TaskFemConstraint.h index 275c38f76..9108c25ea 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraint.h +++ b/src/Mod/Fem/Gui/TaskFemConstraint.h @@ -77,9 +77,10 @@ class TaskDlgFemConstraint : public Gui::TaskView::TaskDialog Q_OBJECT public: - /* + /// is called the TaskView when the dialog is opened - virtual void open() {} + void open(); + /* /// is called by the framework if an button is clicked which has no accept or reject role virtual void clicked(int) {} /// is called by the framework if the dialog is accepted (Ok) diff --git a/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.cpp b/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.cpp index 6d87aaf4a..dceef06c9 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintDisplacement.cpp @@ -435,10 +435,27 @@ void TaskFemConstraintDisplacement::addToSelection() addMe=false; } } + // limit constraint such that only vertexes or faces or edges can be used depending on what was selected first + std::string searchStr(""); + if (subNames[subIt].find("Vertex")!=std::string::npos) + searchStr="Vertex"; + else if (subNames[subIt].find("Edge")!=std::string::npos) + searchStr="Edge"; + else + searchStr="Face"; + if ((std::none_of(SubElements.begin(),SubElements.end(),[&](std::string const &s){return s.find(searchStr)!=std::string::npos;}))&&(SubElements.size()>0)){ + std::string Msg="Only one type of selection (vertex,face or edge) per constraint allowed!"; + QMessageBox::warning(this, tr("Selection error"),QString::fromStdString(Msg)); + addMe=false; + } if (addMe){ + disconnect(ui->lw_references, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), + this, SLOT(setSelection(QListWidgetItem*))); Objects.push_back(obj); SubElements.push_back(subNames[subIt]); ui->lw_references->addItem(makeRefText(obj, subNames[subIt])); + connect(ui->lw_references, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), + this, SLOT(setSelection(QListWidgetItem*))); } } } @@ -458,7 +475,7 @@ void TaskFemConstraintDisplacement::removeFromSelection() Fem::ConstraintDisplacement* pcConstraint = static_cast(ConstraintView->getObject()); std::vector Objects = pcConstraint->References.getValues(); std::vector SubElements = pcConstraint->References.getSubValues(); - std::vector itemsToDel; + std::vector itemsToDel; for (std::vector::iterator it = selection.begin(); it != selection.end(); ++it){//for every selected object if (static_cast(it->getTypeName()).substr(0,4).compare(std::string("Part"))!=0){ QMessageBox::warning(this, tr("Selection error"),tr("Selected object is not a part!")); @@ -480,30 +497,32 @@ void TaskFemConstraintDisplacement::removeFromSelection() } } + std::sort(itemsToDel.begin(),itemsToDel.end()); while (itemsToDel.size()>0){ Objects.erase(Objects.begin()+itemsToDel.back()); SubElements.erase(SubElements.begin()+itemsToDel.back()); itemsToDel.pop_back(); } + //Update UI disconnect(ui->lw_references, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(setSelection(QListWidgetItem*))); - + ui->lw_references->clear(); for (unsigned int j=0;jlw_references->addItem(makeRefText(Objects[j], SubElements[j])); } connect(ui->lw_references, SIGNAL(currentItemChanged(QListWidgetItem*,QListWidgetItem*)), this, SLOT(setSelection(QListWidgetItem*))); - + pcConstraint->References.setValues(Objects,SubElements); updateUI(); } void TaskFemConstraintDisplacement::setSelection(QListWidgetItem* item){ - std::string docName=ConstraintView->getObject()->getDocument()->getName(); - std::string s = item->text().toStdString(); + std::string docName=ConstraintView->getObject()->getDocument()->getName(); + std::string delimiter = ":"; size_t pos = 0; @@ -513,16 +532,13 @@ void TaskFemConstraintDisplacement::setSelection(QListWidgetItem* item){ objName = s.substr(0, pos); s.erase(0, pos + delimiter.length()); subName=s; - + Gui::Selection().clearSelection(); Gui::Selection().addSelection(docName.c_str(),objName.c_str(),subName.c_str(),0,0,0); } void TaskFemConstraintDisplacement::onReferenceDeleted() { - int row = ui->lw_references->currentIndex().row(); - TaskFemConstraint::onReferenceDeleted(row); - ui->lw_references->model()->removeRow(row); - ui->lw_references->setCurrentRow(0, QItemSelectionModel::ClearAndSelect); + TaskFemConstraintDisplacement::removeFromSelection(); //OvG: On right-click face is automatically selected, so just remove } const std::string TaskFemConstraintDisplacement::getReferences() const @@ -584,8 +600,10 @@ void TaskDlgFemConstraintDisplacement::open() { // a transaction is already open at creation time of the panel if (!Gui::Command::hasPendingCommand()) { - QString msg = QObject::tr("Constraint normal stress"); + QString msg = QObject::tr("Constraint displacement"); Gui::Command::openCommand((const char*)msg.toUtf8()); + ConstraintView->setVisible(true); + Gui::Command::doCommand(Gui::Command::Doc,ViewProviderFemConstraint::gethideMeshShowPartStr((static_cast(ConstraintView->getObject()))->getNameInDocument()).c_str()); //OvG: Hide meshes and show parts } } @@ -633,7 +651,7 @@ bool TaskDlgFemConstraintDisplacement::accept() name.c_str(), parameterDisplacement->get_rotzfix() ? "True" : "False"); std::string scale = parameterDisplacement->getScale(); //OvG: determine modified scale - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Scale = %s", name.c_str(), scale.c_str()); //OvG: implement modified scale + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.Scale = %s", name.c_str(), scale.c_str()); //OvG: implement modified scale } catch (const Base::Exception& e) { QMessageBox::warning(parameter, tr("Input error"), QString::fromLatin1(e.what())); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp b/src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp index 3a2627087..e367660ba 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintFixed.cpp @@ -213,6 +213,17 @@ TaskDlgFemConstraintFixed::TaskDlgFemConstraintFixed(ViewProviderFemConstraintFi //==== calls from the TaskView =============================================================== +void TaskDlgFemConstraintFixed::open() +{ + // a transaction is already open at creation time of the panel + if (!Gui::Command::hasPendingCommand()) { + QString msg = QObject::tr("Constraint fixed"); + Gui::Command::openCommand((const char*)msg.toUtf8()); + ConstraintView->setVisible(true); + Gui::Command::doCommand(Gui::Command::Doc,ViewProviderFemConstraint::gethideMeshShowPartStr((static_cast(ConstraintView->getObject()))->getNameInDocument()).c_str()); //OvG: Hide meshes and show parts + } +} + bool TaskDlgFemConstraintFixed::accept() { std::string name = ConstraintView->getObject()->getNameInDocument(); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintFixed.h b/src/Mod/Fem/Gui/TaskFemConstraintFixed.h index d6c404282..08b93b1b3 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintFixed.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintFixed.h @@ -76,7 +76,7 @@ public: /// is called by the framework if the dialog is accepted (Ok) virtual bool accept(); - + void open(); }; } //namespace FemGui diff --git a/src/Mod/Fem/Gui/TaskFemConstraintForce.cpp b/src/Mod/Fem/Gui/TaskFemConstraintForce.cpp index 1e83b2b1d..b95d36e34 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintForce.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintForce.cpp @@ -342,6 +342,8 @@ void TaskDlgFemConstraintForce::open() if (!Gui::Command::hasPendingCommand()) { QString msg = QObject::tr("Constraint force"); Gui::Command::openCommand((const char*)msg.toUtf8()); + ConstraintView->setVisible(true); + Gui::Command::doCommand(Gui::Command::Doc,ViewProviderFemConstraint::gethideMeshShowPartStr((static_cast(ConstraintView->getObject()))->getNameInDocument()).c_str()); //OvG: Hide meshes and show parts } } diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp b/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp index cc276b2c8..dcc21be87 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintPressure.cpp @@ -240,8 +240,10 @@ void TaskDlgFemConstraintPressure::open() { // a transaction is already open at creation time of the panel if (!Gui::Command::hasPendingCommand()) { - QString msg = QObject::tr("Constraint normal stress"); + QString msg = QObject::tr("Constraint pressure"); Gui::Command::openCommand((const char*)msg.toUtf8()); + ConstraintView->setVisible(true); + Gui::Command::doCommand(Gui::Command::Doc,ViewProviderFemConstraint::gethideMeshShowPartStr((static_cast(ConstraintView->getObject()))->getNameInDocument()).c_str()); //OvG: Hide meshes and show parts } } diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPulley.cpp b/src/Mod/Fem/Gui/TaskFemConstraintPulley.cpp index adcbb113d..5a84ac364 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPulley.cpp +++ b/src/Mod/Fem/Gui/TaskFemConstraintPulley.cpp @@ -188,6 +188,17 @@ TaskDlgFemConstraintPulley::TaskDlgFemConstraintPulley(ViewProviderFemConstraint //==== calls from the TaskView =============================================================== +void TaskDlgFemConstraintPulley::open() +{ + // a transaction is already open at creation time of the panel + if (!Gui::Command::hasPendingCommand()) { + QString msg = QObject::tr("Constraint pulley"); + Gui::Command::openCommand((const char*)msg.toUtf8()); + ConstraintView->setVisible(true); + Gui::Command::doCommand(Gui::Command::Doc,ViewProviderFemConstraint::gethideMeshShowPartStr((static_cast(ConstraintView->getObject()))->getNameInDocument()).c_str()); //OvG: Hide meshes and show parts + } +} + bool TaskDlgFemConstraintPulley::accept() { std::string name = ConstraintView->getObject()->getNameInDocument(); diff --git a/src/Mod/Fem/Gui/TaskFemConstraintPulley.h b/src/Mod/Fem/Gui/TaskFemConstraintPulley.h index f2b92c5b9..5ec4916ce 100644 --- a/src/Mod/Fem/Gui/TaskFemConstraintPulley.h +++ b/src/Mod/Fem/Gui/TaskFemConstraintPulley.h @@ -66,7 +66,7 @@ public: /// is called by the framework if the dialog is accepted (Ok) virtual bool accept(); - + void open(); }; } //namespace FemGui diff --git a/src/Mod/Fem/Gui/ViewProviderFemConstraint.cpp b/src/Mod/Fem/Gui/ViewProviderFemConstraint.cpp index f5387339e..6042d868a 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemConstraint.cpp +++ b/src/Mod/Fem/Gui/ViewProviderFemConstraint.cpp @@ -168,8 +168,28 @@ void ViewProviderFemConstraint::onChanged(const App::Property* prop) } } +//OvG: Visibility automation show parts and hide meshes on activation of a constraint +std::string ViewProviderFemConstraint::gethideMeshShowPartStr(const std::string showConstr) +{ + return "for amesh in App.activeDocument().Objects:\n\ + if \""+showConstr+"\" == amesh.Name:\n\ + amesh.ViewObject.Visibility = True\n\ + elif \"Mesh\" in amesh.TypeId:\n\ + aparttoshow = amesh.Name.replace(\"_Mesh\",\"\")\n\ + for apart in App.activeDocument().Objects:\n\ + if aparttoshow == apart.Name:\n\ + apart.ViewObject.Visibility = True\n\ + amesh.ViewObject.Visibility = False\n"; +} + +std::string ViewProviderFemConstraint::gethideMeshShowPartStr() +{ + return ViewProviderFemConstraint::gethideMeshShowPartStr(""); +} + bool ViewProviderFemConstraint::setEdit(int ModNum) { + Gui::Command::doCommand(Gui::Command::Doc,"%s",ViewProviderFemConstraint::gethideMeshShowPartStr().c_str()); return Gui::ViewProviderGeometryObject::setEdit(ModNum); } diff --git a/src/Mod/Fem/Gui/ViewProviderFemConstraint.h b/src/Mod/Fem/Gui/ViewProviderFemConstraint.h index 2bfe344a3..688597714 100644 --- a/src/Mod/Fem/Gui/ViewProviderFemConstraint.h +++ b/src/Mod/Fem/Gui/ViewProviderFemConstraint.h @@ -64,6 +64,9 @@ public: std::vector claimChildren(void)const; void setupContextMenu(QMenu*, QObject*, const char*); + + static std::string gethideMeshShowPartStr(); + static std::string gethideMeshShowPartStr(const std::string showConstr); protected: void onChanged(const App::Property* prop); diff --git a/src/Mod/Fem/ccxInpWriterFemConstraintDisplacement.py b/src/Mod/Fem/ccxInpWriterFemConstraintDisplacement.py deleted file mode 100644 index 3dbec76d0..000000000 --- a/src/Mod/Fem/ccxInpWriterFemConstraintDisplacement.py +++ /dev/null @@ -1,94 +0,0 @@ -import FreeCAD -import os - -class ccxInpWriterFemConstraintDisplacement: - def __init__(self): - displacement_constraints = [] - beam_sections = [] - shell_thicknesses = [] - f_mesh = None - dir_name=None - file_name=None - - def writeFile(self): - print('started FemConstraintDisplacementInpFile') - import FemGui - f_analysis = FemGui.getActiveAnalysis() - displacement_constraints = [] - beam_sections = [] - shell_thicknesses = [] - f_mesh = None - dir_name=None - file_name=None - for m in f_analysis.Member: - if m.isDerivedFrom("Fem::ConstraintDisplacement"): - displacement_constraint_dict = {} - displacement_constraint_dict['Object'] = m - displacement_constraints.append(displacement_constraint_dict) - elif m.isDerivedFrom("Fem::FemMeshObject"): - f_mesh=m - elif hasattr(m, "Proxy") and m.Proxy.Type == 'FemBeamSection': - beam_section_dict = {} - beam_section_dict['Object'] = m - beam_sections.append(beam_section_dict) - elif hasattr(m, "Proxy") and m.Proxy.Type == "FemShellThickness": - shell_thickness_dict = {} - shell_thickness_dict['Object'] = m - shell_thicknesses.append(shell_thickness_dict) - dir_name = FreeCAD.ActiveDocument.TransientDir.replace('\\', '/') + '/FemConstraints' - if not os.path.isdir(dir_name): - os.mkdir(dir_name) - file_name = dir_name + '/' + 'FemConstraintDisplacement.txt' - print(file_name) - inpfile = open(file_name, 'w') - inpfile.write('\n***********************************************************\n') - inpfile.write('** Node sets for prescribed displacement constraint\n') - #inpfile.write('** written by {} function\n'.format(sys._getframe().f_code.co_name)) - for fobj in displacement_constraints: - disp_obj = fobj['Object'] - inpfile.write('*NSET,NSET='+disp_obj.Name + '\n') - for o, elem in disp_obj.References: - fo = o.Shape.getElement(elem) - n = [] - if fo.ShapeType == 'Face': - n = f_mesh.FemMesh.getNodesByFace(fo) - elif fo.ShapeType == 'Edge': - n = f_mesh.FemMesh.getNodesByEdge(fo) - elif fo.ShapeType == 'Vertex': - n = f_mesh.FemMesh.getNodesByVertex(fo) - for i in n: - inpfile.write(str(i) + ',\n') - inpfile.write('\n***********************************************************\n') - inpfile.write('** Displacement constraint applied\n') - #f.write('** written by {} function\n'.format(sys._getframe().f_code.co_name)) - for disp_obj in displacement_constraints: - disp_obj_name = disp_obj['Object'].Name - inpfile.write('*BOUNDARY\n') - if disp_obj['Object'].xFix == True: - inpfile.write(disp_obj_name + ',1\n') - elif disp_obj['Object'].xFree == False: - inpfile.write(disp_obj_name + ',1,1,'+str(disp_obj['Object'].xDisplacement)+'\n') - if disp_obj['Object'].yFix == True: - inpfile.write(disp_obj_name + ',2\n') - elif disp_obj['Object'].yFree == False: - inpfile.write(disp_obj_name + ',2,2,'+str(disp_obj['Object'].yDisplacement)+'\n') - if disp_obj['Object'].zFix == True: - inpfile.write(disp_obj_name + ',3\n') - elif disp_obj['Object'].zFree == False: - inpfile.write(disp_obj_name + ',3,3,'+str(disp_obj['Object'].zDisplacement)+'\n') - - if beam_sections or shell_thicknesses: - if disp_obj['Object'].rotxFix == True: - inpfile.write(disp_obj_name + ',4\n') - elif disp_obj['Object'].rotxFree == False: - inpfile.write(disp_obj_name + ',4,4,'+str(disp_obj['Object'].xRotation)+'\n') - if disp_obj['Object'].rotyFix == True: - inpfile.write(disp_obj_name + ',5\n') - elif disp_obj['Object'].rotyFree == False: - inpfile.write(disp_obj_name + ',5,5,'+str(disp_obj['Object'].yRotation)+'\n') - if disp_obj['Object'].rotzFix == True: - inpfile.write(disp_obj_name + ',6\n') - elif disp_obj['Object'].rotzFree == False: - inpfile.write(disp_obj_name + ',6,6,'+str(disp_obj['Object'].zRotation)+'\n') - inpfile.close() - print('completed FemConstraintDisplacementInpFile')