57 #include "PluginFunctionsCore.hh"
59 namespace PluginFunctions {
71 static std::vector< glViewer* > examiner_widgets_;
77 static std::vector< Viewer::ViewerProperties* > viewerProperties_;
83 static unsigned int activeExaminer_ = 0;
85 static bool internalLightHandling_ =
true;
124 static QGLWidget* shareGLWidget_ = 0;
128 static int viewerId_ = 0;
131 static int objectCounter_ = 0;
134 static int targetCounter_ = 0;
137 static std::map<int, BaseObject*> objectMap_;
147 return examiner_widgets_.size();
151 internalLightHandling_ =
false;
155 return internalLightHandling_;
163 PluginFunctions::examiner_widgets_ = _viewerWidgets;
164 PluginFunctions::examiner_widget_ = examiner_widgets_[0];
167 QTime time = QTime::currentTime();
168 qsrand( time.hour() * 10 + time.minute() * 100 + time.second() * 1000 + time.msec() * 10000 );
173 PluginFunctions::viewerProperties_ = _viewerProperties;
177 activeExaminer_ = _id;
181 if ( _viewerId < 0 || _viewerId >= (
int)examiner_widgets_.size() ) {
182 std::cerr <<
"Requested unknown viewer with id : " << _viewerId << std::endl;
186 return( examiner_widgets_[_viewerId] );
190 return activeExaminer_;
202 if ( _viewerId < 0 || _viewerId >= (
int)examiner_widgets_.size() ) {
203 std::cerr <<
"Requested unknown viewer with id : " << _viewerId << std::endl;
208 examiner_widgets_[_viewerId]->encodeView ( view );
219 if ( _viewerId < 0 || _viewerId >= (
int)examiner_widgets_.size() ) {
220 std::cerr <<
"Requested unknown viewer with id : " << _viewerId << std::endl;
224 examiner_widgets_[_viewerId]->decodeView ( _view );
232 PluginFunctions::dataSeparatorNode_ = _dataSeparatorNode;
235 if ( PluginFunctions::dataSeparatorNode_->nChildren() != 1 ){
236 std::cerr <<
"Only one child allowed for dataSeparatorNode on initialization!" << std::endl;
237 std::cerr <<
"The Core has initialized the scenegraph in a strange way!" << std::endl;
247 PluginFunctions::sceneGraphRootNode_ = _root_node;
251 PluginFunctions::sceneGraphRootNodeGlobal_ = _root_node;
256 if ( o_it->picked( _node_idx ) ) {
266 _identifiers.clear();
269 if ( o_it->source() )
270 _identifiers.push_back ( o_it->id() );
272 return ( ! _identifiers.empty() );
276 _identifiers.clear();
279 if ( o_it->target() )
280 _identifiers.push_back ( o_it->id() );
282 return ( !_identifiers.empty() );
291 if ( _identifier == -1 )
298 std::map<int, BaseObject*>::iterator it;
299 it = objectMap_.find(_identifier);
301 _object = (it != objectMap_.end() ? it->second : 0);
303 return ( _object != 0 );
308 if ( _identifier == -1 )
314 std::map<int, BaseObject*>::iterator it;
315 it = objectMap_.find(_identifier);
317 BaseObject*
object = (it != objectMap_.end() ? it->second : 0);
320 return ( _object != 0 );
324 if(_name.isEmpty())
return -1;
327 return object ?
object->
id() : -1;
333 bool object_exists(
const int _identifier ) {
335 if ( _identifier == -1 )
339 return (
object != 0 );
346 _identifiers.clear();
351 _identifiers.push_back( o_it->id() );
354 return (!_identifiers.empty());
357 bool get_all_object_identifiers( std::vector<int>& _identifiers ) {
359 _identifiers.clear();
364 _identifiers.push_back( o_it->id() );
367 return ( !_identifiers.empty() );
371 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
377 if ( (_viewer != ACTIVE_VIEWER ) && ( ( _viewer < 0 ) || _viewer >= (
int)examiner_widgets_.size()) ){
378 std::cerr <<
"Unable to set fixed view. Wrong viewer id (" << _viewer <<
")" << std::endl;
412 if ( _viewer == ACTIVE_VIEWER )
419 return examiner_widgets_[activeExaminer_]->glMapToGlobal(_point);
423 return examiner_widgets_[activeExaminer_]->glMapFromGlobal(_point);
428 if ( _viewer == ACTIVE_VIEWER )
430 else if ( _viewer == ALL_VIEWERS )
431 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
433 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
436 std::cerr <<
"Requested illegal viewer for setting DrawMode!!" << std::endl;
446 if ( _viewer == ACTIVE_VIEWER ) {
448 }
else if ( _viewer == ALL_VIEWERS )
449 std::cerr <<
"Please select viewer to get viewing direction!" << std::endl;
450 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
453 std::cerr <<
"Requested illegal viewer for viewingDirection!!" << std::endl;
460 return examiner_widgets_[activeExaminer_]->pick( _pickTarget,_mousePos,_nodeIdx,_targetIdx,_hitPointPtr );
465 if ( _examiner >= examiner_widgets_.size() ) {
466 std::cerr <<
"Wrong examiner id" << std::endl;
469 return examiner_widgets_[_examiner]->pick( _pickTarget,_mousePos,_nodeIdx,_targetIdx,_hitPointPtr );
473 const QRegion& _region,
474 QList<QPair<unsigned int, unsigned int> >& _list,
475 QVector<float>* _depths,
476 QVector<ACG::Vec3d>* _points)
478 return examiner_widgets_[activeExaminer_]->pick_region( _pickTarget, _region, _list, _depths, _points);
483 const QRegion& _region,
484 QList<QPair<unsigned int, unsigned int> >& _list,
485 QVector<float>* _depths,
486 QVector<ACG::Vec3d>* _points)
488 if ( _examiner >= examiner_widgets_.size() ) {
489 std::cerr <<
"Wrong examiner id" << std::endl;
492 return examiner_widgets_[_examiner]->pick_region( _pickTarget, _region, _list, _depths, _points);
524 shareGLWidget_ = _widget;
529 return shareGLWidget_;
537 if ( _id >= (
int)viewerProperties_.size() ) {
538 std::cerr <<
" Error, requested properties for non-existing Viewer!" << std::endl;
539 return dummyProperties;
543 _id = activeExaminer_;
545 return ( *viewerProperties_[_id] );
550 if ( _viewer == ACTIVE_VIEWER ) {
551 examiner_widgets_[activeExaminer_]->perspectiveProjection();
552 }
else if ( _viewer == ALL_VIEWERS )
553 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
555 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
558 std::cerr <<
"Requested illegal viewer for perspectiveProjection()!!" << std::endl;
562 if ( _viewer == ACTIVE_VIEWER ) {
563 examiner_widgets_[activeExaminer_]->orthographicProjection();
564 }
else if ( _viewer == ALL_VIEWERS )
565 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
567 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
570 std::cerr <<
"Requested illegal viewer for orthographicProjection()!!" << std::endl;
576 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
577 examiner_widgets_[i]->
setFOVY(_fovy);
581 if ( _viewer == ACTIVE_VIEWER ) {
582 examiner_widgets_[activeExaminer_]->allowRotation(_mode);
583 }
else if ( _viewer == ALL_VIEWERS )
584 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
586 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
589 std::cerr <<
"Requested illegal viewer for allowRotation!!" << std::endl;
593 if ( _viewer == ACTIVE_VIEWER )
601 if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
605 std::cerr <<
"Requested illegal viewer for isRotationAllowed!!" << std::endl;
615 if ( _viewer == ACTIVE_VIEWER ) {
616 examiner_widgets_[activeExaminer_]->viewingDirection(_dir,_up);
617 }
else if ( _viewer == ALL_VIEWERS )
618 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
620 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
623 std::cerr <<
"Requested illegal viewer for viewingDirection!!" << std::endl;
628 if ( _viewer == ACTIVE_VIEWER ) {
629 examiner_widgets_[activeExaminer_]->lookAt(_eye,_center, _up);
630 }
else if ( _viewer == ALL_VIEWERS )
631 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
632 examiner_widgets_[i]->
lookAt(_eye,_center, _up);
633 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
634 examiner_widgets_[_viewer]->
lookAt(_eye,_center, _up);
636 std::cerr <<
"Requested illegal viewer for viewingDirection!!" << std::endl;
640 if ( _viewer == ACTIVE_VIEWER ) {
641 return examiner_widgets_[activeExaminer_]->trackBallCenter();
642 }
else if ( _viewer == ALL_VIEWERS )
643 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
645 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
648 std::cerr <<
"Requested illegal viewer for setTrackBallCenter!!" << std::endl;
650 return examiner_widgets_[activeExaminer_]->trackBallCenter();
654 if ( _viewer == ACTIVE_VIEWER ) {
655 examiner_widgets_[activeExaminer_]->setTrackBallCenter( _center );
656 }
else if ( _viewer == ALL_VIEWERS )
657 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
659 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
662 std::cerr <<
"Requested illegal viewer for setTrackBallCenter!!" << std::endl;
666 if ( _viewer == ACTIVE_VIEWER ) {
667 examiner_widgets_[activeExaminer_]->setScenePos( _center, _radius );
668 }
else if ( _viewer == ALL_VIEWERS )
669 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
670 examiner_widgets_[i]->
setScenePos( _center, _radius );
671 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
672 examiner_widgets_[_viewer]->
setScenePos( _center, _radius );
674 std::cerr <<
"Requested illegal viewer for setScenePos!!" << std::endl;
678 if ( _viewer == ACTIVE_VIEWER ) {
679 examiner_widgets_[activeExaminer_]->setScenePos( _center, examiner_widgets_[activeExaminer_]->scene_radius() );
680 }
else if ( _viewer == ALL_VIEWERS )
681 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
682 examiner_widgets_[i]->
setScenePos( _center, examiner_widgets_[i]->scene_radius() );
683 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
684 examiner_widgets_[_viewer]->
setScenePos( _center, examiner_widgets_[_viewer]->scene_radius() );
686 std::cerr <<
"Requested illegal viewer for setScenePos!!" << std::endl;
691 if (_viewer == ACTIVE_VIEWER) {
692 examiner_widgets_[activeExaminer_]->setSceneCenter(_center);
693 }
else if (_viewer == ALL_VIEWERS) {
695 for (uint i = 0; i < examiner_widgets_.size(); ++i) {
696 examiner_widgets_[i]->setSceneCenter(_center);
698 }
else if ((_viewer >= 0) && _viewer < (
int) examiner_widgets_.size()) {
699 examiner_widgets_[_viewer]->setSceneCenter(_center);
701 std::cerr <<
"Requested illegal viewer for setSceneCenter!!" << std::endl;
707 if (_viewer == ACTIVE_VIEWER) {
708 return examiner_widgets_[activeExaminer_]->scene_center();
709 }
else if (_viewer == ALL_VIEWERS)
710 std::cerr <<
"Please select viewer to get sceneCenter!" << std::endl;
711 else if ((_viewer >= 0) && _viewer < (
int) examiner_widgets_.size())
712 return examiner_widgets_[_viewer]->scene_center();
714 std::cerr <<
"Requested illegal viewer for sceneCenter!!" << std::endl;
716 return examiner_widgets_[activeExaminer_]->scene_center();
720 return examiner_widgets_[activeExaminer_]->scene_radius();
724 if ( _viewer == ACTIVE_VIEWER ) {
725 return examiner_widgets_[activeExaminer_]->scene_radius();
726 }
else if ( _viewer == ALL_VIEWERS )
727 std::cerr <<
"Illegal request for scene radius. Please select one viewer!" << std::endl;
728 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
729 return examiner_widgets_[_viewer]->scene_radius();
731 std::cerr <<
"Requested illegal viewer for translate!!" << std::endl;
737 if ( _viewer == ACTIVE_VIEWER ) {
738 examiner_widgets_[activeExaminer_]->translate(_vector);
739 }
else if ( _viewer == ALL_VIEWERS )
740 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
741 examiner_widgets_[i]->
translate(_vector);
742 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
743 examiner_widgets_[_viewer]->
translate(_vector);
745 std::cerr <<
"Requested illegal viewer for translate!!" << std::endl;
753 if ( _viewer == ACTIVE_VIEWER ) {
754 examiner_widgets_[activeExaminer_]->rotate(_axis,_angle,_center);
755 }
else if ( _viewer == ALL_VIEWERS )
756 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
757 examiner_widgets_[i]->
rotate(_axis,_angle,_center);
758 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
759 examiner_widgets_[_viewer]->
rotate(_axis,_angle,_center);
761 std::cerr <<
"Requested illegal viewer for rotate!!" << std::endl;
765 if ( _viewer == ACTIVE_VIEWER ) {
766 examiner_widgets_[activeExaminer_]->home();
767 }
else if ( _viewer == ALL_VIEWERS )
768 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
769 examiner_widgets_[i]->home();
770 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
771 examiner_widgets_[_viewer]->home();
773 std::cerr <<
"Requested illegal viewer for viewHome!!" << std::endl;
777 if ( _viewer == ACTIVE_VIEWER ) {
778 examiner_widgets_[activeExaminer_]->viewAll();
779 }
else if ( _viewer == ALL_VIEWERS )
780 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
781 examiner_widgets_[i]->
viewAll();
782 else if ( ( _viewer >= 0 ) && _viewer < (int)examiner_widgets_.size() )
783 examiner_widgets_[_viewer]->
viewAll();
785 std::cerr <<
"Requested illegal viewer for viewAll!!" << std::endl;
789 if ( _viewer == ACTIVE_VIEWER ) {
791 }
else if ( _viewer == ALL_VIEWERS )
792 std::cerr <<
"Please select viewer to get viewing direction!" << std::endl;
793 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
796 std::cerr <<
"Requested illegal viewer for viewingDirection!!" << std::endl;
803 if ( _viewer == ACTIVE_VIEWER) {
804 return (examiner_widgets_[activeExaminer_]->projectionMode() == 0);
805 }
else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() ){
806 return ( examiner_widgets_[_viewer]->projectionMode() == 0);
808 std::cerr <<
"Requested illegal viewer for isProjectionOrthographic!!" << std::endl;
814 if ( _viewer == ACTIVE_VIEWER ) {
816 }
else if ( _viewer == ALL_VIEWERS )
817 std::cerr <<
"Please select viewer to get eyePos!" << std::endl;
818 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
821 std::cerr <<
"Requested illegal viewer for eyePos!!" << std::endl;
827 if ( _viewer == ACTIVE_VIEWER ) {
829 }
else if ( _viewer == ALL_VIEWERS )
830 std::cerr <<
"Please select viewer to get up vector!" << std::endl;
831 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
834 std::cerr <<
"Requested illegal viewer for up vector!!" << std::endl;
841 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
847 defaultMarker_ = _marker;
852 return defaultMarker_;
857 return PluginFunctions::sceneGraphRootNode_;
861 return PluginFunctions::dataRootNode_;
865 if (PluginFunctions::sceneGraphRootNode_){
879 if (PluginFunctions::sceneGraphRootNode_)
880 _node->
set_parent( PluginFunctions::sceneGraphRootNodeGlobal_ );
885 if (PluginFunctions::sceneGraphRootNode_){
900 return(objectCounter_);
906 return ( targetCounter_ );
927 if ( o_it->visible() )
947 _objects.push_back( *o_it );
955 examiner_widgets_[activeExaminer_]->flyTo(_position,_center,_time);
963 ACG::Vec3d e = eye + t * (_move_back ? -0.5f : 0.5f);
964 examiner_widgets_[activeExaminer_]->flyTo(e, _center, _time);
969 void viewerSnapshot(
int _viewer, QImage& _image,
int _width,
int _height,
bool _alpha,
970 bool _hideCoordsys,
int _samples) {
972 if ( _viewer == ACTIVE_VIEWER ) {
973 examiner_widgets_[activeExaminer_]->snapshot(_image, _width, _height, _alpha, _hideCoordsys, _samples);
974 }
else if ( _viewer == ALL_VIEWERS )
975 std::cerr <<
"Please select viewer to get snapshot!" << std::endl;
976 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
977 examiner_widgets_[_viewer]->snapshot(_image, _width, _height, _alpha, _hideCoordsys, _samples);
979 std::cerr <<
"Requested illegal viewer for snapshot!!" << std::endl;
999 return (objectRoot_);
1010 if ( objectCounter_ < 0 )
1011 std::cerr <<
"Deleted more objects than created!!!" << std::endl;
1022 if ( targetCounter_ < 0 )
1023 std::cerr <<
"target object counter underflow!!!" << std::endl;
1032 std::map<int, BaseObject*>::iterator it;
1033 it = objectMap_.find(_objectId);
1035 if(it != objectMap_.end())
return;
1038 objectMap_.insert(std::pair<int, BaseObject*>(_objectId, _object));
1047 std::map<int, BaseObject*>::iterator it;
1048 it = objectMap_.find(_objectId);
1051 if(it != objectMap_.end()) objectMap_.erase(it);
1071 QWidget * parent,
const QString & caption,
1072 const QString & defaultDir,
const QString & filter,
1073 QString * selectedFilter, QFileDialog::Options options) {
1075 const QString dir = OpenFlipperSettings().
value(configProperty, defaultDir).toString();
1077 filter, selectedFilter, options);
1078 if (result.length())
1079 OpenFlipperSettings().
setValue(configProperty, result);
1084 QWidget * parent,
const QString & caption,
1085 const QString & defaultDir,
const QString & filter,
1086 QString * selectedFilter, QFileDialog::Options options) {
1088 const QString dir = OpenFlipperSettings().
value(configProperty, defaultDir).toString();
1090 filter, selectedFilter, options);
1091 if (result.length())
1092 OpenFlipperSettings().
setValue(configProperty, result);