Sei sulla pagina 1di 20

Components of ObjectARX applications.

Hello everyone, In this article I will introduce the components of ObjectARX applications and tools required to develop them (Fig.1). I know it looks scary. But it gives you amazing customization abilities.

Fig.1 Components of an ObjectARX project As I mentioned in my previous article, ObjectARX applications are .dll files. Of course, there may be other files like .xls, .doc, .exe, .bmp ect or other resource files written in other programming languages, .php, .asp files, database, hardware driver connections, etc depending on what your ObjectARX project includes. You should consider it a project composed of many components and files, rather than a code snippet that can be copy-pasted as part of a macro. This .dll file, has .ARX, or .DBX extension. The main application, which I mentioned above, must be ARX file; however if you create your custom objects, which are derived from AutoCAD objects classes, these classes are stored in a DBX extension file, which is linked to main ARX file. At the starting it becomes scary, why two different files, not one? This idea arises from the separation of UI (user interface) from database operations.

ARX file In this file you keep the code related to the user interface like toolbars, MFC (Microsoft Foundation Classes, which is the standard dialog boxes, buttons, scroll bars etc. that Microsoft use in Windows applications), AutoCAD commands that your application handle (just like the standard commands you enter from the command line), and other code that organize the general operation of you application. DBX file In this file, you keep your own custom classes. Those who dont know what objectoriented programming is, should skip this part, unless they want to discover a new way of programming. Those who know about it should also skip because I will try to explain it :) As I mentioned in my previous article, one of the most exciting features of ObjectARX programming is ability to create your own custom objects, which may be related to the concept of object-oriented programming in AutoCAD. I will try to explain with an example. As it is mentioned in this article, TABLE command is introduced with AutoCAD 2005. This table entity is a custom object derived from several line, and text entities combined together to form a TABLE object. I am sure that most of the ObjectARX programmers have already created their TABLE objects before AutoCAD 2005, and used it in their own applications. At least, I have done that. These DBX files or the custom objects inside them are totally reusable, and customizable. Once you create one custom object, you can use it in different applications or you can derive new custom objects from them and adapt them to your new problem. C++ Compiler Compiler, is a program which compiles the code into and .exe or .dll file. Thus, we will use a separate program to write our code. Here is a table for C++ compilers for AutoCAD and C++ versions. Sorry for users of versions before 2000, I started with R14

ARXWizard

It is included in ObjectARX SDK (Software Development Kit), which can be downloaded from www.objectarx.com for different versions of AutoCAD. This wizard enables us to create our ObjectARX projects, files and objects from default templates and add/modify commands (to AutoCAD) that our application will handle. It is nearly impossible to create a working project for a newbie without ARXWizard. When you install it, it adds a toolbar inside VS2002 and adds itself to the other wizards of VS. AutoCAD Libraries They are also included in SDK. They are inside /inc and /lib folders. Actually, you do not need to deal with these files personally. You just enter these directories into your project settings and compiler. As I mentioned in my previous article, the main idea of ObjectARX programming is using AutoCADs own source code, but not limited to it, which is composed of these libraries. These libraries include AutoCADs own object classes and global functions (like shortcut functions to database related works; angle, distance measurement functions and much more). MFC (Microsoft Foundation Classes) Libraries Libraries to use standard Microsoft dialog boxes, buttons etc Note that, even if you can use your external resources and MFC libraries, AutoCAD libraries also include objects derived from MFC. COM+ (Component Object Model) Connections For those who used a VBA macro or any other program that enables AutoCAD to communicate with other programs (like EXCEL), has already used COM without noticing it. COM is an intermediate platform which enables different programs (even written in different programming languages) to communicate with each other. Your own Libraries You can use your own libraries or any other library that is created with C++ or any other programming language. Web Server Connections For now its just my imagination; who needs to include a web server inside an ObjectARX application? However, with the development of internet, it enters every field. It is possible to

