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
- vous aurez besoin de Python.h, autrement dit sous ubuntu le package python-dev.
- 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.
