00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052 #include <OpenFlipper/common/Types.hh>
00053 #include <QGLWidget>
00054
00055 #include "PluginFunctions.hh"
00056 #include "PluginFunctionsCore.hh"
00057
00058 namespace PluginFunctions {
00059
00064 static BaseObject* objectRoot_ = 0;
00065
00070 static std::vector< glViewer* > examiner_widgets_;
00071
00076 static std::vector< Viewer::ViewerProperties* > viewerProperties_;
00077
00079 static glViewer* examiner_widget_;
00080
00082 static unsigned int activeExaminer_ = 0;
00083
00090 static SeparatorNode* dataRootNode_ = 0;
00091
00095 static SeparatorNode* dataSeparatorNode_ = 0;
00096
00099 static SeparatorNode* sceneGraphRootNode_ = 0;
00100
00104 static Viewer::ViewerProperties dummyProperties;
00105
00106
00111 static ViewObjectMarker* defaultMarker_ = 0;
00112
00117 static QGLWidget* shareGLWidget_ = 0;
00118
00121 static int viewerId_ = 0;
00122
00124 static int objectCounter_ = 0;
00125
00127 static int targetCounter_ = 0;
00128
00130 static std::map<int, BaseObject*> objectMap_;
00131
00132 void setDataRoot( BaseObject* _root ) {
00133 objectRoot_ = _root;
00134 }
00135
00136 int viewers( ) {
00137 return examiner_widgets_.size();
00138 }
00139
00140 int viewerId() {
00141 return viewerId_;
00142 }
00143
00144 void setViewers( std::vector< glViewer* > _viewerWidgets ) {
00145 PluginFunctions::examiner_widgets_ = _viewerWidgets;
00146 PluginFunctions::examiner_widget_ = examiner_widgets_[0];
00147
00148
00149 QTime time = QTime::currentTime();
00150 qsrand( time.hour() * 10 + time.minute() * 100 + time.second() * 1000 + time.msec() * 10000 );
00151 viewerId_ = qrand();
00152 }
00153
00154 void setViewerProperties( std::vector< Viewer::ViewerProperties* > _viewerProperties ) {
00155 PluginFunctions::viewerProperties_ = _viewerProperties;
00156 }
00157
00158 void setActiveExaminer( const unsigned int _id ) {
00159 activeExaminer_ = _id;
00160 }
00161
00162 glViewer* viewer(int _viewerId ) {
00163 if ( _viewerId < 0 || _viewerId >= (int)examiner_widgets_.size() ) {
00164 std::cerr << "Requested unknown viewer with id : " << _viewerId << std::endl;
00165 return examiner_widgets_[activeExaminer()];
00166 }
00167
00168 return( examiner_widgets_[_viewerId] );
00169 }
00170
00171 unsigned int activeExaminer( ) {
00172 return activeExaminer_;
00173 }
00174
00175 QString getEncodedExaminerView() {
00176 return getEncodedExaminerView(activeExaminer());
00177 }
00178
00180 QString getEncodedExaminerView(int _viewerId) {
00181
00182 QString view;
00183
00184 if ( _viewerId < 0 || _viewerId >= (int)examiner_widgets_.size() ) {
00185 std::cerr << "Requested unknown viewer with id : " << _viewerId << std::endl;
00186 examiner_widgets_[activeExaminer()]->encodeView ( view );
00187 return view;
00188 }
00189
00190 examiner_widgets_[_viewerId]->encodeView ( view );
00191 return view;
00192
00193 }
00194
00195 void setEncodedExaminerView( QString _view ) {
00196 setEncodedExaminerView( activeExaminer() , _view );
00197 }
00198
00199 void setEncodedExaminerView(int _viewerId , QString _view ) {
00200
00201 if ( _viewerId < 0 || _viewerId >= (int)examiner_widgets_.size() ) {
00202 std::cerr << "Requested unknown viewer with id : " << _viewerId << std::endl;
00203 examiner_widgets_[activeExaminer()]->decodeView ( _view );
00204 }
00205
00206 examiner_widgets_[_viewerId]->decodeView ( _view );
00207 }
00208
00209 void setDataSeparatorNodes( SeparatorNode* _dataSeparatorNode ) {
00210
00211
00212
00213
00214 PluginFunctions::dataSeparatorNode_ = _dataSeparatorNode;
00215
00216
00217 if ( PluginFunctions::dataSeparatorNode_->nChildren() != 1 ){
00218 std::cerr << "Only one child allowed for dataSeparatorNode on initialization!" << std::endl;
00219 std::cerr << "The Core has initialized the scenegraph in a strange way!" << std::endl;
00220 ACG::SceneGraph::BaseNode* child = *(PluginFunctions::dataSeparatorNode_->childrenBegin());
00221 }
00222
00223
00224
00225 PluginFunctions::dataRootNode_ = dynamic_cast<ACG::SceneGraph::SeparatorNode*> (*(PluginFunctions::dataSeparatorNode_->childrenBegin()) );
00226
00227 }
00228
00229 void setSceneGraphRootNode( SeparatorNode* _root_node ) {
00230 PluginFunctions::sceneGraphRootNode_ = _root_node;
00231 }
00232
00233 bool getPickedObject(const unsigned int _node_idx , BaseObjectData*& _object) {
00234 for ( ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ; o_it != PluginFunctions::objectsEnd(); ++o_it) {
00235 if ( o_it->picked( _node_idx ) ) {
00236 _object = *o_it;
00237 return true;
00238 }
00239 }
00240 return false;
00241 }
00242
00243
00244 bool getSourceIdentifiers( std::vector<int>& _identifiers ) {
00245 _identifiers.clear();
00246
00247 for ( ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ; o_it != PluginFunctions::objectsEnd(); ++o_it) {
00248 if ( o_it->source() )
00249 _identifiers.push_back ( o_it->id() );
00250 }
00251 return (_identifiers.size() >0 );
00252 }
00253
00254 bool getTargetIdentifiers( std::vector<int>& _identifiers ) {
00255 _identifiers.clear();
00256
00257 for ( ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ; o_it != PluginFunctions::objectsEnd(); ++o_it) {
00258 if ( o_it->target() )
00259 _identifiers.push_back ( o_it->id() );
00260 }
00261 return (_identifiers.size() >0 );
00262 }
00263
00264
00265
00266
00267
00268 bool getObject( const int _identifier , BaseObject*& _object ) {
00269
00270 if ( _identifier == -1 )
00271 return false;
00272
00273
00274
00275
00276
00277 std::map<int, BaseObject*>::iterator it;
00278 it = objectMap_.find(_identifier);
00279
00280 _object = (it != objectMap_.end() ? it->second : 0);
00281
00282 return ( _object != 0 );
00283 }
00284
00285 bool getObject( const int _identifier , BaseObjectData*& _object ) {
00286
00287 if ( _identifier == -1 )
00288 return false;
00289
00290
00291
00292
00293 std::map<int, BaseObject*>::iterator it;
00294 it = objectMap_.find(_identifier);
00295
00296 BaseObject* object = (it != objectMap_.end() ? it->second : 0);
00297
00298 _object = dynamic_cast< BaseObjectData* >(object);
00299 return ( _object != 0 );
00300 }
00301
00302 int getObjectId( const QString _name ) {
00303
00304 if(_name.isEmpty()) return -1;
00305
00306 BaseObject* object = objectRoot_->childExists( _name );
00307 return object->id();
00308 }
00309
00310
00311
00312
00313 bool object_exists( const int _identifier ) {
00314
00315 if ( _identifier == -1 )
00316 return false;
00317
00318 BaseObject* object = objectRoot_->childExists( _identifier );
00319 return ( object != 0 );
00320 }
00321
00322
00323
00324 bool getAllMeshes( std::vector<int>& _identifiers ) {
00325
00326 _identifiers.clear();
00327
00328
00329 for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS,typeId("TriangleMesh")) ;
00330 o_it != PluginFunctions::objectsEnd(); ++o_it) {
00331 _identifiers.push_back( o_it->id() );
00332 }
00333
00334 return (_identifiers.size() > 0);
00335 }
00336
00337 bool get_all_object_identifiers( std::vector<int>& _identifiers ) {
00338
00339 _identifiers.clear();
00340
00341
00342 for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
00343 o_it != PluginFunctions::objectsEnd(); ++o_it) {
00344 _identifiers.push_back( o_it->id() );
00345 }
00346
00347 return (_identifiers.size() > 0);
00348 }
00349
00350 void setBackColor( OpenMesh::Vec4f _color) {
00351 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00352 PluginFunctions::viewerProperties(i).backgroundColor(_color);
00353 }
00354
00355 void setFixedView(int _mode, int _viewer ) {
00356
00357 if ( (_viewer != ACTIVE_VIEWER ) && ( ( _viewer < 0 ) || _viewer >= (int)examiner_widgets_.size()) ){
00358 std::cerr << "Unable to set fixed view. Wrong viewer id (" << _viewer << ")" << std::endl;
00359 return;
00360 }
00361
00362 switch ( _mode ){
00363 case VIEW_TOP :
00364 PluginFunctions::viewingDirection( ACG::Vec3d(0.0, -1.0, 0.0), ACG::Vec3d(0.0, 0.0, -1.0), _viewer );
00365 PluginFunctions::allowRotation(false, _viewer);
00366 break;
00367 case VIEW_BOTTOM :
00368 PluginFunctions::viewingDirection( ACG::Vec3d(0.0, 1.0, 0.0), ACG::Vec3d(0.0, 0.0, -1.0), _viewer );
00369 PluginFunctions::allowRotation(false, _viewer);
00370 break;
00371 case VIEW_LEFT :
00372 PluginFunctions::viewingDirection( ACG::Vec3d(1.0, 0.0, 0.0), ACG::Vec3d(0.0, 1.0, 0.0), _viewer );
00373 PluginFunctions::allowRotation(false, _viewer);
00374 break;
00375 case VIEW_RIGHT :
00376 PluginFunctions::viewingDirection( ACG::Vec3d(-1.0, 0.0, 0.0), ACG::Vec3d(0.0, 1.0, 0.0), _viewer );
00377 PluginFunctions::allowRotation(false, _viewer);
00378 break;
00379 case VIEW_FRONT :
00380 PluginFunctions::viewingDirection( ACG::Vec3d(0.0, 0.0, -1.0), ACG::Vec3d(0.0, 1.0, 0.0), _viewer );
00381 PluginFunctions::allowRotation(false, _viewer);
00382 break;
00383 case VIEW_BACK :
00384 PluginFunctions::viewingDirection( ACG::Vec3d(0.0, 0.0, 1.0), ACG::Vec3d(0.0, 1.0, 0.0), _viewer );
00385 PluginFunctions::allowRotation(false, _viewer);
00386 break;
00387 default :
00388 PluginFunctions::allowRotation(true, _viewer);
00389 break;
00390 }
00391
00392 if ( _viewer == ACTIVE_VIEWER )
00393 viewerProperties(activeExaminer()).currentViewingDirection( _mode );
00394 else
00395 viewerProperties( _viewer ).currentViewingDirection( _mode );
00396 }
00397
00398 QPoint mapToGlobal(const QPoint _point ) {
00399 return examiner_widgets_[activeExaminer_]->glMapToGlobal(_point);
00400 }
00401
00402 QPoint mapToLocal( const QPoint _point ) {
00403 return examiner_widgets_[activeExaminer_]->glMapFromGlobal(_point);
00404 }
00405
00406 void setDrawMode( const ACG::SceneGraph::DrawModes::DrawMode _mode , int _viewer) {
00407
00408 if ( _viewer == ACTIVE_VIEWER )
00409 viewerProperties(activeExaminer()).drawMode(_mode);
00410 else if ( _viewer == ALL_VIEWERS )
00411 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00412 viewerProperties(i).drawMode(_mode);
00413 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00414 viewerProperties(_viewer).drawMode(_mode);
00415 else
00416 std::cerr << "Requested illegal viewer for setting DrawMode!!" << std::endl;
00417
00418 }
00419
00425 ACG::SceneGraph::DrawModes::DrawMode drawMode( int _viewer ) {
00426 if ( _viewer == ACTIVE_VIEWER ) {
00427 return viewerProperties(activeExaminer()).drawMode();
00428 } else if ( _viewer == ALL_VIEWERS )
00429 std::cerr << "Please select viewer to get viewing direction!" << std::endl;
00430 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00431 return viewerProperties(_viewer).drawMode();
00432 else
00433 std::cerr << "Requested illegal viewer for viewingDirection!!" << std::endl;
00434
00435 return viewerProperties(activeExaminer()).drawMode();
00436 }
00437
00438 bool scenegraphPick( ACG::SceneGraph::PickTarget _pickTarget, const QPoint &_mousePos, unsigned int &_nodeIdx, unsigned int &_targetIdx, ACG::Vec3d *_hitPointPtr=0 ) {
00439
00440 return examiner_widgets_[activeExaminer_]->pick( _pickTarget,_mousePos,_nodeIdx,_targetIdx,_hitPointPtr );
00441 }
00442
00443 bool scenegraphPick( const unsigned int _examiner, ACG::SceneGraph::PickTarget _pickTarget, const QPoint &_mousePos, unsigned int &_nodeIdx, unsigned int &_targetIdx, ACG::Vec3d *_hitPointPtr=0 ) {
00444
00445 if ( _examiner >= examiner_widgets_.size() ) {
00446 std::cerr << "Wrong examiner id" << std::endl;
00447 return false;
00448 }
00449 return examiner_widgets_[_examiner]->pick( _pickTarget,_mousePos,_nodeIdx,_targetIdx,_hitPointPtr );
00450 }
00451
00452 bool scenegraphRegionPick( ACG::SceneGraph::PickTarget _pickTarget,
00453 const QRegion& _region,
00454 QList<QPair<unsigned int, unsigned int> >& _list)
00455 {
00456 return examiner_widgets_[activeExaminer_]->pick_region( _pickTarget, _region, _list);
00457 }
00458
00459 bool scenegraphRegionPick( const unsigned int _examiner,
00460 ACG::SceneGraph::PickTarget _pickTarget,
00461 const QRegion& _region,
00462 QList<QPair<unsigned int, unsigned int> >& _list)
00463 {
00464 if ( _examiner >= examiner_widgets_.size() ) {
00465 std::cerr << "Wrong examiner id" << std::endl;
00466 return false;
00467 }
00468 return examiner_widgets_[_examiner]->pick_region( _pickTarget, _region, _list);
00469 }
00470
00471
00472
00473
00474 void traverse( ACG::SceneGraph::MouseEventAction &_action ) {
00475
00476
00477 ACG::SceneGraph::traverse(sceneGraphRootNode_, _action,viewerProperties().glState() );
00478 }
00479
00480
00481 void traverse( const unsigned int _examiner, ACG::SceneGraph::MouseEventAction &_action ) {
00482
00483 if ( _examiner >= examiner_widgets_.size() ) {
00484 std::cerr << "Wrong examiner id" << std::endl;
00485 return;
00486 }
00487
00488
00489
00490 ACG::SceneGraph::traverse(sceneGraphRootNode_, _action,viewerProperties(_examiner).glState() );
00491 }
00492
00493
00494 const std::string pickMode () {
00495
00496 return viewerProperties().pickMode();
00497 }
00498
00499 void pickMode ( std::string _mode) {
00500
00501 setViewObjectMarker (defaultViewObjectMarker ());
00502 viewerProperties().pickMode(_mode);
00503 }
00504
00505 Viewer::ActionMode actionMode() {
00506 return viewerProperties().actionMode();
00507 }
00508
00509 void actionMode ( Viewer::ActionMode _mode) {
00510
00511 viewerProperties().actionMode(_mode);
00512 }
00513
00514 void shareGLWidget (QGLWidget *_widget)
00515 {
00516 shareGLWidget_ = _widget;
00517 }
00518
00519 QGLWidget *shareGLWidget ()
00520 {
00521 return shareGLWidget_;
00522 }
00523
00524 void getCurrentViewImage(QImage& _image) {
00525 viewer( activeExaminer() )->snapshot( _image, true );
00526 }
00527
00528 Viewer::ViewerProperties& viewerProperties(int _id) {
00529 if ( _id >= (int)viewerProperties_.size() ) {
00530 std::cerr << " Error, requested properties for non-existing Viewer!" << std::endl;
00531 return dummyProperties;
00532 }
00533
00534 if ( _id == -1 )
00535 _id = activeExaminer_;
00536
00537 return ( *viewerProperties_[_id] );
00538
00539 }
00540
00541 void perspectiveProjection( int _viewer ) {
00542 if ( _viewer == ACTIVE_VIEWER ) {
00543 examiner_widgets_[activeExaminer_]->perspectiveProjection();
00544 } else if ( _viewer == ALL_VIEWERS )
00545 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00546 examiner_widgets_[i]->perspectiveProjection();
00547 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00548 examiner_widgets_[_viewer]->perspectiveProjection();
00549 else
00550 std::cerr << "Requested illegal viewer for perspectiveProjection()!!" << std::endl;
00551 }
00552
00553 void orthographicProjection( int _viewer ) {
00554 if ( _viewer == ACTIVE_VIEWER ) {
00555 examiner_widgets_[activeExaminer_]->orthographicProjection();
00556 } else if ( _viewer == ALL_VIEWERS )
00557 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00558 examiner_widgets_[i]->orthographicProjection();
00559 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00560 examiner_widgets_[_viewer]->orthographicProjection();
00561 else
00562 std::cerr << "Requested illegal viewer for orthographicProjection()!!" << std::endl;
00563 }
00564
00565 void allowRotation(bool _mode, int _viewer ) {
00566 if ( _viewer == ACTIVE_VIEWER ) {
00567 examiner_widgets_[activeExaminer_]->allowRotation(_mode);
00568 } else if ( _viewer == ALL_VIEWERS )
00569 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00570 examiner_widgets_[i]->allowRotation(_mode);
00571 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00572 examiner_widgets_[_viewer]->allowRotation(_mode);
00573 else
00574 std::cerr << "Requested illegal viewer for allowRotation!!" << std::endl;
00575 }
00576
00577 bool allowRotation( int _viewer ) {
00578
00579 if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00580 return examiner_widgets_[_viewer]->allowRotation();
00581 else {
00582
00583 std::cerr << "Requested illegal viewer for isRotationAllowed!!" << std::endl;
00584 return false;
00585 }
00586 }
00587
00588 void setMainGLContext() {
00589 examiner_widget_->makeCurrent();
00590 }
00591
00592 void viewingDirection(const ACG::Vec3d &_dir, const ACG::Vec3d &_up , int _viewer ) {
00593 if ( _viewer == ACTIVE_VIEWER ) {
00594 examiner_widgets_[activeExaminer_]->viewingDirection(_dir,_up);
00595 } else if ( _viewer == ALL_VIEWERS )
00596 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00597 examiner_widgets_[i]->viewingDirection(_dir,_up);
00598 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00599 examiner_widgets_[_viewer]->viewingDirection(_dir,_up);
00600 else
00601 std::cerr << "Requested illegal viewer for viewingDirection!!" << std::endl;
00602 }
00603
00604 const ACG::Vec3d trackBallCenter(const ACG::Vec3d& _center, int _viewer ) {
00605 if ( _viewer == ACTIVE_VIEWER ) {
00606 return examiner_widgets_[activeExaminer_]->trackBallCenter();
00607 } else if ( _viewer == ALL_VIEWERS )
00608 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00609 return examiner_widgets_[i]->trackBallCenter( );
00610 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00611 return examiner_widgets_[_viewer]->trackBallCenter( );
00612 else
00613 std::cerr << "Requested illegal viewer for setTrackBallCenter!!" << std::endl;
00614
00615 return examiner_widgets_[activeExaminer_]->trackBallCenter();
00616 }
00617
00618 void setTrackBallCenter(const ACG::Vec3d& _center, int _viewer ) {
00619 if ( _viewer == ACTIVE_VIEWER ) {
00620 examiner_widgets_[activeExaminer_]->setTrackBallCenter( _center );
00621 } else if ( _viewer == ALL_VIEWERS )
00622 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00623 examiner_widgets_[i]->setTrackBallCenter( _center );
00624 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00625 examiner_widgets_[_viewer]->setTrackBallCenter( _center );
00626 else
00627 std::cerr << "Requested illegal viewer for setTrackBallCenter!!" << std::endl;
00628 }
00629
00630 void setScenePos(const ACG::Vec3d& _center,const double _radius, int _viewer ) {
00631 if ( _viewer == ACTIVE_VIEWER ) {
00632 examiner_widgets_[activeExaminer_]->setScenePos( _center, _radius );
00633 } else if ( _viewer == ALL_VIEWERS )
00634 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00635 examiner_widgets_[i]->setScenePos( _center, _radius );
00636 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00637 examiner_widgets_[_viewer]->setScenePos( _center, _radius );
00638 else
00639 std::cerr << "Requested illegal viewer for setScenePos!!" << std::endl;
00640 }
00641
00642 void setScenePos(const ACG::Vec3d& _center, int _viewer ) {
00643 if ( _viewer == ACTIVE_VIEWER ) {
00644 examiner_widgets_[activeExaminer_]->setScenePos( _center, examiner_widgets_[activeExaminer_]->scene_radius() );
00645 } else if ( _viewer == ALL_VIEWERS )
00646 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00647 examiner_widgets_[i]->setScenePos( _center, examiner_widgets_[i]->scene_radius() );
00648 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00649 examiner_widgets_[_viewer]->setScenePos( _center, examiner_widgets_[_viewer]->scene_radius() );
00650 else
00651 std::cerr << "Requested illegal viewer for setScenePos!!" << std::endl;
00652 }
00653
00654 void setSceneCenter(const ACG::Vec3d& _center, int _viewer) {
00655
00656 if (_viewer == ACTIVE_VIEWER) {
00657
00658 examiner_widgets_[activeExaminer_]->setSceneCenter(_center);
00659 } else if (_viewer == ALL_VIEWERS) {
00660
00661 for (uint i = 0; i < examiner_widgets_.size(); ++i) {
00662
00663 examiner_widgets_[i]->setSceneCenter(_center);
00664 }
00665 } else if ((_viewer >= 0) && _viewer < (int) examiner_widgets_.size()) {
00666
00667 examiner_widgets_[_viewer]->setSceneCenter(_center);
00668 } else {
00669 std::cerr << "Requested illegal viewer for setSceneCenter!!"
00670 << std::endl;
00671 }
00672 }
00673
00674 const ACG::Vec3d& sceneCenter(int _viewer) {
00675
00676 if (_viewer == ACTIVE_VIEWER) {
00677 return examiner_widgets_[activeExaminer_]->scene_center();
00678 } else if (_viewer == ALL_VIEWERS)
00679 std::cerr << "Please select viewer to get viewing direction!"
00680 << std::endl;
00681 else if ((_viewer >= 0) && _viewer < (int) examiner_widgets_.size())
00682 return examiner_widgets_[_viewer]->scene_center();
00683 else
00684 std::cerr << "Requested illegal viewer for sceneCenter!!" << std::endl;
00685
00686 return examiner_widgets_[activeExaminer_]->scene_center();
00687 }
00688
00689 double sceneRadius() {
00690 return examiner_widgets_[activeExaminer_]->scene_radius();
00691 }
00692
00693 double sceneRadius( int _viewer ) {
00694 if ( _viewer == ACTIVE_VIEWER ) {
00695 return examiner_widgets_[activeExaminer_]->scene_radius();
00696 } else if ( _viewer == ALL_VIEWERS )
00697 std::cerr << "Illegal request for scene radius. Please select one viewer!" << std::endl;
00698 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00699 return examiner_widgets_[_viewer]->scene_radius();
00700 else
00701 std::cerr << "Requested illegal viewer for translate!!" << std::endl;
00702
00703 return -1;
00704 }
00705
00706 void translate( const ACG::Vec3d &_vector , int _viewer ) {
00707 if ( _viewer == ACTIVE_VIEWER ) {
00708 examiner_widgets_[activeExaminer_]->translate(_vector);
00709 } else if ( _viewer == ALL_VIEWERS )
00710 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00711 examiner_widgets_[i]->translate(_vector);
00712 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00713 examiner_widgets_[_viewer]->translate(_vector);
00714 else
00715 std::cerr << "Requested illegal viewer for translate!!" << std::endl;
00716 }
00717
00718 void rotate(const ACG::Vec3d& _axis,
00719 const double _angle,
00720 const ACG::Vec3d& _center,
00721 int _viewer )
00722 {
00723 if ( _viewer == ACTIVE_VIEWER ) {
00724 examiner_widgets_[activeExaminer_]->rotate(_axis,_angle,_center);
00725 } else if ( _viewer == ALL_VIEWERS )
00726 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00727 examiner_widgets_[i]->rotate(_axis,_angle,_center);
00728 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00729 examiner_widgets_[_viewer]->rotate(_axis,_angle,_center);
00730 else
00731 std::cerr << "Requested illegal viewer for rotate!!" << std::endl;
00732 }
00733
00734 void viewHome(int _viewer) {
00735 if ( _viewer == ACTIVE_VIEWER ) {
00736 examiner_widgets_[activeExaminer_]->home();
00737 } else if ( _viewer == ALL_VIEWERS )
00738 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00739 examiner_widgets_[i]->home();
00740 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00741 examiner_widgets_[_viewer]->home();
00742 else
00743 std::cerr << "Requested illegal viewer for viewHome!!" << std::endl;
00744 }
00745
00746 void viewAll(int _viewer) {
00747 if ( _viewer == ACTIVE_VIEWER ) {
00748 examiner_widgets_[activeExaminer_]->viewAll();
00749 } else if ( _viewer == ALL_VIEWERS )
00750 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00751 examiner_widgets_[i]->viewAll();
00752 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00753 examiner_widgets_[_viewer]->viewAll();
00754 else
00755 std::cerr << "Requested illegal viewer for viewAll!!" << std::endl;
00756 }
00757
00758 ACG::Vec3d viewingDirection(int _viewer) {
00759 if ( _viewer == ACTIVE_VIEWER ) {
00760 return viewerProperties(activeExaminer_).glState().viewing_direction();
00761 } else if ( _viewer == ALL_VIEWERS )
00762 std::cerr << "Please select viewer to get viewing direction!" << std::endl;
00763 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00764 return viewerProperties(_viewer).glState().viewing_direction();
00765 else
00766 std::cerr << "Requested illegal viewer for viewingDirection!!" << std::endl;
00767
00768 return viewerProperties().glState().viewing_direction();
00769 }
00770
00771 bool isProjectionOrthographic( int _viewer ) {
00772
00773 if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() ){
00774
00775 if ( examiner_widgets_[_viewer]->projectionMode() == 0)
00776 return true;
00777 else
00778 return false;
00779
00780 } else
00781 std::cerr << "Requested illegal viewer for isProjectionOrthographic!!" << std::endl;
00782
00783 return false;
00784 }
00785
00786 ACG::Vec3d eyePos(int _viewer) {
00787 if ( _viewer == ACTIVE_VIEWER ) {
00788 return viewerProperties(activeExaminer_).glState().eye();
00789 } else if ( _viewer == ALL_VIEWERS )
00790 std::cerr << "Please select viewer to get eyePos!" << std::endl;
00791 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00792 return viewerProperties(_viewer).glState().eye();
00793 else
00794 std::cerr << "Requested illegal viewer for eyePos!!" << std::endl;
00795
00796 return viewerProperties().glState().eye();
00797 }
00798
00799 ACG::Vec3d upVector(int _viewer) {
00800 if ( _viewer == ACTIVE_VIEWER ) {
00801 return viewerProperties(activeExaminer_).glState().up();
00802 } else if ( _viewer == ALL_VIEWERS )
00803 std::cerr << "Please select viewer to get up vector!" << std::endl;
00804 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
00805 return viewerProperties(_viewer).glState().up();
00806 else
00807 std::cerr << "Requested illegal viewer for up vector!!" << std::endl;
00808
00809 return viewerProperties().glState().up();
00810 }
00811
00812 void setViewObjectMarker(ViewObjectMarker * _marker)
00813 {
00814 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
00815 PluginFunctions::viewerProperties(i).objectMarker(_marker);
00816 }
00817
00818 void setDefaultViewObjectMarker(ViewObjectMarker * _marker)
00819 {
00820 defaultMarker_ = _marker;
00821 }
00822
00823 ViewObjectMarker * defaultViewObjectMarker()
00824 {
00825 return defaultMarker_;
00826 }
00827
00828
00829 ACG::SceneGraph::BaseNode* getSceneGraphRootNode() {
00830 return PluginFunctions::sceneGraphRootNode_;
00831 }
00832
00833 ACG::SceneGraph::BaseNode* getRootNode() {
00834 return PluginFunctions::dataRootNode_;
00835 }
00836
00837 void addGlobalNode(ACG::SceneGraph::BaseNode* _node){
00838 if (PluginFunctions::sceneGraphRootNode_)
00839 _node->set_parent( PluginFunctions::sceneGraphRootNode_ );
00840 }
00841
00842
00843 void addObjectRenderingNode(ACG::SceneGraph::BaseNode* _node){
00844 if (PluginFunctions::sceneGraphRootNode_){
00845
00846
00847 ACG::SceneGraph::BaseNode* parent = dataRootNode_->parent();
00848
00849
00850 _node->set_parent(parent);
00851
00852
00853 dataRootNode_->set_parent(_node);
00854 }
00855
00856 }
00857
00858 int objectCount() {
00859 return(objectCounter_);
00860 }
00861
00862
00863
00864 int targetCount() {
00865 return ( targetCounter_ );
00866 }
00867
00868 int sourceCount() {
00869 int count = 0;
00870
00871
00872 for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::SOURCE_OBJECTS) ;
00873 o_it != PluginFunctions::objectsEnd(); ++o_it) {
00874 ++count;
00875 }
00876
00877 return ( count );
00878 }
00879
00880 int visibleCount() {
00881 int count = 0;
00882
00883
00884 for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS) ;
00885 o_it != PluginFunctions::objectsEnd(); ++o_it) {
00886 if ( o_it->visible() )
00887 ++count;
00888 }
00889
00890 return ( count );
00891
00892 }
00893
00894
00899 void get_all_objects( std::vector < BaseObjectData*>& _objects ) {
00900
00901 _objects.clear();
00902
00903
00904 for ( PluginFunctions::ObjectIterator o_it(PluginFunctions::ALL_OBJECTS,DATA_ALL) ;
00905 o_it != PluginFunctions::objectsEnd(); ++o_it) {
00906 _objects.push_back( *o_it );
00907 }
00908
00909 }
00910
00912 void flyTo (const ACG::Vec3d &_position, const ACG::Vec3d &_center, double _time) {
00913 examiner_widgets_[activeExaminer_]->flyTo(_position,_center,_time);
00914 }
00915
00916
00917
00918
00919
00920
00921 BaseObjectData* baseObjectData( BaseObject* _object ){
00922 if ( _object == 0 )
00923 return 0;
00924
00925 return dynamic_cast< BaseObjectData* >(_object);
00926 }
00927
00928
00929
00930
00931 BaseObject*& objectRoot() {
00932 return (objectRoot_);
00933 }
00934
00935 void increaseObjectCount() {
00936 objectCounter_++;
00937 }
00938
00939
00940 void decreaseObjectCount() {
00941 objectCounter_--;
00942
00943 if ( objectCounter_ < 0 )
00944 std::cerr << "Deleted more objects than created!!!" << std::endl;
00945 }
00946
00947 void increaseTargetCount() {
00948 targetCounter_++;
00949 }
00950
00951
00952 void decreaseTargetCount() {
00953 targetCounter_--;
00954
00955 if ( targetCounter_ < 0 )
00956 std::cerr << "target object counter underflow!!!" << std::endl;
00957 }
00958
00959
00960
00961
00962 void addObjectToMap(int _objectId, BaseObject* _object) {
00963
00964
00965 std::map<int, BaseObject*>::iterator it;
00966 it = objectMap_.find(_objectId);
00967
00968 if(it != objectMap_.end()) return;
00969
00970
00971 objectMap_.insert(std::pair<int, BaseObject*>(_objectId, _object));
00972 }
00973
00974
00975
00976
00977 void removeObjectFromMap(int _objectId) {
00978
00979
00980 std::map<int, BaseObject*>::iterator it;
00981 it = objectMap_.find(_objectId);
00982
00983
00984 if(it != objectMap_.end()) objectMap_.erase(it);
00985 }
00986
00987
00988 }