Wrapping a Cplusplus class in Python/fr

Contexte
FreeCAD utilise un système personnalisé basé sur XML pour créer le wrapper Python d'une classe C++. Pour encapsuler une classe C++ afin de l'utiliser dans Python, deux fichiers doivent être créés manuellement, et deux fichiers sont automatiquement générés par le système de construction CMake (en plus des fichiers d'en-tête et d'implémentation C++ de la classe).

Vous devez créer :

Editez le fichier approprié pour ajouter des références à ces deux fichiers. A partir du fichier XML, le système de construction créera alors :

Fichier XML de description des classes
Le fichier XML fournit des informations sur les fonctions et attributs que la classe Python implémente ainsi que la documentation utilisateur pour ces éléments qui s'affiche dans la Console Python de FreeCAD.

Pour cet exemple, nous allons examiner le wrapper de la classe Axis C++. Le fichier de description XML commence par:

Et définit une direction et une position (base) dans l'espace 3D.

Les constructeurs suivants sont pris en charge :
 * Axis -- empty constructor
 * Axis(Axis) -- copy constructor
 * Axis(Base, Direction) -- define position and direction

Après ce préambule, une liste de méthodes et d'attributs est donnée. Le format d'une méthode est le suivant :

Le format d'un attribut est :

Pour un attribut, si "ReadOnly" est faux, vous devez fournir une fonction getter et une fonction setter. Si elle est vraie, seule une fonction getter est autorisée. Dans ce cas, nous devrons fournir deux fonctions dans le fichier C++ d'implémentation :

et

Implementation Cplusplus File
The implementation C++ file provides the "glue" that connects the C++ and Python structures together, effectively translating from one language to the other. The FreeCAD C++-to-Python system provides a number of C++ classes that map to their corresponding Python type. The most fundamental of these is the class -- rarely created directly, this class provides the base of the inheritance tree, and is used as the return type for any function that is returning Python data.

Include Files
Your C++ implementation file will include the following files:

Of course, you may include whatever other C++ headers your code requires to function as well.

Constructor
Your C++ implementation must contain the definition of the PyInit function: for example, for the Axis class wrapper, this is

Within this function you will most likely need to parse incoming arguments to the constructor: the most important function for this purpose is the Python-provided. It takes in the passed argument list, a descriptor for the expected arguments that it should parse, and type information and storage locations for the parsed results. For example:

For a complete list of format specifiers see Python C API documentation. Note that several related functions are also defined which allow the use of keywords, etc. The complete set is: