Monday, January 31, 2005

Class 1 - Overview


ObjectARX is an AutoCAD Runtime Extension.
With ObjectARX SDK you can build applications that will alow you to extend AutoCAD features like commands, dialog boxes, entities, objects and much more.

The ObjectARX application is actually a DLL that is loaded into AutoCAD environment and allows you to access new features as mentioned above. To be able to build these DLLs you need to follow some basic rules to setup Microsoft Visual Studio.NET environment and assert your application will respect AutoCAD requirements.

The performance of this application will be the same of native features. By the way, Autodesk uses ObjectARX to build vertical products you may already know like Autodesk MAP and Architectural Desktop, among many others.

User Requirements

Because ObjectARX is not a simple customization tool, some requirements must be observed to allow you to be able to proceed. If you don't match these requirements I would recommend you to first increase your skills and then go back to try this course.

The minimum requirements to learn at least basic ObjectARX are:
  • Basic Visual Studio.NET concepts;
  • Average C++ knowledge;
  • Advanced AutoCAD knowledge;
  • MFC (Microsoft Foundation Classes) concepts;
  • Object Oriented Techniques;

As mentioned before, this course is not intended to be a complex guide or even cover advanced features. I believe you can go further by yourself after learn the basic features and mainly the basic concepts which are the secret of ObjectARX.

I will not cover .NET Framework capabilities to make the course as much simple as I can. Once you learn and figure out how AutoCAD works from inside you will open your mind to ObjectARX capabilities and will be able to build great application!

How to use ObjectARX SDK

Once you have downloaded your copy of ObjectARX SDK and extracted it to your hard drive, you will find the following folders inside it:

\arxlabs : This directory consists of a set of labs that shows some aspects of the ObjectARX.
\classmap : This directory contains an AutoCAD drawing with the ObjectARX class hierarchy tree.
\docs : This directory contains the ObjectARX online help files.
\inc : The inc directory contains the ObjectARX header files.
\lib : The lib directory contains the ObjectARX library files.
\redistrib : This directory contains DLLs that may be required for an ObjectARX application to run.
\samples : This directory contains examples of ObjectARX applications.
\utils : This directory contains other libraries like brep for boundary representation and ObjARXWiz for the ObjectARX wizards.

ObjectARX Classes Naming

ObjectARX classes names follow the following prefix standards:

AcRx : Classes for binding an application and for runtime class registration and identification.
AcEd : Classes for registering native AutoCAD commands and for AutoCAD event notification.
AcDb : AutoCAD database classes.
AcGi : Graphics classes for rendering AutoCAD entities.
AcGe : Utility classes for common linear algebra and geometric objects.

Depending on which set of features you use in your applications you will need to use the corresponding library as follows:

AcRx : acad.lib, rxapi.lib, acdb16.lib
AcEd : acad.lib, rxapi.lib, acedapi.lib, acdb16.lib
AcDb : acad.lib, rxapi.lib, acdb16.lib
AcGi : acad.lib, rxapi.lib, acdb16.lib
AcGe : acad.lib, rxapi.lib, acge16.lib, acdb16.lib

ObjectARX Wizard

I will bypass the Visual Studio environment configuration to build ObjectARX applications. You could refer to this information inside SDK documentation. We will use on this course the Wizard provided by ADN (Autodesk Developer Network) team. It is located inside ObjectARX directory called \utils\ObjARXWiz. Inside it you will find the installation package named ArxWizards.msi.

To install this Wizard, close your Visual Studio.NET and double click the above mentioned file. Follow the steps. When finished, open Visual Studio.NET again and you will see a new toolbar.

See you on Class 2!


Anonymous said...

Is possible to use ObjectARX applications made to AutoCAD 2000 inside 2004?

Fernando Malard said...

No. ObjectARX application are binary compatible only inside the same family (built with same compiler). You will need to recompile your project on the appropriate compiler. Be aware that you may run into problems depending on which features you are using. Please refer to the ObjectARX documentation about Migration.

Anonymous said...

can i use objarx in autocad2007

Fernando Malard said...


