模具知识|开发AutoCAD的超级编辑命令

   日期:2016-05-26     来源:建材之家    作者:模具之家    浏览:65    评论:0    
核心提示:许多二次开发软件均提供超级编辑命令,如Genius 14、HMCAD 6.0等等。读者或许对这些命令很感兴趣,能不能自己开发类似的功能呢?只要您对C++和ARX编程有一些了解,利用Autodesk提供的ObjectARX SDK软件包(可以到Autodesk网址上免费下载),您能很方便的写出此类程序,虽说不能和专业人员提供的超级编辑命令相媲美,但也能给您带来不少方便。本文利用ObjectARX提供

模具知识|数控铣床安全操作规程

推荐简介:1、 上班必须按要求穿工作服,否则不许进入车间。   2、 禁止带手套操作机床,若长发要戴帽子或发网。   3、 所有实验步骤须在实训教师指导下进行,未经指导教师同意,不许开动机床。  4、 机床开动期间严禁离开工作岗位做与操作无关的事情。   5、 严禁在车间内嬉红戏、打闹。机床开动时,严禁在机床间穿梭。   6、 未经指导教师确认程序正确前,不许动操作箱上已设置好的“机床锁住”状态键。  7......
模具之家讯:许多二次开发软件均提供超级编辑命令,如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(" This entity has no area, and no reflection. ");

return -1.0;

}

修改后的内容如下:

class DefaultTemperature : public EntTemperature

{

public:

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

};

Adesk::Boolean DefaultTemperature::

HgyModify(AcDbEntity* pEnt) const

{

ads_printf(" The entity hasn't defined,

and nothing to be modified. ");

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 ");

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. ");

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编程的魅力了。#p#分页标题#e#
模具之家为您提供最全面的塑胶,塑料,模具,模具设计,塑胶模具品牌的装修知识点和各种塑胶模具的导购与在线购买服务,拥有最便宜的塑胶模具价格和最优质的售后服务,敬请登陆模具之家:http://muju.jc68.com/
广告
 
打赏
 
更多>文章标签:塑料 ;相关产品:
更多>同类头条资讯
0相关评论

推荐图文更多...
点击排行更多...
模具商圈内事更多...
最新视频更多...
推荐产品更多...
建材风水 | 木板之家 | 电工之家 | 壁纸之家 | 净化之家 | 安防之家 | 水暖之家 | 洁具之家 | 窗帘头条 | 家饰之窗 | 老姚之家 | 灯饰之家 | 电气之家 | 全景头条 | 陶瓷之家 | 照明之家 | 防水之家 | 防盗之家 | 博一建材 | 卫浴之家 | 区快洞察 | 郑州建材 | 驻马店建材 | 周口建材 | 信阳建材 | 商丘建材 | 南阳建材 | 三门峡建材 | 漯河建材 | 许昌建材 | 濮阳建材 | 焦作建材 | 新乡建材 | 鹤壁建材 | 安阳建材 | 平顶山建材 | 洛阳建材 | 开封建材 | 武汉建材 | 神农架建材 | 天门建材 |
建材 | 720全景 | 企业之家 | 移动社区 | 关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图 | 排名推广 | 广告服务 | 积分换礼 | RSS订阅 | sitemap |
(c)2015-2017 BO-YI.COM SYSTEM All Rights Reserved
Powered by 模具头条