anyKode Marilou
ContentsIndexHome
PreviousUpNext
RobotPHX::QueryRobotPHX2

QueryRobotPHX2 recherche un PHX à partir du PHX courant et retourne un objet d'un type défini par l'utilisateur.

C++
template <class ROBOTPHXOBJECT> ROBOTPHXOBJECT * QueryRobotPHX2(const xkode::lib::String& Name);
Parameters 
Description 
const xkode::lib::String& Name 
[in] Nom relatif du PHX à rechercher. 

Un pointeur sur un objet du type défini par l'utilisateur si le PHX a été trouvé, NULL sinon.

La recherche est recursive. Le nom du PHX recherché est relatif au PHX courant et peut traverser plusieurs PHX. 

Par exemple: 

Le PHX Robot 1 (/robot1) contient un PHX bras manipulateur (/robot1/arm1) qui contient un PHX pince (/robot1/arm1/gripper1): 

 

La recherche du gripper pourra se faire de différentes manières suivant le point de départ:

Point de départ 
Recherche 
ModaCPP::RobotPHX *pRobot=connection->QueryRobotPHX("/robot1"); 
pRobot->QueryRobotPHX("arm1/gripper1") 
ModaCPP::RobotPHX *pArm=pRobot->QueryRobotPHX("/robot1/arm1"); 
pArm->QueryRobotPHX("gripper1") 

 

Contrairement à QueryRobotPHX, cette surcharge permet de spécifier une classe utilisateur. Celle-ci doit impérativement hériter de RobotPHX.

#include "Modacpp.h"

#define MODASERVER "localhost"
#define MYROBOTNAME    "/myrobot"

//***********************************************************
//user custom class, inherits from RobotPHX
class MyRobot:public ModaCPP::RobotPHX
    {
    private:

    public:
        MyRobot(xkode::lib::String Name):RobotPHX(Name)
            {
            //The object is not yet created and connected to the system
            //Do not use QueryDevicexxxx functions !
            }

        virtual ~MyRobot()
            {

            }

        virtual void OnStartup(void) override
            {
            //OnStartup is called automatically if robot was found
            //from a QueryRobotPHX function.

            //You can here call the QueryDevicexxxx functions
            }

        bool MoveMyRobot(float speed)
            {
            //create your own robot's functions
            return(true);
            }
    };

//***********************************************************
int main(int argc, char* argv[])
{
xkode::lib::String ModaServer="127.0.0.1";

ModaCPP::Connection *pConnection=new ModaCPP::Connection(true);
if(pConnection->Connect(ModaServer))
    {
    ModaCPP::RobotPHX *pWorld=pConnection->QueryRobotPHX("/");
    MyRobot *pMyRobot=pWorld->QueryRobotPHX2<MyRobot>("myrobot");

    //Equivalent to:
    //MyRobot *pMyRobot=pConnection->QueryRobotPHX2<MyRobot>("/myrobot");

    if(pRobot!=NULL)
        {
        //The robot is created and all devices are valid
        //You can use devices and make your robotics loop here
        delete pRobot;
        }
    delete pConnection;
    }
_getch();
return 0;
}
Documentation v4.7 (18/01/2015), Copyright (c) 2015 anyKode. All rights reserved.
What do you think about this topic? Send feedback!