Estoy escribiendo una secuencia de comandos python para un programa que ha expuesto su API de C++ utilizando SWIG. un trago expuesta función tiene un interfaz de la siguiente manera:Asignación de matriz de tipo SWIG C++ desde Python
void writePixelsRect(JoxColor* colors, int left, int top, int width, int height);
JoxColor es una estructura POD con este aspecto:
struct JoxColor {
float r, g, b, a;
};
puedo crear fácilmente una sola JoxColor en Python e invocar una llamada a writePixelsRect como esto:
c = JoxApi.JoxColor()
c.r = r
c.g = g
c.b = b
c.a = a
JoxApi.writePixelsRect(c, x, y, 1, 1)
writePixelsRect repetidamente llamar con un rectángulo de 1x1 píxeles es muy lento, así que quiero crear una matriz de JoxColor del pitón por lo que ca n escribir rectángulos más grandes en el momento. ¿Es esto posible con los tipos de SWIG?
Tenga en cuenta que no tengo acceso al código fuente de la biblioteca de C++ y exponer JoxColor writePixelsRect así que no puedo agregar una función de ayuda para esto. Tampoco quiero introducir un nuevo código C++ en el sistema, ya que obligaría a los usuarios de mi script python a compilar el código C++ en la plataforma que estén ejecutando. Tengo acceso a ctypes en el entorno python, así que si pudiera convertir de alguna manera una matriz flotante creada en tipos al tipo de JoxColor * para SWIG, funcionaría para mí.
¿Es posible modificar la pieza de envoltura SWIG? – Martin
¿Tiene acceso al archivo * .swig? ¿Podría verificar si incluye funcionalidades de las bibliotecas de SWIG como cpointer.i, carrays.i o cmalloc.i - http://www.swig.org/Doc1.3/Library.html. Tal vez alguien que preparó este contenedor SWIG ya incluía la funcionalidad de manejar el arreglo de JoxColor? También puede consultar el archivo JoxAPImodule.py para ver una lista de todas las funciones y clases disponibles. – Zuljin
No tengo acceso a los archivos swig y no puedo modificar la parte SWIG wrapping. – Laserallan