void VsSimulationWindow::SetupTrackCamera(bool bResetEyePos)
{
	if(m_bTrackCamera)
	{
		m_lpTrackBody = NULL;

		if(!Std_IsBlank(m_strLookAtStructureID))
		{
			Structure *lpStructure = m_lpSim->FindStructureFromAll(m_strLookAtStructureID);

			VsBody *lpVsBody = NULL;
			BodyPart *lpBody=NULL;
			if(!Std_IsBlank(m_strLookAtBodyID))
				lpBody = dynamic_cast<BodyPart *>(lpStructure->FindNode(m_strLookAtBodyID));

			if(lpBody)
				SetCameraLookAt(lpBody->GetCurrentPosition(), bResetEyePos);
			else
				SetCameraLookAt(lpStructure->Position(), bResetEyePos);

			m_lpTrackBody = lpBody;
		} 
	}
	else
	{
		m_lpTrackBody = NULL;
		CStdFPoint vDefault(0, 0, 0);
		SetCameraLookAt(vDefault, bResetEyePos);
	}
}
Example #2
0
MMatrix  sgLockAngleMatrix::getsgLockAngleMatrix( const MMatrix& inputMatrix, unsigned char axis, double angle )
{
	MStatus status;

	angle = angle/180 * PI;
	bool minusAxis = false;

	if( axis > 2 )
	{
		minusAxis = true;
		axis -= 3;
	}
	unsigned int upAxis = ( axis+1 ) % 3;
	unsigned int crossAxis = ( axis+2 ) % 3;

	MVector vDefault( 0,0,0 );
	vDefault[ axis ] = 1;
	MVector vAxis = inputMatrix[ axis ];
	vAxis.normalize();

	double dotValue = vAxis * vDefault;
	double cuAngle = acos( dotValue );

	if( angle > cuAngle ) angle = cuAngle;

	MVector vCross = vDefault ^ vAxis;
	MVector vUp    = vCross ^ vDefault;

	vUp.normalize();
	MVector vEdit = sin( angle ) * vUp + cos( angle ) * vDefault;

	if( minusAxis ) vEdit *= -1;

	MVector vUpEdit;
	vUpEdit[ axis ] = -vEdit[ upAxis ];
	vUpEdit[ upAxis ] = vEdit[ axis ];
	vUpEdit[ crossAxis ] = 0;

	MVector vCrossEdit = vEdit ^ vUpEdit;
	vUpEdit = vCrossEdit ^ vEdit;

	vEdit.normalize();
	vUpEdit.normalize();
	vCrossEdit.normalize();

	MMatrix returnMtx;

	returnMtx( axis, 0 ) = vEdit.x;
	returnMtx( axis, 1 ) = vEdit.y;
	returnMtx( axis, 2 ) = vEdit.z;
	returnMtx( upAxis, 0 ) = vUpEdit.x;
	returnMtx( upAxis, 1 ) = vUpEdit.y;
	returnMtx( upAxis, 2 ) = vUpEdit.z;
	returnMtx( crossAxis, 0 ) = vCrossEdit.x;
	returnMtx( crossAxis, 1 ) = vCrossEdit.y;
	returnMtx( crossAxis, 2 ) = vCrossEdit.z;

	return returnMtx;
}
bool CXsiFtkGeometryUtil::SetModelDefaultAttributes(CSLModel* pModel, SI_Char* szName)
{
	CSIBCVector3D vDefault(1.0, 1.0, 1.0);

	pModel->SetName(szName);
	pModel->Visibility()->SetVisibility(SI_TRUE);
	pModel->Transform()->SetScale( vDefault );

	// Custom pSet : Mesh_Subdivision_Info
	AddSubdivitionPSet(pModel);

	return true;
}