It's slowly coming along.
About 250 of about 600 functions are done.
The rest of the functions are "converted" but requires a bit more work to...um, work :)
Trying to answer your questions...
Let's say I have a C++ Api which expose a class called SceneManager.
This class contains three methods called BeginScene, RenderScene and EndScene.
A c++ user could easily create an instance of this class by simply writing...
Now if I want to do the same thing i Bmax I get trouble because the only thing I can use from the API(dll) is ordinary functions, not classes.
The methods in the class are "ordinary" functions but they are hidden inside the class and beyond my reach.
What I can do though is to create a wrapper dll which creates and call class-methods for me.
So to reach the methods above I create four functions in my wrapper.
Smgr_CreateSceneManager() will create a SceneManager Instance and return it's pointer.
Smgr_BeginScene(),Smgr_RenderScene() and Smgr_EndScene() will take the pointer to the class that I provide and call the corresponding method inside it.
So doing the same as the C++ code above but in Bmax would look like this...
Now, this doesn't have a very objectoriented feel to it so why not put it inside a couple of types?
Like this...
Then the bmax code could look like this instead...
Now, it is a bit more objectoriented a more like the C++ code.
I have to mention though that this is how I solve this problem using my current knowledge of Bmax and C++.
There probably exists a much smarter and easier solution.
So if anyone knows a better way of solving this with Bmax, please let me know. :)
About 250 of about 600 functions are done.
The rest of the functions are "converted" but requires a bit more work to...um, work :)
Trying to answer your questions...
Let's say I have a C++ Api which expose a class called SceneManager.
This class contains three methods called BeginScene, RenderScene and EndScene.
A c++ user could easily create an instance of this class by simply writing...
SceneManager mySmgr; and call it's methods by writing... mySmgr->BeginScene() mySmgr->RenderScene() mySmgr->EndScene()
Now if I want to do the same thing i Bmax I get trouble because the only thing I can use from the API(dll) is ordinary functions, not classes.
The methods in the class are "ordinary" functions but they are hidden inside the class and beyond my reach.
What I can do though is to create a wrapper dll which creates and call class-methods for me.
So to reach the methods above I create four functions in my wrapper.
Smgr_CreateSceneManager() Smgr_BeginScene() Smgr_RenderScene() Smgr_EndScene()
Smgr_CreateSceneManager() will create a SceneManager Instance and return it's pointer.
Smgr_BeginScene(),Smgr_RenderScene() and Smgr_EndScene() will take the pointer to the class that I provide and call the corresponding method inside it.
So doing the same as the C++ code above but in Bmax would look like this...
Local MySmgr = Smgr_CreateSceneManager() Smgr_BeginScene(MySmgr) Smgr_RenderScene(MySmgr) Smgr_EndScene(MySmgr)
Now, this doesn't have a very objectoriented feel to it so why not put it inside a couple of types?
Like this...
Type SceneManager Field ClassInstance:Int Method BeginScene() Smgr_BeginScene(ClassInstance) End Method Method RenderScene() Smgr_RenderScene(ClassInstance) End Method Method EndScene() Smgr_EndScene(ClassInstance) End Method Function Create:SceneManager() NewInstance:SceneManager = New SceneManager NewInstance.ClassInstance = Smgr_CreateSceneManager() Return NewInstance End Function
Then the bmax code could look like this instead...
Local MySmgr = SceneManager.Create() MySmgr.BeginScene() MySmgr.RenderScene() MySmgr.EndScene()
Now, it is a bit more objectoriented a more like the C++ code.
I have to mention though that this is how I solve this problem using my current knowledge of Bmax and C++.
There probably exists a much smarter and easier solution.
So if anyone knows a better way of solving this with Bmax, please let me know. :)