diff --git a/modules/mol/base/pymod/export_entity.cc b/modules/mol/base/pymod/export_entity.cc index 6ae3727031bf27cd0ced5adcb638d20f0d7b83e2..c46f07284aab3eec978e25d4d87c265d39133939 100644 --- a/modules/mol/base/pymod/export_entity.cc +++ b/modules/mol/base/pymod/export_entity.cc @@ -45,11 +45,6 @@ typedef BondHandle (EntityHandle::*Connect2)(const AtomHandle&, Real, Real); typedef EntityView (EntityHandle::*QueryMethod)(const Query&, uint) const; -QueryMethod select_query=&EntityHandle::Select; -StringMethod select_string=&EntityHandle::Select; -//Connect1 conn1=&EntityHandle::Connect; -//Connect2 conn2=&EntityHandle::Connect; - Real (EntityHandle::*get_angle1)(const AtomHandle&, const AtomHandle&, const AtomHandle&) const = &EntityHandle::GetAngle; Real (EntityHandle::*get_angle2)(const AtomView&, const AtomView&, const AtomView&) const = &EntityHandle::GetAngle; @@ -127,10 +122,22 @@ void export_Entity() .add_property("valid", &EntityBase::IsValid) ; generic_prop_def<EntityBase>(ent_base); + + EntityView (EntityHandle::*select1)(const Query&) const = &EntityHandle::Select; + EntityView (EntityHandle::*select2)(const Query&, QueryFlags) const = &EntityHandle::Select; + EntityView (EntityHandle::*select3)(const String&) const = &EntityHandle::Select; + EntityView (EntityHandle::*select4)(const String&, QueryFlags) const = &EntityHandle::Select; class_<EntityHandle, bases<EntityBase> >("EntityHandle", init<>()) - .def("Select",select_query, (arg("query"), arg("flags")=0)) - .def("Select",select_string, (arg("query"), arg("flags")=0)) + .def("Select",select1) + .def("Select",select2) + .def("Select",select3) + .def("Select",select4) + .def("SetDefaultQueryFlags",&EntityHandle::SetDefaultQueryFlags) + .def("GetDefaultQueryFlags",&EntityHandle::GetDefaultQueryFlags) + .add_property("default_query_flags", + &EntityHandle::GetDefaultQueryFlags, + &EntityHandle::SetDefaultQueryFlags) .def("FindChain", &EntityHandle::FindChain) .def("FindResidue", &EntityHandle::FindResidue) .def("FindAtom", &EntityHandle::FindAtom) diff --git a/modules/mol/base/src/entity_handle.cc b/modules/mol/base/src/entity_handle.cc index b90c191613790f9c5867f51e928a561815e59d40..e975132ea84a50c5ea7fb76026cff894645b6920 100644 --- a/modules/mol/base/src/entity_handle.cc +++ b/modules/mol/base/src/entity_handle.cc @@ -115,13 +115,38 @@ AtomHandleList EntityHandle::FindWithin(const geom::Vec3& pos, return handles; } +void EntityHandle::SetDefaultQueryFlags(QueryFlags flags) +{ + this->CheckValidity(); + Impl()->SetDefaultQueryFlags(flags); +} + +QueryFlags EntityHandle::GetDefaultQueryFlags() const +{ + this->CheckValidity(); + return Impl()->GetDefaultQueryFlags(); +} + +EntityView EntityHandle::Select(const Query& q) const +{ + this->CheckValidity(); + return Impl()->Select(*this, q); +} + +EntityView EntityHandle::Select(const String& q) const +{ + this->CheckValidity(); + return Impl()->Select(*this, Query(q)); +} + EntityView EntityHandle::Select(const Query& q, QueryFlags flags) const { this->CheckValidity(); return Impl()->Select(*this, q, flags); } -EntityView EntityHandle::Select(const String& q, QueryFlags flags) const { +EntityView EntityHandle::Select(const String& q, QueryFlags flags) const +{ this->CheckValidity(); return Impl()->Select(*this, Query(q), flags); } diff --git a/modules/mol/base/src/entity_handle.hh b/modules/mol/base/src/entity_handle.hh index fff9f6efc306b77df8ca9aa6f6b804f1480329c0..0fcadee77d9e68b69048b7c346d3d3c266919fd0 100644 --- a/modules/mol/base/src/entity_handle.hh +++ b/modules/mol/base/src/entity_handle.hh @@ -201,13 +201,31 @@ public: /// \brief use atom hash to perform fast within lookup AtomHandleList FindWithin(const geom::Vec3& pos, Real radius) const; + /// \brief set default query flags + /// these will be used if flags are not explicitely specified as + /// a second argument to a Select call + void SetDefaultQueryFlags(QueryFlags flags); + + /// \brief return default query flags + QueryFlags GetDefaultQueryFlags() const; + /// \brief return view based on a query object /// \sa Query - EntityView Select(const Query& q, QueryFlags flags=0) const; + /// The default query flags will be used for the selection + EntityView Select(const Query& q) const; /// \brief return view based on query String. /// \sa Query - EntityView Select(const String& query_string, QueryFlags flags=0) const; + /// The default query flags will be used for the selection + EntityView Select(const String& query_string) const; + + /// \brief return view based on a query object, specifying behavior flags + /// \sa Query + EntityView Select(const Query& q, QueryFlags flags) const; + + /// \brief return view based on query String, specifying behavior flags + /// \sa Query + EntityView Select(const String& query_string, QueryFlags flags) const; /// \brief return a (new) full view of this entity EntityView CreateFullView() const; diff --git a/modules/mol/base/src/impl/entity_impl.cc b/modules/mol/base/src/impl/entity_impl.cc index 1441af7cc3a079e5d08589951aff5e8f7be14e76..305e3423041abfb58252cf417a861ada5d77967b 100644 --- a/modules/mol/base/src/impl/entity_impl.cc +++ b/modules/mol/base/src/impl/entity_impl.cc @@ -77,7 +77,8 @@ EntityImpl::EntityImpl(): ics_editor_count_(0), dirty_flags_(DisableICS), name_(""), - next_index_(0L) + next_index_(0L), + default_query_flags_(0) { } @@ -986,6 +987,11 @@ EntityView EntityImpl::do_selection(const EntityHandle& eh, return view; } +EntityView EntityImpl::Select(const EntityHandle& h, const Query& q) const +{ + return do_selection<false>(h, q, default_query_flags_); +} + EntityView EntityImpl::Select(const EntityHandle& h, const Query& q, QueryFlags flags) const { diff --git a/modules/mol/base/src/impl/entity_impl.hh b/modules/mol/base/src/impl/entity_impl.hh index 541aec54e7f590bd80abc433baca8564e5fe70fb..3c5000920c23a959ab631e62874d54df6cce6878 100644 --- a/modules/mol/base/src/impl/entity_impl.hh +++ b/modules/mol/base/src/impl/entity_impl.hh @@ -157,9 +157,15 @@ public: void UpdateOrganizer(); AtomImplList FindWithin(const geom::Vec3& pos, Real radius) const; + // use query flag defaults + EntityView Select(const EntityHandle& h, const Query& q) const; + // override query flag defaults with given flags EntityView Select(const EntityHandle& h, const Query& q, QueryFlags flags) const; EntityView CreateFullView(const EntityHandle& h) const; + void SetDefaultQueryFlags(QueryFlags f) {default_query_flags_=f;} + QueryFlags GetDefaultQueryFlags() const {return default_query_flags_;} + /// Get chain by name. Returns an invalid ChainImplPtr if no chain with the /// given name exists. @@ -276,6 +282,8 @@ private: unsigned long next_index_; + QueryFlags default_query_flags_; + template <bool always_true> EntityView do_selection(const EntityHandle&, const Query&, QueryFlags) const; };