diff --git a/modules/gfx/src/entity.cc b/modules/gfx/src/entity.cc index 27ebbe9573320e2588242a226b262a9a93b7225c..ebc216065cfa0393512efcc1ad985e3e01f64d7f 100644 --- a/modules/gfx/src/entity.cc +++ b/modules/gfx/src/entity.cc @@ -559,7 +559,7 @@ void Entity::OnRenderModeChange() r->AddView(this->GetView()); for (RendererMap::iterator i=renderer_.begin(), e=renderer_.end(); i!=e; ++i) { - mol::EntityView rv=i->second->GetEffectiveView(); + mol::EntityView rv=i->second->GetFullView(); if (rv.IsValid() && rv.GetAtomCount()>0) { i->second->SetSelection(mol::Intersection(sel_, rv)); } @@ -625,7 +625,7 @@ void Entity::SetRenderMode(RenderMode::Type mode, if (!keep && i->first!=mode) { renderer->SubstractView(view); } - mol::EntityView rv=renderer->GetEffectiveView(); + mol::EntityView rv=renderer->GetFullView(); if (rv.IsValid()) { renderer->SetSelection(mol::Intersection(sel_, rv)); } @@ -691,7 +691,7 @@ void Entity::UpdateSelection() e=renderer_.end(); i!=e; ++i) { impl::EntityRenderer* renderer=i->second; if (renderer->HasDataToRender()) { - renderer->SetSelection(mol::Intersection(renderer->GetEffectiveView(), sel_)); + renderer->SetSelection(mol::Intersection(renderer->GetFullView(), sel_)); renderer->UpdateViews(); } } diff --git a/modules/gfx/src/impl/entity_renderer.cc b/modules/gfx/src/impl/entity_renderer.cc index 5ba60e93619a10b8bf17fb9a2e8ac3df817a1020..c28dbf892d81b622a7c8470e7975a5cc99f79880 100644 --- a/modules/gfx/src/impl/entity_renderer.cc +++ b/modules/gfx/src/impl/entity_renderer.cc @@ -153,9 +153,11 @@ bool EntityRenderer::HasSelection() const void EntityRenderer::SetSelection(const mol::EntityView& sel) { - full_sel_=sel; - sel_=full_sel_; - sel_state_=DIRTY_VIEW|DIRTY_VA; + if(sel.IsValid()){ + full_sel_=sel; + sel_=(hidden_view_.IsValid())? mol::Difference(full_sel_,hidden_view_) : full_sel_; + sel_state_=DIRTY_VIEW|DIRTY_VA; + } } void EntityRenderer::SetVisible(const mol::EntityView& view, bool visible) @@ -169,7 +171,7 @@ void EntityRenderer::SetVisible(const mol::EntityView& view, bool visible) hidden_view_=hidden_view_.IsValid() ? Union(hidden_view_, view) : view.Copy(); } - sel_=(full_sel_.IsValid()&& hidden_view_.IsValid())? mol::Difference(full_sel_,hidden_view_) : sel_; + sel_= hidden_view_.IsValid() ? mol::Difference(full_sel_,hidden_view_) : sel_; if(full_view_.IsValid()){ effective_view_=hidden_view_.IsValid() ? mol::Difference(full_view_,hidden_view_): full_view_;