implement some PHP, ASP, JAVA, AJAX whatever web language you want, through an ObjectARX application, will run on a server and work as a part of your project. As you see, I am just trying to enlarge your imagination, because there are no limits for the components that can be added to an ObjectARX application. Those I mentioned are only limited to my programming experiences, for more experienced and talented programmers there may be much more Thanks for reading, and please stay tuned. In my next article, for those who are willing to write their first program, I will explain the installation of basic components (Fig.1) for an Object ARX application, so that shortly we can write our first Hello World program

A brief information about ObjectARX


1 February 2008, Friday 7:22 Hello everbody, Today, I will give brief information about ObjectARX, which is one of the innovative steps in history of AutoCAD. It is another way for programming in AutoCAD, just like AutoLISP and VBA. Main difference of it is the programming languages it uses, which is C++ in versions up to AutoCAD 2007 and C++.NET starting with this version. However, as it uses C++ language and it requires knowledge of the programming structure of AutoCAD, DLL (dynamically linked library) etc. it took interest of mainly software developers who develop AutoCAD integrated software products, that are customized in special subjects (i.e. plug-ins, add-ons, modules that are used to aid specific kinds of drawings like reinforced concrete, steel detailing drawings, architectural drawings etc.). Compared to other two customization tools AutoLISP and VBA, ObjectARX is the most complicated one. For example, if you are about to write a code to draw one simple line you can do it in AutoLISP and VBA with only a few lines, besides you can do this inside AutoCAD through the relevant editor. But if you do it with ObjectARX, you will have to prepare a new project in a C++ compiler like Visual Studio, and create up 1-5 (changing from the experience of programmer) code files that needs be compiled together with the AutoCAD libraries the and write up to 100 lines of code. This may sound annoying or just crazy. But the point is, due to the fact that your ObjectARX application is using some part of the original AutoCAD source with ObjectARX, you can control a huge part of run-time environment of AutoCAD. You can manipulate/change the reactions of AutoCAD to specific Print This Post

actions, you can add new reactions that AutoCAD does when predefined conditions occur, you can add temporary graphics, drawing aids, dynamic objects, user interfaces, database connections, communication with other software/hardware etc.. you can even change whatever you dont like in AutoCADs operation sequence or logic can program in C++, whatever you can imagine. What you create with ObjectARX is a DLL file, which can be loaded into AutoCAD, similar to loading AutoLISP or VBA applications. It is not different from any other DLL that AutoCAD uses. This is achieved by using some part of the AutoCAD source code. When AutoDESK introduced ObjectARX concept, what they did is simply to open some of their source code (which is indeed a very precious commercial secret) so that third party software developers could use this source code to develop their own applications that works as a part of AutoCAD. This enabled developers to use AutoCAD only for the user interface of their own program or they simply created some specific tools that work as a part of AutoCAD, help those who already use AutoCAD to prepare their drawings. Main idea is that you can apply the object-oriented programming with C++. This means that you can use AutoCADs basic objects to create your own objects. When you are making a drawing what you are doing is simply to put together the basic drawing objects like lines, texts, points etc. together in a systematic and oriented manner . For example you are creating a signboard by putting ; shortly whatever you

together a line object as post a text object as something written on it, and a circle, suppose that it is a circular sign board. If you look into any drawing prepared with AutoCAD or any CAD tool, you can such objects prepared in the same manner. What if you could have directly created a signboard object. Up to this point, idea is same as writing a macro, or creating a block, or an attribute. However idea of creating custom objects with ObjectARX is far beyond these. While creating a block, you are limited to what AutoDESK has programmed for BLOCK objects, but with ObjectARX you can take the already existing Block object that AutoDESK has programmed inside AutoCAD and add properties or modify existing properties. You can append your own objects, algorithms, combine different objects together and add dynamic properties to the object that is affected by the things that change when you are drawing etc. Here I could only give only a brief information about ObjectARX and what you can do with it. However, due to the wide range of possibilities and control it gives to the programmer, its capacity are limited to the capacity of the ObjectARX programmer . In my next article, I

will explain the components required for creating an ObjectARX application (C compiler and AutoCAD libraries). Please stay tuned:)

Object ARX software development kit


6 October 2007, Saturday 7:21 Hello everybody, Today I would like to introduce Object ARX Software Development Kit (SDK). You can download your free copy of ARX SDK from www.objectarx.com or Print This Post

