- 积分
- 3252
- 明经币
- 个
- 注册时间
- 2001-6-11
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2003-4-22 15:01:00
|
显示全部楼层
->
if ((es = pBlockTbl->getAt(ACDB_MODEL_SPACE, pMS, AcDb::kForWrite))! =Acad::eOk) // (一)
AcDbBlockTableRecordIterator* pBtrIter; //(二)
if ((es = pMS->newIterator(pBtrIter)) != Acad::eOk)//(三)
for (pBtrIter->start(); !pBtrIter->done(); pBtrIter->step())//(四)
if (pEnt->isA() != AcDbBlockReference::desc())//(五)
blockId = (AcDbBlockReference::cast(pEnt))->blockTableRecord();//(六)
if (acdbOpenObject((AcDbObject*&)pCurEntBlock, blockId, AcDb::kForRead) == Acad::eOk) //(七)
/////////////////////////////////////
我不是很清楚的地方(一下标题对应代码中的标记)
(一)句是将ACDB_MODEL_SPACE模型空间的块表记录传递给块表指针pMS吧
(-> YES)
(二)句对于AcDbBlockTableRecordIterator*指针我不理解它的作用
(-> 遍历指针,在本例中,指向PMs的所有的记录)
(三)句newIterator函数的作用不清楚
(-> 创建遍历器指针)
(四)句for (pBtrIter->start(); !pBtrIter->done(); pBtrIter->step())
是在一个什么里面不断的找下一个记录??
(-> 在遍历指针里一个一个的指向具体记录)
(五)句pEnt->isA() 的作用是判断pEnt是否是一个实体?
AcDbBlockReference::desc())是什么意思呢?
(->isA()返回类标识,AcDbBlockReference::desc()返回 AcDbBlockReference 这个类的类标识)
(六)句我非常不明白AcDbBlockReference::cast(pEnt)是什么意思
(强制类型转换)
blockTableRecord()函数又是什么作用?
通过实体得到id? (yes)
(七)句 AcDbObject*& ——*&好玄妙--就是不懂
通过id得到块表记录pCurEntBlock?(yes)
(AcDbObject*表示将要打开的实体的类别,&是告诉你这个函数会给你分配内存,用完后要尽早close掉,)
============================================
===========================================
建议1)你对于C或C++还有些陌生,有空的时候(比如坐车时或睡觉前)多看一俩本C\C++的书
(2)Arx的东西在其在线帮助中都有说明,自己去看 |
|