Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Python (http://www.velocityreviews.com/forums/f43-python.html)
-   -   How to access an Array and a struct within a struct wrapped by Swig ? (http://www.velocityreviews.com/forums/t631055-how-to-access-an-array-and-a-struct-within-a-struct-wrapped-by-swig.html)

emmanuel.rivoire@gmail.com 08-16-2008 10:38 AM

How to access an Array and a struct within a struct wrapped by Swig ?
 
Hello,

I spent almost a week to be able to embed Python within my C++ game
engine.
I wrote a mini-tutorial of what I was able to do so far here :
http://forums.indiegamer.com/showpos...52&postcount=9

At the end of my tutorial, I wrote : "You can do the same with C++
classes, and with structures within structures. Swig can parse & wrap
most C/C++ declarations."

Gloups, I was so wrong..! :-S

It seems that I can read a struct within my struct, but I cannot write
values to it.
Also, I cannot access the array from within my struct.

Any help to achieve this would be very welcome.

Here the problem in detail :
I'm using Python 2.5.2 & Swig 1.3.36.

The structures :
struct SIn
{
int in1, in2;
};

struct SPythoned
{
SIn Inner;
float Skill[16];
};

The python code :
=======================
def TestObject(o):
print(type(o))
print(type(o.Skill))
print(o.Skill)
print(type(o.Inner))
print(type(o.Inner.in1))
print(o.Inner.in1)
print(o.Inner.in2)

o.Inner.in1 = 12
o.Inner.in2 = 17

print(o.Inner.in1)
print(o.Inner.in2)
=======================


It gives me this output :
=======================
<class 'TE2008.SPythoned'>
<type 'PySwigObject'>
_20fd1300_p_float
<class 'TE2008.SIn'>
<type 'int'>
2
22
2
22
=======================

So althought I can read the value, the "o.Inner.inX = Y" are without
effect..! (and checking the value in the object in the C part confirms
this).

Moreover, if I add these lines :
for i in range(16) :
print(o.Skill[i])

I get this error :
Traceback (most recent call last):
File "d:\TE 2008\PyTest.py", line 32, in TestObject
print(o.Skill[i])
TypeError: 'PySwigObject' object is unsubscriptable

Any idea how to make this work ..?

emmanuel.rivoire@gmail.com 08-16-2008 11:13 AM

Re: How to access an Array and a struct within a struct wrapped bySwig ?
 
Ok, Swig needs the structure to be declared like this :
typedef struct SIn
{
int in1, in2;
} SIn;

Else, it doesn't understand it's a structure... :-S
Now, I can write to it.

I also found out that Swig didn't allow to write to the array :
http://www.swig.org/Doc1.3/SWIG.html#SWIG_nn34 ... :-S
So I just have to find out how to read the array, and I'll be all
good..!

Anish Chapagain 08-16-2008 06:05 PM

Re: How to access an Array and a struct within a struct wrapped bySwig ?
 
Hi,
If you have struct defined in .h file then it's ok or can dea easyily
with struct written with .i file,
in .h file,
struct def
{
int a;
char name[10];
};
can be referenced as
>>strvar=new_def() //now strvar is your

object for struct def
and can access a and name as, get and
set for individual member see,
>>def_a_set(strvar,10)
>>def_a_get(strvar) will return 10.

or you can define struct as,

typedef struct
{
int sage;
}coll;
within .h file and access similarly.

regard's
Anish Chapagain
www.mysticnepal.com

On Aug 16, 11:38*am, emmanuel.rivo...@gmail.com wrote:
> Hello,
>
> I spent almost a week to be able to embed Python within my C++ game
> engine.
> I wrote a mini-tutorial of what I was able to do so far here :http://forums.indiegamer.com/showpos...52&postcount=9
>
> At the end of my tutorial, I wrote : "You can do the same with C++
> classes, and with structures within structures. Swig can parse & wrap
> most C/C++ declarations."
>
> Gloups, I was so wrong..! :-S
>
> It seems that I can read a struct within my struct, but I cannot write
> values to it.
> Also, I cannot access the array from within my struct.
>
> Any help to achieve this would be very welcome.
>
> Here the problem in detail :
> I'm using Python 2.5.2 & Swig 1.3.36.
>
> The structures :
> struct SIn
> {
> * * * * int in1, in2;
>
> };
>
> struct SPythoned
> {
> * * * * SIn Inner;
> * * * * float Skill[16];
>
> };
>
> The python code :
> =======================
> def TestObject(o):
> * * * * print(type(o))
> * * * * print(type(o.Skill))
> * * * * print(o.Skill)
> * * * * print(type(o.Inner))
> * * * * print(type(o.Inner.in1))
> * * * * print(o.Inner.in1)
> * * * * print(o.Inner.in2)
>
> * * * * o.Inner.in1 = 12
> * * * * o.Inner.in2 = 17
>
> * * * * print(o.Inner.in1)
> * * * * print(o.Inner.in2)
> =======================
>
> It gives me this output :
> =======================
> <class 'TE2008.SPythoned'>
> <type 'PySwigObject'>
> _20fd1300_p_float
> <class 'TE2008.SIn'>
> <type 'int'>
> 2
> 22
> 2
> 22
> =======================
>
> So althought I can read the value, the "o.Inner.inX = Y" are without
> effect..! (and checking the value in the object in the C part confirms
> this).
>
> Moreover, if I add these lines :
> * * * * for i in range(16) :
> * * * * * * * * print(o.Skill[i])
>
> I get this error :
> Traceback (most recent call last):
> * File "d:\TE 2008\PyTest.py", line 32, in TestObject
> * * print(o.Skill[i])
> TypeError: 'PySwigObject' object is unsubscriptable
>
> Any idea how to make this work ..?


---------------

emmanuel.rivoire@gmail.com 08-18-2008 03:30 AM

Re: How to access an Array and a struct within a struct wrapped bySwig ?
 
Anish Chapagain, I already know how to use structure, as my example
shown it.
I had trouble only with the nested structures, and it was coz of
missing typedef (ie: Swig need C struct declaration, not C++).

And I still cannot find how to get my arrays... :-S


All times are GMT. The time now is 12:22 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.