Files
create/src/Mod/Sketcher/Gui/TaskSketcherSolverAdvanced.h
Abdullah Tahiri e28ca0847a Sketch: Solver: Extended Advanced Solver configuration
========================================================

This is an advanced setting just for allowing increased choices to power users that have problems with a given sketch and want to
test different flavours of DogLeg algorithm.

This commit does not change the default behaviour of FreeCAD. It is only intended to give more options to power users.

The advanced solver configuration is extended to support three different Gauss-newton steps for DogLeg:

FullPivLU => h_gn = Jx.fullPivLu().solve(-fx);
LeastNormFullPivLU => h_gn = Jx.adjoint()*(Jx*Jx.adjoint()).fullPivLu().solve(-fx);
LeastNormLdlt => h_gn = Jx.adjoint()*(Jx*Jx.adjoint()).ldlt().solve(-fx);

This setting is applied only to DogLeg. It is applied to DogLeg as normal or redundant solver, if DogLeg is the selected solver.

Selecting a solver different from DogLeg for both normal and redundant disables the setting.

We have been told:
https://forum.kde.org/viewtopic.php?f=74&t=129439#p346104

that our default Gauss-Newton step in DogLeg may not be adequate in general (we generally deal with underconstraint systems
unless we have a fully constraint sketch, and even then it is many times overconstraint at least for redundant solving).

We have been told that maybe these LeastNorm options are more suitable for us (performance set aside). This enables you as power
user to test if it works fine with FreeCAD.
2015-11-28 13:08:31 +01:00

86 lines
3.7 KiB
C++

/***************************************************************************
* Copyright (c) 2015 Abdullah Tahiri <abdullah.tahiri.yo@gmail.com *
* *
* This file is part of the FreeCAD CAx development system. *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Library General Public *
* License as published by the Free Software Foundation; either *
* version 2 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this library; see the file COPYING.LIB. If not, *
* write to the Free Software Foundation, Inc., 59 Temple Place, *
* Suite 330, Boston, MA 02111-1307, USA *
* *
***************************************************************************/
#ifndef GUI_TASKVIEW_TaskSketcherSolverAdvanced_H
#define GUI_TASKVIEW_TaskSketcherSolverAdvanced_H
#include <Gui/TaskView/TaskView.h>
#include <Gui/Selection.h>
#include <boost/signals.hpp>
class Ui_TaskSketcherSolverAdvanced;
namespace App {
class Property;
}
namespace SketcherGui {
class ViewProviderSketch;
class TaskSketcherSolverAdvanced : public Gui::TaskView::TaskBox
{
Q_OBJECT
public:
TaskSketcherSolverAdvanced(ViewProviderSketch *sketchView);
~TaskSketcherSolverAdvanced();
private Q_SLOTS:
void on_comboBoxDefaultSolver_currentIndexChanged(int index);
void on_comboBoxDogLegGaussStep_currentIndexChanged(int index);
void on_spinBoxMaxIter_valueChanged(int i);
void on_checkBoxSketchSizeMultiplier_stateChanged(int state);
void on_lineEditConvergence_editingFinished();
void on_comboBoxQRMethod_currentIndexChanged(int index);
void on_lineEditQRPivotThreshold_editingFinished();
void on_comboBoxRedundantDefaultSolver_currentIndexChanged(int index);
void on_lineEditRedundantConvergence_editingFinished();
void on_spinBoxRedundantSolverMaxIterations_valueChanged(int i);
void on_checkBoxRedundantSketchSizeMultiplier_stateChanged(int state);
void on_comboBoxDebugMode_currentIndexChanged(int index);
void on_lineEditSolverParam1_editingFinished();
void on_lineEditRedundantSolverParam1_editingFinished();
void on_lineEditSolverParam2_editingFinished();
void on_lineEditRedundantSolverParam2_editingFinished();
void on_lineEditSolverParam3_editingFinished();
void on_lineEditRedundantSolverParam3_editingFinished();
void on_pushButtonDefaults_clicked(bool checked = false);
void on_pushButtonSolve_clicked(bool checked = false);
protected:
void updateDefaultMethodParameters(void);
void updateRedundantMethodParameters(void);
void updateSketchObject(void);
protected:
ViewProviderSketch *sketchView;
private:
QWidget* proxy;
Ui_TaskSketcherSolverAdvanced* ui;
};
} //namespace SketcherGui
#endif // GUI_TASKVIEW_TaskSketcherSolverAdvanced_H