ObjectARX & Dummies

Course Index

*Course support: Click here!
*Course and User samples: Download here!

Monday, January 31, 2005

Class 1 - Overview

Introduction

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!

18 Comments:

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

    By Anonymous Anonymous, at 6:20 PM  

  • 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.

    By Blogger Fernando Malard, at 6:24 PM  

  • can i use objarx in autocad2007

    By Anonymous Anonymous, at 7:40 AM  

  • Hi,

    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

    Regards,
    Fernando.

    By Blogger Fernando Malard, at 8:18 AM  

  • Hi,

    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.

    By Anonymous Wassim Mansouri, at 1:15 PM  

  • 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:

    http://through-the-interface.typepad.com/

    Regards,

    By Blogger Fernando Malard, at 1:42 PM  

  • 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

    By Anonymous Anonymous, at 4:31 PM  

  • Hello,

    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.

    Cheers.

    By Blogger Fernando Malard, at 5:04 PM  

  • Hi,
    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.

    By Blogger kirti, at 2:00 AM  

  • kirti,

    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:

    AcDb2dPolyline
    AcDb3dPolyline
    AcDbArc
    AcDbCircle
    AcDbEllipse
    AcDbLeader
    AcDbLine
    AcDbPolyline
    AcDbRay
    AcDbSpline
    AcDbXline

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

    Hope this help.
    Regards,

    By Blogger Fernando Malard, at 9:37 AM  

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


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








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

    By Blogger smita, at 7:04 AM  

  • smita,

    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.

    Regards.

    By Blogger Fernando Malard, at 10:17 AM  

  • 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

    By Anonymous Anonymous, at 1:35 PM  

  • 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

    By Blogger Guy Kengne, at 1:36 PM  

  • Hello,

    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: http://through-the-interface.typepad.com/through_the_interface/2006/07/getting_the_obj.html

    Hope this help you.
    Regards,

    By Blogger Fernando Malard, at 1:59 PM  

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

    By Blogger Fernando Malard, at 2:00 PM  

  • 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.

    By Anonymous Anonymous, at 7:43 AM  

  • Hello,
    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.
    Regards,

    By Blogger Fernando Malard, at 10:28 AM  

Post a Comment

<< Home