From 1345a1a8d8f33a6c1ff8f5b56f45f1cc7fc7676f Mon Sep 17 00:00:00 2001 From: stefan <stefan@5a81b35b-ba03-0410-adc8-b2c5c5119f08> Date: Mon, 8 Mar 2010 07:58:50 +0000 Subject: [PATCH] Fixed selection when hiding and showing views git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1783 5a81b35b-ba03-0410-adc8-b2c5c5119f08 --- modules/gfx/src/entity.cc | 6 +++--- modules/gfx/src/impl/entity_renderer.cc | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/modules/gfx/src/entity.cc b/modules/gfx/src/entity.cc index 27ebbe957..ebc216065 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 5ba60e936..c28dbf892 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_; -- GitLab