diff --git a/modules/gfx/src/impl/backbone_trace.cc b/modules/gfx/src/impl/backbone_trace.cc index 235ad226b232465e037342333493de62063343b9..11463588dff62950ce5d87494a71b41e58eb159e 100644 --- a/modules/gfx/src/impl/backbone_trace.cc +++ b/modules/gfx/src/impl/backbone_trace.cc @@ -83,7 +83,7 @@ public: NodeEntry entry={ca, GfxObj::Ele2Color(ca.GetElement()), GfxObj::Ele2Color(ca.GetElement()), geom::Vec3(), // this will be set by the gfx trace obj - geom::Normalize(res.GetCentralNormal()), + res.GetCentralNormal(), 1.0, geom::Vec3(),geom::Vec3(),geom::Vec3(), // for later use in NA rendering false,id_counter_++}; @@ -149,6 +149,17 @@ void BackboneTrace::Rebuild() } } +void BackboneTrace::OnUpdatedPositions() +{ + for(NodeEntryListList::iterator nitnit=node_list_list_.begin();nitnit!=node_list_list_.end();++nitnit) { + NodeEntryList& nlist=*nitnit; + for(NodeEntryList::iterator nit=nlist.begin();nit!=nlist.end();++nit) { + nit->normal=nit->atom.GetResidue().GetCentralNormal(); + } + PrepList(nlist); + } +} + void BackboneTrace::AddNodeEntryList(const NodeEntryList& l) { if(l.size()>=3) { diff --git a/modules/gfx/src/impl/backbone_trace.hh b/modules/gfx/src/impl/backbone_trace.hh index debcc54b59b653e5370f3dbe581d46fd3fac87b6..4151121f27659297ad3d0523fcd10a99385afacc 100644 --- a/modules/gfx/src/impl/backbone_trace.hh +++ b/modules/gfx/src/impl/backbone_trace.hh @@ -65,6 +65,9 @@ public: // re-creates internal nodelist-list based on view void Rebuild(); + + // entity has new positions + void OnUpdatedPositions(); // extract portions of this backbone trace for a subview // this is faster then re-generating a trace diff --git a/modules/gfx/src/impl/trace_renderer_base.cc b/modules/gfx/src/impl/trace_renderer_base.cc index 74317a47386708779b383e034ce1cce523eee845..91b681cc6ca560048bff7ec5738f14ab8ad7a0f6 100644 --- a/modules/gfx/src/impl/trace_renderer_base.cc +++ b/modules/gfx/src/impl/trace_renderer_base.cc @@ -79,6 +79,12 @@ TraceRendererBase::TraceRendererBase(BackboneTrace* trace, int n): void TraceRendererBase::PrepareRendering() { + if (state_ & DIRTY_VA) { + trace_->OnUpdatedPositions(); + trace_subset_.OnUpdatedPositions(); + if(this->HasSelection()) sel_subset_.OnUpdatedPositions(); + // don't clear DIRTY_VA flag - derived classed may depend on it + } } void TraceRendererBase::UpdateViews()