diff --git a/modules/gfx/src/impl/trace_renderer.cc b/modules/gfx/src/impl/trace_renderer.cc index 5c493d7fe5a572223b044df94024229ecaf46079..043dbb2d6c50a20c5a3c1fdd4dcb2700f7567615 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 e549b8f585e79c86de74fee086a55436e53f6cdf..77cb8d3daa3d1584b45d38ea125bc03f6181a470 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 194febcf7ac48fac35c02876670e37cc0aa83e0e..7ff0dc0f282677e0aede5d7ebaac41cb175dc7e1 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);