Domanda

Le scrivo alcuni binding SWIG / Python per un po 'di codice C ++. Questo è per quello che è chiamato l'API Kinect accidentale, ho funzioni motorie e guidati lavoro . I callback alla classe Listener che analizzare e popolare il buffer RGB e profondità non sembrano vengono chiamati da SWIG. I fili di acquisizione dati, evidentemente, start up e iniziare monopolizzavano la CPU, ma senza linee di debug dalla richiamata venire attraverso. Quale sarebbe modo migliore per buffer di dati popolamento e facilmente accedervi da Python?

class KinectListener
{
     public:
        virtual ~KinectListener(){};
        virtual void KinectDisconnected(Kinect *K) {};
        virtual void DepthReceived(Kinect *K) {};
        virtual void ColorReceived(Kinect *K) {};
        virtual void AudioReceived(Kinect *K) {};
};

Questa è la classe ascoltatore con i metodi virtuali, può la versione di Python avvolto di questa classe essere usata per gli ascoltatori ereditano per la classe C ++? Ho aggiunto un ascoltatore minima in C ++ e ora il lavoro rimanente è per accedere alle matrici efficiente con typemaps. Attualmente sto usando questo typemap ingenuo

%typemap(out) unsigned short [ANY] {
  int i;
  $result = PyList_New($1_dim0);
  for (i = 0; i < $1_dim0; i++) {
    PyObject *o = PyInt_FromLong((long)$1[i]);
    PyList_SetItem($result,i,o);
  }
}

Opzioni migliori?

È stato utile?

Soluzione

C'è un modo utilizzando la funzione di direttori. Attiva per il proxy KinectListener, una riga di codice:

%feature("director") KinectListener

Poi si può ereditare dalla classe KinectListener nel codice Python e definire le funzioni.

scroll top