| ---- AutoCAD在中国有很广泛的用户基础,同时也有很多专业的、业余的开发人员。从R13版本开始,Autodesk 提供了ARX开发工具,面向对象的特性使开发人员如沐春风。有关ARX编程与ADS编程的比较这里不再赘述,此处只讲如何用ARX实现我们所要求的功能,不足之处请指正。 
 ---- 许多二次开发软件均提供超级编辑命令,如Genius 14、HMCAD 6.0等等。读者或许对这些命令很感爱好,能不能自己开发类似的功能呢?只要您对和ARX编程有一些了解,利用Autodesk提供的ObjectARX SDK软件包(可以到Autodesk网址上免费),您能很方便的写出此类程序,虽说不能和专业人员提供的超级编辑命令相媲美,但也能给您带来不少方便。本文利用ObjectARX提供的范例程序(缺省安装ObjectARX SDK后的路径是X:OBJECTARXARXLABSLAB07)进行简朴的修改即可实现我们所要求的功能。以下是采用ObjectARX SDK 2.0,在MSVC 5.0编译环境下通过。
 
 
 
 ---- 首先我们要修改enttemp.h文件:
 
 
 
 ---- 原文件如下:
 
 
 
 class EntTemperature : public AcRxObject
 
 {
 
 public:
 
 ACRX_DECLARE_MEMBERS(EntTemperature);
 
 virtual double reflectedEnergy(AcDbEntity* pEnt) const = 0;
 
 };
 
 将斜体部分修改成如下:
 
 virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt)
 
 const = 0;
 
 
 
 ---- 因为我们以后要以EntTemperature作为基类,而且HgyModify函数在继续类中要重写并要求实现动态调用,故此处必须声明为虚拟函数。Virtual关健字即为面向对象的重要的特性。
 
 ---- 第二、删除tempapp.def文件中的energy文本。
 
 
 
 ---- 第三、修改tempapp.cpp文件:
 
 
 
 ---- 1、 删除CircleTemperature、RigonTemperature及EllipseTemperature类的所有相关内容。
 
 
 
 ---- 2、 修改原文件中如下的内容:
 
 
 
 class DefaultTemperature : public EntTemperature
 
 {
 
 public:
 
 virtual double reflectedEnergy(AcDbEntity* pEnt) const;
 
 };
 
 double DefaultTemperature::reflectedEnergy
 
 (AcDbEntity* pEnt) const
 
 {
 
 ads_printf("nThis entity has no area, and no reflection.n");
 
 return -1.0;
 
 }
 
 修改后的内容如下:
 
 class DefaultTemperature : public EntTemperature
 
 {
 
 public:
 
 virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;
 
 };
 
 
 
 Adesk::Boolean DefaultTemperature::
 
 HgyModify(AcDbEntity* pEnt) const
 
 {
 
 ads_printf("nThe entity hasn\\'t defined,
 
 and nothing to be modified.n");
 |