34 #include <utility/pointer/access_ptr.hh>
35 #include <utility/vector1.hh>
37 #include <basic/options/option.hh>
38 #include <basic/options/keys/edensity.OptionKeys.gen.hh>
45 #include <GLUT/glut.h>
61 int const BAD_WINDOW( -999 );
64 ConformationViewer::ConformationViewer() :
66 new_conformation_( true ),
67 use_debug_pause_( false ),
72 ConformationViewer::ConformationViewer(
std::string const & name_in ):
75 new_conformation_( true ),
76 my_window_( BAD_WINDOW ),
79 use_debug_pause_( false ),
82 pthread_mutex_init( &residues_mut_, NULL );
85 ConformationViewer::ConformationViewer(
std::string const & name_in,
int length,
int width,
bool debug_pause ):
88 new_conformation_( true ),
89 my_window_( BAD_WINDOW ),
92 use_debug_pause_( debug_pause ),
95 pthread_mutex_init( &residues_mut_, NULL );
99 ConformationViewer::~ConformationViewer()
112 ConformationViewer::display_func()
115 if ( residues_.empty() )
return;
118 pthread_mutex_lock( &residues_mut_ );
121 if ( basic::options::option[ basic::options::OptionKeys::edensity::mapfile ].user()) {
125 draw_conformation_and_density( residues_, secstruct_, triangles_ , current_gs_,
126 residues_[ anchor_id_.rsd() ]->xyz( anchor_id_.atomno() ));
129 draw_conformation( residues_, secstruct_, current_gs_,
130 residues_[ anchor_id_.rsd() ]->xyz(anchor_id_.atomno() ) );
133 pthread_mutex_unlock( &residues_mut_ );
140 ConformationViewer::display_if_necessary()
143 if ( new_conformation_ && my_window_ != BAD_WINDOW ) {
145 new_conformation_ =
false;
146 glutSetWindow( my_window_ );
157 ConformationViewer::is_observing()
const
165 ConformationViewer::attach_to(
171 xyz_event_link_ = conf.
attach_xyz_obs( &ConformationViewer::on_xyz_change,
this );
172 connection_event_link_ = conf.
attach_connection_obs( &ConformationViewer::on_connection_change,
this );
182 ConformationViewer::detach_from()
184 xyz_event_link_.invalidate();
185 connection_event_link_.invalidate();
201 ConformationViewer::on_connection_change(
207 switch ( event.
tag ) {
208 case ConnectionEvent::DISCONNECT:
211 case ConnectionEvent::TRANSFER:
223 ConformationViewer::on_xyz_change(
227 pthread_mutex_lock( &residues_mut_ );
236 residues_.resize( res_caps.size() );
237 secstruct_.resize( res_caps.size() );
238 for (
core::Size i = 1, ie = res_caps.size(); i <= ie; ++i ) {
239 residues_[ i ] = res_caps[ i ].get();
240 secstruct_[ i ] =
event.conformation->secstruct( i );
244 anchor_id_ =
event.conformation->atom_tree().root()->id();
247 new_conformation_ =
true;
250 event.conformation->debug_pause( use_debug_pause_ );
252 pthread_mutex_unlock( &residues_mut_ );
260 #endif // ifdef GL_GRAPHICS