www.autodesk.com/objectarx. Click on Samples and Documentation and download executable achieves depending on the version of AutoCAD for which you want to develop ObjectARX applications. Extract them into your hard drive, and you will get the content as shown in Fig. 1.

Fig. 1 Contents of ObjectARX SDK For different version contents of SDK changes, however general structure and usage is same only some utilities, documentation and samples change depending on the new features introduced in each version of AutoCAD and also in ObjectARX. Of course, the contents of lib and inc folders also change, but you cannot already use them to develop applications for other versions. Now, lets go over each of each folder in SDK. ARXLABS In this folder you will find the tutorial help file for developing ObjectARX applications. If you are not familiar with concept of programming with C++ and Visual Studio, it will be hard to follow these tutorials. However, if you follow the instructions one by one it would be a great practice to develop your first ObjectARX application.

DOCS In this folder you will find the other help files. The main file is arxdoc, which includes all of the other help files. But I suggest you to create a shortcut to your desktop or elsewhere for arxdev, which will be the main reference as it includes definitions of all of AutoCADs components that can be used in development of ObjectARX applications. LIB INC These two folders are where you can find the library and header files that Visual Studio will be linked to, in order to create ObjectARX applications. SAMPLES Here you can find the samples for ObjectARX projects. They are also classified for different subjects. Unfortunately they include only the files that make up the project, so they need to be compiled with Visual Studio to create the ObjectARX application. CLASSMAP In this folder there is an AutoCAD drawing file that shows the classes included in the SDK and their hierarchy. These classes are originally the real classes that are used in AutoCAD. What the SDK does is, it gives the programmer access to these classes by the library files and header files in inc and lib folders so that we can use these classes and their full functionality to develop our applications or create our own classes from them. REDISTRIB In this folder there are some files that can be included in redistribution packages, so that we can create our own installation files. UTILS In this folder, you can find utility files. Depending on the AutoCAD version, there are different utility programs in this folder. The most important utility program to be used, especially if you are new to ObjectARX programming, is ARXWizards. When you install ARXWizards, then your Visual Studio will obtain the functionality to create ObjectARX applications from templates and other wizards for implementing members and classes inside Visual Studio in a very easy way.

Thats all for today. Have a nice day.

Programming languages in AutoCAD


20 August 2007, Monday 9:25 Print This Post

As Taliasoft team, we have been developing applications that work integrated wtih AutoCAD for 16 years. Since the foundation of our company, we created applications for some of the biggest companies in Turkey, like ABB, AEG, Mercedes Benz Trk, Eczacba Bath Kitchen Ltd., Mood Ltd. We published many publications in various magazines regarding AutoCAD applications. And today, we are sharing our knowledge with you through this platform. And from time to time, we are presenting some small applications to you in this web page. We call some of the applications as programs that are AutoLISP, or .NET, or ObjectARX based applications. Even now, I can hear you saying I wonder which one of the programming languages is more suitable for me?. In this article, I will try to explain and clarify more details about this subject.

Perhaps, one of the best features of AutoCAD that is the reason why it is selected by many users is that it is a customizable software program. Just like the difference between MAC and PC, even though there are better drawing programs, due to the fact that it is customizable, AutoCAD has been one of the most favourite programs of people who are working in CAD works. Because, nearly all of the user interface of AutoCAD, including its menus, status bar, command line, looking, inside outside, can be customized. In this article, we will only deal with the programming languages which are used for making parametric drawings. First of all lets see the summary list:

Table 1 - AutoCAD programming and macro languages Now, lets briefly go over each of the programming languages: SCRIPT: It creates text files that has SCR extension. It is used to execute simple AutoCAD (TM) commands one after another. It is generally used for taking repeatedly print outs, slide shows etc. However, even if it is still applicable in todays versions of AutoCAD, SCR files are replaced by modern commands. DIESEL: When it is first released, its aim was to give several information regarding coordinates and angles through status bar. On the other hand, it is developed more and it can also be used to create menu macros. It has limited areas of usage, however it can be used for very practical purposes. Lets have a look at the example together: Command: New value for MODEMACRO, or . for none <">: $(getvar,clayer) modemacro

