游客,您好 
免费注册 用户中心 支持中心 加入收藏
工程在线
技术文栏 软件下载 图纸中心 CAD教程 规范标准 工程论坛 博客 问答
技术文栏 - 工程技术 - CAD技巧 - 浏览文章
给AutoCAD 增加超级编辑命令
发布日期:2004-6-1 16:12:09   作者:   出处:

---- AutoCAD在中国有很广泛的用户基础,同时也有很多专业的、业余的开发人员。从R13版本开始,Autodesk 提供了ARX开发工具,面向对象的特性使开发人员如沐春风。有关ARX编程与ADS编程的比较这里不再赘述,此处只讲如何用ARX实现我们所要求的功能,不足之处请指正。

---- 许多二次开发软件均提供超级编辑命令,如Genius 14、HMCAD 6.0等等。读者或许对这些命令很感兴趣,能不能自己开发类似的功能呢?只要您对C++和ARX编程有一些了解,利用Autodesk提供的ObjectARX SDK软件包(可以到Autodesk网址上免费下载),您能很方便的写出此类程序,虽说不能和专业人员提供的超级编辑命令相媲美,但也能给您带来不少方便。本文利用ObjectARX提供的范例程序(缺省安装ObjectARX SDK后的路径是X:\\\\OBJECTARX\\\\ARXLABS\\\\LAB07)进行简单的修改即可实现我们所要求的功能。以下是采用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关健字即为C++面向对象的重要的特性。

---- 第二、删除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);

return Acad::eOk;

}

为简单起见,我们只对直线和圆定义超级编辑命令,

在此定义有关line和circle类。在tempapp.cpp

文件中增加CircleTemperature和LineTemperature类,

定义如下:

class CircleTemperature : public EntTemperature

{

public:

virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;

};

Adesk::Boolean

CircleTemperature::HgyModify(AcDbEntity* pEnt) const

{

AcDbCircle *pCircle = AcDbCircle::cast(pEnt);

if (!pCircle) {

ads_printf(The entity selected is not a circle\\\\n);

pEnt- >close();

return Acad::eNotImplementedYet;

}

AcGePoint3d p,q;

double r;

p=P_TO_P(pCircle- >center());

if (getPoint((double*)(&p), Center Point: , p)== RTNORM

&& ads_getdist((double*)(&p), Blob radius: , &r) == RTNORM)

{

pCircle- >setCenter(p);

pCircle- >setRadius(r);

pCircle- >close();

}

return Acad::eOk;

}

class LineTemperature : public EntTemperature

{

public:

virtual Adesk::Boolean HgyModify(AcDbEntity* pEnt) const;

};

Adesk::Boolean

LineTemperature::HgyModify(AcDbEntity* pEnt) const

{

AcDbLine *pLine = AcDbLine::cast(pEnt);

if (!pLine) {

ads_printf(The entity selected is not a line.\\\\n);

pEnt- >close();

return eNotImplementedYet;

}

AcGePoint3d p,q;

p= P_TO_P (pLine- >startPoint());

if (getPoint ((double*)(&p), From Point: , p)== RTNORM

&& getPoint((double*)(&p), To point: , q) == RTNORM)

{

pLine- >setStartPoint(p);

pLine- >setEndPoint(q);

pLine- >close();

}

return Acad::eOk;

}

---- 如您所见,HgyModify函数也要完全重写。至此我们对CircleTemperature和LineTemperature的定义已经完成。上面P_TO_P()只是一个点对点赋值,getPoint()是自定义的取点函数。增加全局变量:这样我们在初始化或清除内存过程中可以存取该类。

LineTemperature *pLineTemp;

CircleTemperature *pCircleTemp;

InitApp()函数中更改部分:

acedRegCmds- >addCommand(TEMPERATURE_APP,

MODIFY, MODIFY,

ACRX_CMD_TRANSPARENT, printEnergy);

更改程序中别的函数中的相应的部分。

注意printEnergy()函数中selectEntity()

函数的第二个参数必须是AcDb::kForWrite;

---- 编译后在AutoCAD(如R14)中测试运行,敲入modify后随便选取直线或圆,您就会能体会到超级编辑命令的方便之处。或许您会认为此命令没有什么特别之处,但若您仔细研究lab10子目录中的内容,定义自己的实体如门、窗或机械特征,特别是您自己才会用到的特殊对象,给对象增加此命令,您就会体会到ARX编程的魅力了。

共有1条文章 页次:1/1 分页: 9 1 :
发布人:welming 】·【推荐好友】·【打印】·【顶部
相关文章
[CAD技巧] ·37种CAD小问题解决办法2008-09-04
[CAD技巧] ·AUToCAD应用技巧44例2008-09-04
[CAD技巧] ·CAD心得2008-09-04
[CAD技巧] ·AUTOCAD使用心得--从教材到实战十数年经验分享2008-08-07
[CAD技巧] ·AutoCAD文字输入全攻略2008-03-20
相关评论
   系统暂时关闭评论功能!
文章搜索
关键字:
最新文章
 电气施工常见问题分析
 简易自动喷水灭火系统的应...
 高层住宅给排水及消防系统...
 江苏2008暖通施工图审查疑...
 热泵型空调系统设计方法
 37种CAD小问题解决办法
 AUToCAD应用技巧44例
 CAD心得
 电梯图纸绘制
 AUTOCAD使用心得--从教材...
热门文章
 桥梁院士,同济项海帆教授...
 《建筑设计防火规范》中有...
 AutoCAD 应用技巧44例
 洁净护理单位和洁净手术部...
 自动喷水灭火系统末端试水...
 单片开关电源的快速设计法
 国内桥梁设计存在的主要问题
 高层建筑发生火灾后怎样逃生
 铜管与PB管在热水给水管中...
 CAD教程-AutoCAD 2005 基...
推荐文章
 AutoCAD2007 中文版 教程
 防火阀在设计工程中的合理...
 AutoCAD2002视频教学38集
 CAD教程-AutoCAD 2005 基...
 照明的基本概念
 浅谈电子厂房接地设计
 电缆桥架的施工要点
 电气配管及管内穿线施工要点
 电线与电缆的区分
 低压电器选用原则
关于我们 网站留言 友情链接 与我在线 管理
Copyright © 工程在线 All Rights Reserved.
苏ICP备05010419号