1、通过AIS_InteractiveContext的函数访问当前选择的图形
hAISContext->InitSelected();
hAISContext->MoreSelected();
hAISContext->NextSelected();
hAISContext->SelectedShape();
其中hAISContext->SelectedShape()通过StdSelect_BrepOwner来获取TopoDS_Shape,具体的参看源码即可
2、示例
-
绘制一个box,并激活box的顶点、边、面的选择模式
//create box for test BRepPrimAPI_MakeBox mkBox(gp_Pnt(0, 0, 0), 10, 20, 30); TopoDS_Shape aShpae = mkBox.Shape(); Handle(AIS_Shape) hBoxShape = new AIS_Shape(aShpae); myAISContext->Display(hBoxShape, Standard_True); myAISContext->Deactivate(hBoxShape); myAISContext->Activate(hBoxShape, AIS_Shape::SelectionMode(TopAbs_FACE)); myAISContext->Activate(hBoxShape, AIS_Shape::SelectionMode(TopAbs_EDGE)); myAISContext->Activate(hBoxShape, AIS_Shape::SelectionMode(TopAbs_VERTEX));
-
选择的处理
void COCTView::OnBtnTestSelect() { auto hAISContext = GetDocument()->GetAISContext(); if (!hAISContext) { return; } for (hAISContext->InitSelected(); hAISContext->MoreSelected(); hAISContext->NextSelected()) { TopoDS_Shape aShape = hAISContext->SelectedShape(); if (aShape.IsNull()) continue; switch (aShape.ShapeType()) { case TopAbs_ShapeEnum::TopAbs_VERTEX: { TopoDS_Vertex aVertex = TopoDS::Vertex(aShape); AfxMessageBox(_T("选中一个点")); break; } case TopAbs_ShapeEnum::TopAbs_EDGE: { AfxMessageBox(_T("选中一条边")); break; } case TopAbs_ShapeEnum::TopAbs_FACE: { AfxMessageBox(_T("选中一个面")); break; } //其他略 } } }