If you change the value of MODEMACRO variable with a DIESEL expression, then you can see the result of this function through the status bar. Layer name that is used in the example is being written on the status line. AutoLISP: Previously, we used to create LSP files by using any text editor and use these files as AutoLISP programs. However, since AutoCAD 2000, we are using Visual LISP program. By using this program, we can one or more LISP files under one project and can be compiled so that they cannot be read. Compiled LISP file includes all of the LISP files and it takes FAS extension. AutoLISP is a programming language which is very easy to learn. It has a very high tolerance with respect to trial and error. Experienced programmers can make very advanced operations by using AutoLISP. Advantages : Easy to learn, it does not require any other additional programming tools when Visual LISP that exists in AutoCAD is used. It has a very high tolerance with respect to trial and error. Intermediate level complex jobs can be made with LISP in a parametric manner. Disadvantages : User interface is quite had to use. You have to learn the programming language called DCL. It is not suitable for doing jobs that require speed and performance. It cannot communicate with databases (Except special commands). ADS ( AutoCAD Development System ):

First time AutoCAD meets a structural programming language that can be compiled like C, was with ADS. However, lifetime of this language was not so long. Right after it, ObjectARX came and ADS was no longer popular. You need to use compiler programs like Watcom C or Metaware C. However, due to the fact that these compilers did not have IDE, you used to create the C files in an external text editor. Extension of the files were ADS or EXE. Advantages: Compiled code was used to run faster and it was more secure. It was nearly possible to access all of the features that exist in AutoCAD (TM). Even it was very difficult, it was also possible to connect to databases. Operation system file operations was much faster and easier. Disadvantages : It is very hard to learn C. Compilers that were used was a total headache. User interface was possible again by using DCL. It was very hard to complete a project unless you create your own library.

Object

ARX

AutoCAD

Runtime

Extensions

):

AutoCAD met Visual C++ ( Visual Studio 6.0 ( VS6 ) ) in R13 version. It was a revolutionary new feature to create your own AutoCAD entities by using C++. In addition, these new entities that you create was able to be edited by using the standard commands of AutoCAD like MOVE, ERASE, COPY as if it is an original AutoCAD entity. Of course it is quite difficult to make this definition. On the other hand, due to the fact that we were using VS6, it was now available to access MFC libraries. This meant that we were now able to use Windows (TM) windows and controls as our user interface, or directly connect to databases, network communication, internet access etc File extensions can be ARX or DBX. These files are originally DLL files. Advantages : It can create secure files that are very fast during execution. It is very easy to create database connections and user interfaces. It works in the same level as the internal commands of AutoCAD. Disadvantages: It is very hard to learn. You can make the projects much faster by using your own libraries DCL ( Dialog Control Language ):

It is possible to create user interfaces while programming with AutoLISP and ADS by this programming language. Main principle can be described as giving a key a label or a property to each of dialog controls. By using this key, you can directly access to the dialog control. It is still in use. File extension is DCL. You can examine the files under AutoCAD (TM) and have an idea about it. .NET :

By using Visual Studio 2002 or 2005 ( VS2005 ), you can create C#, VB.NET DLL projects. MANAGED EXTENSION DLL which is prepared by AutoCAD as ObjectARX wrapper are assigned to the project as references. Extension of the file that was created is DLL and it is loaded into AutoCAD by using NETLOAD command. Advantages: It is easy to learn. It is quite simple to define a user interface. It is very easy o connect to databases. You can very easily use the code that you have written in your other projects. Disadvantages: This system is very open to reverse engineering, which means that your DLL files can easily be interpreted. Microsoft Co. Should work a little bit more about this subject. It works quite slower when compared to Object ARX. You cannot define your own

custom entity. Due to the fact that the created application works in APPLICATION DOMAIN, you cannot remove it from system memory before shutting down AutoCAD. Because of this it creates a big headache during software development and debugging. VBA ( Visual Basic for Applications ) :

