This is the document (in a state of continuous flux) describing the proposal for Open Tools:
Live Access to a Scene in Discreet 3D Studio Max
This is an open tool that enables live access to the current scene in 3DS Max by another concurrently running program.
At the moment it only exposes mesh info (points, vertices, faces), but naturally I hope to extend this, e.g. textures, etc.
I also intend to implement the ability for the client to propose live changes to the scene.
For this I will slightly adjust the Open Tool interfaces to represent communication of state change (rather than simply current state).
All we have in the zip file is a Max GUP plug-in, and a simple MSVC program that acts as a simple client. If Max is running, and a simple model constructed (a cube say), running the test program will dump the points and faces.
I've also included the IDL files.
This has only been tested with 3DS Max v3.1.
1) Bung the GUP in Max's plugin folder.
2) Get Max to register itself as a COM server for this plug-in, by issuing the command:
(3dsmax -UnregisterOTMax achieves the reverse.)
3) Register the Proxy/Stub DLL:
4) Load the MSVC v6 project OTMaxTest.dsw and build OTMaxTest
5) Run 3dsMax
6) Create a simple cube
7) Run OTMaxTest
You should get something like this:
MaxScene [Aliases: ] Points Point 0=[-29.7126,-120.736,0] Point 1=[14.4992,-120.736,0] Point 2=[-29.7126,-97.9163,0] Point 3=[14.4992,-97.9163,0] Point 4=[-29.7126,-120.736,35.5385] Point 5=[14.4992,-120.736,35.5385] Point 6=[-29.7126,-97.9163,35.5385] Point 7=[14.4992,-97.9163,35.5385] Vertices Vertex 0=[0:ff] Topography Face 0=[0:0,0:2,0:3] Face 1=[0:3,0:1,0:0] Face 2=[0:4,0:5,0:7] Face 3=[0:7,0:6,0:4] Face 4=[0:0,0:1,0:5] Face 5=[0:5,0:4,0:0] Face 6=[0:1,0:3,0:7] Face 7=[0:7,0:5,0:1] Face 8=[0:3,0:2,0:6] Face 9=[0:6,0:7,0:3] Face a=[0:2,0:0,0:4] Face b=[0:4,0:6,0:2] OK END. Press any key to continue
MS Visual Studio Sample Project
This is one of the first samples of an Open Tool (also in a state of flux):
It has been briefly checked for reference count leaks, but awaits a thorough test suite (volunteers?) before it can be considered as a reference implementation.
It has tools called StubReal and TrivialAdder, the latter having two input connectors which will chain in two StubReals (4.5), and output the sum on an output connector.
Naturally, I hope to refine this a little more, but I thought I'd get something out as soon as possible.
With any luck you'll get the answer 9 in the output window (4.5 + 4.5).
I'm thinking of using Comet one day, which may make the source code look slightly more appealing.
I'll focus on the Max exposer for the time being. I'll work on adjusting the Open Tools interfaces to be more oriented towards communicating change. After I've that ticking over nicely I'll see how upstream modifications by the client are best communicated.
I'm not sure at what point I'll expose textures.