XGUI_Displayer* aDisplayer = myWorkshop->displayer();
for (aContext->InitDetected(); aContext->MoreDetected(); aContext->NextDetected()) {
Handle(SelectMgr_EntityOwner) anOwner = aContext->DetectedOwner();
- try {
- // It is checking of existence of presentation object
- // BUG of OCCT
- Handle(AIS_InteractiveObject) aTest = aContext->DetectedInteractive();
- } catch (...) {
- continue;
- }
if (!anOwner.IsNull()) {
if (aSelectedIds.contains((long)anOwner.get()))
continue;
fillPresentation(aPrs, anOwner);
aPresentations.push_back(aPrs);
}
- else { // TODO: check why the entity owner is null here, case is selection point on a line
- Handle(AIS_InteractiveObject) anIO = aContext->DetectedInteractive();
- ModuleBase_ViewerPrsPtr aPrs(new ModuleBase_ViewerPrs());
- aPrs->setInteractive(anIO);
-
- ObjectPtr aResult = aDisplayer->getObject(anIO);
- // we should not check the appearance of this feature because there can be some selected
- // shapes for one feature
- aPrs->setObject(aResult);
- TopoDS_Shape aShape = aContext->DetectedShape();
- if (!aShape.IsNull()) {
- std::shared_ptr<GeomAPI_Shape> aGeomShape =
- std::shared_ptr<GeomAPI_Shape>(new GeomAPI_Shape());
- aGeomShape->setImpl(new TopoDS_Shape(aShape));
- aPrs->setShape(aGeomShape);
- }
- aPresentations.push_back(aPrs);
- }
}
return aPresentations;
}