This is a system that AutoDESK used to obtain Windows compatible certificate. You can create simple VB projects similar to the way that you can create VB macros in EXCEL. Our author Serkan ZANT is creating channel drawings programs by suing this system. Advantages: It is very easy to learn. It is very easy to create user interfaces. It is very easy to connect to databases. Disadvantages: Those who use VBA knows very well that it is very hard to access DLLs and may create different problems in different computers. In addition, as AutoDESK created this system unwillingly, it is not very helpful for the user. It works relatively slowly. It is expected anytime that it may break something in AutoCAD screen. Technorati Tags: AutoCAD, C++, AutoLISP, Visual LISP, VBA for AutoCAD

Customization Methods in AutoCAD.


12 June 2007, Tuesday 7:55 Print This Post

General proggraming information


There are three different methods that can be used for customization, or in other words programming your own applications in AutoCAD. Below, you can see these three methods as sorted from less complicated to most complicated one. -AutoLISP -VBA Macros Macros (Programming (Programming language: language: Visual VisualLISP) Basic)

-ObjectARX and DBX modules (Programming language: C++) Lets examine this there methods together 1-AutoLISP Macros: VisualLISP is the oldest of programming languages used in AutoCAD. It might be a little bit old fashioned when compared to todays complicated programming languages. However, it is extremely useful for custom applications that are developed to use AutoCADs own

commands and for purposed that are repeated several times. Compared to other programming methods, it is the easier to learn and use. Another one of its main advantages is that it can be used directly as AutoCADs original environment and as if it is AutoCADs own commands. 2-VBA Macros: Visual Basic is specially developed for those who do not require a complicated programming language to develop large, complicated applications; but need less complicated and easy to understand and use programming languages. Its usage and learning procedure is much more easier compared to other programming languages. When compared to LISP it provides wider ranges variations of applications. Similar to LISP, it includes a VISUAL BASIC Editor which is integrated into AutoCAD. This editor is the same editor that is integrated into Ms Office applications like word, excel that is used for creating VBA macros in these applications. Probably, its greatest advantage is that it can be programmed through other applications like Word, Excel using the VBA editor of these applications and enable all these programs to communicate with each other in a very easy manner. 3-OBJECT ARX DBX Modules: When compared to others, this is the one that provides wider range of possibilities but on the contrary, that most complicated one to learn and use. C++ programming language is more complicated compared to LISP and Visual Basic languages that is used in other methods. Other two programming languages are more like scripting languages. They are more efficient to automate basic tasks that repeat themselves. On the other hand, ObjectARX programming uses AutoCADs own source code to develop more sophisticated and specialized applications. Due to the fact that, C++ is an object oriented programming language, you can create your own objects that are specialized for special purposes, either by using AutoCADs own objects or entirely new. They are more then a script or a macro. By using ObjectARX, specialized programs that run under AutoCAD, which uses AutoCADs user interface as its own graphical interface can be programmed.

But all these make ObjectARX applications more complicated. For example simple tasks like drawing basic entities may require only 2-3 lines of code in AutoLISP and VBA, however same task may be programmed by using 100 lines of code in ObjectARX.

Creating AcDbMaterial object 4: Creating a textured material


17 January 2007, Wednesday 9:21 Print This Post

Author

Erhan Toker

Profession Architect M.Sc. Autodesk Authorized Consultant Software Specialist e-mail

AutoCAD 2007
Now, we have enough information related to materials. So, we can create a general textured material. We can define texture properties by creating another

AcGiMaterialMap object

in addition to the standard color. Textures are made up of pictures that are already existing in the drawing or saved as a file in hard drive. In our example function, we assume that texture file ( 1):

tName )

