Gui: Prevent whole-object highlight when picked list is enabled (#26589)

* Gui: Prevent whole-object highlight when picked list is enabled

Removed the logic that forced `onTop=1` when `needPickedList()` is true
in View3DInventorSelection. This was causing the entire object to be
highlighted instead of just the selected sub-element when the "Picked
object list" option was enabled.

* Part: Remove `needPickedList` mat override to prevent rendering artifact

The `needPickedList` check in `SoBrepFaceSet` was triggering
unnecessary material override processing that caused face clipping
artifacts when the "Picked object list" option was enabled in Selection
View. This check has been removed as the picked list functionality works
independently of the rendering path.
This commit is contained in:
Kacper Donat
2026-01-02 18:09:04 +01:00
committed by GitHub
2 changed files with 3 additions and 14 deletions

View File

@@ -191,10 +191,7 @@ void View3DInventorSelection::checkGroupOnTop(const SelectionChanges& Reason)
// onTop==2 means on top only if whole object is selected,
// onTop==3 means on top only if some sub-element is selected
// onTop==1 means either
if (Gui::Selection().needPickedList()) {
onTop = 1;
}
else if (vp->OnTopWhenSelected.getValue()) {
if (vp->OnTopWhenSelected.getValue()) {
onTop = vp->OnTopWhenSelected.getValue();
}
else {

View File

@@ -854,20 +854,12 @@ bool SoBrepFaceSet::overrideMaterialBinding(SoGLRenderAction* action, SelContext
if ((mb == SoMaterialBindingElement::OVERALL
|| (mb == SoMaterialBindingElement::PER_PART && diffuse_size >= partIndex.getNum()))
&& ((ctx && Gui::Selection().needPickedList()) || trans0 != 0.0
|| (ctx2 && !ctx2->colors.empty()))) {
&& (trans0 != 0.0 || (ctx2 && !ctx2->colors.empty()))) {
state->push();
packedColors.clear();
if (ctx && Gui::Selection().needPickedList()) {
hasTransparency = true;
trans_size = 1;
if (ctx2) {
ctx2->trans0 = trans0;
}
}
else if (ctx2) {
if (ctx2) {
ctx2->trans0 = 0.0;
}