基于ObjectArx的AutoCAD二次开发

  • 简介
    • 1、创建直线
    • 2、修改图形对象的属性(修改线段颜色)
    • 3、用类组织函数来修改图形对象的属性

简介

AutoCAD版本:2008
对应的OBjectArx版本:ObjectArx 2008
开发语言:C++
学习工具:AutoCAD ObjectARX(VC)开发基础与实例教程 —— 张帆

1、创建直线

打开vs2008,用向导创建一个名为“CreateLine的项目“

在acrxEntryPoint.cpp文件中,找到自己刚刚创建的函数,在里面直接添加如下代码:

static void CHAP2CreatLine(void){// Add your code for command CHAP2.CreatLine here// 在内存上创建一个新的AcDbLine对象AcGePoint3d ptStart(0, 0, 0); AcGePoint3d ptEnd(100, 100, 0); AcDbLine *pLine = new AcDbLine(ptStart, ptEnd); // 获得指向块表的指针AcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead); // 获得指向特定的块表记录(模型空间)的指针AcDbBlockTableRecord *pBlockTableRecord; pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite); // 将AcDbLine类的对象添加到块表记录中AcDbObjectId lineId; pBlockTableRecord->appendAcDbEntity(lineId, pLine); //该语句用来修改线段颜色//pLine->setColorIndex(1);// 关闭图形数据库的各种对象pBlockTable->close(); pBlockTableRecord->close();pLine->close();}

编译应用程序之后,在AutoCAD 2008中加载并运行程序中注册的命令,可看到一条起点为(0,0,0),终点为(100,100,0)的线段

2、修改图形对象的属性(修改线段颜色)

1、用向导创建一个名为“ModifyEnt.cpp”的项目,我们既然要修改线段颜色,那么首先要创建一个线段(CreateLine),其次是修改线段颜色(ChangeColor)。注册两个命令,一个用来创建线段,一个用来修改线段。

在ModifyEnt.cpp文件中添加如下代码:

//创建线段函数
AcDbObjectId CreateLine()
{ AcGePoint3d ptStart(0, 0, 0);AcGePoint3d ptEnd(100, 100, 0);AcDbLine *pLine = new AcDbLine(ptStart, ptEnd); AcDbBlockTable *pBlockTable;acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead);AcDbBlockTableRecord *pBlockTableRecord;pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite); AcDbObjectId lineId;pBlockTableRecord->appendAcDbEntity(lineId, pLine);pBlockTable->close();pBlockTableRecord->close(); pLine->close();return lineId;
}
//修改线段颜色函数
Acad::ErrorStatus ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex)
{ AcDbEntity *pEntity;// 打开图形数据库中的对象acdbOpenObject(pEntity, entId, AcDb::kForWrite);// 修改实体的颜pEntity->setColorIndex(colorIndex);//用完之后及时关闭pEntity->close(); return Acad::eOk;
}

然后在acrxEntryPoint.cpp文件中,找到自己刚刚创建的函数,添加如下代码:

static void WDDChangeColor(void){//函数需要声明AcDbObjectId CreateLine() ;Acad::ErrorStatus ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex) ;// Add your code for command WDD.ChangeColor here//创建直线AcDbObjectId lineId;lineId = CreateLine();//修改直线颜色                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ChangeColor(lineId,4);}
} ;

需要注意的一点:在acrxEntryPoint.cpp文件中调用ModifyEnt.cpp中的CreateLine函数和ChangeColor函数的时候需要声明一下,否则会报错误 “error C3861: “CreateLine”: 找不到标识符”、“error C3861: “ChangeColor”: 找不到标识符” 这样的错误。

3、用类组织函数来修改图形对象的属性

新建一个名为“CreateEnts”的项目,新建一个包含了创建实体函数的新类CCreateEnt1,CreateLine作为其成员函数。新建一个包含修改实体函数的类 CMofifyEnt, ChangeColor 作为其成员函数。主要在以下几个文件中添加代码,如下图所示:
在CreateEnt.h文件中添加以下代码:

