void QVX_TensileTest::BeginTensileTest(QVX_Environment* pEnvIn, int NumStepIn, double ConvThreshIn, double MixRadiusIn, MatBlendModel ModelIn, double PolyExpIn) { //set up local copy of the environment and object... // if (MixRadius != 0) RenderMixedObject(pEnvIn->pObj, &LocObj, MixRadius); //if there's any mixing, we need to make it... //else LocObj = *(pEnvIn->pObj); //otherwise just simulate the original object. LocEnv = *pEnvIn; //set local environment params to those of the input LocEnv.pObj = &LocObj; //make sure local environment points to local object //set up blending if desired BlendingEnabled = false; if (MixRadiusIn != 0){ //if some blending... //check for 2 or fewer materials! if (LocObj.GetNumLeafMatInUse() > 2){ QMessageBox::warning(NULL, "Warning", "Currently blending only supported with 2 or fewer materials. Aborting."); return; } BlendingEnabled = true; MixRadius = MixRadiusIn; BlendModel = ModelIn; PolyExp = PolyExpIn; } NumStep = NumStepIn; ConvThresh = ConvThreshIn; CurTick = 0; TotalTick = NumStep; CancelFlag = false; std::string Message = ""; pEnvIn->EnableFloor(false); pEnvIn->EnableGravity(false); pEnvIn->EnableTemp(false); Import(&LocEnv, NULL, &Message); EnableSelfCollision(false); EnableEquilibriumMode(true); SetStopConditionType(SC_MIN_MAXMOVE); SetStopConditionValue(ConvThreshIn); // SetBondDampZ(1.0); // SetSlowDampZ(0.03); EnablePlasticity(false); EnableFailure(false); if (!DoBCChecks()) return; CurViewMode = RVM_VOXELS; CurViewCol = RVC_STRAIN_EN; CurViewVox = RVV_DEFORMED; //QString DispMesg; OutFilePath = QFileDialog::getSaveFileName(NULL, "Save Tensile Test Results", "", "TXT Files (*.txt)"); emit StartExternalGLUpdate(33); TestRunning = true; if (OutFilePath != "") TensileThread.Execute(false); // RunTensileTest(&DispMesg); if (ProgressMessage != "") QMessageBox::warning(NULL, "warning", QString::fromStdString(ProgressMessage)); }
bool CVX_Sim::ReadXML(CXML_Rip* pXML, std::string* RetMessage) { int tmpInt; vfloat tmpVFloat; if (pXML->FindElement("Integration")){ if (pXML->FindLoadElement("Integrator", &tmpInt)) CurIntegrator = (IntegrationType)tmpInt; else CurIntegrator = I_EULER; if (!pXML->FindLoadElement("DtFrac", &DtFrac)) DtFrac = (vfloat)0.9; pXML->UpLevel(); } if (pXML->FindElement("Damping")){ if (!pXML->FindLoadElement("BondDampingZ", &BondDampingZ)) BondDampingZ = 0.1; if (!pXML->FindLoadElement("ColDampingZ", &ColDampingZ)) ColDampingZ = 1.0; if (!pXML->FindLoadElement("SlowDampingZ", &SlowDampingZ)) SlowDampingZ = 1.0; pXML->UpLevel(); } if (pXML->FindElement("Collisions")){ if (!pXML->FindLoadElement("SelfColEnabled", &SelfColEnabled)) SelfColEnabled = false; if (pXML->FindLoadElement("ColSystem", &tmpInt)) CurColSystem = (ColSystem)tmpInt; else CurColSystem = COL_SURFACE_HORIZON; if (!pXML->FindLoadElement("CollisionHorizon", &CollisionHorizon)) CollisionHorizon = (vfloat)2.0; pXML->UpLevel(); } if (pXML->FindElement("Features")){ if (!pXML->FindLoadElement("MaxVelLimitEnabled", &MaxVelLimitEnabled)) MaxVelLimitEnabled = false; if (!pXML->FindLoadElement("MaxVoxVelLimit", &MaxVoxVelLimit)) MaxVoxVelLimit = (vfloat)0.1; if (!pXML->FindLoadElement("BlendingEnabled", &BlendingEnabled)) BlendingEnabled = false; if (!pXML->FindLoadElement("MixRadius", &MixRadius)) MixRadius = 0.0; if (pXML->FindLoadElement("BlendModel", &tmpInt)) BlendModel = (MatBlendModel)tmpInt; else BlendModel = MB_LINEAR; if (!pXML->FindLoadElement("PolyExp", &PolyExp)) PolyExp = 1.0; if (!pXML->FindLoadElement("FluidDampEnabled", &FluidDampEnabled)) FluidDampEnabled = false; if (!pXML->FindLoadElement("PoissonKickBackEnabled", &PoissonKickBackEnabled)) PoissonKickBackEnabled = false; if (!pXML->FindLoadElement("EnforceLatticeEnabled", &EnforceLatticeEnabled)) EnforceLatticeEnabled = false; pXML->UpLevel(); } if (pXML->FindElement("StopCondition")){ if (pXML->FindLoadElement("StopConditionType", &tmpInt)) SetStopConditionType((StopCondition)tmpInt); else SetStopConditionType(); if (pXML->FindLoadElement("StopConditionValue", &tmpVFloat)) SetStopConditionValue(tmpVFloat); else SetStopConditionValue(); pXML->UpLevel(); } if (pXML->FindElement("EquilibriumMode")){ if (!pXML->FindLoadElement("EquilibriumModeEnabled", &EquilibriumModeEnabled)) EquilibriumModeEnabled = false; if (EquilibriumModeEnabled) EnableEquilibriumMode(true); //so it can set up energy history if necessary pXML->UpLevel(); } if (pXML->FindElement("SurfMesh")){ if (pXML->FindElement("CMesh")){ SurfMesh.DefMesh.ReadXML(pXML); pXML->UpLevel(); } pXML->UpLevel(); } return ReadAdditionalSimXML(pXML, RetMessage); }