GetCOREInterfacehttp://getcoreinterface.typepad.com/blog/
3ds Max customization, automation, plug-in development, and related ramblings!en-USThu, 05 Oct 2017 15:53:27 -0400http://www.typepad.com/http://www.rssboard.org/rss-specificationUpdated .NET API Samples for 3ds Max 2018http://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/vqPHgsKAI7Q/updated-net-api-samples-for-3ds-max-2018.html
http://getcoreinterface.typepad.com/blog/2017/10/updated-net-api-samples-for-3ds-max-2018.htmlWell, it's been a while since last posting, but trying to do more. Recently someone asked about the .NET API for recent versions of 3ds Max. There has really been no big changes for a few releases except moving from ParamBlock1 to ParamBlock2 for some of the older geometry objects...Well, it's been a while since last posting, but trying to do more. Recently someone asked about the .NET API for recent versions of 3ds Max. There has really been no big changes for a few releases except moving from ParamBlock1 to ParamBlock2 for some of the older geometry objects and modifiers. .NET API, plus WPF, etc. still work OK, even though the main 3ds Max UI is moving to Qt. To demonstrate, I updated the samples I provided back in 2014 release to work with 2018. These are the things I changed to get everything working well again:

Update the csproj variables to use the 3ds Max values (Currently: $(ADSK_3DSMAX_x64_2018)). Note the original project used: $(ADSK_MAXDES_x64_2014), but 3ds Max Design as not been available for several releases now, and is combined with 3ds Max as a workspace. That makes it easier to handle 3ds Max plugin projects! The variable changes are for the assembly references, and also for the Post-Build event command line, that provides the copy operation.

The .NET Target framework should move to at least 4.6 to match the version 3ds Max itself is using.

In the code, there was one place where we fixed a defect in Autodesk.Max.dll. Line #119 of HelixControl.xaml.cs was using the (IntPtr) cast for the IINodeTab value. We fixed that API to properly use an integer index, so the cast is no longer required.

Updated a screen bitmap for the CreateTeapotUserControl

Fixed the teapot creation in CreateTeapotUserControl... turns out it was updated with the move to ParamBlock2. Added a comment to show this.

]]>.NET APISamplesWPFKevin VandecarThu, 05 Oct 2017 15:53:27 -0400http://getcoreinterface.typepad.com/blog/2017/10/updated-net-api-samples-for-3ds-max-2018.html3ds Max 2018 SDK Changeshttp://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/oxWS5gmryxM/3ds-max-2018-sdk-changes.html
http://getcoreinterface.typepad.com/blog/2017/04/3ds-max-2018-sdk-changes.htmlAnother year has passed, and we have a new release of 3ds Max! 3ds Max 2018 was released today, and should be available soon in your Autodesk Account access. The online help is also already rolled out.For new features, see What's New in 3ds Max 2018. For the 3ds Max...Another year has passed, and we have a new release of 3ds Max! 3ds Max 2018 was released today, and should be available soon in your Autodesk Account access. The online help is also already rolled out.For new features, see What's New in 3ds Max 2018.

For the 3ds Max SDK changes, see What's New: 3ds Max 2018 SDK. As in the past, the SDK is included in the install folder structure. Typically, it is here: .\x64\Tools\MAXSDK\SDK_3dsMax2018.msi

Some SDK highlights:

The first thing to note from the C++ programming perspective, is that the compiler has been bumped to Visual Studio 2015 update 3. You are probably already there with Visual Studio 2015, but be sure to check and update to ensure compatibility. Even though 3ds Max 2017 was using Visual Studio 2015 (RTM), you will have to rebuild any plugins. The 3ds Max 2018 release is not binary compatible with 2017.

Qt is also majorly bumped in 3ds Max 2018 and is now using Qt 5.6.2.

You will also notice that all the samples in the SDK have been updated to use the Parameter Block 2 standard. There's a new Parameter Block Porting Guide in the docs. Part of this is to encourage everyone with Parameter Block 1 definitions, to move to Parameter Block 2. In the future the old Parameter block 1 will be deprecated.

