From acd13c3d0d1458513228b3bcba48dd66f621a9f3 Mon Sep 17 00:00:00 2001
From: ansgar <ansgar@5a81b35b-ba03-0410-adc8-b2c5c5119f08>
Date: Sun, 7 Mar 2010 20:14:59 +0000
Subject: [PATCH] fixed charmm traj recognition; entity trace povray export
 added

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@1782 5a81b35b-ba03-0410-adc8-b2c5c5119f08
---
 modules/gfx/src/impl/trace_renderer.cc      | 30 +++++++++++++++++++++
 modules/gfx/src/impl/trace_renderer.hh      |  1 +
 modules/io/src/mol/entity_io_crd_handler.cc | 19 +++++++++++--
 3 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/modules/gfx/src/impl/trace_renderer.cc b/modules/gfx/src/impl/trace_renderer.cc
index 5c493d7fe..043dbb2d6 100644
--- a/modules/gfx/src/impl/trace_renderer.cc
+++ b/modules/gfx/src/impl/trace_renderer.cc
@@ -18,6 +18,7 @@
 //------------------------------------------------------------------------------
 
 #include <ost/gfx/entity.hh>
+#include <ost/gfx/povray.hh>
 
 #include "trace_renderer.hh"
 
@@ -190,6 +191,35 @@ void TraceRenderer::ConnectProfiles(VertexID prof0, VertexID prof1, int n,
   }
 }
 
+void TraceRenderer::RenderPov(PovState& pov, const std::string& name)
+{
+  pov.write_merge_or_union(name);
+
+  for (int node_list=0; node_list<trace_subset_.GetSize(); ++node_list) {
+    const NodeListSubset& nl=trace_subset_[node_list];
+
+    geom::Vec3 p0=nl[0].atom.GetPos();
+    float rad0=0.2;
+    Color col0=nl[0].color1;
+    pov.write_sphere(p0,rad0,col0,name);
+    for (int i=1; i<nl.GetSize();++i) {
+      const NodeEntry& entry=nl[i];
+      geom::Vec3 p1=nl[i].atom.GetPos();
+      float rad1=0.2;
+      Color col1=nl[i].color1;
+      pov.write_sphere(p1,rad1,col1,name);
+      geom::Vec3 pm=(p0+p1)*0.5;
+      pov.write_cyl(p0,pm,rad0,col0,name,true);
+      pov.write_cyl(pm,p1,rad1,col1,name,true);
+      p0=p1;
+      rad0=rad1;
+      col0=col1;
+    }
+  }
+
+  pov.inc() << " }\n";
+}
+
 void TraceRenderer::Render()
 {
 
diff --git a/modules/gfx/src/impl/trace_renderer.hh b/modules/gfx/src/impl/trace_renderer.hh
index e549b8f58..77cb8d3da 100644
--- a/modules/gfx/src/impl/trace_renderer.hh
+++ b/modules/gfx/src/impl/trace_renderer.hh
@@ -43,6 +43,7 @@ public:
   virtual void PrepareRendering(TraceSubset& trace_subset, 
                                 IndexedVertexArray& va, bool is_sel);
   virtual void Render();
+  virtual void RenderPov(PovState& pov, const std::string& name);
 
   virtual bool CanSetOptions(RenderOptionsPtr& render_options);
   virtual void SetOptions(RenderOptionsPtr& render_options);
diff --git a/modules/io/src/mol/entity_io_crd_handler.cc b/modules/io/src/mol/entity_io_crd_handler.cc
index 194febcf7..7ff0dc0f2 100644
--- a/modules/io/src/mol/entity_io_crd_handler.cc
+++ b/modules/io/src/mol/entity_io_crd_handler.cc
@@ -244,12 +244,13 @@ mol::CoordGroupHandle LoadCHARMMTraj(const String& crd_fn,
 {
   Profile profile_load("LoadCHARMMTraj");
 
-  bool skip_flag = !(flags&0x1);
-  bool gap_flag = !(flags&0x2);
+  bool gap_flag = true;
 
   boost::filesystem::path crd_f(crd_fn);
   boost::filesystem::path trj_f(trj_fn);
 
+  
+
   // first the coordinate reference file
   conop::BuilderP builder = conop::Conopology::Instance().GetBuilder();  
   mol::EntityHandle ent=mol::CreateEntity();
@@ -295,6 +296,20 @@ mol::CoordGroupHandle LoadCHARMMTraj(const String& crd_fn,
     }
   }
 
+  bool skip_flag=false;
+
+  if(header.icntrl[19]!=0) { // CHARMM format
+    skip_flag=(header.icntrl[10]!=0);
+    if(skip_flag) {
+      LOGN_VERBOSE("LoadCHARMMTraj: using CHARMM format with per-frame header");
+    } else {
+      LOGN_VERBOSE("LoadCHARMMTraj: using CHARMM format");
+    }
+  } else {
+    // XPLOR format
+    LOGN_VERBOSE("LoadCHARMMTraj: using XPLOR format");
+  }
+
   if(gap_flag) ff.read(dummy,sizeof(dummy));
   ff.read(reinterpret_cast<char*>(&header.ntitle),sizeof(int));
   if(swap_flag) swap_int(&header.ntitle,1);
-- 
GitLab