#include "stdafx.h"
#pragma onceclass CCreateEnt
{public://只有下面这一句代码是自己添加的,其余代码都是向导自动生成的static AcDbObjectId CreateLine(); //函数声明CCreateEnt(void);~CCreateEnt(void);
};

在ModifyEnt.h文件中添加以下代码:

#include "stdafx.h"
#pragma onceclass CModifyEnt
{public:
只有下面这一句代码是自己添加的,其余代码都是向导自动生成的static Acad::ErrorStatus ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex); //函数声明CModifyEnt(void);~CModifyEnt(void);
};

在CreateEnt1.cpp添加如下代码:

#include "StdAfx.h"
#include "CreateEnt.h"
//类构造函数,向导自动生成
CCreateEnt::CCreateEnt(void)
{}
//类析构函数,向导自动生成
CCreateEnt::~CCreateEnt(void)
{}
//*******************需要自己添加的代码,此为创建线段函数*******************
AcDbObjectId CCreateEnt::CreateLine() // 函数实现
{ AcGePoint3d ptStart(0, 0, 0);AcGePoint3d ptEnd(100, 100, 0);AcDbLine *pLine = new AcDbLine(ptStart, ptEnd); AcDbBlockTable *pBlockTable;acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead);AcDbBlockTableRecord *pBlockTableRecord;pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite); AcDbObjectId lineId;pBlockTableRecord->appendAcDbEntity(lineId, pLine);pBlockTable->close();pBlockTableRecord->close(); pLine->close();return lineId;
}

在ModifyEnt.cpp添加如下代码:

#include "StdAfx.h"
#include "ModifyEnt.h"
//ModifyEnt类的构造函数,向导自动生成
CModifyEnt::CModifyEnt(void)
{}
//ModifyEnt类的析构造函数,向导自动生成
CModifyEnt::~CModifyEnt(void)
{}
//****************需要自己添加的函数,此为修改线段颜色函数**********************
Acad::ErrorStatus CModifyEnt::ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex)
{ AcDbEntity *pEntity;// 打开图形数据库中的对象acdbOpenObject(pEntity, entId, AcDb::kForWrite);// 修改实体的颜pEntity->setColorIndex(colorIndex);//用完之后及时关闭pEntity->close(); return Acad::eOk;
}

最后在acrxEntryPoint.cpp文件中添加如下代码:

//这两个头文件向导自动生成
#include "StdAfx.h"
#include "resource.h"
//这两个头文件需要自己手动加上
#include "CreateEnt.h"
#include "ModifyEnt.h"
#define szRDS _RXST("WDD")
//向导自动生成的代码,为了减少篇幅,生成的注释都被我删掉了
class CCreateEntsApp : public AcRxArxApp {public:CCreateEntsApp () : AcRxArxApp () {}virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) {AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ;return (retCode) ;}virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) {AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ;return (retCode) ;}virtual void RegisterServerComponents () {}//**************************需要自己添加的代码*************************static void WDDAChangeColor(void){AcDbObjectId lineId; lineId = CCreateEnt::CreateLine(); CModifyEnt::ChangeColor(lineId, 4);}
} ;
//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(CCreateEntsApp)
ACED_ARXCOMMAND_ENTRY_AUTO(CCreateEntsApp, WDD, AChangeColor, ACC, ACRX_CMD_TRANSPARENT, NULL)