Two new features that came recently are the Data Channel Modifier, and the Bezier Trajectories. Both have some new SDK access in the 3ds Max 2018 SDK. Additionally, there were some minor UI API changes, and also around the Rendering APIs. See the help for details.

Other programming environments:

There were also a few minor changes to the 3ds Max 2018 .NET API assemblies. Mainly cleaning up signatures, and other miscellaneous fixes.

Happy coding with 3ds Max 2018!

]]>.NET APIAnnouncementC++MAXScriptPythonqtKevin VandecarWed, 12 Apr 2017 13:34:15 -0400http://getcoreinterface.typepad.com/blog/2017/04/3ds-max-2018-sdk-changes.htmlHow to properly check if a material is used in a scene?http://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/baHACN7gBKA/how-to-properly-check-if-a-material-is-used-in-a-scene.html
http://getcoreinterface.typepad.com/blog/2017/04/how-to-properly-check-if-a-material-is-used-in-a-scene.htmlSometimes you may need to know if a given material is used within the scene or not. In Compact Material Editor it is usually marked with the UI giving you certain clues. For example, in the screen capture below, the gray corners indicate the material is used in the scene....Sometimes you may need to know if a given material is used within the scene or not. In Compact Material Editor it is usually marked with the UI giving you certain clues. For example, in the screen capture below, the gray corners indicate the material is used in the scene. Corners that are filled in white, indicate the material is used, and also is being used by a selected scene object. The white rectangle indicates it is the currently selected material.

The same indicators are found in the Slate Material editor. They will display on the preview of the material.

The obvious question now is how to retrieve this information using the C++ SDK? Let's take a look at how to do it.

The very first step is to have a look at the MtlBase class where you will notice the int TestMtlFlag(int mask) that "Tests the specified flags. Returns nonzero if the flags are set; otherwise zero” . Among the available Materials flags we can notice the MTL_IN_SCENE flag, that seems to be exactly what we need.

Thus, to test if a material is used or not we can easily do:

if(my_material->TestMtlFlag(MTL_IN_SCENE))
{
\\ It is used
} else
{
\\it is not
}

Hurrah! Job is done, let's go home.

Not so fast.

The MTL_IN_SCENE flag is useful only if somebody sets this flag (calling MtlBase::SetMtlFlag), but it turns out that nobody sets this specific flag, like ever. Thus, it will always return 0, no matter what, and even if you have assigned this material to dozens of objects in the scene, it is never accurate, unless someone sets it (maybe you set it in your plugin, but is seems none of the default materials are doing this.)

Other (Materials) flags seems to be working fine, thus being useful, but not this one. So, let's get back to work.

This question is not new, and there are lot of (mostly MAXScript) recipes on how to check whenever a given material is used somewhere in the scene, and the common algorithm is to get the scene materials and check if the material in question is found among them.

That should be piece of cake, as the Interface Class offers us the GetSceneMtls method, and the returned MtlBaseLib has the handy FindMaterial method for finding a material by name:

It turns out that this approach is not very reliable (noticed by many developers), and the reason is that there is no dynamic tracking of the materials in the scene, thus the material library returned by the Interface::GetSceneMtls might not contain the latest information.

There is a way to manually reset and rebuilding the scene lib, but unfortunately it is available only in MAXScript as ‘UpdateSceneMaterialLib()’method, and there is not yet a C++ SDK equivalent.

"So, what it is the big deal? We can execute MAXScript from C++, we can live with that."

Well ... there is yet another problem.

If the material in question is a part of a sub-material, then you can check in the scene materials lib whenever you want, it will not show up, because (in a manner of speaking) it contains only the “first level” materials and will not contain the materials that are part/contained in other materials (g.e. multi-material).

“Then, what could be the solution?”

The solution is given us by the Reference System, because if we look at MtlBase inheritance diagram:

we notice the obvious aspect, that any material (like many other classes in 3ds Max SDK) is also a Reference Target.

This is obvious, because logically, a material has to have dependents, that are notified upon change (i.e. change the diffuse color).

Thus, what is left is to iterate through these dependents, using the dedicated DependentIterator Class and recursively check the dependents.

Thus, to check if a given material is used in the scene or not, it suffice to call:

if(isUsedInScene(my_material))
{
\\ It is used
}else
{
\\it is not
}

and the cool thing with this approach is that (I guess you already noticed) it can be used with anything that is “referable” (i.e. is a ReferenceTarget), and that could be more interesting than just for materials.

]]>C++debugTip/TrickDenis GrigorMon, 10 Apr 2017 15:32:21 -0400http://getcoreinterface.typepad.com/blog/2017/04/how-to-properly-check-if-a-material-is-used-in-a-scene.htmlQuerying the 3ds Max versionhttp://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/PUmFbdBILlI/querying-the-3ds-max-version.html
http://getcoreinterface.typepad.com/blog/2017/02/querying-the-3ds-max-version.htmlAnyone taking plug-in development seriously has to think about plugin versioning. The 3ds Max C++ SDK documentation offers a lot of information on this topic, along with a couple of implementation techniques and some P_VERSION related best practices. For 3ds Max version querying, the 3ds Max C++ SDK offers (within...Anyone taking plug-in development seriously has to think about plugin versioning. The 3ds Max C++ SDK documentation offers a lot of information on this topic, along with a couple of implementation techniques and some P_VERSION related best practices.

that can be used to tailor your plugin to different 3ds Max environments and other uses.

However all these tools are updated/adjusted with each major 3ds Max release when the 3ds Max SDK is updated, and not with the service packs, extensions, or updates.

This might look irrelevant for a plugin developer, as the C++ SDK is usually binary compatible for a complete full version and sometimes even across main versions (as was the case of 3ds Max 2015 and 2016). Nevertheless, sometimes there is a need to have more details, be it for logging/diagnostic purposes, or to deal with situations when some of your plugin users are not using the latest SP (and are spread between different SP). For these and other cases it would be nice to have a way of getting some info on client's 3ds Max specific version number or build version number and then if necessary, adjust the behavior of your plugin accordingly.

By inspecting the executable of 3ds Max (3dsmax.exe) we can see that the needed information is included in the file version:

where on the above screenshot:19 is the release number corresponding to 3ds Max 2017, 2 is SP number and 420 is the build number.

The MAXScript getFileVersion function is in fact using the Windows GetFileVersionInfo API, and this is a very good illustration of how MAXScript is easily inter-operable with the 3ds Max C++ SDK. Either technique frmo the C++ SDK should yeild the same results.

Note that due to the recent transition to a subscription-based model, it seems there will be no future Service Packs or Extensions. Instead they will be called Updates. But, using the above described approach, you will still get the desired details. In this most recent example of the 3ds Max 2017 Update, instead of getting a SP version, it will give you the Update version, that can be used for the same purpose.

]]>C++MAXScriptTip/TrickDenis GrigorWed, 01 Feb 2017 16:33:36 -0500http://getcoreinterface.typepad.com/blog/2017/02/querying-the-3ds-max-version.htmlAutodesk University 2016, Developer Days 2016, and @AutodeskForge APIshttp://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/h72SdttNZ98/autodesk-university-and-developer-days-2016.html
http://getcoreinterface.typepad.com/blog/2016/10/autodesk-university-and-developer-days-2016.htmlWell, again I find myself apologizing for not posting sooner. In this one, I would like to let you know about the upcoming events we have scheduled pertaining to 3ds Max programming. The first one is at Autodesk University. I will be presenting a new class comparing the differences between...Well, again I find myself apologizing for not posting sooner. In this one, I would like to let you know about the upcoming events we have scheduled pertaining to 3ds Max programming. The first one is at Autodesk University. I will be presenting a new class comparing the differences between Python and the .NET APIs in 3ds Max. Both are relatively new programming features, and both have genuinely different approaches to development. Not just the languages are different! :-) After the classes are presented in person, I will post a few of the details here. Check back in December. Thanks to Denis Grigor for helping on the Python content.

This class will be presented in Shanghai, China on Nov. 3 (45 minute version with the help of my colleague, Cheng Xi Li), and then again in Las Vegas on Nov. 16 (90 minute version). For information on Autodesk University, see here: au.autodesk.com. If you are attending either event, please come introduce yourself and tell me you read this on the blog!

