오픈 엔티티를 읽을 때 필요하고 생략 할 수 있는지 확실하지 않습니다. 예를 들어 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 *을 얻었습니까? –