获取选择面的所有边
时间: 2023-08-04 12:04:30 浏览: 148
可以使用以下代码来获取选择集中面的所有边:
```
AcDbObjectIdArray objIds;
acedSSGet(NULL, NULL, NULL, NULL, objIds);
AcDbObjectIdArray edgeIds;
for (int i = 0; i < objIds.length(); i++) {
AcDbEntity *pEnt;
acdbOpenAcDbEntity(pEnt, objIds[i], AcDb::kForRead);
AcDb3dSolid *pSolid = AcDb3dSolid::cast(pEnt);
if (pSolid) {
AcGeIntArray faceIndices;
pSolid->getShellFaceIndices(0, faceIndices);
for (int j = 0; j < faceIndices.length(); j++) {
AcDbIntArray edgeIndices;
pSolid->getFaceEdgeIndices(faceIndices[j], edgeIndices);
for (int k = 0; k < edgeIndices.length(); k++) {
AcDbObjectId edgeId;
pSolid->getEdgeAt(edgeIndices[k], edgeId);
edgeIds.append(edgeId);
}
}
}
pEnt->close();
}
```
其中,`objIds`是选择集中的对象ID数组,`edgeIds`是获取到的边的ID数组。这段代码会先遍历选择集中的对象,如果是3D实体,则获取其所有面的索引,再逐个获取每个面的所有边的索引,最后通过索引获取到每个边的ID并添加到`edgeIds`中。