pysideluxcoredemo "did not match C++ signature" [Solved]

Discussion related to the LuxCore functionality, implementations and API.
Post Reply
opoppopopp
Posts: 7
Joined: Wed Dec 29, 2021 12:03 am

pysideluxcoredemo "did not match C++ signature" [Solved]

Post by opoppopopp »

I use compiled binary from "luxcorerender-v2.6-win64-sdk.zip"
Other samples all works fine, only this one reports follow error:

Code: Select all

  File "\luxcorerender-v2.6-win64-sdk\samples\pysideluxcoredemo\pysideluxcoredemo.py", line 56, in __init__
    self.scene = pyluxcore.Scene(props.Get("scene.file").GetString(),
Boost.Python.ArgumentError: Python argument types in
    Scene.__init__(Scene, str, float)
did not match C++ signature:
    __init__(struct _object * __ptr64, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >)
    __init__(struct _object * __ptr64, class luxrays::Properties)
    __init__(struct _object * __ptr64, class luxrays::Properties, class luxrays::Properties * __ptr64)
    __init__(struct _object * __ptr64)
Last edited by opoppopopp on Wed Dec 29, 2021 8:05 pm, edited 1 time in total.
User avatar
Dade
Developer
Developer
Posts: 5672
Joined: Mon Dec 04, 2017 8:36 pm
Location: Italy

Re: pysideluxcoredemo "did not match C++ signature"

Post by Dade »

This is a bug in pysideluxcoredemo: the code has not been updated to accomodate some recent change.

You have just to edit the following line:

Code: Select all

		self.scene = pyluxcore.Scene(props.Get("scene.file").GetString(),
			props.Get("images.scale", [1.0]).GetFloat())
in:

Code: Select all

		self.scene = pyluxcore.Scene(props.Get("scene.file").GetString())
and it will work.
Support LuxCoreRender project with salts and bounties
opoppopopp
Posts: 7
Joined: Wed Dec 29, 2021 12:03 am

Re: pysideluxcoredemo "did not match C++ signature"

Post by opoppopopp »

Thanks, problem solved :D

Will I need to use the C++ API reference document for Python pyLuxcore ? seems the latest C++ document version is 2.1 ?
(Sorry I don't have enough C++ experience)

e.g. for this error, I have lookup the C++ document yesterday, and seeing all those constructor need that "imageScale" parameter.
static Scene * Create (const float imageScale=1.f)
static Scene * Create (const luxrays::Properties &props, const float imageScale=1.f)
static Scene * Create (const std::string &fileName, const float imageScale=1.f)
and header file luxcore.h, in 2.6 SDK seems altered as you said:
static Scene *Create (const luxrays::Properties *resizePolicyProps = nullptr);
static Scene *Create (const luxrays::Properties &props, const luxrays::Properties *resizePolicyProps = nullptr);
static Scene *Create (const std::string &fileName, const luxrays::Properties *resizePolicyProps = nullptr);
User avatar
Dade
Developer
Developer
Posts: 5672
Joined: Mon Dec 04, 2017 8:36 pm
Location: Italy

Re: pysideluxcoredemo "did not match C++ signature"

Post by Dade »

opoppopopp wrote: Wed Dec 29, 2021 7:51 pm Will I need to use the C++ API reference document for Python pyLuxcore ? seems the latest C++ document version is 2.1 ?
(Sorry I don't have enough C++ experience)
Documentation is imbedded in C++ header source code (inside comments): https://github.com/LuxCoreRender/LuxCor ... ore.h#L790

It can be extracted with a tool called Doxygen however the comments should be pretty easy to read even without Doxygen.

Python API doesn't have a specific documentation but it, pretty much, matches one to one the C++ API.
opoppopopp wrote: Wed Dec 29, 2021 7:51 pm e.g. for this error, I have lookup the C++ document yesterday, and seeing all those constructor need that "imageScale" parameter.
static Scene * Create (const float imageScale=1.f)
static Scene * Create (const luxrays::Properties &props, const float imageScale=1.f)
static Scene * Create (const std::string &fileName, const float imageScale=1.f)
and header file luxcore.h, in 2.6 SDK seems altered as you said:
static Scene *Create (const luxrays::Properties *resizePolicyProps = nullptr);
static Scene *Create (const luxrays::Properties &props, const luxrays::Properties *resizePolicyProps = nullptr);
static Scene *Create (const std::string &fileName, const luxrays::Properties *resizePolicyProps = nullptr);
Yes, the API has changed since v2.1 (v2.1 is very old now). It has been extended to support this: viewtopic.php?f=5&t=3691
Support LuxCoreRender project with salts and bounties
opoppopopp
Posts: 7
Joined: Wed Dec 29, 2021 12:03 am

Re: pysideluxcoredemo "did not match C++ signature"

Post by opoppopopp »

Dade wrote: Wed Dec 29, 2021 10:17 pm Documentation is imbedded in C++ header source code (inside comments): https://github.com/LuxCoreRender/LuxCor ... ore.h#L790
Python API doesn't have a specific documentation but it, pretty much, matches one to one the C++ API.
a humble question... ;)
I want to change path of output.
e.g. follow line in pyluxcoredemo.py

Code: Select all

session.GetFilm().Save()
this .Save() is equal to which one in the C++?
According to the C++ header file, seems Film Class don't have a "Save()" method instead of SaveOutput() SaveFilm() etc.
User avatar
Dade
Developer
Developer
Posts: 5672
Joined: Mon Dec 04, 2017 8:36 pm
Location: Italy

Re: pysideluxcoredemo "did not match C++ signature" [Solved]

Post by Dade »

Python "Save()" is like C++/Python "SaveOutputs()". It is an old deprecated method replaced by the new one. You can define in the RenderConfig (or the .cfg) the list of outputs/AOVs to save.

You can use "SaveOutput()" (note the lack of "s") to explicitly define a file name to save.
Support LuxCoreRender project with salts and bounties
Post Reply