Example #1
0
// ================================================
// OnPacketReceived(CigiBasePacket *Packet)
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
void PositionRequestP::OnPacketReceived(CigiBasePacket *Packet)
{
	CigiPositionReqV3 *pr = (CigiPositionReqV3 *)(Packet);
	
	if( !trackerParamsMap ) return;
	
	if( pr->GetObjectClass() != CigiBasePositionReq::MotionTracker )
		return;
	
	int trackerID = pr->GetObjectID();

	std::map< int, TrackerParams * >::iterator tpIter = 
		trackerParamsMap->find( trackerID );
	if( tpIter == trackerParamsMap->end() )
	{
		std::cout << "Warning: Host requested position for unknown motion tracker #" 
			<< trackerID << std::endl;
		return;
	}

	TrackerParams *trackerParams = (*tpIter).second;
	
	switch( pr->GetUpdateMode() )
	{
	case CigiBasePositionReq::Continuous:
		trackerParams->positionRequestStatus = TrackerParams::PositionReqContinuous;
		break;
	case CigiBasePositionReq::OneShot:
	default:
		trackerParams->positionRequestStatus = TrackerParams::PositionReqOneShot;
		break;
	
	}
}
Example #2
0
// ================================================
// ProcPositionReq
// vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
void Entity::ProcPositionReq( CigiPositionReqV3 &Packet, CigiOutgoingMsg &Omsg )
{
	bool Valid = false;
	CigiPositionRespV3 Resp;

	if( Packet.GetObjectClass() == CigiBasePositionReq::Entity )
	{

		Resp.SetObjectID( Packet.GetObjectID(), false );
		Resp.SetArtPartID( Packet.GetArtPartID(), false );
		Resp.SetObjectClass(
		    ( CigiBasePositionResp::ObjectClassGrp )Packet.GetObjectClass(),
		    false );
		Resp.SetCoordSys(
		    ( CigiBasePositionResp::CoordSysGrp )Packet.GetCoordSys(),
		    false );

		if( Packet.GetCoordSys() == CigiBasePositionReq::Geodetic )
		{
			if( !IsChild )
			{
				Resp.SetLatOrXoff( CigiPos.LatX, false );
				Resp.SetLonOrYoff( CigiPos.LonY, false );
				Resp.SetAltOrZoff( CigiPos.AltZ, false );
				Resp.SetYaw(( float )CigiPos.Yaw, false );
				Resp.SetPitch(( float )CigiPos.Pitch, false );
				Resp.SetRoll(( float )CigiPos.Roll, false );

				Valid = true;
			}
			// If a geodetic coord position request for a child entity
			//   is received, the entity manager will process it
			//   because the manager will have to go through all the
			//   parents and develop a complete transformation
			//   matrix.
		}
		else if( Packet.GetCoordSys() == CigiBasePositionReq::ParentEntity )
		{
			if( IsChild )
			{
				Resp.SetLatOrXoff( CigiPos.LatX, false );
				Resp.SetLonOrYoff( CigiPos.LonY, false );
				Resp.SetAltOrZoff( CigiPos.AltZ, false );
				Resp.SetYaw(( float )CigiPos.Yaw, false );
				Resp.SetPitch(( float )CigiPos.Pitch, false );
				Resp.SetRoll(( float )CigiPos.Roll, false );

				Valid = true;
			}
		}
	}
	else if( Packet.GetCoordSys() == CigiBasePositionReq::Submodel )   // Articulated part
	{
		// Only respond to Submodel coordinate system requests for
		//   an articulated response
		ProcArtPartPositionReq( Packet, Omsg );
	}

	if( Valid )
		Omsg << Resp;
}
Example #3
0
void XPositionReqV3::OnPacketReceived(CigiBasePacket *Packet)
{
   CigiPositionReqV3 *InPckt = (CigiPositionReqV3 *)Packet;

   bool ok = true;

   printf("Position Request\n");

   printf("\tObject ID = %d\n",InPckt->GetObjectID());
   printf("\tArticulated Part ID = %d\n",InPckt->GetArtPartID());

   printf("\tUpdate Mode = %d : ",InPckt->GetUpdateMode());
   switch(InPckt->GetUpdateMode())
   {
   case 0:
      printf("OneShot\n");
      break;
   case 1:
      printf("Continuous\n");
      break;
   default:
      printf("\n");
      break;
   }

   printf("\tObject Class = %d : ",InPckt->GetObjectClass());
   switch(InPckt->GetObjectClass())
   {
   case 0:
      printf("Entity\n");
      break;
   case 1:
      printf("ArtPart\n");
      break;
   case 2:
      printf("View\n");
      break;
   case 3:
      printf("ViewGrp\n");
      break;
   case 4:
      printf("MotionTracker\n");
      break;
   default:
      printf("\n");
      break;
   }

   printf("\tCoordinate System = %d : ",InPckt->GetCoordSys());
   switch(InPckt->GetCoordSys())
   {
   case 0:
      printf("Geodetic\n");
      break;
   case 1:
      printf("ParentEntity\n");
      break;
   case 2:
      printf("Submodel\n");
      break;
   default:
      printf("\n");
      break;
   }

}