english

ArPyC

Qu'est-ce donc?

ArPyC est un "wrapper" entre ARéVi et Python, basé sur les stubs. Plus précisément, il devient possible d'appeler:

  • une méthode d'une arRef ARéVi à partir de code python
  • une fonction python à partir de code c++ d'ARéVi.

Le nom signifie vaguement ARéVi-Python Connector ( Matthieu Aubry en est responsable, et du coup le "logo" était tout trouvé).

En Python

Cela donne, par exemple, dans du code python:

viewer.setFarDistance([1000.0])

ou bien

anObject.setPosition([1.0,2.0,3.0])
paramsOut = [0.0,0.0,0.0]
anObject.getPosition(paramsOut)

Attention aux crochets : cet artifice permet de faire de l'entrée / sortie comme en C++; ils doivent être là.

En C++

Symétriquement, il est possible d'appeler du code python à partir d'ARéVi:

ArRef<PythonFunction> testFunction = PythonFunction::NEW();
testFunction->setFunction("movePosition");
testFunction->callVoid();

Ou avec des paramètres (jusqu'à 10):

aFunction->callVoid(1.0,1.0,1.0,"test",42,true,anArRef);

Et pour les fonctions avec valeur de retour, il faut préciser le type:

double aDouble = anotherFunction->call<double>(aParameter,anOtherParameter);

Ca reste plus verbeux que du python, ce qui semble logique.

En général

Les types supportés sont: bool, int, double, string, ArRef et à moitié ArConstRef.

Certaines limites:

  • Python est un langage "lent", l'utilisation des stubs pour l'appel de méthodes est "lent", le sucre syntaxique pour pouvoir utiliser aRef.aMethod([]) est "lent". Pour programmer du code critique qui doit aller "vite", utilisez par exemple C++.
  • pas de solution élégante pour créer des activités à partir de Python. Les PythonFunction et PythonObjectShell + fonctions ArPyC wrap,unwrap permettent de fonctionner.
  • pas de solution pour les callbacks. A titre d'exemple le viewer du test launcherApp cherche les fonctions python correspondant aux événements claviers et souris. On doit tout faire "à la main".

Comment récupérer le code source ?

Selon qu'on se trouve à l'intérieur ou à l'extérieur du réseau du CERV, la commande change un peu:

  • dedans on passe par ssh
    svn checkout svn+ssh://[votre_login]@svn.cerv.fr/var/svn/ARPyC/trunk ARPyC
    
  • dehors on passe par http
    svn checkout --no-auth-cache --username [votre_login] http://svn.cerv.fr:/svn/ARPyC/trunk ARPyC
    
    

Comment compiler ?

  • D'abord, pour qu'ArPyC aie la moindre utilité, il faut compiler les stubs d'ARéVi.
    •  Doxygen est nécessaire, installez le s'il n'est pas déjà là.
    • Pour compiler, armake tools dans le répertoire d'AReVi.
    • Pensez éventuellement à faire un armake install ensuite.
  • Ensuite compilez la bibliothèque ArPyC
    • vous aurez besoin de Python.h, autrement dit sous ubuntu le package python-dev.
      sudo apt-get install python-dev 
      
    • dans le répertoire src/ArPyC
    • ./configure
    • make
  • Enfin compilez les tests.
    • dans le répertoire tests/ArPyC
    • ./configure
    • make
    • recopier la ligne finale du genre export LD_LIBRARY_PATH etc... pour positionner la variable d'environnement qui va bien.

Et puis ?

Pour l'instant pas d'autre documentation, lisez les tests et inspirez vous en:

  • Il y a un test de base, par forcément très intéressant ArPyCTest.
  • Et un lanceur de script python laucherApp cerceaux.py par exemple. Le fichier source:/trunk/tests/ArPyC/cerceaux.py est un point de départ possible.

Vous pouvez venir me (F. Devillers) voir pour des démonstrations, explications... sur comment ça marche donc cette chose.

Il n'y a pas de roadmap, je bidouille ArPyC quand j'en ai le temps.

ToDo

  • un script d'installation dans ARéVi
  • un tag alpha, et le tgz correspondant avec les sources en pièce jointe de cette page
  • de la doc
  • revoir le code python des exemples

Qui ?

Frédéric Devillers (devillers... complétez par @enib.fr). N'hésitez pas à m'envoyer un mail pour toutes remarques, questions, voire même contributions etc.

Attachments