TA的每日心情![](source/plugin/dsu_paulsign/img/emot/kx.gif) | 开心 昨天 15:23 |
---|
签到天数: 69 天 [LV.6]常住居民II
管理员
- 积分
- 2704
|
1、初始化
// 在内存上创建一个新的AcDbLine对象
AcGePoint3d ptStart(0, 0, 0);
AcGePoint3d ptEnd(100, 100, 0);
AcDbLine *pLine = new AcDbLine(ptStart, ptEnd);
注意,基于 AutoCAD 内部的实现机制,必须在堆上创建对象,而不能用下面的语句创 建直线的对象: AcDbLine line(ptStart, ptEnd);
2、建块表
// 获得指向块表的指针
AcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase()
->getBlockTable(pBlockTable, AcDb::kForRead);
acdbHostApplicationServices()->workingDatabase()能够获得一个指向当前活动的图形数 据库的指针;
getBlockTable 是 AcDbDatabase 类的一个成员函数, 用于获得指向图形数据库的块表的指针;
创建直线的时候不需 要更改块表,因此这里打开的模式为 AcDb::kForRead(AcDb::kForRead、AcDb::kForWrite 和 AcDb::kForNotify );
3、添加块表记录
// 获得指向特定的块表记录(模型空间)的指针
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
getAt 函数是 AcDbBlockTable 类的一个成员函数,用于获得块表中特定的记录,其定义 为:
Acad::ErrorStatus getAt(
const char* entryName,
AcDbBlockTableRecord*& pRec,
AcDb::OpenMode openMode,
bool openErasedRec = false) const;
第一个参数用于指定块表记录的名称,ACDB_MODEL_SPACE 是 ObjectARX 中定义的 一个常量,其内容是“*Model_Space”;第二个参数用于返回指向块表记录的指针;第三个参 数指定了块表记录打开的模式,下一步要向块表记录中添加实体,所以就用写的模式 (AcDb::kForWrite)打开;第四个参数指定是否查找已经被删除的记录;
4、向块表记录中添加实体
// 将AcDbLine类的对象添加到块表记录中
AcDbObjectId lineId;
pBlockTableRecord->appendAcDbEntity(lineId, pLine);
appendAcDbEntity 是 AcDbBlockTableRecord 类的成员函数,用于将 pEntity 指向的实体 添加到块表记录和图形数据库中,其定义为:
Acad::ErrorStatus appendAcDbEntity(
AcDbObjectId& pOutputId,
AcDbEntity* pEntity);
第一个参数返回图形数据库为添加的实体分配的 ID 号;第二个参数指定了所要添加的 实体。
5、关闭图形数据库
// 关闭图形数据库的各种对象
pBlockTable->close();
pBlockTableRecord->close();
pLine->close();
6、完整代码
void ZffCHAP2CreateLine() { // 在内存上创建一个新的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(); }
引用自:ObjectARX开发实例教程
一、准备工作:
1、VC++目录设置:工具-选项-VC++目录,添加包含文件和库文件
2、设置输出文件:将输出文件的扩展名有dll改为arx;
3、属性-常规配置:
4、属性-链接器-输入:
rxapi.lib
acdb18.lib
acge18.lib
acgiapi.lib
acISMobj18.lib
acad.lib
acedapi.lib
adui18.lib
acui18.lib |
|