We will also be holding our annual developer days at several locations around the world in November and December. Although we will not have anything directly pertaining to 3ds Max programming, there will be plenty of topics about related products. The Forge APIs will be a large focus this year. For information about all the different events and the agenda, see here: http://autodeskdevdays.com/. I will be around during the DevLab portion in Las Vegas, so if you have any 3ds Max programming issues, feel free to drop in and see me. Or even if no questions, come by and introduce yourself. :-)

Also, if you have not already, check out the http://developer.autodesk.com portal where the Forge APIs are available. All you need is an Autodesk ID to login and to create your app.

]]>.NET APIAnnouncementEventForgePythonKevin VandecarFri, 21 Oct 2016 12:03:45 -0400http://getcoreinterface.typepad.com/blog/2016/10/autodesk-university-and-developer-days-2016.htmlHow to create a Gizmo in 3ds Maxhttp://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/or73enKTjFg/how-to-create-a-gizmo-in-3ds-max.html
http://getcoreinterface.typepad.com/blog/2016/07/how-to-create-a-gizmo-in-3ds-max.htmlAccording to Wikipedia, a Gizmo is " ... a bounding box used for manipulating objects in 3D modeling computer programs". Well ... not necessary a box ... and not always used for manipulating objects - couldn't a Gizmo be used just as an onscreen informative tool? In the following post...According to Wikipedia, a Gizmo is " ... a bounding box used for manipulating objects in 3D modeling computer programs". Well ... not necessary a box ... and not always used for manipulating objects - couldn't a Gizmo be used just as an onscreen informative tool?

In the following post I invite you to explore with me the visual customization of modifiers and how gizmos or as 3ds Max call them modifier apparatus are drawn on the screen. All this will be examined by creating a simple modifier plugin that will serve as an on-screen informative tool for the object it modifies.

Of course, to implement a modifier we have to rely on the Modifier class, and its always worth starting class analysis by having a look at inheritance diagram of the class we have under the scope:

"Anything with a representation in the 3D viewports is derived from BaseObject (including modifiers and controllers whose gizmos appear in the viewports)".

Ok, so this is where it all starts and why we have the following requirement:

A modifier plug-in must implement a method to display the modifier's gizmo in the 3D viewport. This is done by implementing a member function of the BaseObject class called BaseObject::Display(). The GraphicsWindow class provides a number of drawing routines for this purpose.

Having defined our starting point, let us continue by gathering the implementation pieces that we will need for our project.

Implementation

As already stated above, to have something displayed, we have to inherit from the BaseObject class, but for our particular need we are going to take the Modifier branch.

Within the BaseObject class, we have a special interest in the BaseObject::Display() method:

This method is called by 3ds Max when it is time to draw the object. It will "point" you to the viewport information given by ViewExp class and provides other information. The ViewExp class contains the information on GraphicWindow associated with the given viewport:

virtual ViewExp::GraphicsWindow* getGW();

Now comes the real fun:The GraphicsWindow class “provides low-level access to 3ds Max's graphics system“, that we will be using to explicitly draw lines, texts, markers, etc. to the viewport - everything we need for drawing our Gizmo. To make the drawing task easier, we will use the DrawLineProc Class, that"... provides a simplified way to draw a connected series of lines to the GraphicsWindow":

int DrawLineProc::proc(Point3 *p, int n);

However, for the text draw, we still are going to use the "raw" approach with:

void GraphicsWindow::text(Point3* xyz,const MCHAR* s);

We have all the details we need to create an interesting gozmo, so let's pass from theory to practice by building something.

Hands-on

We will start by setting up a project and creating a Modifier type plugin. For simplicity, (to avoid having implementing a lot of methods uninteresting to our current task), it will be based on SimpleMod2, but the same approach is also applicable to modifiers directly based on the Modifier Class. We can use the Plugin Wizard to start the project as seen below. In this example, we will call the plugin “Informix”.

Before firing up the plugin, don't forget to make the necessary adjustments and switch to the Hybrid configuration:

To start with the basic implementation, if we run our “Informix” plugin on the iconic Teapot, we will get a displayed bounding box. For example:

