From 7c8e05467d9b2ab46e33404f2720ad782912378f Mon Sep 17 00:00:00 2001
From: Ansgar Philippsen <ansgar.philippsen@gmail.com>
Date: Tue, 11 Jan 2011 18:00:33 -0500
Subject: [PATCH] fixed missing position updates for backbone trace based
 renderings

---
 modules/gfx/src/impl/backbone_trace.cc      | 13 ++++++++++++-
 modules/gfx/src/impl/backbone_trace.hh      |  3 +++
 modules/gfx/src/impl/trace_renderer_base.cc |  6 ++++++
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/modules/gfx/src/impl/backbone_trace.cc b/modules/gfx/src/impl/backbone_trace.cc
index 235ad226b..11463588d 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 debcc54b5..4151121f2 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 74317a473..91b681cc6 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()
-- 
GitLab