is stored inside hard drive as a picture file. Here is our function ( Fig.

Fig. 1. To assign properties like Tile, Crop etc to material definition, you can use

AcGiMapper

object. However, I suggest tat you should do this operation by the mapping which will be assigned to the material to be texturized. That will be the subject of our next article.

Creating an AcDbMaterial Object - 1


7 December 2006, Thursday 9:42 Print This Post

Author

Erhan Toker

Profession Architect M.Sc. Autodesk Authorized Consultant Software Specialist e-mail

Autocad 2007 programming

In this series of articles, I will explain how to create a

AcDbMaterial

object in the

drawing database. Although this process is very easy, there are some certain points that you should be careful about. I will explain these points and the process to you step by step. Before adding any material to drawing database, you should check if another material with the same name exists in the database. For this reason, we will define funtion first (Fig.1).

hasMaterial()

Fig.1 Input parameters:

AcDbDatabase *db : const ACHAR *matName AcDbObjectId &id : Object ID of


material Return in drawing database, this

Pointer

to

drawing name be to

database. query. the value .

Material will

the found material. If there is no matName parameter assigned

AcDbObjectId::kNull true :Material name is exists false :Material is not exists in drawing database.
In AutoCAD drawings, material object). definitions In order are to (AcDbDictionary in drawing

value: database.

stored reach

inside this

dictionary dictionary

AcDbDatabase::getMaterialDictionary() AcDbDictionary::getAt() getAt()

function is used. After opening the

dictionary as -open for read-; material is searched inside the dictionary by using function. If the material is found in the dictionary,

function also gets the Object Id of the material. After the process is completed,

dictionary is closed and the return value is returned.

Creating AcDbMaterial Object 2


13 December 2006, Wednesday 9:33 Print This Post

Author

Erhan Toker

Profession Architect M.Sc. Autodesk Authorized Consultant Software Specialist e-mail

Autocad 2007 and higher versions

In my previous article, we have checked if the material, we want to create, exists in the drawing database or not. As the second step, we will see how to add a new material to the database. To do this, we will create Fig. 1 )

addMaterial( ... )

function and examine it. (

Fig. 1 Input parameters:

AcDbDatabase *db: Pointer to drawing database. AcDbMaterial *mat: New material definition object. AcDbObjectId &idm: Object ID of the created material. bool overWrite: pass true to overwrite existing materials, false to avoid overwrite.
Return value:

true: Material successfully false: Unable to add material.

added

in

to

dictionary.

First we will check if the material exists in the drawing or not. To do this, we are using the (

hasMaterial() ) function (with mat->name() ) which we have created and explained


in the previous article. If the material that we will add exists in the project, depending on the

overWrite boolean (if it is

TRUE or FALSE) variable,

either we will directly exit the function

or we will overwrite the new material over the existing one. Due to the fact that, by default

AcDbDictioanary::setAt()

function overwrites the entries that has the same

name, there is no need to delete the old one. After adding the material to the dictionary, we must not forget to close the dictionary and material object. Finally, I would like to remind you that we are not deleting the

AcDbMaterial *mat object, we are just closing it.


Print This Post

Creating AcDbMaterial object 3


11 January 2007, Thursday 9:19

Author

Erhan Toker

Profession Architect M.Sc. Autodesk Authorized Consultant Software Specialist e-mail

AutoCAD 2007
After defining

hasMaterial()

and

addMaterial()

functions, from now on, we are

ready to create a simple texture material. Any AutoCAD material has one or more of diffuse, bump, specular, refraction, opacitiy and reflection properties. At least, a simple material has a diffuse color and in this article I will explain such a material. A simple material only has the property of color diffusion. In ObjectARX library, color object is

AcGiMaterialColor. Lets define a color now (Fig. 1):

Fig. 1. Together with stream ) or

setMethod()

method, we can use

kInherit

( last used color from AcGi

kOverride
Besides, we

( new color definition) options. And, by using

setColor()
by using

method, we are defining the color that the material is going to make diffused by using RGB components. are setting the diffusivity rate of the color

setFactor()
Fig.2 ).

method. Now, lets create a material and define its diffusion properties (

Fig. 2. Our material definition is almost finished. However, diffusion property doesnt spread enough light by itself. We are adding the same color to our material by using function (Fig. 3) as an environment property by using 0.5 factor.

setAmbient()

Fig. 3. Now, our material is ready to be added to the drawing. We are inserting the new material that we have created into drawing data base by using

addMaterial() method ( Fig.4 ).

Fig. 4. I would like to finalize my article by noting that, pointer database, and it is

acdbWDB points to current drawing


a macro definition.

#define

acdbWDB

acdbHostApplicationServices()->

workingDatabase().
Related articles
Creating an AcDbMaterial Object - 1 Creating AcDbMaterial Object 2

Potrebbero piacerti anche