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