Je suis en train d'écrire un script python pour un programme qui a exposé son API C++ en utilisant SWIG. Une fonction exposée par SWIG a une interface comme ceci :
void writePixelsRect(JoxColor* colors, int left, int top, int width, int height);
JoxColor est une structure POD ressemblant à ceci :
struct JoxColor {
float r, g, b, a;
};
Je peux facilement créer un seul JoxColor en Python et invoquer un appel à writePixelsRect de cette manière :
c = JoxApi.JoxColor()
c.r = r
c.g = g
c.b = b
c.a = a
JoxApi.writePixelsRect(c, x, y, 1, 1)
Appeler de manière répétée writePixelsRect avec un rectangle de 1x1 pixel est très lent, donc je veux créer un tableau de JoxColor en python pour pouvoir écrire de plus grands rectangles en une seule fois. Est-ce possible avec les types SWIG ?
Notez que je n'ai pas accès au code source de la bibliothèque C++ exposant JoxColor et writePixelsRect donc je ne peux pas ajouter de fonction d'aide pour cela. Je ne veux pas non plus introduire de nouveau code C++ dans le système car cela obligerait les utilisateurs de mon script python à compiler le code C++ sur la plateforme sur laquelle ils s'exécutent. J'ai cependant accès à ctypes dans l'environnement python donc si je pouvais d'une manière ou d'une autre caster un tableau de flottants créé dans ctypes au type de JoxColor* pour SWIG, cela fonctionnerait pour moi.