diff --git a/modules/gfx/src/impl/backbone_trace.cc b/modules/gfx/src/impl/backbone_trace.cc index b890d76b4763cb48a63e4895d4f55b266d1c31b8..a872c44c3e932ad368c990e15708ff93d23b835b 100644 --- a/modules/gfx/src/impl/backbone_trace.cc +++ b/modules/gfx/src/impl/backbone_trace.cc @@ -32,14 +32,18 @@ namespace { bool in_sequence(const mol::ResidueHandle& r1, const mol::ResidueHandle& r2, bool seqhack) { 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(seqhack) { + 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(mol::InSequence(r1,r2)) return true; + if(n1.GetNum()+1==n2.GetNum()) return true; + } else { + return mol::InSequence(r1,r2); } - if(mol::InSequence(r1,r2)) return true; - if(seqhack && n1.GetNum()+1==n2.GetNum()) return true; return false; } @@ -236,11 +240,21 @@ BackboneTrace BackboneTrace::CreateSubset(const mol::EntityView& subview) const NodeEntryList& nlist=*nitnit; for(NodeEntryList::const_iterator nit=nlist.begin();nit!=nlist.end();++nit) { if(subview.FindAtom(nit->atom).IsValid()) { + if(!new_nlist.empty()) { + if(!in_sequence(new_nlist.back().atom.GetResidue(),nit->atom.GetResidue(),seq_hack_)) { + if(new_nlist.size()>1) { + nrvo.node_list_list_.push_back(new_nlist); + } + new_nlist.clear(); + } + } new_nlist.push_back(*nit); } } if(!new_nlist.empty()) { - nrvo.node_list_list_.push_back(new_nlist); + if(new_nlist.size()>1) { + nrvo.node_list_list_.push_back(new_nlist); + } } } return nrvo;