Thread: [pygccxml-development] TypeError: No to_python (by-value) converter found for C++ type: Ogre::Colour
Brought to you by:
mbaas,
roman_yakovenko
From: Lakin W. <lak...@gm...> - 2006-05-30 17:22:37
Attachments:
ColourValue.pypp.cpp
OgreColourValue.h
|
Well, I've succeeded in compiling the ogre module. But when I try to import it I get: TypeError: No to_python (by-value) converter found for C++ type: Ogre::ColourValue According to: http://mail.python.org/pipermail/c++-sig/2004-August/007973.html This might be due to ColourValue being non-copyable. I checked the ColourValue Generated code, and sure enough, it's non-copyable. But I don't know why. It doesn't define a Copy Constructor, but it also doesn't explicitly define one. I assume this is a result of Roman's last fix, when I had problems with the Frustum class which shouldn't have been copyable. I'm not sure that current fix is correct. Let me explain: I think that in the case of Frustum, it is Ogre which is at fault. According to the C++ code for Frustum, it should be copyable, and because pyplusplus is looking at the C++ code to generate the wrapper, it was correct in saying that Frustum is Copyable. In the case of ColourValue, it _is_ copyable, and Ogre is fine with leaving out the CopyConstructor for the Compiler to generate. In this case, pyplusplus should wrap ColourValue as copyable, right? I can't upload files to my website from where I am, so I am attaching the relevant ones to the email. Lakin |
From: Lakin W. <lak...@gm...> - 2006-05-30 17:52:52
|
On 5/30/06, Lakin Wecker <lak...@gm...> wrote: > Well, I've succeeded in compiling the ogre module. But when I try to > import it I get: > > TypeError: No to_python (by-value) converter found for C++ type: > Ogre::ColourValue > > > According to: http://mail.python.org/pipermail/c++-sig/2004-August/007973.html > > This might be due to ColourValue being non-copyable. I checked the > ColourValue Generated code, and sure enough, it's non-copyable. But I > don't know why. It doesn't define a Copy Constructor, but it also > doesn't explicitly define one. Sorry for the confusion. I meant to say: It doesn't explicitly disable the copy constructor. In the meantime I am going to use something like: copyable_list = [ 'Vector3', 'Vector4', 'ColourValue', 'Vector2', ] for copyable in copyable_list: classes = ogre_ns.classes (copyable, allow_empty=True) classes.noncopyable = False To get around it. Lakin |
From: Roman Y. <rom...@gm...> - 2006-05-30 18:09:29
|
> Sorry for the confusion. I meant to say: It doesn't explicitly > disable the copy constructor. > > In the meantime I am going to use something like: > > copyable_list = [ 'Vector3', 'Vector4', 'ColourValue', 'Vector2', ] > for copyable in copyable_list: > classes = ogre_ns.classes (copyable, allow_empty=True) > classes.noncopyable = False > > To get around it. :-), too late I already fixed the bug. Fix in SVN. But I am glad, that you found work around. I forgot, that "union" is always copyable. My fault. > Lakin > -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Lakin W. <lak...@gm...> - 2006-05-30 18:11:31
|
I haven't tried your fix with SVN, I am going to do that right now. But I had just written this letter, so I'll send it to the list anyways. But stay tuned for an update on this situation as well. Now, I'm getting this error: TypeError: No to_python (by-value) converter found for C++ type: Ogre::Vector3 And in this case, Vector3 is copyable. (IE: there is no non_copyable stuff in the pypp generated source). I'm not sure how to proceed. But it's lunch time anyways, so I'm going to go eat. Lakin On 5/30/06, Roman Yakovenko <rom...@gm...> wrote: > > Sorry for the confusion. I meant to say: It doesn't explicitly > > disable the copy constructor. > > > > In the meantime I am going to use something like: > > > > copyable_list = [ 'Vector3', 'Vector4', 'ColourValue', 'Vector2', ] > > for copyable in copyable_list: > > classes = ogre_ns.classes (copyable, allow_empty=True) > > classes.noncopyable = False > > > > To get around it. > > :-), too late I already fixed the bug. Fix in SVN. > But I am glad, that you found work around. > > > I forgot, that "union" is always copyable. My fault. > > > > Lakin > > > > > -- > Roman Yakovenko > C++ Python language binding > http://www.language-binding.net/ > |
From: Roman Y. <rom...@gm...> - 2006-05-30 18:45:19
|
On 5/30/06, Lakin Wecker <lak...@gm...> wrote: > I haven't tried your fix with SVN, I am going to do that right now. > But I had just written this letter, so I'll send it to the list > anyways. But stay tuned for an update on this situation as well. > > Now, I'm getting this error: > > TypeError: No to_python (by-value) converter found for C++ type: Ogre::Vector3 > > And in this case, Vector3 is copyable. (IE: there is no non_copyable > stuff in the pypp generated source). > > I'm not sure how to proceed. But it's lunch time anyways, so I'm > going to go eat. Bon appetite :-). I will check this. -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Lakin W. <lak...@gm...> - 2006-05-30 19:30:53
|
With the new SVN it still has this same error. :( At some point in the future, I would like to make a wrapper for the VectorX classes and the ColourValue class to have them interchangeable with python tuples/lists. Example: entity.setPosition (Ogre.Vector3(500.0, 1000.0, 200.0)) could (in the future) be written as: entity.setPosition ([500.0, 1000.0, 200.0]) Is this something that I do by writing a cpp wrapper using Boost.python, and include it when I compile? Or can I specify this in a nice way using python and py++? Lakin On 5/30/06, Roman Yakovenko <rom...@gm...> wrote: > On 5/30/06, Lakin Wecker <lak...@gm...> wrote: > > I haven't tried your fix with SVN, I am going to do that right now. > > But I had just written this letter, so I'll send it to the list > > anyways. But stay tuned for an update on this situation as well. > > > > Now, I'm getting this error: > > > > TypeError: No to_python (by-value) converter found for C++ type: Ogre::Vector3 > > > > And in this case, Vector3 is copyable. (IE: there is no non_copyable > > stuff in the pypp generated source). > > > > I'm not sure how to proceed. But it's lunch time anyways, so I'm > > going to go eat. > > Bon appetite :-). I will check this. > > > -- > Roman Yakovenko > C++ Python language binding > http://www.language-binding.net/ > |
From: Roman Y. <rom...@gm...> - 2006-05-30 19:35:43
|
On 5/30/06, Lakin Wecker <lak...@gm...> wrote: > With the new SVN it still has this same error. :( I work on this, right now. > At some point in the future, I would like to make a wrapper for the > VectorX classes and the ColourValue class to have them interchangeable > with python tuples/lists. > Example: > entity.setPosition (Ogre.Vector3(500.0, 1000.0, 200.0)) > could (in the future) be written as: > entity.setPosition ([500.0, 1000.0, 200.0]) > > Is this something that I do by writing a cpp wrapper using > Boost.python, and include it when I compile? Or can I specify this in > a nice way using python and py++? This will be pretty easy. We will do it using py++. -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Roman Y. <rom...@gm...> - 2006-05-31 07:37:56
|
On 5/30/06, Roman Yakovenko <rom...@gm...> wrote: > On 5/30/06, Lakin Wecker <lak...@gm...> wrote: > > I haven't tried your fix with SVN, I am going to do that right now. > > But I had just written this letter, so I'll send it to the list > > anyways. But stay tuned for an update on this situation as well. > > > > Now, I'm getting this error: > > > > TypeError: No to_python (by-value) converter found for C++ type: Ogre::Vector3 Solved. Error description: struct Color{ static const Color red; ... void do_smth( const Color& other = red ); //The error was raised from the line that register this function, //because boost.python tries to create an python object from "red" //but Color class is not registered. } Solution mb = module_builder_t( ... ) mb.class_( 'Color' ).always_expose_using_scope = True This will fix the problem. In future py++ will find this situation and will generate proper code. -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |
From: Lakin W. <lak...@gm...> - 2006-06-01 19:22:13
|
Well, this approach solved it for me for ColourValue, Vector3 and a few other classes, but I am now getting an error regarding an Enum: File "CameraTrackingDemo.py", line 2, in ? import Ogre as ogre TypeError: No to_python (by-value) converter found for C++ type: Ogre::HardwareBuffer::Usage I first tried just setting: ogre_ns.class_ ('HardwareBuffer').enumerations ('Usage').always_expose_using_scope = True Then I tried: ogre_ns.class_ ('HardwareBuffer').enumerations ('Usage').exclude() Neither seem to work and I still get the error message. The situation is as follows: class Ogre::HardwareBuffer { public: enum Usage { ... }; }; HardwareBuffer is excluded for the time being until I get void * wrapped appropriately, but there are other methods on other classes that use Ogre::HardwareBuffer::Usage ... I figure that excluding the HardwareBuffer class should also exclude the HardwareBuffer::Usage enumeration. Regardless, I've tried excluding it specifically, and still run into that problem ... As a workaround, I plan on excluding each individual method that uses Usage ... Lakin On 5/31/06, Roman Yakovenko <rom...@gm...> wrote: > On 5/30/06, Roman Yakovenko <rom...@gm...> wrote: > > On 5/30/06, Lakin Wecker <lak...@gm...> wrote: > > > I haven't tried your fix with SVN, I am going to do that right now. > > > But I had just written this letter, so I'll send it to the list > > > anyways. But stay tuned for an update on this situation as well. > > > > > > Now, I'm getting this error: > > > > > > TypeError: No to_python (by-value) converter found for C++ type: Ogre::Vector3 > > Solved. > Error description: > > struct Color{ > static const Color red; > ... > void do_smth( const Color& other = red ); > //The error was raised from the line that register this function, > //because boost.python tries to create an python object from "red" > //but Color class is not registered. > > } > > Solution > > mb = module_builder_t( ... ) > mb.class_( 'Color' ).always_expose_using_scope = True > > This will fix the problem. In future py++ will find this situation and > will generate > proper code. > > -- > Roman Yakovenko > C++ Python language binding > http://www.language-binding.net/ > |
From: Roman Y. <rom...@gm...> - 2006-06-01 19:27:29
|
On 6/1/06, Lakin Wecker <lak...@gm...> wrote: > Well, this approach solved it for me for ColourValue, Vector3 and a > few other classes, but I am now getting an error regarding an Enum: > > File "CameraTrackingDemo.py", line 2, in ? > > import Ogre as ogre > > TypeError: No to_python (by-value) converter found for C++ type: > Ogre::HardwareBuffer::Usage > > I first tried just setting: > ogre_ns.class_ ('HardwareBuffer').enumerations > ('Usage').always_expose_using_scope = True > > Then I tried: > > ogre_ns.class_ ('HardwareBuffer').enumerations ('Usage').exclude() > > Neither seem to work and I still get the error message. > > The situation is as follows: > > class Ogre::HardwareBuffer { > public: > enum Usage { ... }; > }; > > HardwareBuffer is excluded for the time being until I get void * > wrapped appropriately, but there are other methods on other classes > that use Ogre::HardwareBuffer::Usage ... > > I figure that excluding the HardwareBuffer class should also exclude > the HardwareBuffer::Usage enumeration. Regardless, I've tried > excluding it specifically, and still run into that problem ... > > As a workaround, I plan on excluding each individual method that uses Usage ... Wait a minute, you can do something else HB = mb.class_( 'HardwareBuffer' ) HB.include() HB.decls().exclude() HB.enum( 'Usage' ).include() > Lakin -- Roman Yakovenko C++ Python language binding http://www.language-binding.net/ |