オープンエンティティがいつ読み込みが必要なのか、省略可能なのか分かりません。 たとえば、objectId()
を使用したいときにエンティティを開く必要はありませんが、以前にエンティティを開く必要があるいくつかの方法があります。 getArcSegAt()
の前にAcDbPolyline
を開く必要があるかどうかわかりません。多くの場合、私はそれが開かれる前に簡単にメソッドを使用しようとすることができます私は私が欲しいものを得るかどうかを取得します。しかし、おそらくそれのためのいくつかの簡単なルールがありますか?AutoCAD C++ AcDbEntityを読み込み用に開く必要がある場合は、
例:
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
がinitiallizedされるが、それは私が例で使用するために必要になりましたので、のpEnt->close();
を閉じている:
es = acdbOpenObject(_pPoly, id, AcDb::kForRead);
:
AcGePoint3d Px = initializedSomehow();
double distAtPx = 0;
_pPoly->getDistAtPoint(Px , distAtPx);
は私がする必要がありますか
前:
_pPoly->getDistAtPoint(Px , distAtPx);
"開封前に使用する"という意味ははっきりしていません... C++ポインタをインスタンス化するためにIDでopenを呼び出す必要があるため、エンティティを開きます。私は本当に必要な場合を除いて(これはより多くのリソースを消費するので)書き込みを避けることを提案します。 –
対応するDB常駐エンティティを開かずにAcDbPolyline *を取得した例を挙げてください。 –