ObjectARX 2004: Will run on AutoCAD 2004, 2005 and 2006. Requires Visual Studio 2002

ObjectARX 2007: Will run on AutoCAD 2007 and 2008. Requires Visual Studio 2005


Wassim Mansouri said...


Very interesting!

I'm a CSharp (C#) developer and I wish to use my CSharp skills to develop Autocad based applications, is it possible to develop ObjectARX applications using CSharp as a programming language? If not; what is the right choice between VB.Net, VBA and C++?

Thanks Fernando.

Fernando Malard said...

Hello Wassim,

Yes, it is possible to program AutoCAD with C# and VB.NET.

If you need, you can mix the C++ world with .NET using mixed-mode modules.

I would recommend you a very nice Blog of a friend:


Anonymous said...

How can I make a custom object derived from AcDbLine or AcDBPolyline, having constraints in XY, YZ or XZ planes when moving or dragging it

Fernando Malard said...


All the transformations like MOVE, ROTATE, etc. are made through the transformBy() method.

Once you override it you can tweak the behavior of your custom entity when receiving these commands.

Take a look at the transformBy() method documentation for a better understanding of its capabilities.


kirti said...

Please can you send me a sample code for reading existing dwg file and for reading the dimension of an entity
Thnking you in advance.

Fernando Malard said...


Unfortunately I don't have a sample which demonstrate this.

The best reference is the sample "\ObjectARX 2010\samples\database\testdb_dg".

The term "dimension" is different depending on the type of entity you are dealing with. For a LINE entity it will be the distance between its start and end points. For a CIRCLE or ARC it will be the curve length, etc.

I would recommend you to take a look at the AcDbCurve derived classes like these:


All classes are base on parametric curves and you will have methods such as getDistAtPoint() and getDistAtParam().

Hope this help.

smita said...

I have tried u'r following code from class 5,

ads_name na;
AcDbObjectId id;
AcDbEntity* pEnt = NULL;
if (acdbOpenObject(pEnt, id, AcDb::kForRead) == Acad::eOk) {
if (pEnt->colorIndex() != 3) {
else {
acutPrintf(_T("\nEntity already has color=3"));

but,i got error at acdbOpenObject.
error is:-
fatal error:Unhandled access violation reading 0x0005 Exception at 620663e4h.
Can u help me.
Thanking you.

Fernando Malard said...


I have answered your question at the other thread. Please do not post the same issue at different threads. The publish process needs my approval due the SPAM protecting measures so depending on my availability it may take some time to appear after you submit it.


Anonymous said...

Dear, thank you for this blog
I'm a Civil Engineer working in France.
Can I used another compiler program than Microsoft Visual Studio to program with Object ARX?

My best IDE for C++ is Code Block. Can I use it to program Autocad with ObjectARX ? Please could wou explain me how to setup the ARX for CodeBlocks ??
Thank you for your helps

Guy Kengne said...

Dear, thank you for this blog
I'm a Civil Engineer working in France.
Can I used another compiler program than Microsoft Visual Studio to program with Object ARX?

My best IDE for C++ is Code Block. Can I use it to program Autocad with ObjectARX ? Please could wou explain me how to setup the ARX for CodeBlocks ??
Thank you for your helps

Fernando Malard said...


Unfortunately only Visual Studio is supported for ObjectARX development.

You can use (with some limitations) the Express version which is FREE.

Please take a look at this post from my friend Kean:

Hope this help you.

Fernando Malard said...

Guy, just answered you at the previous post.
Thank you,

Anonymous said...

Hello Fernando,
Can you please tell me how to form bitmap of definite size say 32 X 32 pixel from Selection Set in ObjectARX 2010. I can do it from Export() function on IAcadDocument, but it gives me bitmap of complete view. I want the bitmap of only selected entity cropped in.

Thanks in Advance.

Fernando Malard said...

I'm afraid it can't be easily done.
The Export() method defaults the window are to be exported so I don't think there is a way to change this behaviour.

I think you will need to do something after the bitmap is generated by calculating the entity Bounding Box (in screen coordinates) and cropping the bitmap with that information.

Sorry about the bad news.