diff --git a/.gitignore b/.gitignore index da71b5ba0d26201e9fe25fde79e37d09d1d3da55..8fa0d36751913400596408757340dc5a56ca4d97 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ CMakeLists.txt.user OpenStructure.cbp DartConfiguration.tcl Testing +*~ diff --git a/examples/dokk/datafiles/hud.ini b/examples/dokk/datafiles/hud.ini index c53f99455b46c22d94147ce10bee3141032b408f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/examples/dokk/datafiles/hud.ini +++ b/examples/dokk/datafiles/hud.ini @@ -1,3 +0,0 @@ -[TEXT] -RMSD: Sie sind %.1f von der Lösung entfernt -SECONDS: noch %i Sekunden diff --git a/modules/gfx/pymod/export_entity.cc b/modules/gfx/pymod/export_entity.cc index 2df144bbc1a5bae4727d1632718d77a2993cb80c..4edf1a012ee42117f0b9167a1cea35498e56bd23 100644 --- a/modules/gfx/pymod/export_entity.cc +++ b/modules/gfx/pymod/export_entity.cc @@ -228,12 +228,22 @@ RenderOptionsPtr ent_cpk_opts(Entity* ent) return ent->GetOptions(RenderMode::CPK); } +void set_query1(Entity* e, const mol::Query& q) +{ + e->SetQuery(q); +} + +void set_query2(Entity* e, const std::string& q) +{ + e->SetQuery(mol::Query(q)); +} + } void export_Entity() { - class_<Entity, boost::shared_ptr<Entity>, bases<GfxObj>, boost::noncopyable>("Entity", init<const String&, const mol:: EntityHandle&, optional<const mol:: Query&> >()) - .def(init<const String&, RenderMode::Type, const mol::EntityHandle&, optional<const mol::Query&> >()) + class_<Entity, boost::shared_ptr<Entity>, bases<GfxObj>, boost::noncopyable>("Entity", init<const String&, const mol:: EntityHandle&, optional<const mol:: Query&, mol::QueryFlags> >()) + .def(init<const String&, RenderMode::Type, const mol::EntityHandle&, optional<const mol::Query&, mol::QueryFlags> >()) .def(init<const String&, const mol::EntityView&>()) .def(init<const String&, RenderMode::Type, const mol::EntityView&>()) .def("SetColor",ent_set_color1) @@ -252,6 +262,8 @@ void export_Entity() &Entity::SetSelection) .def("GetView", &Entity::GetView) .def("UpdateView", &Entity::UpdateView) + .def("SetQuery", set_query1) + .def("SetQuery", set_query2) .def("GetRenderModeName", &Entity::GetRenderModeName) .def("GetNotEmptyRenderModes", &Entity::GetNotEmptyRenderModes) .def("SetRenderMode", set_rm1, arg("keep")=false) diff --git a/modules/gfx/src/entity.cc b/modules/gfx/src/entity.cc index 84d0a1bb7ed1f1207f75c7dab3454c0861bc4b22..7b816f33c3752fa6a95e6b4287d2d0cbf30030de 100644 --- a/modules/gfx/src/entity.cc +++ b/modules/gfx/src/entity.cc @@ -64,9 +64,10 @@ using namespace impl; Entity::Entity(const String& name, const EntityHandle& h, - const Query& q): + const Query& q, + QueryFlags f): GfxObj(name), - qv_(q, h), + qv_(q, h, f), bbox_(geom::Vec3(), geom::Vec3()), sel_(), sel_update_(), @@ -82,9 +83,10 @@ Entity::Entity(const String& name, Entity::Entity(const String& name, RenderMode::Type m, const EntityHandle& h, - const Query& q): + const Query& q, + QueryFlags f): GfxObj(name), - qv_(q, h), + qv_(q, h, f), bbox_(geom::Vec3(), geom::Vec3()), sel_(), sel_update_(), @@ -839,6 +841,13 @@ mol::EntityView Entity::GetView() const return cached_view_; } +void Entity::SetQuery(const mol::Query& q) +{ + qv_.SetQuery(q); + update_view_=true; + Rebuild(); +} + void Entity::ColorBy(const String& prop, const Color& c1, const Color& c2, mol::Prop::Level level) diff --git a/modules/gfx/src/entity.hh b/modules/gfx/src/entity.hh index d8896375428ffec7f95e3922b073e40a532be064..e1e66cd9e9f2f7fec88ae18dd1916e8325ea2256 100644 --- a/modules/gfx/src/entity.hh +++ b/modules/gfx/src/entity.hh @@ -70,13 +70,15 @@ public: /// Rebuild() will re-apply the mol::Query to the given mol::EntityHandle Entity(const String& name, const mol::EntityHandle& eh, - const mol::Query& q=mol::Query()); + const mol::Query& q=mol::Query(), + mol::QueryFlags f=0); /// \brief variant with explicit graphics mode instead of the default Entity(const String& name, RenderMode::Type m, const mol::EntityHandle& eh, - const mol::Query& q=mol::Query()); + const mol::Query& q=mol::Query(), + mol::QueryFlags f=0); /// \brief Initialize with an object name and an explicit mol::Entity view; /// later calls to Rebuild always use this mol::Entity view @@ -174,6 +176,7 @@ public: /// \brief get view mol::EntityView GetView() const; + void SetQuery(const mol::Query& q); // turn blur on or off void SetBlur(bool f); diff --git a/modules/gfx/src/impl/backbone_trace.cc b/modules/gfx/src/impl/backbone_trace.cc index 32fef42cde9ffb8ae17e306fe9510b934fc00b35..26f9f009caacc3b352d9f631a9aeda87931de627 100644 --- a/modules/gfx/src/impl/backbone_trace.cc +++ b/modules/gfx/src/impl/backbone_trace.cc @@ -27,6 +27,23 @@ namespace ost { namespace gfx { namespace impl { +namespace { + +bool in_sequence(const mol::ResidueHandle& r1, const mol::ResidueHandle& r2) +{ + if(!r1.IsValid() || !r2.IsValid()) return false; + if(r1.GetChain()!=r2.GetChain()) return false; + mol::ResNum n1 = r1.GetNumber(); + mol::ResNum n2 = r2.GetNumber(); + if(n2.GetInsCode()!='\0') { + if(n1.NextInsertionCode()==n2) return true; + } + if(n1.GetNum()+1==n2.GetNum()) return true; + return false; +} + +} // anon ns + class TraceBuilder: public mol::EntityVisitor { public: TraceBuilder(BackboneTrace* bb_trace): @@ -50,7 +67,9 @@ public: virtual bool VisitResidue(const mol::ResidueHandle& res) { - if(!mol::InSequence(last_residue_,res)) { + // check in-sequence + bool in_seq=in_sequence(last_residue_,res); + if(!in_seq) { if(!list_.empty()) { backbone_trace_->AddNodeEntryList(list_); list_.clear(); diff --git a/modules/gfx/src/impl/cpk_renderer.cc b/modules/gfx/src/impl/cpk_renderer.cc index f2d74a4d2fdeec173258e53211d292ef7cb7af03..47bec0384791053608b15f6b6587c955d99e89a1 100644 --- a/modules/gfx/src/impl/cpk_renderer.cc +++ b/modules/gfx/src/impl/cpk_renderer.cc @@ -86,6 +86,7 @@ void CPKRenderer::Render(RenderPass pass) void CPKRenderer::RenderPov(PovState& pov, const std::string& name) { + if(view_.atom_map.empty()) return; pov.write_merge_or_union(name); for (AtomEntryMap::const_iterator it=view_.atom_map.begin();it!=view_.atom_map.end();++it) { @@ -172,7 +173,6 @@ void CPKRenderer::Render3DSprites() glEnd(); glPopAttrib(); - glPopMatrix(); Shader::Instance().PopProgram(); Shader::Instance().UpdateState(); diff --git a/modules/gfx/src/impl/custom_renderer.cc b/modules/gfx/src/impl/custom_renderer.cc index f8303fbedd3b486e14d40ef01f3b2c8f3aa4c32c..c9e2a2319ea70f3b4c51181ec688c4c964a35da3 100644 --- a/modules/gfx/src/impl/custom_renderer.cc +++ b/modules/gfx/src/impl/custom_renderer.cc @@ -79,6 +79,7 @@ void CustomRenderer::PrepareRendering(GfxView& view, void CustomRenderer::RenderPov(PovState& pov, const std::string& name) { + if(view_.atom_map.empty() && view_.bond_list.empty()) return; pov.write_merge_or_union(name); for (AtomEntryMap::const_iterator it=view_.atom_map.begin();it!=view_.atom_map.end();++it) { diff --git a/modules/gfx/src/impl/scene_fx.cc b/modules/gfx/src/impl/scene_fx.cc index bb3012e88a84868fcd961c5ba33286dd6d0125f4..2370addb637ee8114660a7a67b046866d1d045ed 100644 --- a/modules/gfx/src/impl/scene_fx.cc +++ b/modules/gfx/src/impl/scene_fx.cc @@ -61,7 +61,6 @@ SceneFX::~SceneFX() void SceneFX::Setup() { - if(!GLEW_VERSION_2_0) return; LOGN_DEBUG("SceneFX: setup"); glGenTextures(1,&scene_tex_id_); @@ -213,7 +212,6 @@ void SceneFX::Resize(unsigned int w, unsigned int h) void SceneFX::Preprocess() { - if(!GLEW_VERSION_2_0) return; if(use_fb_) { #if GL_VERSION_3_0 glBindFramebuffer(GL_FRAMEBUFFER, scene_fb_); @@ -225,7 +223,6 @@ void SceneFX::Preprocess() void SceneFX::Postprocess() { - if(!GLEW_VERSION_2_0) return; if(use_fb_) { #if GL_VERSION_3_0 glBindFramebuffer(GL_FRAMEBUFFER, 0); @@ -354,7 +351,6 @@ void SceneFX::Postprocess() void SceneFX::DrawTex(unsigned int w, unsigned int h, GLuint texid) { - if(!GLEW_VERSION_2_0) return; Shader::Instance().PushProgram(); Shader::Instance().Activate(""); glActiveTexture(GL_TEXTURE0); diff --git a/modules/gfx/src/impl/simple_renderer.cc b/modules/gfx/src/impl/simple_renderer.cc index 983ef012d4476adf0857c3a747787dfeccb740cf..0d04e47c444ba3c6872a4611f6654f9163fb3185 100644 --- a/modules/gfx/src/impl/simple_renderer.cc +++ b/modules/gfx/src/impl/simple_renderer.cc @@ -188,6 +188,7 @@ BondEntryList& SimpleRenderer::GetBondEntryList() void SimpleRenderer::RenderPov(PovState& pov, const std::string& name) { + if(view_.atom_map.empty() && view_.bond_list.empty()) return; pov.write_merge_or_union(name); for (AtomEntryMap::const_iterator it=view_.atom_map.begin(); diff --git a/modules/gfx/src/impl/trace_renderer.cc b/modules/gfx/src/impl/trace_renderer.cc index 838a23a759996ecf97577c87077c93d0f90cc459..e0827989db551a74180065c70ae0244fca080278 100644 --- a/modules/gfx/src/impl/trace_renderer.cc +++ b/modules/gfx/src/impl/trace_renderer.cc @@ -119,6 +119,7 @@ void TraceRenderer::PrepareRendering(BackboneTrace& trace_subset, void TraceRenderer::RenderPov(PovState& pov, const std::string& name) { + if(trace_subset_.GetListCount()==0) return; pov.write_merge_or_union(name); for (int node_list=0; node_list<trace_subset_.GetListCount(); ++node_list) { diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc index 886da10c8b0abb2a1b544c3318145c42274a0281..71d4a2ad424fe3577e92d34d488005d1ecdc7dd5 100644 --- a/modules/gfx/src/scene.cc +++ b/modules/gfx/src/scene.cc @@ -126,7 +126,7 @@ Scene::Scene(): stereo_(0), stereo_inverted_(false), stereo_eye_(0), - stereo_eye_dist_(5.0), + stereo_eye_dist_(2.4), stereo_eye_off_(0.0), scene_left_tex_(), scene_right_tex_() @@ -373,10 +373,8 @@ void Scene::InitGL(bool full) #if OST_SHADER_SUPPORT_ENABLED GLint mbufs=0,msamples=0; - if(GLEW_VERSION_2_0) { - glGetIntegerv(GL_SAMPLE_BUFFERS, &mbufs); - glGetIntegerv(GL_SAMPLES, &msamples); - } + glGetIntegerv(GL_SAMPLE_BUFFERS, &mbufs); + glGetIntegerv(GL_SAMPLES, &msamples); if(mbufs>0 && msamples>0) { LOGN_VERBOSE("Scene: enabling multisampling with: " << msamples << " samples"); @@ -427,9 +425,7 @@ void Scene::InitGL(bool full) glEnable(GL_TEXTURE_2D); #if OST_SHADER_SUPPORT_ENABLED - if(GLEW_VERSION_2_0) { - glActiveTexture(GL_TEXTURE0); - } + glActiveTexture(GL_TEXTURE0); #endif glBindTexture(GL_TEXTURE_2D, scene_left_tex_); @@ -636,6 +632,7 @@ void Scene::RenderGL() } else { render_scene(); } + check_gl_error(); } void Scene::Register(GLWinBase* win) @@ -1831,9 +1828,7 @@ void Scene::render_stereo() glEnable(GL_TEXTURE_2D); #if OST_SHADER_SUPPORT_ENABLED - if(GLEW_VERSION_2_0) { - glActiveTexture(GL_TEXTURE0); - } + glActiveTexture(GL_TEXTURE0); #endif glBindTexture(GL_TEXTURE_2D, scene_left_tex_); glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, vp_width_, vp_height_, 0); @@ -1843,13 +1838,10 @@ void Scene::render_stereo() render_scene(); glEnable(GL_TEXTURE_2D); #if OST_SHADER_SUPPORT_ENABLED - if(GLEW_VERSION_2_0) { - glActiveTexture(GL_TEXTURE0); - } + glActiveTexture(GL_TEXTURE0); #endif glBindTexture(GL_TEXTURE_2D, scene_right_tex_); glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, vp_width_, vp_height_, 0); - check_gl_error(); stereo_eye_=0; stereo_projection(0); @@ -1905,9 +1897,7 @@ void Scene::render_stereo() glStencilFunc(GL_EQUAL,0x0,0x1); } #if OST_SHADER_SUPPORT_ENABLED - if(GLEW_VERSION_2_0) { glActiveTexture(GL_TEXTURE0); - } #endif glBindTexture(GL_TEXTURE_2D, stereo_inverted_ ? scene_left_tex_ : scene_right_tex_); // draw @@ -1927,9 +1917,7 @@ void Scene::render_stereo() glStencilFunc(GL_EQUAL,0x1,0x1); } #if OST_SHADER_SUPPORT_ENABLED - if(GLEW_VERSION_2_0) { - glActiveTexture(GL_TEXTURE0); - } + glActiveTexture(GL_TEXTURE0); #endif glBindTexture(GL_TEXTURE_2D, stereo_inverted_ ? scene_right_tex_ : scene_left_tex_); // draw diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh index 79842843783a839390e89608aa80bed46c7338cb..a58a8652c0395199ed486bf1f4e30fe6c9b59be3 100644 --- a/modules/gfx/src/scene.hh +++ b/modules/gfx/src/scene.hh @@ -185,6 +185,8 @@ class DLLEXPORT_OST_GFX Scene { */ void Stereo(unsigned int); + int GetStereo() const {return stereo_;} + /// \brief invert stereo eyes for stereo mode=0 void SetStereoInverted(bool f); diff --git a/modules/gfx/src/shader.cc b/modules/gfx/src/shader.cc index db8e0558a4bad9cea19036126ffcc7002ecd82fc..187be29d940d8e6fed54f24f85fdcc1a4c8dfd7e 100644 --- a/modules/gfx/src/shader.cc +++ b/modules/gfx/src/shader.cc @@ -50,9 +50,6 @@ Shader::Shader(): shader_code_map_(), shader_program_map_() { - if(!GLEW_VERSION_2_0) { - LOGN_VERBOSE("OpenGL version smaller 2.0, deactivating shader functionality"); - } } @@ -124,8 +121,6 @@ bool link_shader(const std::vector<GLuint>& code_list, String pr_name, GLuint& s void Shader::Setup() { - if(!GLEW_VERSION_2_0) return; - String ost_root = GetSharedDataPath(); bf::path ost_root_dir(ost_root); bf::path shader_dir(ost_root_dir / "shader"); @@ -303,8 +298,6 @@ void Shader::Setup() void Shader::Activate(const String& name) { - if(!GLEW_VERSION_2_0) return; - if(!name.empty()) { std::map<String, GLuint>::iterator it = shader_program_map_.find(name); if(it!=shader_program_map_.end()) { @@ -339,7 +332,6 @@ String Shader::GetCurrentName() const bool Shader::IsValid() const { - if(!GLEW_VERSION_2_0) return false; return valid_; } @@ -350,13 +342,11 @@ bool Shader::IsActive() const void Shader::PushProgram() { - if(!GLEW_VERSION_2_0) return; program_stack_.push(current_name_); } void Shader::PopProgram() { - if(!GLEW_VERSION_2_0) return; if(!program_stack_.empty()) { current_name_ = program_stack_.top(); program_stack_.pop(); @@ -366,7 +356,6 @@ void Shader::PopProgram() void Shader::UpdateState() { - if(!GLEW_VERSION_2_0) return; if(current_program_!=0) { // update all settings GLint result; diff --git a/modules/gfx/src/vertex_array.cc b/modules/gfx/src/vertex_array.cc index 3551ab8ada8b31dbc3627604468353b16dfc385e..b2a30a6df7dc2cc83b64676ac2d166c0db4820c5 100644 --- a/modules/gfx/src/vertex_array.cc +++ b/modules/gfx/src/vertex_array.cc @@ -398,9 +398,8 @@ void IndexedVertexArray::RenderGL() #endif } - glPushAttrib(GL_ENABLE_BIT | GL_POLYGON_BIT | GL_COLOR_BUFFER_BIT | GL_LIGHTING_BIT); + glPushAttrib(GL_ALL_ATTRIB_BITS); glPushClientAttrib(GL_CLIENT_VERTEX_ARRAY_BIT); - glPushMatrix(); if(outline_mode_>0) { LOGN_TRACE("outline rendering"); @@ -541,7 +540,6 @@ void IndexedVertexArray::RenderGL() glEnd(); } - glPopMatrix(); glPopClientAttrib(); glPopAttrib(); } diff --git a/modules/gui/src/gl_canvas.cc b/modules/gui/src/gl_canvas.cc index 71923254716df1069a4d2e3d281b30e1bb930e60..d1bd25128092851ca528daaeb34bde8395ab1cda 100644 --- a/modules/gui/src/gl_canvas.cc +++ b/modules/gui/src/gl_canvas.cc @@ -381,6 +381,14 @@ void GLCanvas::keyPressEvent(QKeyEvent* event) gfx::Scene::Instance().SetAmbientOcclusion(!gfx::Scene::Instance().GetAmbientOcclusion()); DoRefresh(); return; + } else if(event->key()==Qt::Key_Equal) { + if(gfx::Scene::Instance().GetStereo()>0) { + gfx::Scene::Instance().Stereo(0); + } else { + gfx::Scene::Instance().Stereo(1); + } + DoRefresh(); + return; } } event->ignore(); diff --git a/modules/mol/base/pymod/export_editors.cc b/modules/mol/base/pymod/export_editors.cc index d7645c0bbdfa04087986e068d707a784f77a900a..91926f2e797135940d00faeb1f544b07b0d89542 100644 --- a/modules/mol/base/pymod/export_editors.cc +++ b/modules/mol/base/pymod/export_editors.cc @@ -83,6 +83,8 @@ void export_Editors() .def("Connect", connect_d) .def("RenameChain", &EditorBase::RenameChain) .def("AddTorsion", &EditorBase::AddTorsion) + .def("ReorderResidues",&EditorBase::ReorderResidues) + .def("ReorderAllResidues",&EditorBase::ReorderAllResidues) ; class_<XCSEditor, bases<EditorBase> >("XCSEditor", no_init) diff --git a/modules/mol/base/pymod/export_query_view_wrapper.cc b/modules/mol/base/pymod/export_query_view_wrapper.cc index 4af480ff1a151f17e113136bd60f734059724fcb..9c7c58a4b483826cd7f164c2897bc574c939c7cb 100644 --- a/modules/mol/base/pymod/export_query_view_wrapper.cc +++ b/modules/mol/base/pymod/export_query_view_wrapper.cc @@ -32,14 +32,16 @@ void export_QueryViewWrapper() class_<QueryViewWrapper>("QueryViewWrapper", init<>()) .def(init<const EntityHandle&>()) .def(init<const EntityView&>()) - .def(init<const Query&, const EntityHandle&>()) - .def(init<const Query&, const EntityView&>()) + .def(init<const Query&, const EntityHandle&, optional<QueryFlags> >()) + .def(init<const Query&, const EntityView&, optional<QueryFlags> >()) .def("GetEntityView",&QueryViewWrapper::GetEntityView) .def("DependsOnQuery",&QueryViewWrapper::DependsOnQuery) .def("IsDataValid", &QueryViewWrapper::IsDataValid) .def("SetQuery", &QueryViewWrapper::SetQuery) .def("GetQuery", &QueryViewWrapper::GetQuery ,return_value_policy<copy_const_reference>()) + .def("SetQueryFlags", &QueryViewWrapper::SetQueryFlags) + .def("GetQueryFlags", &QueryViewWrapper::GetQueryFlags) .add_property("entity_view", &QueryViewWrapper::GetEntityView) .add_property("query", make_function(&QueryViewWrapper::GetQuery ,return_value_policy<copy_const_reference>())) diff --git a/modules/mol/base/src/editor_base.cc b/modules/mol/base/src/editor_base.cc index 410e1b03b20b14553ff5352cbacef18f05d673cd..5cddb05bfbcb8ef0f28d5087baca457f31823982 100644 --- a/modules/mol/base/src/editor_base.cc +++ b/modules/mol/base/src/editor_base.cc @@ -114,7 +114,6 @@ void EditorBase::DeleteChain(const ChainHandle& chain) void EditorBase::DeleteAtom(const AtomHandle& atom_handle) { - CheckHandleValidity(atom_handle); atom_handle.GetResidue().Impl()->DeleteAtom(atom_handle.Impl()); } @@ -125,6 +124,17 @@ void EditorBase::DeleteResidue(const ResidueHandle& residue_handle) residue_handle.GetChain().Impl()->DeleteResidue(residue_handle.Impl()); } +void EditorBase::ReorderResidues(const ChainHandle& chain) +{ + CheckHandleValidity(chain); + chain.Impl()->ReorderResidues(); +} + +void EditorBase::ReorderAllResidues() +{ + ent_.Impl()->ReorderAllResidues(); +} + BondHandle EditorBase::Connect(const AtomHandle& first, const AtomHandle& second) { CheckHandleValidity(first); diff --git a/modules/mol/base/src/editor_base.hh b/modules/mol/base/src/editor_base.hh index 110c6b668f0a314b81e266017a026c999068f766..53246e7a204522d78617c956b3e046e7378e45ae 100644 --- a/modules/mol/base/src/editor_base.hh +++ b/modules/mol/base/src/editor_base.hh @@ -184,6 +184,12 @@ public: /// /// \sa ChainHandle::DeleteResidue, DeleteAtom void DeleteResidue(const ResidueHandle& residue_handle); + + /// \brief reorder residues of given chain based on their residue number + void ReorderResidues(const ChainHandle& chain); + + /// \brief reorder residues of all chains based on their residue number + void ReorderAllResidues(); /// \brief Get edit mode of editor EditMode GetMode() const; diff --git a/modules/mol/base/src/impl/chain_impl.cc b/modules/mol/base/src/impl/chain_impl.cc index 02f4636c1cc5e60865ad92b5e7ddcd3901a23ed0..d2171b1d85deac02615c4edba7924a8f0c81e5b7 100644 --- a/modules/mol/base/src/impl/chain_impl.cc +++ b/modules/mol/base/src/impl/chain_impl.cc @@ -439,4 +439,17 @@ void ChainImpl::SetName(const String& new_name) name_=new_name; } +namespace { + bool rnum_cmp(const ResidueImplPtr& r1, const ResidueImplPtr& r2) + { + return r1->GetNumber()<r2->GetNumber(); + } +} + +void ChainImpl::ReorderResidues() +{ + std::sort(residue_list_.begin(),residue_list_.end(),rnum_cmp); + UpdateShifts(); +} + }}} // ns diff --git a/modules/mol/base/src/impl/chain_impl.hh b/modules/mol/base/src/impl/chain_impl.hh index 644bed1e734d8594620164051c80060eb1a33295..c25d23b88cf7653e57fa9bd4940af12e8d5b6474 100644 --- a/modules/mol/base/src/impl/chain_impl.hh +++ b/modules/mol/base/src/impl/chain_impl.hh @@ -110,6 +110,8 @@ public: void DeleteResidue(const ResidueImplPtr& residue); void DeleteAllResidues(); + + void ReorderResidues(); int GetIndex(const ResNum& number) const; diff --git a/modules/mol/base/src/impl/entity_impl.cc b/modules/mol/base/src/impl/entity_impl.cc index c7eb101630db5e9723d848b50fa4abec29d3f2f7..17937305c55c7a8508fdd2934518b60da60b5113 100644 --- a/modules/mol/base/src/impl/entity_impl.cc +++ b/modules/mol/base/src/impl/entity_impl.cc @@ -1217,4 +1217,11 @@ void EntityImpl::SetName(const String& ent_name){ name_=ent_name; } +void EntityImpl::ReorderAllResidues() +{ + for(ChainImplList::iterator cit=chain_list_.begin();cit!=chain_list_.end();++cit) { + (*cit)->ReorderResidues(); + } +} + }}} // ns diff --git a/modules/mol/base/src/impl/entity_impl.hh b/modules/mol/base/src/impl/entity_impl.hh index 81f533bf0a9f3c696276b7e5e487e14a7125bfaa..89765122f776d7169048bfb9bc3eb074db38369e 100644 --- a/modules/mol/base/src/impl/entity_impl.hh +++ b/modules/mol/base/src/impl/entity_impl.hh @@ -244,6 +244,8 @@ public: void SetName(const String& ent_name); + void ReorderAllResidues(); + private: void DoCopy(EntityImplPtr dest); diff --git a/modules/mol/base/src/query_view_wrapper.cc b/modules/mol/base/src/query_view_wrapper.cc index fc755f6e0f162e53158b904ec8892532fd18b09a..ae0aa527ab7d9f80082730a9fec78ac442260728 100644 --- a/modules/mol/base/src/query_view_wrapper.cc +++ b/modules/mol/base/src/query_view_wrapper.cc @@ -26,57 +26,80 @@ QueryViewWrapper::QueryViewWrapper(): view_set_(false), entity_handle_(), entity_view_(), - query_(){} + query_(), + flags_(0) +{} QueryViewWrapper::QueryViewWrapper(const EntityHandle& entity_handle): view_set_(false), entity_handle_(entity_handle), entity_view_(), - query_(){} + query_(), + flags_(0) +{} QueryViewWrapper::QueryViewWrapper(const EntityView& entity_view): view_set_(true), entity_handle_(), entity_view_(entity_view), - query_(){} + query_(), + flags_(0) +{} QueryViewWrapper::QueryViewWrapper(const Query& query, - const EntityHandle& entity_handle): + const EntityHandle& entity_handle, + QueryFlags f): view_set_(false), entity_handle_(entity_handle), entity_view_(), - query_(query) -{ } + query_(query), + flags_(f) +{} QueryViewWrapper::QueryViewWrapper(const Query& query, - const EntityView& view): + const EntityView& view, + QueryFlags f): view_set_(true), entity_handle_(), entity_view_(view), - query_(query) -{ } + query_(query), + flags_(f) +{} EntityView QueryViewWrapper::GetEntityView() const { if(view_set_) { - return query_.MatchAll() ? entity_view_ : entity_view_.Select(query_); + return query_.MatchAll() ? entity_view_ : entity_view_.Select(query_,flags_); } else { if(entity_handle_.IsValid()){ - return entity_handle_.Select(query_); + return entity_handle_.Select(query_,flags_); } return entity_view_; } } -const Query& QueryViewWrapper::GetQuery() const{ +const Query& QueryViewWrapper::GetQuery() const +{ return query_; } -void QueryViewWrapper::SetQuery(const Query& query){ +void QueryViewWrapper::SetQuery(const Query& query) +{ query_ = query; } -bool QueryViewWrapper::IsDataValid() const{ +void QueryViewWrapper::SetQueryFlags(QueryFlags f) +{ + flags_=f; +} + +QueryFlags QueryViewWrapper::GetQueryFlags() const +{ + return flags_; +} + +bool QueryViewWrapper::IsDataValid() const +{ if(view_set_){ return entity_view_.IsValid(); } @@ -88,4 +111,4 @@ bool QueryViewWrapper::DependsOnQuery() const return query_.MatchAll(); } -} } // ns +}} // ns diff --git a/modules/mol/base/src/query_view_wrapper.hh b/modules/mol/base/src/query_view_wrapper.hh index 596b5cbf12aa464ee01e7a9ebba0f734da387328..483b303c9e6704c596aa0e4ab182de5fa816ecb9 100644 --- a/modules/mol/base/src/query_view_wrapper.hh +++ b/modules/mol/base/src/query_view_wrapper.hh @@ -32,8 +32,8 @@ public: explicit QueryViewWrapper(const EntityHandle& entity_handle); explicit QueryViewWrapper(const EntityView& entity_view); QueryViewWrapper(); - QueryViewWrapper(const Query& query, const EntityHandle& handle); - QueryViewWrapper(const Query& query, const EntityView& view); + QueryViewWrapper(const Query& query, const EntityHandle& handle, QueryFlags f=0); + QueryViewWrapper(const Query& query, const EntityView& view, QueryFlags f=0); EntityView GetEntityView() const; bool DependsOnQuery() const; bool IsDataValid() const; @@ -41,11 +41,15 @@ public: void SetQuery(const Query& query); const Query& GetQuery() const; + void SetQueryFlags(QueryFlags f); + QueryFlags GetQueryFlags() const; + private: bool view_set_; EntityHandle entity_handle_; EntityView entity_view_; Query query_; + QueryFlags flags_; }; } } // ns