ObjectArx中创建直线函数
AcDbLine(const AcGePoint3d& start, const AcGePoint3d& end) //起始点与结束点
如何创建直线
1 AcDbObjectId CCreateEnt::CreateLine() 2 { 3 AcGePoint3d ptStart(0,0,0); //创建初始点ptStart 4 AcGePoint3d ptEnd(100,100,0); //创建结束点ptEnd 5 AcDbLine *pLine = new AcDbLine(ptStart,ptEnd); //根据ptStart与ptEnd构建直线 6 7 AcDbBlockTable *pBlockTable; //声明块表指针pBlockTable 8 acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,AcDb::kForRead); //以只读获取当前数据库的块表,并赋给pBlockTable 9 10 AcDbBlockTableRecord *pBlockTableRecord; //声明块表记录指针pBlockTableRecord 11 pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite); //以写的方式获取当前模型空间 12 13 AcDbObjectId lineId; //声明直线的ObjectId 14 pBlockTableRecord->appendAcDbEntity(lineId,pLine); //添加该直线到模型空间 15 16 pBlockTable->close(); //关闭块表 17 pBlockTableRecord->close(); //关闭模型空间块记录 18 pLine->close(); //关闭直线 19 20 return lineId; 21 22 }
步骤:
(1) 创建直线。
(2) 只读方式获取当前数据库的块表。
(3) 根据块表,以写方式获取代表模型空间的块记录。
(4) 添加直线到到块记录。
(5) 关闭块表,关闭块记录,关闭直线
说明:
(1) getBlockTable,getAt,AppendDbEntity函数返回操作的结果,如果成功会返回Acad::eOk。
(2) 打开方式有3种,AcDb::kForRead以读方式打开,AcDb::kForWrite以写的方式打开,AcDb::kForNotify以通知的方式打开。
(3) 宏ACDB_MODEL_SPACE代表模型空间,ACDB_PAPER_SPACE代表图纸空间。
(4) 操作完毕后,需要关闭对象,不要使用delete。