diff --git a/modules/mol/base/pymod/export_entity_view.cc b/modules/mol/base/pymod/export_entity_view.cc index 8d40e6261544fc1d79850cb2fbd88ce3de8d1a1c..765c33f57cba357de42db3a744937a9cf77fe58b 100644 --- a/modules/mol/base/pymod/export_entity_view.cc +++ b/modules/mol/base/pymod/export_entity_view.cc @@ -157,7 +157,8 @@ void export_EntityView() def("CreateViewFromAtoms", create_view_1); def("CreateViewFromAtoms", create_view_2); - def("CreateEntityFromView", &CreateEntityFromView); + def("CreateEntityFromView", &CreateEntityFromView, + arg("handle")=EntityHandle()); class_<EntityViewList>("EntityViewList", init<>()) .def(vector_indexing_suite<EntityViewList>()) ; diff --git a/modules/mol/base/src/view_op.cc b/modules/mol/base/src/view_op.cc index 2999c12746e42655d5c6730c5921f24a6430be0a..88e964d92c3ee655ca600c1dc31ecf36ae53238e 100644 --- a/modules/mol/base/src/view_op.cc +++ b/modules/mol/base/src/view_op.cc @@ -389,13 +389,16 @@ private: } EntityHandle CreateEntityFromView(const EntityView& view, - bool include_exlusive_atoms) + bool include_exlusive_atoms, + EntityHandle handle) { Profile create_time("mol::CreateEntityFromView"); - EntityHandle ent=CreateEntity(); - Replicator replicator(ent.Impl(), view, include_exlusive_atoms); - TorsionAdder adder(replicator, ent.Impl(), view); - return ent; + if (!handle.IsValid()) { + handle=CreateEntity(); + } + Replicator replicator(handle.Impl(), view, include_exlusive_atoms); + TorsionAdder adder(replicator, handle.Impl(), view); + return handle; } }} // ns diff --git a/modules/mol/base/src/view_op.hh b/modules/mol/base/src/view_op.hh index c11b71cbb5bac6aa4b2a59bb93f9c0c802654bc0..809363758605e399c190403b4e8fe4e5468eb2c5 100644 --- a/modules/mol/base/src/view_op.hh +++ b/modules/mol/base/src/view_op.hh @@ -26,7 +26,7 @@ #include <ost/mol/view_type_fw.hh> #include <ost/mol/handle_type_fw.hh> #include <ost/integrity_error.hh> - +#include <ost/mol/entity_handle.hh> namespace ost { namespace mol { @@ -87,8 +87,12 @@ CompareViews(const EntityView& view1, const EntityView& view2); /// \param view is the view to be converted to a handle /// \param include_exlusive_atoms if true, atoms that are part of an exclusive /// bond will also be included in the new entity handle. -EntityHandle DLLEXPORT_OST_MOL CreateEntityFromView(const EntityView& view, - bool include_exlusive_atoms); +/// \param handle If invalid a new entity will be created. If valid, the atoms, +/// residues, chains, bonds and torsions will be added to handle. This is +/// useful to combine several entities into one. +EntityHandle DLLEXPORT_OST_MOL +CreateEntityFromView(const EntityView& view, bool include_exlusive_atoms, + EntityHandle handle=EntityHandle()); }} // ns #endif