Tuesday, March 22, 2005

AutoCAD 2006 - Interview with Albert Szilvasy (Autodesk)


I would like to present a short interview that I made (by e-mail) with a friend from Autodesk. His name is Albert Szilvasy and he is one of the best programmers I ever know from ADN. Since 1999 he is one of the main developers of AutoCAD. See the full interview below. Hope you enjoy!

[Fernando:] Albert, how long are you an ADN / AutoCAD team member?

[ALBERT:] I think I I've been an ADN member since '95. I joined Autodesk in '97 (ADN support) and the AutoCAD team in '99.

[Fernando:] Autodesk has just released the AutoCAD 2006 which has a lot of new features. Which one is your favorite?

[ALBERT:] I'm afraid I'm a bit jaded: my favorite is the expanded .NET API.

[Fernando:] AutoCAD 2006 has increased the .NET API implementation? How long you expect finish to expose the whole API?

[ALBERT:] I don't think we will ever "finish". As we add new features to AutoCAD the .NET API will evolve. The .NET API already covers 95% of what one can do with ObjectARX in C++. I expect that the final gap between the unmanged C++ and .NET API will decrease over time. In fact, I expect that some features will be exposed in the .NET API only and not in ObjectARX since their underlying implementation will be managed code.

[Fernando:] .NET will be just one more customization option or Autodesk plans to remove AutoLISP or VBA soon?

[ALBERT:] We have no plans to remove AutoLISP or VBA. Customers rely on these technologies. We actively encourage customers to use the .NET API for new work simply because we believe it is a more productive environment.

[Fernando:] Is now possible to create custom objects using .NET API? If so, is there any sample in SDK?

[ALBERT:]No, it isn't possible to create custom objects using the .NET API. However, we do have a sample that shows you how to wrap custom objects so that they are accessible from any .NET language. The wrapper is for the "Polysamp" sample. It is on the ObjectARX SDK for AutoCAD 2006.
We have had a lot of internal debate if we should expose the creation of custom objects to .NET developers. We decided that we have higher piority items for AutoCAD 2006. This debate is still ongoing. In my opinion custom objects is an overused feature. Many times developers want to be able to "subclass" existing entities on a instance by instance basis. I think we could provide more value to developers if we allowed them to do this instead of simply re-exposing the existing custom object APIs.
Compare the ObjectARX custom object mechanism to what Windows offers with window classes: you can register new window classes (this is roughly equivalent to our custom objects) but you can also subclass existing windows. You can take an existing window instance and change its behavior completely. AutoCAD Map provides similar capability with its "stylization" feature: it essentially hijacks the worldDraw/viewportDraw function for certain instances. I think this mechanism could be generalized to allow 3rd party developers to specify custom callback for "transformBy", "getGripPoints", "worldDraw" etc. on an instance by instance basis. We are looking for the opinions of the community to figure out where to go next here.

[Fernando:] The only option to load .NET modules is still only through the NETLOAD command? Is there a way to unload them in 2006?

[ALBERT:] To load a .net module you either use the netload command or demand loading registry keys (you need to use the special "MANAGED"
dword value to mark the dll as a .NET module). You still can't unload assemblies in AutoCAD 2006. The CLR does not support unloading of individual assemblies. It only supports unloading entire Appdomains.
This is a complication that we didn't want to introduce at this stage.
We may do it in a future release though since .NET 2.0 makes working with AppDomains easier. Nevertheless, I expect that the new Edit and Continue feature in Visual Studio 2005 will make the ability to unload assemblies a less requested feature.

[Fernando:] The new interface customization without the old MNU based files will provide new features? Is there a new COM interface to customize menus and toolbars?

[ALBERT:] Yes. We switched to a new format so that we can introduce new features easier. The COM API to customize toolbars and menus at runtime hasn't changed and works as it has been since R2000. Customers have asked for more programmetic access to the CUI file itself so we are looking into that.

[Fernando:] The major problem in VC.NET is about application load speed because .NET framework initialization takes some seconds to start. AutoCAD 2006 has improved this?

[ALBERT:] AutoCAD initializes the .NET framework on a background thread during startup. So if you have multiple processor (or multiple cores on your CPU) then the startup impact should be very little. .NET applications that are demand loaded during an AutoCAD session will load very fast since most of the .NET framework (mscorwrks.dll, system.dll,
system.windows.forms.dll) are already loaded by AutoCAD during startup.

[Fernando:] In AU2004 Autodesk has talked about the community involved around its products. How do you see the future of ADN network and AutoCAD developer communities and professionals?

[ALBERT:] I'm a technologiest. I don't really have much opinion here.
The world is becoming more interconnected so I think communities like the Autodesk Developer Network will become more important. I see that trend with Microsoft and other industry heavyweights with large developer communities.

[Fernando:] What can you tell us about the next AutoCAD releases in terms of customization features?

[ALBERT:] I can't really talk about specifics. I recommend that you look at the trends of the last few years and extrapolate. I'd expect that you won't be far off the mark.

Thank you Albert!


J. Daniel Smith said...

I think Albert has addresses all of your objections at http://arxdummies.blogspot.com/2005/02/class-3a-minimum-application.html

* "The .NET API already covers 95% of what one can do with ObjectARX in C++."

* "...wrap custom objects so that they are accessible from any .NET language."

* custom objects may be overused and Autodesk may be providing other alternatives

He also says

* "We actively encourage customers to use the .NET API for new work..."

* "...some features will be exposed in the .NET API only and not in ObjectARX..."

Don't get me wrong...you're doing a good thing here. I just think you should be doing it C# (or VB.NET) with the .NET APIs rather than C++. Especially since your target audience is "for Dummies".

Fernando Malard said...

Dear Daniel,

I already have explained that this course will also cover custom objects / entities features which are not currently available in .NET API, AutoLISP or VBA, even in AutoCAD 2006 as Albert said.

The most powerful feature of ObjectARX is exactly the custom objects and I don't want to mix .NET with C++ which is not a good idea for beginners. Custom objects are not too complicated and I plan exactly to show this.

If you feel comfortable to provide a .NET course for AutoCAD I would really encourage you. Maybe I could also do this soon but now I'm focused on teaching ObjectARX in C++ (even I'm using myself .NET in some of my projects).

I really respect your point of view but I would like to use this Blog to discuss only technical issues and not user's comments about the course's contents and objectives.

Thank you for your cooperation.

Byron Blattel said...

"custom objects may be overused"

Perhaps .NET developers aren't looking for full control but I suspect they are. I'm guessing that if you give them a taste of the pie, they're going to want all they can eat :)

Since I work exclusively in C++ it doesn't really matter to me. In fact, I don't mind seeing .NET developers hobbled a bit :)

IMO, the real problem with the custom entity API in AutoCAD is one of too little control not too much. Take a look around the autodesk.autocad.objectarx newsgroup at the custom entity questions. Most of the questions are related to making entities behave as the developer needs them to, not bemoaning the difficulty of 'subclassing' a line. Does anyone really think the .NET developers have different goals?