From: Holger S. <hs...@ma...> - 2007-09-27 14:56:34
|
Hi ! I'm trying to write a swig wrapper for Chipmunk, a 2d physics engine *). However, I have a problem with assigning values to typedefs inside structs. Here are some excerpts from the chipmunk code at http://aerosol.googlecode.com/svn/trunk/Chipmunk/src/ /* from chipmunk.h */ typedef float cpFloat; /* from cpVect.h */ typedef struct cpVect{ cpFloat x,y; } cpVect; /* from cpSpace.h */ typedef struct cpSpace{ cpVect gravity; /* more fields here */ } // Basic allocation/destruction functions. cpSpace* cpSpaceAlloc(void); cpSpace* cpSpaceInit(cpSpace *space); cpSpace* cpSpaceNew(void); void cpSpaceDestroy(cpSpace *space); void cpSpaceFree(cpSpace *space); Now I want to store things in cpSpace.gravity (which is of type gravity) in a nice way, e.g. like this: space = chipmunk.cpSpaceNew() space.gravity = (0,-900) or, even better, via a helper class (which is written in python): class vec2d(object): def __init__(self, x, y): self.x = x self.y = y space = chipmunk.cpSpaceNew() space.gravity = vec2d(0,-900) (The class vec2d is obviously much more complex, but you get the idia). It would also be okay to do it, again, via tuples: space = chipmunk.cpSpaceNew() space.gravity = vec2d(0,-900).toTuples() But I don't get how I should modify chipmunk.i do be able to do this feature. From looking at the current chipmunk_wrap.c file, it seems that I am supposed to create cpVect "objects" via _wrap_new_cpVect() and then using the access functions, _wrap_cpVect_x_set() etc. But that seems awkward. Also, I don't have the slightest clue how I should keep memory sane, e.g. when and where to call _wrap_delete_cpVect() to avoid memory leaks. Any clues? |