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
This commit is contained in:
Abdullah Tahiri
2018-03-04 16:38:00 +01:00
committed by wmayer
parent d75be1cd03
commit ab5a22883d

View File

@@ -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());