From ab5a22883dd1f79f7d7ea2aa9f6663936f988a6e Mon Sep 17 00:00:00 2001 From: Abdullah Tahiri Date: Sun, 4 Mar 2018 16:38:00 +0100 Subject: [PATCH] Sketcher: DoF finder command while using the default SparseQR ============================================================= - Modification to transparently switch from SparseQR to DenseQR and back to SparseQR when using the DoF finder command. - Command Tools dof finder command name change --- src/Mod/Sketcher/Gui/CommandSketcherTools.cpp | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp b/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp index f82598f6d0..d4b7ead815 100644 --- a/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp +++ b/src/Mod/Sketcher/Gui/CommandSketcherTools.cpp @@ -703,23 +703,23 @@ bool CmdSketcherSelectElementsAssociatedWithConstraints::isActive(void) return isSketcherAcceleratorActive( getActiveGuiDocument(), true ); } -DEF_STD_CMD_A(CmdSketcherSelectFullyConstraintElements); +DEF_STD_CMD_A(CmdSketcherSelectElementsWithDoFs); -CmdSketcherSelectFullyConstraintElements::CmdSketcherSelectFullyConstraintElements() -:Command("Sketcher_SelectFullyConstraintElements") +CmdSketcherSelectElementsWithDoFs::CmdSketcherSelectElementsWithDoFs() +:Command("Sketcher_SelectElementsWithDoFs") { sAppModule = "Sketcher"; sGroup = QT_TR_NOOP("Sketcher"); - sMenuText = QT_TR_NOOP("Select fully constraint elements"); - sToolTipText = QT_TR_NOOP("Select elements that are already fully constraint"); - sWhatsThis = "Sketcher_SelectFullyConstraintElements"; + sMenuText = QT_TR_NOOP("Select solver DoFs"); + sToolTipText = QT_TR_NOOP("Select elements where the solver still detects unconstrained degrees of freedom."); + sWhatsThis = "Sketcher_SelectElementsWithDoFs"; sStatusTip = sToolTipText; - sPixmap = "Sketcher_SelectFullyConstraintElements"; + sPixmap = "Sketcher_SelectElementsWithDoFs"; sAccel = ""; eType = ForEdit; } -void CmdSketcherSelectFullyConstraintElements::activated(int iMsg) +void CmdSketcherSelectElementsWithDoFs::activated(int iMsg) { Q_UNUSED(iMsg); getSelection().clearSelection(); @@ -737,6 +737,16 @@ void CmdSketcherSelectFullyConstraintElements::activated(int iMsg) auto geos = Obj->getInternalGeometry(); + // Solver parameter detection algorithm only works for Dense QR with full pivoting. If we are using Sparse QR, we + // have to re-solve using Dense QR. + GCS::QRAlgorithm curQRAlg = Obj->getSolvedSketch().getQRAlgorithm(); + + if(curQRAlg == GCS::EigenSparseQR) { + Obj->getSolvedSketch().setQRAlgorithm(GCS::EigenDenseQR); + Obj->solve(false); + } + + auto testselectvertex = [&Obj,&ss,&doc_name,&obj_name](int geoId, PointPos pos){ ss.str(std::string()); @@ -788,10 +798,14 @@ void CmdSketcherSelectFullyConstraintElements::activated(int iMsg) geoid++; } + + if(curQRAlg == GCS::EigenSparseQR) { + Obj->getSolvedSketch().setQRAlgorithm(GCS::EigenSparseQR); + } } -bool CmdSketcherSelectFullyConstraintElements::isActive(void) +bool CmdSketcherSelectElementsWithDoFs::isActive(void) { return isSketcherAcceleratorActive( getActiveGuiDocument(), false ); } @@ -1909,7 +1923,7 @@ void CreateSketcherCommandsConstraintAccel(void) rcCmdMgr.addCommand(new CmdSketcherSelectRedundantConstraints()); rcCmdMgr.addCommand(new CmdSketcherSelectConflictingConstraints()); rcCmdMgr.addCommand(new CmdSketcherSelectElementsAssociatedWithConstraints()); - rcCmdMgr.addCommand(new CmdSketcherSelectFullyConstraintElements()); + rcCmdMgr.addCommand(new CmdSketcherSelectElementsWithDoFs()); rcCmdMgr.addCommand(new CmdSketcherRestoreInternalAlignmentGeometry()); rcCmdMgr.addCommand(new CmdSketcherSymmetry()); rcCmdMgr.addCommand(new CmdSketcherCopy());