三、ObjectARX 创建一条直线
2015-11-10 16:40
549 查看
使用ObjectARX 在vs2008中创建一条直线:
主要过程如下
思路
首先来看看,在
AutoCAD 中,使用 LINE
命令创建一条直线,需要哪些东西:
命令: _line
指定第一点: 0,0
指定下一点或 [放弃(U)]: 100,100
指定下一点或 [放弃(U)]:
从上面的命令提示可以看出,创建一条直线,需要用户指定起点和终点。
在继续之前,必须给大家介绍一点数据库最基础的几个名词:
表:表是数据库的组成单位,一个数据库至少包含一个表。
记录:记录是表的组成单位,一个表可能包含多条记录,也可能不包含任何记录。
图2.1用来描述AutoCAD数据库的基本结构再好不过了。从图中来看,实体包含在块表记
录中,因此要创建一个图形对象,需要遵循下面的基本步骤:
( 1)确定要创建对象的图形数据库;
( 2)获得图形数据库的块表;
( 3)获得一个存储实体的块表记录,所有模型空间的实体都存储在模型空间的特定记
录中。
第
2 章 创建和编辑基本图形对象
( 4)创建实体类的一个对象,将该对象附加到特定的块表记录中。
2、利用向导新建一ObjectARX项目。
图片过程如上如所示。
3完整的代码片段
static void CHAP2CreateLine(void)
{
// Add your code for command CHAP2.CreateLine here
AcGePoint3d ptStart(0,0,0);//创建一个3d空间的点
AcGePoint3d ptEnd(100,100,0);
AcDbLine *pLine = new AcDbLine(ptStart,ptEnd);//这个类代表了CAD里面的线实体,起始点终结点
//获取指向块表的指针
AcDbBlockTable *pBlockTable;//声明只想块表的指针
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);//获取快编织针
//acdbHostApplicationServices()->workingDataBase()->getBlockTable(pBlockTable,AcDb::kForRead);//
AcDbBlockTableRecord *pBlockTableRecord;//声明一个块表记录区的指针
pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);//将空间模型区域的记录地址赋给上声明的变量 模式为写
AcDbObjectId lineld;//声明ID
pBlockTableRecord->appendAcDbEntity(lineld,pLine);//将ID与实体传入
新建命令之后在命令函数的里面添加代码如上。
可能会有错误提示:
编译错误的提示为:
AcDbLine 是一个未定义的标识符。已经知道了
AcDbLine 是ObjectARX
中的一个类,那么就要找到其定义的位置,将其所在的头文件包含到当前文件中来。如何确定
AcDbLine 类需要包含哪个头文件呢?打开ObjectARX帮助文档中的ObjectARX Reference,转到【索引】选项卡,在文本框中输入AcDbLine
即可找到头文件
添加即可
主要过程如下
思路
首先来看看,在
AutoCAD 中,使用 LINE
命令创建一条直线,需要哪些东西:
命令: _line
指定第一点: 0,0
指定下一点或 [放弃(U)]: 100,100
指定下一点或 [放弃(U)]:
从上面的命令提示可以看出,创建一条直线,需要用户指定起点和终点。
在继续之前,必须给大家介绍一点数据库最基础的几个名词:
表:表是数据库的组成单位,一个数据库至少包含一个表。
记录:记录是表的组成单位,一个表可能包含多条记录,也可能不包含任何记录。
图2.1用来描述AutoCAD数据库的基本结构再好不过了。从图中来看,实体包含在块表记
录中,因此要创建一个图形对象,需要遵循下面的基本步骤:
( 1)确定要创建对象的图形数据库;
( 2)获得图形数据库的块表;
( 3)获得一个存储实体的块表记录,所有模型空间的实体都存储在模型空间的特定记
录中。
第
2 章 创建和编辑基本图形对象
( 4)创建实体类的一个对象,将该对象附加到特定的块表记录中。
2、利用向导新建一ObjectARX项目。
图片过程如上如所示。
3完整的代码片段
static void CHAP2CreateLine(void)
{
// Add your code for command CHAP2.CreateLine here
AcGePoint3d ptStart(0,0,0);//创建一个3d空间的点
AcGePoint3d ptEnd(100,100,0);
AcDbLine *pLine = new AcDbLine(ptStart,ptEnd);//这个类代表了CAD里面的线实体,起始点终结点
//获取指向块表的指针
AcDbBlockTable *pBlockTable;//声明只想块表的指针
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead);//获取快编织针
//acdbHostApplicationServices()->workingDataBase()->getBlockTable(pBlockTable,AcDb::kForRead);//
AcDbBlockTableRecord *pBlockTableRecord;//声明一个块表记录区的指针
pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);//将空间模型区域的记录地址赋给上声明的变量 模式为写
AcDbObjectId lineld;//声明ID
pBlockTableRecord->appendAcDbEntity(lineld,pLine);//将ID与实体传入
//关闭所有这个很关键 用到了什么就要吧所有的都关闭不然会出现问题。 pBlockTable->close(); pBlockTableRecord->close(); pLine->close(); }
新建命令之后在命令函数的里面添加代码如上。
可能会有错误提示:
编译错误的提示为:
AcDbLine 是一个未定义的标识符。已经知道了
AcDbLine 是ObjectARX
中的一个类,那么就要找到其定义的位置,将其所在的头文件包含到当前文件中来。如何确定
AcDbLine 类需要包含哪个头文件呢?打开ObjectARX帮助文档中的ObjectARX Reference,转到【索引】选项卡,在文本框中输入AcDbLine
即可找到头文件
添加即可
相关文章推荐
- Visual Studio 2008 安装失败(“Web 创作组件”无法安装)的解决办法
- 你选对autocad了吗?
- ObjectARX 开发
- AutoCAD打印预览时显示空白
- ObjectARX给CAD发送命令的几种方法
- CAD Import .NET支持AutoCAD DWG 2013
- 开篇:AutoCAD ObjectARX 之三金开发 -- 介绍
- ObjectARX 二次开发之准备 - AutoCAD2014
- mfc中指定文件打不开的问题
- VS2008中关于“加载安装组件时遇到问题。取消安装”的解决
- 文件操作 课程成绩平均分统计并排名
- 图书馆管理系统 C语言实现
- c++画图程序 流体的实现
- 求500到800的所有素数 c语言
- 复数+ - *操作的实现 c语言
- 多种排序算法性能分析代码 C++
- C# autocad二次开发,netload命令异常System.NotSupportedException
- ObjectARX向导安装路径问题及解决方案
- ObjectARX解压包内各文件代表什么?
- Autocad 2015如何激活成功