ConstraintsDialog::ConstraintsDialog( QWidget *parent, Qt::WindowFlags f ) : QDialog( parent, f ) { ui.setupUi(this); connect( ui.ConstraintsOK, SIGNAL( clicked() ), this, SLOT( acceptConstraints() )); connect( ui.ConstraintsAdd, SIGNAL( clicked() ), this, SLOT( addConstraint() )); connect( ui.ConstraintsDelete, SIGNAL( clicked() ), this, SLOT( deleteConstraint() )); connect( ui.ConstraintsDeleteAll, SIGNAL( clicked() ), this, SLOT( deleteAllConstraints() )); connect( ui.comboType, SIGNAL( currentIndexChanged(int) ), this, SLOT( comboTypeChanged(int) )); m_forceField = OpenBabel::OBForceField::FindForceField( "MMFF94" ); ui.editValue->setMinimum(0.0); ui.editValue->setMaximum(0.0); }
// destroy void MBulletContext::clear(void) { unsigned int i; unsigned int id; // delete constraints for(i=0; i<m_constraints.size(); i++){ id = i; deleteConstraint(&id); } // remove the rigidbodies from the dynamics world and delete them for(i=0; i<m_collisionObjects.size(); i++){ id = i; deleteObject(&id); } // delete collision shapes for(i=0; i<m_collisionShapes.size(); i++){ id = i; deleteShape(&id); } m_collisionObjects.clear(); m_collisionShapes.clear(); m_constraints.clear(); SAFE_DELETE(m_dynamicsWorld); SAFE_DELETE(m_solver); SAFE_DELETE(m_overlappingPairCache); SAFE_DELETE(m_dispatcher); SAFE_DELETE(m_collisionConfiguration); // create NULL id 0 m_collisionShapes.push_back(NULL); m_collisionObjects.push_back(NULL); m_constraints.push_back(NULL); }
MPhysicsConstraint * MPhysicsProperties::createConstraint(void) { deleteConstraint(); m_constraint = new MPhysicsConstraint(); return m_constraint; }
MPhysicsProperties::~MPhysicsProperties(void) { deleteConstraint(); }
PhysicConstraintWidget::PhysicConstraintWidget(QDomElement node, QWidget* parent /*= 0*/, Qt::WindowFlags flags /*= 0*/) : m_currentNode(node), QWidget(parent, flags) { setupUi(this); // General callbacks connect(m_deleteConstraint, SIGNAL(clicked()), this, SLOT(deleteConstraint())); // Load xml values to ui and set callback methods for changes // general attributes m_x->setValue(node.attribute("x","0").toFloat()); connect(m_x, SIGNAL(valueChanged(double)), this, SLOT(updateGeneralValues())); m_y->setValue(node.attribute("y","0").toFloat()); connect(m_y, SIGNAL(valueChanged(double)), this, SLOT(updateGeneralValues())); m_z->setValue(node.attribute("z","0").toFloat()); connect(m_z, SIGNAL(valueChanged(double)), this, SLOT(updateGeneralValues())); m_breakImpulseThres->setValue(node.attribute("breakImpulseThres","0").toFloat()); connect(m_breakImpulseThres, SIGNAL(valueChanged(double)), this, SLOT(updateGeneralValues())); m_dbgDrawSize->setValue(node.attribute("dbgDrawSize","5").toFloat()); connect(m_dbgDrawSize, SIGNAL(valueChanged(double)), this, SLOT(updateGeneralValues())); m_target->setText(node.attribute("target")); connect(m_target, SIGNAL(textChanged(const QString &)), this, SLOT(updateGeneralValues())); m_targetX->setValue(node.attribute("targetX","0").toFloat()); connect(m_targetX, SIGNAL(valueChanged(double)), this, SLOT(updateGeneralValues())); m_targetY->setValue(node.attribute("targetY","0").toFloat()); connect(m_targetY, SIGNAL(valueChanged(double)), this, SLOT(updateGeneralValues())); m_targetZ->setValue(node.attribute("targetZ","0").toFloat()); connect(m_targetZ, SIGNAL(valueChanged(double)), this, SLOT(updateGeneralValues())); QString typeString = node.attribute("type", "point2point"); if (typeString.compare("hinge",Qt::CaseInsensitive) == 0) { m_type->setCurrentIndex(1); m_constraintTypeProperties->setCurrentIndex(1); } else if (typeString.compare("slider",Qt::CaseInsensitive) == 0) { m_type->setCurrentIndex(2); m_constraintTypeProperties->setCurrentIndex(2); } else if (typeString.compare("coneTwist",Qt::CaseInsensitive) == 0) { m_type->setCurrentIndex(3); m_constraintTypeProperties->setCurrentIndex(3); } else if (typeString.compare("6DofSpring",Qt::CaseInsensitive) == 0) { m_type->setCurrentIndex(4); m_constraintTypeProperties->setCurrentIndex(4); } else { m_type->setCurrentIndex(0); m_constraintTypeProperties->setCurrentIndex(0); } connect(m_type, SIGNAL(currentIndexChanged(int)), this, SLOT(typeChanged(int))); //hinge attributes m_axisX->setValue(node.attribute("axisX","0").toFloat()); connect(m_axisX, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_axisY->setValue(node.attribute("axisY","0").toFloat()); connect(m_axisY, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_axisZ->setValue(node.attribute("axisZ","0").toFloat()); connect(m_axisZ, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_targetAxisX->setValue(node.attribute("targetAxisX","0").toFloat()); connect(m_targetAxisX, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_targetAxisY->setValue(node.attribute("targetAxisY","0").toFloat()); connect(m_targetAxisY, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_targetAxisZ->setValue(node.attribute("targetAxisZ","0").toFloat()); connect(m_targetAxisZ, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_lowLimit->setValue(node.attribute("lowLimit","-180").toFloat()); connect(m_lowLimit, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_highLimit->setValue(node.attribute("highLimit","180").toFloat()); connect(m_highLimit, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_hingeSoftness->setValue(node.attribute("softness","0.9").toFloat()); connect(m_hingeSoftness, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_hingeBiasFactor->setValue(node.attribute("biasFactor","0.3").toFloat()); connect(m_hingeBiasFactor, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); m_hingeRelaxationFactor->setValue(node.attribute("relaxationFactor","1").toFloat()); connect(m_hingeRelaxationFactor, SIGNAL(valueChanged(double)), this, SLOT(updateHingeValues())); //slider attributes m_sliderRotX->setValue(node.attribute("rotX","0").toFloat()); connect(m_sliderRotX, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); m_sliderRotY->setValue(node.attribute("rotY","0").toFloat()); connect(m_sliderRotY, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); m_sliderRotZ->setValue(node.attribute("rotZ","0").toFloat()); connect(m_sliderRotZ, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); m_sliderTargetRotX->setValue(node.attribute("targetRotX","0").toFloat()); connect(m_sliderTargetRotX, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); m_sliderTargetRotY->setValue(node.attribute("targetRotY","0").toFloat()); connect(m_sliderTargetRotY, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); m_sliderTargetRotZ->setValue(node.attribute("targetRotZ","0").toFloat()); connect(m_sliderTargetRotZ, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); m_lowerLinLimit->setValue(node.attribute("lowerLinLimit","-999999").toFloat()); connect(m_lowerLinLimit, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); m_upperLinLimit->setValue(node.attribute("upperLinLimit","999999").toFloat()); connect(m_upperLinLimit, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); m_lowerAngLimit->setValue(node.attribute("lowerAngLimit","-180").toFloat()); connect(m_lowerAngLimit, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); m_upperAngLimit->setValue(node.attribute("upperAngLimit","180").toFloat()); connect(m_upperAngLimit, SIGNAL(valueChanged(double)), this, SLOT(updateSliderValues())); //coneTwist attributes m_coneTwistRotX->setValue(node.attribute("rotX","0").toFloat()); connect(m_coneTwistRotX, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_coneTwistRotY->setValue(node.attribute("rotY","0").toFloat()); connect(m_coneTwistRotY, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_coneTwistRotZ->setValue(node.attribute("rotZ","0").toFloat()); connect(m_coneTwistRotZ, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_coneTwistTargetRotX->setValue(node.attribute("targetRotX","0").toFloat()); connect(m_coneTwistTargetRotX, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_coneTwistTargetRotY->setValue(node.attribute("targetRotY","0").toFloat()); connect(m_coneTwistTargetRotY, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_coneTwistTargetRotZ->setValue(node.attribute("targetRotZ","0").toFloat()); connect(m_coneTwistTargetRotZ, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_swing1Limit->setValue(node.attribute("swing1Limit","-180").toFloat()); connect(m_swing1Limit, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_swing2Limit->setValue(node.attribute("swing2Limit","180").toFloat()); connect(m_swing2Limit, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_twistLimit->setValue(node.attribute("twistLimit","180").toFloat()); connect(m_twistLimit, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_coneTwistSoftness->setValue(node.attribute("softness","1").toFloat()); connect(m_coneTwistSoftness, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_coneTwistBiasFactor->setValue(node.attribute("biasFactor","0.3").toFloat()); connect(m_coneTwistBiasFactor, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); m_coneTwistRelaxationFactor->setValue(node.attribute("relaxationFactor","1").toFloat()); connect(m_coneTwistRelaxationFactor, SIGNAL(valueChanged(double)), this, SLOT(updateConeTwistValues())); // 6DofSpring attributes m_springRotX->setValue(node.attribute("rotX","0").toFloat()); connect(m_springRotX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_springRotY->setValue(node.attribute("rotY","0").toFloat()); connect(m_springRotY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_springRotZ->setValue(node.attribute("rotZ","0").toFloat()); connect(m_springRotZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_springTargetRotX->setValue(node.attribute("targetRotX","0").toFloat()); connect(m_springTargetRotX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_springTargetRotY->setValue(node.attribute("targetRotY","0").toFloat()); connect(m_springTargetRotY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_springTargetRotZ->setValue(node.attribute("targetRotZ","0").toFloat()); connect(m_springTargetRotZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_lowerLinLimitX->setValue(node.attribute("lowerLinLimitX","-999999").toFloat()); connect(m_lowerLinLimitX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_lowerLinLimitY->setValue(node.attribute("lowerLinLimitY","-999999").toFloat()); connect(m_lowerLinLimitY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_lowerLinLimitZ->setValue(node.attribute("lowerLinLimitZ","-999999").toFloat()); connect(m_lowerLinLimitZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_upperLinLimitX->setValue(node.attribute("upperLinLimitX","999999").toFloat()); connect(m_upperLinLimitX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_upperLinLimitY->setValue(node.attribute("upperLinLimitY","999999").toFloat()); connect(m_upperLinLimitY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_upperLinLimitZ->setValue(node.attribute("upperLinLimitZ","999999").toFloat()); connect(m_upperLinLimitZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_lowerAngLimitX->setValue(node.attribute("lowerAngLimitX","-180").toFloat()); connect(m_lowerAngLimitX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_lowerAngLimitY->setValue(node.attribute("lowerAngLimitY","-180").toFloat()); connect(m_lowerAngLimitY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_lowerAngLimitZ->setValue(node.attribute("lowerAngLimitZ","-180").toFloat()); connect(m_lowerAngLimitZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_upperAngLimitX->setValue(node.attribute("upperAngLimitX","180").toFloat()); connect(m_upperAngLimitX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_upperAngLimitY->setValue(node.attribute("upperAngLimitY","180").toFloat()); connect(m_upperAngLimitY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_upperAngLimitZ->setValue(node.attribute("upperAngLimitZ","180").toFloat()); connect(m_upperAngLimitZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_dampingX->setValue(node.attribute("dampingX","1").toFloat()); connect(m_dampingX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_dampingY->setValue(node.attribute("dampingY","1").toFloat()); connect(m_dampingY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_dampingZ->setValue(node.attribute("dampingZ","1").toFloat()); connect(m_dampingZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_dampingRX->setValue(node.attribute("dampingRX","1").toFloat()); connect(m_dampingRX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_dampingRY->setValue(node.attribute("dampingRY","1").toFloat()); connect(m_dampingRY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_dampingRZ->setValue(node.attribute("dampingRZ","1").toFloat()); connect(m_dampingRZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_stiffnessX->setValue(node.attribute("stiffnessX","0").toFloat()); connect(m_stiffnessX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_stiffnessY->setValue(node.attribute("stiffnessY","0").toFloat()); connect(m_stiffnessY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_stiffnessZ->setValue(node.attribute("stiffnessZ","0").toFloat()); connect(m_stiffnessZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_stiffnessRX->setValue(node.attribute("stiffnessRX","0").toFloat()); connect(m_stiffnessRX, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_stiffnessRY->setValue(node.attribute("stiffnessRY","0").toFloat()); connect(m_stiffnessRY, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_stiffnessRZ->setValue(node.attribute("stiffnessRZ","0").toFloat()); connect(m_stiffnessRZ, SIGNAL(valueChanged(double)), this, SLOT(updateSpringValues())); m_disableSpringX->setChecked(node.attribute("disableSpringX", "0").compare("true",Qt::CaseInsensitive) == 0 || node.attribute("disableSpringX", "0").compare("1",Qt::CaseInsensitive) == 0); connect(m_disableSpringX, SIGNAL(stateChanged(int)), this, SLOT(updateSpringValues())); m_disableSpringY->setChecked(node.attribute("disableSpringY", "0").compare("true",Qt::CaseInsensitive) == 0 || node.attribute("disableSpringY", "0").compare("1",Qt::CaseInsensitive) == 0); connect(m_disableSpringY, SIGNAL(stateChanged(int)), this, SLOT(updateSpringValues())); m_disableSpringZ->setChecked(node.attribute("disableSpringZ", "0").compare("true",Qt::CaseInsensitive) == 0 || node.attribute("disableSpringZ", "0").compare("1",Qt::CaseInsensitive) == 0); connect(m_disableSpringZ, SIGNAL(stateChanged(int)), this, SLOT(updateSpringValues())); m_disableSpringRX->setChecked(node.attribute("disableSpringRX", "0").compare("true",Qt::CaseInsensitive) == 0 || node.attribute("disableSpringRX", "0").compare("1",Qt::CaseInsensitive) == 0); connect(m_disableSpringRX, SIGNAL(stateChanged(int)), this, SLOT(updateSpringValues())); m_disableSpringRY->setChecked(node.attribute("disableSpringRY", "0").compare("true",Qt::CaseInsensitive) == 0 || node.attribute("disableSpringRY", "0").compare("1",Qt::CaseInsensitive) == 0); connect(m_disableSpringRY, SIGNAL(stateChanged(int)), this, SLOT(updateSpringValues())); m_disableSpringRZ->setChecked(node.attribute("disableSpringRZ", "0").compare("true",Qt::CaseInsensitive) == 0 || node.attribute("disableSpringRZ", "0").compare("1",Qt::CaseInsensitive) == 0); connect(m_disableSpringRZ, SIGNAL(stateChanged(int)), this, SLOT(updateSpringValues())); }