когда-то Александр Ривилис мне в этом помог, чтоб не гонять тебя по форуму выкладываю функцию
void HatchBoundary(AcDbObjectId objId, std::vector<AcGePoint3dArray> &ptArrVect)
{
const double epx = 1e-3;
AcGePoint3dArray ptArray;
AcGeIntArray n1, n2;
AcDbObjectPointer<AcDbHatch> pHatch(objId,AcDb::kForRead);
if (pHatch.openStatus () != Acad::eOk) return;
int nLoop = pHatch->numLoops();
long loopType;
for (int i=0; i < nLoop; i++)
{
ptArray.setLogicalLength(0);n1.setLogicalLength(0);n2.setLogicalLength(0);
if (pHatch->loopTypeAt( i ) & AcDbHatch::kPolyline)
{
AcGePoint2dArray vertices;
AcGeDoubleArray bulges;
if (pHatch->getLoopAt(i,loopType,vertices,bulges) != Acad::eOk) return;
AcDbPolyline *pPoly = new AcDbPolyline(vertices.length());
pPoly->setDatabaseDefaults (pHatch->dat abase());
for (int j=0; j < vertices.length(); j++)
pPoly->addVertexAt (j,vertices[j],(bulges.length()<vertices.length()) ? 0.0:bulges[j]);
pPoly->setClosed (!(loopType & AcDbHatch::kNotClosed));
pPoly->setNormal (pHatch->normal());
pPoly->setElevation (pHatch->elevation());
pPoly->getGripPoints(ptArray,n1,n2);
ptArrVect.push_back(ptArray);
delete pPoly;
}
else
{
AcGeVoidPointerArray edgePtrs;
AcGeIntArray edgeTypes;
pHatch->getLoopAt(i, loopType,edgePtrs, edgeTypes );
AcGeCompositeCurve2d compCurve(edgePtrs);
AcGeInterval interval; compCurve.getInterval( interval );
AcGePoint2dArray vertices;
AcGeDoubleArray parms;
compCurve.getSamplePoints(interval.lowerBound(),interval.upperBound(),epx,vertices,parms);
if (vertices.length () > 0)
{
AcDbPolyline *pPoly = new AcDbPolyline(vertices.length());
pPoly->setDatabaseDefaults (pHatch->dat abase());
for (int j=0; j < vertices.length(); j++)
pPoly->addVertexAt (j,vertices[j],0.0);
pPoly->setClosed (Adesk::kTrue);
pPoly->setNormal (pHatch->normal());
pPoly->setElevation (pHatch->elevation());
pPoly->getGripPoints(ptArray,n1,n2);
ptArrVect.push_back(ptArray);
delete pPoly;
}
}
}
return;
}
значит, на вход идет ObjectId штриховки, а на выход идут наборы точек граничных контуров (один набор, если штриховка простая, несколько, если есть островки и прочая пакость.)
ну и дальше выбирай какой тебе нужен, если их несколько.
единственный минус, это дуговые сегменты, но у меня они нигде не используются :)