This bounding box is given by the default implementation of the Display within the SimpleMod class, but we should not have problems in overriding it:

Quite simple, right? A bunch of points and some calls to draw lines. Well ... easy things get complicated very fast when you draw something custom and parametric.Now we can start by creating a method responsible for drawing a double arrowhead segment with a label in the center of the segment:

Basically this is it. Having this coded in a simple combination, we end up having the following result when applying our modifier to an object:

Conclusion

Although this example is not terribly useful, I hope the sample code shows you enough to implement your own cool gizmos!

and coming back to Wikipedia definition ...

Is it a box?

I think not.

Is it used to manipulate objects?

Not really.

Is it useful?

Wait a minute ... the definition doesn't say that it should be useful.

Then, is it a Gizmo?

I have no idea, but somewhere along the way of its creation, it was. If you are interested in the source code, it is available here, which is great for a beginner, but for those who found it boring, you can look at the Symmetry plugin (Symmetry.cpp), available in the SDK samples within the .\maxsdk\samples\modifiers\BasicOps\ folder.

]]>C++Denis GrigorWed, 20 Jul 2016 17:12:44 -0400http://getcoreinterface.typepad.com/blog/2016/07/how-to-create-a-gizmo-in-3ds-max.html3ds Max 2017 Features and SDK Changeshttp://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/d5u8Tl0BirM/3ds-max-2017-features-and-sdk-changes.html
http://getcoreinterface.typepad.com/blog/2016/04/3ds-max-2017-features-and-sdk-changes.htmlAnother year passed, and another great release of 3ds Max! 3ds Max 2017 is coming with a number of great new features. See here for a complete list: What's New in Autodesk 3ds Max 2017. Also Eddie’s blog has a great overview with videos: Introducing 3ds Max 2017 and you...Another year passed, and another great release of 3ds Max! 3ds Max 2017 is coming with a number of great new features. See here for a complete list: What's New in Autodesk 3ds Max 2017. Also Eddie’s blog has a great overview with videos: Introducing 3ds Max 2017 and you might want to checkout Christopher’s Max Creation Graph post.

New User Interface

Note that the user interface is it is now HDPI aware. This allows for running on the many available High-definition devices (and for me with the MacBook Pro running Windows, I can finally see the UI controls again! J). In order to handle this, 3ds Max is now using the Qt library. The good news from the SDK perspective is there is no change required for your plugins. Only the painting of the controls is using Qt, so existing controls should still be fine. The only suggestion is to test your plugin UI and ensure there are no string issues, etc. See the SDK docs here for further information Using Qt with 3ds Max Plug-ins

The prebuilt binaries that could be used by SDK users will be posted to our 3ds Max Developer Center by the end of this week (let me know if you need it sooner and I can give it directly). UPDATE: Developer center now contains the new files. Find the two new files under the "Tools" section towards bottom of 3ds Max Developer Center.

Rendering

Another change is that the mental ray renderer is now provided as a separate component. To install it, ensure the mental ray option is checked in your installation setup. The mental ray related SDK files were also removed from the SDK distribution. You can also download the mental ray SDK from the 3ds Max Developer Center later this week. (Again, let me know if you need it sooner and I can give it directly). UPDATE: Developer center now contains the new files. Find the two new files under the "Tools" section towards bottom of 3ds Max Developer Center.

A new renderer included with 3ds Max 2017 is the Autodesk Ray Tracer (ART) renderer (aka RapidRT). This renderer is more design focused and supports photorealistic rendering. The integration of this renderer also brings a new, easier to use renderer implementation layer into the SDK. We have not yet gotten the full details into the online 2017 SDK docs, but it will be coming soon. Let me know if you need information now, and I can send you something. Note that the SDK changes are ALREADY in the SDK and you can find the bulk of those changes here: .\maxsdk\include\RenderingAPI. Also the .\maxsdk\include\Rendering folder is significantly changed.

Plugin Wizard and Porting