基于ObjectArx的AutoCAD二次开发的基础入门相关推荐

  1. 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    龙源期刊网 http://www.qikan.com.cn 基于 AutoLisp 的 AutoCAD 二次开发自动 生成系统图 作者:郎建山 金江 来源:<科技视界> 2013 年第 2 ...

  2. CAD自控lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图

    基于 AutoLisp 的 AutoCAD 二次开发自动生成系统图 [摘 要]本文主要阐述了应用 autolisp 语言二次开发 autocad 自动生成系统图的实现方案. [关键词] autocad ...

  3. cass二次开发vba和lisp_基于VBA的AutoCAD二次开发及应用实例

    1引言本文引用地址:http://www.eepw.com.cn/article/190993.htm AutOCAD2005是AutOdesk公司的系列产品,该软件从其使用和设计思路上都秉承了工程制 ...

  4. 基于C#进行AutoCAD二次开发初探(二)——C#编写代码直接打开AutoCAD并显示图形

    AutoCAD 2006 Type Library   //我用的是CAD2006版 AutoCAD/ObiectDBX Common 16.0 Type Library 把这两个引用的命名空间引进来 ...

  5. 基于C#的AutoCAD二次开发之块操作

    基于C#的AutoCAD二次开发之块操作 什么是块? 块由多个在逻辑上相关的图形对象所定义的整体. 块的优点有哪些 统一作业标准.提高作业效率 压缩图形文件 便于修改和维护 块的分类 块的分类 简单块 ...

  6. 基于C#的AutoCAD二次开发之获取用户输入信息、选择集、访问CAD内部命令

    基于C#的AutoCAD二次开发之获取用户输入信息.选择集.访问CAD内部命令 在CAD创建图形对象时,经常需要和用户进行交互,例如:直线创建时需要用户输入起点和终点(或长度)信息,复制对象时需要指定 ...

  7. lisp二次开发 微盘_基于AutoLISP的AutoCAD二次开发研究_郭秀娟.pdf

    2008 年 12 月 Journal of Jilin Architectural and Civil Engineering Institute Dec.2008 基于 AutoLISP 的 Au ...

  8. 基于C#进行AutoCAD二次开发初探(一)——调用dll库

    自己是测绘行业,不可避免要跟CAD打交道.因为之前用C#写了一个小软件,希望能够自动调用CAD画等高线,所以想基于C#进行Autocad的二次开发.但自己在此方面真的是零基础菜鸟一只.搜了大量的资料, ...

  9. 光伏自动化出图系统 基于C#的AutoCad二次开发

    CAD计算机软件的开发及应用,是工程公司提高设计工作效率,工程设计质量的重要手段.在光伏发电工程设计的过程中,需要进行一系列工程计算.目前在设计中设计的计算包括:高度角计算,最佳倾角计算,光伏阵列布置 ...

  10. SolidWorks二次开发零基础入门(1)

    什么是SolidWorks二次开发:使用SolidWorks的应用程序编程接口(Application Programming Interface (API)).对SolidWorks功能进行定制修改 ...

最新文章

  1. 吴裕雄--天生自然 JAVASCRIPT开发学习:(String) 对象
  2. kubernetes的Service Account
  3. 2017年安防监控中的那些核心云计算技术
  4. [NOI2004]郁闷的出纳员
  5. 计算机考研我该如何准备,计算机考研该如何准备呢-考研初试
  6. 剪绳子python_Python剪绳子如何实现 Python剪绳子实现代码
  7. 树莓派python教程_两个简易的树莓派初学者Python程序
  8. Oracle SQL脚本学习记录一
  9. qq动态页面变方格_腾讯QQ音乐9.7.5正式版更新:「歌手主页个人主页」界面全新改版...
  10. 信息熵(Information Entropy)
  11. ssh 远程连接详解--(linux运维09)
  12. 李炎恢PHP高端培训视频教程
  13. UT000020: Connection terminated as request was larger than 10485760
  14. 科技巨头们在SaaS市场“雷声大雨点小”背后的症结
  15. java8中的Stream用法详解
  16. 产品经理--用户研究
  17. 空间变形网络——STN
  18. 周鸿袆:给程序员忠言逆耳的几条建议
  19. JXTA的安装和使用
  20. 初探使用iOS 7 Sprite Kit与Cocos2d开发游戏的对比(一家之言)

热门文章

  1. 时间管理四象限法则该如何理解
  2. 香港房地产业发展历程、现状、问题及对策探究
  3. 数学分析教程(科大)——6.4笔记+习题
  4. android rmvb格式下载,rmvb移动播放器,rmvb播放器Android版本下载
  5. RBAC权限系统设计
  6. 把你的桌面变成vista
  7. 仓库管理软件中的账套是什么意思
  8. 计算机网络的现状分析,计算机网络技术的发展现状和趋势分析.doc
  9. 基于机器学习的文本情感分类
  10. 做在线交易你必须知道的关于支付的知识