読み取り用にエンティティを開く必要がある場合と、省略できる場合があるかどうかはわかりません。たとえば、使用したいときにエンティティを開く必要がないことはわかっています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();
}
}
今_pPoly
は初期化されていますがpEnt->close();
、たとえば次のように使用したいため、閉じられています。
AcGePoint3d Px = initializedSomehow();
double distAtPx = 0;
_pPoly->getDistAtPoint(Px , distAtPx);
する必要がありますか :
es = acdbOpenObject(_pPoly, id, AcDb::kForRead);
前:
_pPoly->getDistAtPoint(Px , distAtPx);