diff --git a/src/Gui/DlgGeneralImp.cpp b/src/Gui/DlgGeneralImp.cpp index 881589b4d620..4dfcd10260c6 100644 --- a/src/Gui/DlgGeneralImp.cpp +++ b/src/Gui/DlgGeneralImp.cpp @@ -223,6 +223,7 @@ void DlgGeneralImp::loadSettings() int index = 1; TStringMap list = Translator::instance()->supportedLocales(); + ui->Languages->clear(); ui->Languages->addItem(QString::fromLatin1("English"), QByteArray("English")); for (TStringMap::iterator it = list.begin(); it != list.end(); ++it, index++) { QByteArray lang = it->first.c_str(); diff --git a/src/Gui/GestureNavigationStyle.cpp b/src/Gui/GestureNavigationStyle.cpp index 9f4b1143eb47..662bd2eed7dd 100644 --- a/src/Gui/GestureNavigationStyle.cpp +++ b/src/Gui/GestureNavigationStyle.cpp @@ -324,16 +324,16 @@ class NS::IdleState : public sc::state bool press = (kbev->getState() == SoKeyboardEvent::DOWN); switch (kbev->getKey()) { case SoKeyboardEvent::H: - if (press) + if (!press) ns.onSetRotationCenter(kbev->getPosition()); break; case SoKeyboardEvent::PAGE_UP: - if(press){ + if(!press){ ns.doZoom(ns.viewer->getSoRenderManager()->getCamera(), true, posn); } break; case SoKeyboardEvent::PAGE_DOWN: - if(press){ + if(!press){ ns.doZoom(ns.viewer->getSoRenderManager()->getCamera(), false, posn); } break; diff --git a/src/Gui/ManualAlignment.cpp b/src/Gui/ManualAlignment.cpp index 71f5546b3c32..ccb0f2d8c227 100644 --- a/src/Gui/ManualAlignment.cpp +++ b/src/Gui/ManualAlignment.cpp @@ -244,6 +244,21 @@ int AlignmentGroup::count() const return this->_views.size(); } +Base::BoundBox3d AlignmentGroup::getBoundingBox() const +{ + Base::BoundBox3d box; + std::vector::const_iterator it; + for (it = this->_views.begin(); it != this->_views.end(); ++it) { + if ((*it)->isDerivedFrom(Gui::ViewProviderGeometryObject::getClassTypeId())) { + App::GeoFeature* geo = static_cast((*it)->getObject()); + const App::PropertyComplexGeoData* prop = geo->getPropertyOfGeometry(); + if (prop) + box.Add(prop->getBoundingBox()); + } + } + return box; +} + // ------------------------------------------------------------------ MovableGroup::MovableGroup() @@ -334,6 +349,16 @@ const MovableGroup& MovableGroupModel::getGroup(int i) const return this->_groups[i]; } +Base::BoundBox3d MovableGroupModel::getBoundingBox() const +{ + Base::BoundBox3d box; + std::vector::const_iterator it; + for (it = this->_groups.begin(); it != this->_groups.end(); ++it) { + box.Add(it->getBoundingBox()); + } + return box; +} + // ------------------------------------------------------------------ namespace Gui { diff --git a/src/Gui/ManualAlignment.h b/src/Gui/ManualAlignment.h index 68998863415b..522f593029ae 100644 --- a/src/Gui/ManualAlignment.h +++ b/src/Gui/ManualAlignment.h @@ -25,6 +25,7 @@ #define GUI_MANUALALIGNMENT_H #include +#include #include #include #include @@ -123,6 +124,10 @@ class GuiExport AlignmentGroup * Return the number of added views. */ int count() const; + /** + * Get the overall bounding box of all views. + */ + Base::BoundBox3d getBoundingBox() const; protected: std::vector _pickedPoints; @@ -170,6 +175,7 @@ class GuiExport MovableGroupModel bool isEmpty() const; int count() const; const MovableGroup& getGroup(int i) const; + Base::BoundBox3d getBoundingBox() const; protected: void removeActiveGroup(); diff --git a/src/Mod/Fem/femtest/app/test_ccxtools.py b/src/Mod/Fem/femtest/app/test_ccxtools.py index aae660ceb452..337a6e8a8b38 100644 --- a/src/Mod/Fem/femtest/app/test_ccxtools.py +++ b/src/Mod/Fem/femtest/app/test_ccxtools.py @@ -549,10 +549,24 @@ def test_5_Flow1D_thermomech_analysis( def test_6_contact_shell_shell( self ): - test_name = "contact shell shell analysis test" - base_name = "contact_shell_shell" - test_dir = "FEM_ccx_contact_shell_shell" + # set up the example + from femexamples import contact_shell_shell as shellcontact + shellcontact.setup(self.active_doc, "ccxtools") + # test input file writing + self.input_file_writing_test( + test_name="contact shell shell analysis test", + base_name="contact_shell_shell", + test_dir="FEM_ccx_contact_shell_shell", + ) + + # ******************************************************************************************** + def input_file_writing_test( + self, + test_name, + base_name, + test_dir + ): fcc_print( "\n--------------- " "Start of FEM ccxtools {}" @@ -560,13 +574,6 @@ def test_6_contact_shell_shell( .format(test_name) ) - # set up the example - from femexamples import contact_shell_shell as shellcontact - shellcontact.setup(self.active_doc, "ccxtools") - - # code from here is independent, TODO put in separate def - # adding more inp file tests would be very simple ... - # set up analysis analysis = self.active_doc.Analysis solver_object = self.active_doc.CalculiXccxTools analysis_dir = testtools.get_unit_test_tmp_dir( diff --git a/src/Mod/Import/App/AppImportPy.cpp b/src/Mod/Import/App/AppImportPy.cpp index aa1dcdc19acf..188af7b16e19 100644 --- a/src/Mod/Import/App/AppImportPy.cpp +++ b/src/Mod/Import/App/AppImportPy.cpp @@ -163,7 +163,6 @@ class Module : public Py::ExtensionModule Handle(XCAFApp_Application) hApp = XCAFApp_Application::GetApplication(); Handle(TDocStd_Document) hDoc; hApp->NewDocument(TCollection_ExtendedString("MDTV-CAF"), hDoc); - ImportOCAFExt ocaf(hDoc, pcDoc, file.fileNamePure()); if (file.hasExtension("stp") || file.hasExtension("step")) { try { @@ -230,15 +229,19 @@ class Module : public Py::ExtensionModule } #if 1 - if(merge!=Py_None) + ImportOCAFExt ocaf(hDoc, pcDoc, file.fileNamePure()); + if (merge != Py_None) ocaf.setMerge(PyObject_IsTrue(merge)); - if(importHidden!=Py_None) + if (importHidden != Py_None) ocaf.setImportHiddenObject(PyObject_IsTrue(importHidden)); - if(useLinkGroup!=Py_None) + if (useLinkGroup != Py_None) ocaf.setUseLinkGroup(PyObject_IsTrue(useLinkGroup)); - if(mode>=0) + if (mode >= 0) ocaf.setMode(mode); ocaf.loadShapes(); +#elif 1 + Import::ImportOCAFCmd ocaf(hDoc, pcDoc, file.fileNamePure()); + ocaf.loadShapes(); #else Import::ImportXCAF xcaf(hDoc, pcDoc, file.fileNamePure()); xcaf.loadShapes(); @@ -246,7 +249,7 @@ class Module : public Py::ExtensionModule #endif hApp->Close(hDoc); - if (!ocaf.partColors.size()) { + if (!ocaf.partColors.empty()) { Py::List list; for (auto &it : ocaf.partColors) { Py::Tuple tuple(2);