我不确定何时需要打开实体进行读取,何时可以省略。例如,我知道我在想使用时不需要打开实体,objectId()
但是之前有一些方法需要打开实体。不知道有没有必要先AcDbPolyline
开getArcSegAt()
。在许多情况下,我可以简单地尝试在方法打开之前使用它,我会得到我想要的或不想要的。但也许有一些简单的规则?
例子:
AcDbObjectId id = somethingNotImportant();
AcDbPolyline* _pPoly = NULL;
if (id.isValid())
{
AcDbEntity* pEnt = NULL;
Acad::ErrorStatus es;
es = acdbOpenObject(pEnt, id, AcDb::kForRead);
if( es == Acad::eOk)
{
if(pEnt->isKindOf(AcDbPolyline::desc()))
{
this->_pPoly = AcDbPolyline::cast(pEnt);
}
es = pEnt->close();
}
}
now_pPoly
已初始化,但由于pEnt->close();
现在我想关闭它,例如使用:
AcGePoint3d Px = initializedSomehow();
double distAtPx = 0;
_pPoly->getDistAtPoint(Px , distAtPx);
我需要:
es = acdbOpenObject(_pPoly, id, AcDb::kForRead);
前:
_pPoly->getDistAtPoint(Px , distAtPx);