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

}
Exemple #2
0
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);
}