Exemple #1
0
void radTg3dRelax::Push_backCenterPointAndField(radTFieldKey* pFieldKey, radTVectPairOfVect3d* pVectPairOfVect3d, radTrans* pBaseTrans, radTg3d* g3dSrcPtr, radTApplication* pAppl)
{// Attention: this assumes no more than one transformation with mult. no more than 1 !!!
	TVector3d CP = CentrPoint;
	radTrans* pTrans = (g3dListOfTransform.empty())? 0 : (radTrans*)((*(g3dListOfTransform.begin())).Handler_g.rep);

	radTrans TotTrans;
	if(pTrans != 0)
	{
		if(pBaseTrans != 0) 
		{
			TrProduct(pBaseTrans, pTrans, TotTrans);
			pTrans = &TotTrans;
		}
	}
	else
	{
		if(pBaseTrans != 0) pTrans = pBaseTrans;
	}

	if(pTrans != 0) CP = pTrans->TrPoint(CP);
	radTPairOfVect3d Pair(CP);

	if(pFieldKey->J_) return;
	else if(pFieldKey->M_) Pair.V2 = (pTrans == 0)? Magn : pTrans->TrVectField(Magn);
	else
	{
		radTCompCriterium CompCriterium;
		TVector3d ZeroVect(0.,0.,0.);
		radTField Field(*pFieldKey, CompCriterium, CP, ZeroVect, ZeroVect, ZeroVect, ZeroVect, 0.);
		g3dSrcPtr->B_genComp(&Field);
		Pair.V2 = (pFieldKey->B_)? Field.B : ((pFieldKey->H_)? Field.H : ((pFieldKey->A_)? Field.A : ZeroVect));
	}
	pVectPairOfVect3d->push_back(Pair);
}
Exemple #2
0
void srTShapedOptElem::SetupNativeTransformation()
{//ATTENTION: from fere on, "optical" frame is assumed, i.e:
 //x-hor., y-vert., z-longitudinal
 //the transformation found here orients the optical element with respect to incident beam
	//const double Pi = 3.141592653589793;
	//double RelTol = 1.E-10;
	//TVector3d N0Loc(0.,0.,1.), Zero(0.,0.,0.);
	//TVector3d eVert(0.,1.,0.), eHor(1.,0.,0.), eLong(0.,1.,0.);
	TVector3d Zero(0.,0.,0.);

	gmTrans *pTotalTrans = new gmTrans();
	SetupPreOrient(*pTotalTrans); //virtual
	//pTotalTrans->SetupRotation(Zero, eVert, Pi);

	int arAxRot[] = {m_axRot1, m_axRot2, m_axRot3};
	double arAngRot[] = {m_angRot1, m_angRot2, m_angRot3};
	for(int i=0; i<3; i++)
	{
		int axRot = arAxRot[i];
		double angRot = arAngRot[i];
		if((axRot <= 0) || (angRot == 0)) continue;

		TVector3d vAxRot(0.,0.,0.);
		bool axIsCorrect = false;
		if(axRot == 1) 
		{
			vAxRot.x = 1.; axIsCorrect = true;
		}
		else if(axRot == 2)
		{
			vAxRot.y = 1.; axIsCorrect = true;
		}
		else if(axRot == 3)
		{
			vAxRot.z = 1.; axIsCorrect = true;
		}

		if(!axIsCorrect) continue;

		gmTrans prevTrf(*pTotalTrans), nextRot;
		nextRot.SetupRotation(Zero, vAxRot, angRot);
		TrProduct(&nextRot, &prevTrf, *pTotalTrans);
	}

	double horSizeLoc, vertSizeLoc;
	GetElemDimsInLocFrame(horSizeLoc, vertSizeLoc);

	//FindElemExtentsAlongOptAxes(*pTotalTrans, horSizeLoc, vertSizeLoc, m_extAlongOptAxIn, m_extAlongOptAxOut); //virtual
	//if(ofstLong != 0.)
	//{
	//	TVector3d vOfstTrf(0., 0., ofstLong); //Check this: can be frame-dependent!
	//	gmTrans prevTrf(*pTotalTrans), ofstTrf;
	//	ofstTrf.SetupTranslation(vOfstTrf);
	//	TrProduct(&ofstTrf, &prevTrf, *pTotalTrans);
	//}

	if((TransvCenPoint.x != 0.) || (TransvCenPoint.y != 0.))
	{
		TVector3d vOfstTrf(TransvCenPoint.x, TransvCenPoint.y, 0.); //Check this: can be frame-dependent!
		gmTrans prevTrf(*pTotalTrans), ofstTrf;
		ofstTrf.SetupTranslation(vOfstTrf);
		TrProduct(&ofstTrf, &prevTrf, *pTotalTrans);
	}

	TransHndl = srTransHndl(pTotalTrans);
}