The plugin Wizard has also been improved to ensure it works properly with VS2015. There were a few template errors, too, and those have been fixed. The wizard is an ideal way to start a new project, that picks up the VS property sheets (including compiler and linker settings that match 3ds Max’s own settings). This makes sure you are building against the settings for the runtime environment that matches the 3dsmax.exe. One easy option for porting, is to create a new project with the wizard, and then move your source and resource files into the new project.

.NET API

For the .NET API, there was a number of fixes to make it more stable and eliminate some of the IntPtr parameter problems. Also the .\maxsdk\assemblies folder was removed from the SDK. This folder was meant to allow building of .NET plugins without needing the full installation. But it proved to be difficult to maintain and so we decided just to remove it. If there is a chance you were using it, you can simply copy the assemblies for the 3dsmax.exe folder to a location where you need them. The supported assemblies are listed here: 3ds Max .NET Assemblies

Python

Note that the focus was on better MAXScript integration, so you will see the MAXScript editor now supports authoring of Python scripts and the MAXScript listener now supports a Python command line. Interop between Python and MAXScript improved so you can now import python libraries into MAXScript routines, and also reference MAXScript APIs directly in a Python script. Also the Python Qt support is improved with better PySide support, and window parenting and docking functionality.

Documentation

]]>.NET APIAnnouncementC++MAXScriptPythonKevin VandecarTue, 19 Apr 2016 08:27:27 -0400http://getcoreinterface.typepad.com/blog/2016/04/3ds-max-2017-features-and-sdk-changes.html3ds Max and the Forge APIs - Discount for Forge DevConhttp://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/lZxtIWcRiq8/3ds-max-and-the-forge-apis-discount-for-forge-devcon.html
http://getcoreinterface.typepad.com/blog/2016/04/3ds-max-and-the-forge-apis-discount-for-forge-devcon.html3ds Max and the Forge APIs, what does that mean? To start, have you heard about the new Autodesk Forge platform? Forge is a place that gathers many new cloud service APIs into one place for consumption by developers. Forge includes the platform technology, a program for supporting partners (think...3ds Max and the Forge APIs, what does that mean? To start, have you heard about the new Autodesk Forge platform? Forge is a place that gathers many new cloud service APIs into one place for consumption by developers. Forge includes the platform technology, a program for supporting partners (think ADN open on a broader scale), including a developer conference coming in June, and a fund where startups can apply for an investment by the Forge fund.

What does this have to do with 3ds Max programming concepts? Well, there are a number of reasons to start this conversation. The Forge services support 3ds Max in various ways. The View and Data API for example, can view 3D models in HTML 5 enabled browsers and apps – a nice way to share your models online, using your own custom websites or tools. The ReCap service provides 123D Catch style photogammetry reality capture into your custom workflow. Or maybe you want to exploit the A360 rendering service outside of 3ds Max with your own tools? A360 Rendering API coming soon!

Anyway, to give you a quick example, I pulled a free model from the great website: http://tf3dm.com/. This site has many great models for sharing. After exporting the model from 3ds Max, I converted it to the View and Data API format for viewing on the web. I used a great sample created by a colleague, Philippe Leefsma using node.js and angular.js. The sample is a working online website, and also has full source code available. The sample shows how to process the model through the View and Data API translation service and then makes it viewable on the web in a full 3D interactive way. A screenshot is included below to give you a taste, but I encourage you to try it out directly here: x-wing. Also check out some of the other models in the gallery. There is also a nice interactive demo here as well: http://lmv.rocks/.

BTW, I could have directly embedded the viewer here, but I wanted to direct you over to the Philippe's sample for a chance to play with other models, or to try your own (that can be uploaded there as well).

How to get the 3ds Max model into the viewer format? Well, the translation service does not yet support the 3ds Max native format (*.max), but there is some work being done to bring this capability into the translation service soon. For now you can export to one of the other formats. The FBX format is supported, but is not ideal for including materials at the moment. The 3DS format works well, and allows you to structure the model geometry so that the viewer can browse the components independently. The DWF format is best for supporting materials out of 3ds Max. I used DWF in this example to get the texture materials to come across. Expect to see improvements to this process once native *.max format is directly supported by the translation service.

