/gui/CollisionSolverSettingsDialog.cpp
C++ | 211 lines | 173 code | 34 blank | 4 comment | 1 complexity | fe05df5b8ab94b4381f8908513eb0b93 MD5 | raw file
- #include "CollisionSolverSettingsDialog.hpp"
- CollisionSolverSettingsDialog::CollisionSolverSettingsDialog(QWidget *parent, Designer *d) :
- QDialog(parent)
- {
- designer = d;
- setModal(true);
- setFocusPolicy(Qt::StrongFocus);
- setFocus();
- setWindowTitle(tr("Simulator Settings"));
- QGridLayout *layout = new QGridLayout;
- int i = 0;
- tauBox = new QDoubleSpinBox;
- tauBox->setDecimals(1);
- tauBox->setRange(0.0, 1.0);
- tauBox->setSingleStep(0.1);
- tauBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_tau);
- layout->addWidget(new QLabel(tr("tau")), i, 0);
- layout->addWidget(tauBox, i, 1);
- i++;
- dampingBox = new QDoubleSpinBox;
- dampingBox->setDecimals(1);
- dampingBox->setRange(0.0, 1.0);
- dampingBox->setSingleStep(0.1);
- dampingBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_damping);
- layout->addWidget(new QLabel(tr("damping")), i, 0);
- layout->addWidget(dampingBox, i, 1);
- i++;
- frictionBox = new QDoubleSpinBox;
- frictionBox->setDecimals(1);
- frictionBox->setRange(0.0, 1.0);
- frictionBox->setSingleStep(0.1);
- frictionBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_friction);
- layout->addWidget(new QLabel(tr("friction")), i, 0);
- layout->addWidget(frictionBox, i, 1);
- i++;
- timeStepBox = new QDoubleSpinBox;
- timeStepBox->setDecimals(5);
- timeStepBox->setRange(0.0, 1.0);
- timeStepBox->setSingleStep( (1.0f/60.0f) );
- timeStepBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_timeStep);
- layout->addWidget(new QLabel(tr("time step")), i, 0);
- layout->addWidget(timeStepBox, i, 1);
- i++;
- restitutionBox = new QDoubleSpinBox;
- restitutionBox->setDecimals(1);
- restitutionBox->setRange(0.0, 1.0);
- restitutionBox->setSingleStep(0.1);
- restitutionBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_restitution);
- layout->addWidget(new QLabel(tr("restitution")), i, 0);
- layout->addWidget(restitutionBox, i, 1);
- i++;
- numIterationsBox = new QDoubleSpinBox;
- numIterationsBox->setDecimals(0);
- numIterationsBox->setRange(0.0, 100.0);
- numIterationsBox->setSingleStep(1.0);
- numIterationsBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_numIterations);
- layout->addWidget(new QLabel(tr("num iterations")), i, 0);
- layout->addWidget(numIterationsBox, i, 1);
- i++;
- maxErrorReductionBox = new QDoubleSpinBox;
- maxErrorReductionBox->setDecimals(1);
- maxErrorReductionBox->setRange(0.0, 100.0);
- maxErrorReductionBox->setSingleStep(1.0);
- maxErrorReductionBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_maxErrorReduction);
- layout->addWidget(new QLabel(tr("max error reduction")), i, 0);
- layout->addWidget(maxErrorReductionBox, i, 1);
- i++;
- sorBox = new QDoubleSpinBox;
- sorBox->setDecimals(2);
- sorBox->setRange(0.0, 10.0);
- sorBox->setSingleStep(0.1);
- sorBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_sor);
- layout->addWidget(new QLabel(tr("sor")), i, 0);
- layout->addWidget(sorBox, i, 1);
- i++;
- erpBox = new QDoubleSpinBox;
- erpBox->setDecimals(2);
- erpBox->setRange(0.0, 1.0);
- erpBox->setSingleStep(0.1);
- erpBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_erp);
- layout->addWidget(new QLabel(tr("erp (used as Baumgarte factor)")), i, 0);
- layout->addWidget(erpBox, i, 1);
- i++;
- erp2Box = new QDoubleSpinBox;
- erp2Box->setDecimals(2);
- erp2Box->setRange(0.0, 1.0);
- erp2Box->setSingleStep(0.1);
- erp2Box->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_erp2);
- layout->addWidget(new QLabel(tr("erp2 (used in Split Impulse)")), i, 0);
- layout->addWidget(erp2Box, i, 1);
- i++;
- globalCfmBox = new QDoubleSpinBox;
- globalCfmBox->setDecimals(2);
- globalCfmBox->setRange(0.0, 1.0);
- globalCfmBox->setSingleStep(0.1);
- globalCfmBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_globalCfm);
- layout->addWidget(new QLabel(tr("global Cfm (Constraint force mixing)")), i, 0);
- layout->addWidget(globalCfmBox, i, 1);
- i++;
- splitImpulseBox = new QCheckBox;
- splitImpulseBox->setChecked( this->designer->simulator->dynamicsWorld->getSolverInfo().m_splitImpulse == 1 );
- layout->addWidget(new QLabel(tr("split impulse")), i, 0);
- layout->addWidget(splitImpulseBox, i, 1);
- i++;
- splitImpulsePenetrationThresholdBox = new QDoubleSpinBox;
- splitImpulsePenetrationThresholdBox->setDecimals(3);
- splitImpulsePenetrationThresholdBox->setRange(-10.0, 10.0);
- splitImpulsePenetrationThresholdBox->setSingleStep(0.05);
- splitImpulsePenetrationThresholdBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_splitImpulsePenetrationThreshold);
- layout->addWidget(new QLabel(tr("split impulse penetration threshold")), i, 0);
- layout->addWidget(splitImpulsePenetrationThresholdBox, i, 1);
- i++;
- linearSlopBox = new QDoubleSpinBox;
- linearSlopBox->setDecimals(1);
- linearSlopBox->setRange(0.0, 1.0);
- linearSlopBox->setSingleStep(0.1);
- linearSlopBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_linearSlop);
- layout->addWidget(new QLabel(tr("linear slop")), i, 0);
- layout->addWidget(linearSlopBox, i, 1);
- i++;
- warmstartingFactorBox = new QDoubleSpinBox;
- warmstartingFactorBox->setDecimals(2);
- warmstartingFactorBox->setRange(0.0, 1.0);
- warmstartingFactorBox->setSingleStep(0.05);
- warmstartingFactorBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_warmstartingFactor);
- layout->addWidget(new QLabel(tr("warmstarting factor")), i, 0);
- layout->addWidget(warmstartingFactorBox, i, 1);
- i++;
- /*
- QDoubleSpinBox* solverModeBox;
- */
- restingContactRestitutionThresholdBox = new QDoubleSpinBox;
- restingContactRestitutionThresholdBox->setDecimals(2);
- restingContactRestitutionThresholdBox->setRange(0.0, 1.0);
- restingContactRestitutionThresholdBox->setSingleStep(0.05);
- restingContactRestitutionThresholdBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_restingContactRestitutionThreshold);
- layout->addWidget(new QLabel(tr("resting contact restitution threshold")), i, 0);
- layout->addWidget(restingContactRestitutionThresholdBox, i, 1);
- i++;
- minimumSolverBatchSizeBox = new QDoubleSpinBox;
- minimumSolverBatchSizeBox->setDecimals(0);
- minimumSolverBatchSizeBox->setRange(0.0, 256);
- minimumSolverBatchSizeBox->setSingleStep(10);
- minimumSolverBatchSizeBox->setValue( this->designer->simulator->dynamicsWorld->getSolverInfo().m_minimumSolverBatchSize);
- layout->addWidget(new QLabel(tr("minimum solver batch size")), i, 0);
- layout->addWidget(minimumSolverBatchSizeBox, i, 1);
- i++;
- QPushButton* buttonAccept = new QPushButton("OK");
- QPushButton* buttonCancel = new QPushButton("CANCEL");
- layout->addWidget(buttonAccept, i, 0);
- layout->addWidget(buttonCancel, i, 1);
- connect(buttonAccept, SIGNAL(clicked()), this, SLOT(accept()));
- connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
- setLayout(layout);
- }
- void CollisionSolverSettingsDialog::accept()
- {
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_tau = (float)tauBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_damping = (float)dampingBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_friction = (float)frictionBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_timeStep = (float)timeStepBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_restitution = (float)restitutionBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_numIterations = (float)numIterationsBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_maxErrorReduction = (float)maxErrorReductionBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_sor = (float)sorBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_erp = (float)erpBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_erp2 = (float)erp2Box->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_globalCfm = (float)globalCfmBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_splitImpulse = splitImpulseBox->isChecked() ? 1.0 : 0.0;
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_splitImpulsePenetrationThreshold = (float)splitImpulsePenetrationThresholdBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_linearSlop = (float)linearSlopBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_warmstartingFactor = (float)warmstartingFactorBox->value();
- // this->designer->simulator->dynamicsWorld->getSolverInfo().m_solverMode = (float)solverModeBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_restingContactRestitutionThreshold = (float)restingContactRestitutionThresholdBox->value();
- this->designer->simulator->dynamicsWorld->getSolverInfo().m_minimumSolverBatchSize = (float)minimumSolverBatchSizeBox->value();
- done(Accepted);
- }