If you are interested to learn more about the Forge platform, we can offer you a discount code to the Forge DevCon coming in June. Autodesk is offering GetCOREInterface readers a 30% discount to the Forge Developer Conference. Simply use the code ADN_ME30 when registering. Note that students can register for free with your education email address. Because conferences are always better with friends, you can also contact us for details on a special “Refer a Friend" offer for even greater savings!

If you do plan to attend, and would like to meet, just let me know… I’ll be there as well! Hope to see you there.

]]>AnnouncementCloud ServiceEventForgeTrainingKevin VandecarThu, 14 Apr 2016 13:54:18 -0400http://getcoreinterface.typepad.com/blog/2016/04/3ds-max-and-the-forge-apis-discount-for-forge-devcon.htmlSupport for JavaScript in 3ds Maxhttp://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/ZP7hUqhLOZQ/autodesk-adding-support-for-javascript-in-3ds-max.html
http://getcoreinterface.typepad.com/blog/2016/04/autodesk-adding-support-for-javascript-in-3ds-max.html3ds Max is renowned for its customization abilities.To facilitate this even more, support for many languages was added along the way. At the beginning it was just MAXScript, followed by the powerful C++ SDK, but to open the power of 3ds Max to a wider modern developing audience, support for...3ds Max is renowned for its customization abilities.To facilitate this even more, support for many languages was added along the way.
At the beginning it was just MAXScript, followed by the powerful C++ SDK, but to open the power of 3ds Max to a wider modern developing audience, support for .NET and Python has been included.

Now 3ds Max is ready to take the next step and provide it's API to be used through one of the most popular languages (according to data provided by GitHut and RedMonk); the all mighty Web Language King - ECMAScript, or better known under its pseudonym: JavaScript.

3ds Max took the same path as Node.js did and integrated the powerful Google V8 JavaScript engine, with all its inherited strengths and weaknesses.

From an API perspective, we tried to keep the same approach as with Python and .NET API, thus allowing a smooth transition between these 3 languages.

In this small code sample here, you may see the clearness and elegance of this language when used with 3ds Max SDK:

From the syntax you can see that we went directly with supporting the Sixth Edition, known as ECMAScript 2015, which soon will be widely adopted.

Moreover, the ability of creating modules and importing them is also here, and it is following the CommonJS approach, thus allowing use of third party libraries along with our own:

constMaxPlus=require("3dsmax_core");

The new language wouldn't be enough without a proper set of tools, and we are well aware that there are plenty of JavaScript IDEs over there, but we want to make JavaScript a first class citizen within 3ds Max, perhaps with a later complete replacement of the MaxScript, this is why we are starting to give a special attention to an integrated solution for JavaScript in 3ds Max (Click on image to see the video illustration):

Conclusion:

It is important to accept the power of a language in a certain context, this is why we consider that 3d is the excellent place for using JavaScript and 3ds Max is just the beginning. This is "going viral" now and some similar work is also being made for Maya (for more details, look at our Maya dedicated Blog).
|
|
|
|
|
|
|
|
|

]]>AnnouncementDenis GrigorFri, 01 Apr 2016 08:00:00 -0400http://getcoreinterface.typepad.com/blog/2016/04/autodesk-adding-support-for-javascript-in-3ds-max.htmlWelcome Denis Grigor, Responsive Web Design, and Autodesk University!http://feedproxy.google.com/~r/autodesk/GetCoreInterface/~3/tzFJuxikRr4/welcome-denis-grigor-responsive-web-design-and-autodesk-university.html
http://getcoreinterface.typepad.com/blog/2015/11/welcome-denis-grigor-responsive-web-design-and-autodesk-university.htmlHello everyone! Just wanted to say a few quick words to restart our blogging activities. First, we are finally re-staffed on the 3ds Max side of ADN DevTech. Denis Grigor joined us in July and is progressing very quickly at becoming a 3ds Max SDK guru. I also revamped the...Hello everyone! Just wanted to say a few quick words to restart our blogging activities. First, we are finally re-staffed on the 3ds Max side of ADN DevTech. Denis Grigor joined us in July and is progressing very quickly at becoming a 3ds Max SDK guru. I also revamped the blog site to be of responsive design, so you can now read while you are on a mobile device taking a coffee break or commuting. :-)