52#include "PluginFunctionsCore.hh"
54#include <ACG/Scenegraph/SeparatorNode.hh>
55#include <ACG/Scenegraph/MaterialNode.hh>
57#include <QRandomGenerator>
71static std::vector< glViewer* > examiner_widgets_;
77static std::vector< Viewer::ViewerProperties* > viewerProperties_;
83static unsigned int activeExaminer_ = 0;
85static bool internalLightHandling_ =
true;
124static OFGLWidget* shareGLWidget_ = 0;
128static int viewerId_ = 0;
131static int objectCounter_ = 0;
134static int targetCounter_ = 0;
137static std::map<int, BaseObject*> objectMap_;
147 return examiner_widgets_.size();
151 internalLightHandling_ =
false;
155 return internalLightHandling_;
163static QVector<QPair<QString, QString>> pluginCommandLineOptions_;
169void setViewers(
const std::vector< glViewer* >& _viewerWidgets ) {
170 PluginFunctions::examiner_widgets_ = _viewerWidgets;
171 PluginFunctions::examiner_widget_ = examiner_widgets_[0];
174 QTime time = QTime::currentTime();
175 QRandomGenerator randi(time.hour() * 10 + time.minute() * 100 + time.second() * 1000 + time.msec() * 10000);
176 viewerId_ =
static_cast<int>(randi.generate());
180 PluginFunctions::viewerProperties_ = _viewerProperties;
184 activeExaminer_ = _id;
188 if ( _viewerId < 0 || _viewerId >= (
int)examiner_widgets_.size() ) {
189 std::cerr <<
"Requested unknown viewer with id : " << _viewerId << std::endl;
193 return( examiner_widgets_[_viewerId] );
197 return activeExaminer_;
209 if ( _viewerId < 0 || _viewerId >= (
int)examiner_widgets_.size() ) {
210 std::cerr <<
"Requested unknown viewer with id : " << _viewerId << std::endl;
215 examiner_widgets_[_viewerId]->encodeView ( view );
227 if ( _viewerId < 0 || _viewerId >= (
int)examiner_widgets_.size() ) {
228 std::cerr <<
"Requested unknown viewer with id : " << _viewerId << std::endl;
233 examiner_widgets_[_viewerId]->decodeView ( _view );
241 PluginFunctions::dataSeparatorNode_ = _dataSeparatorNode;
244 if ( PluginFunctions::dataSeparatorNode_->nChildren() != 1 ){
245 std::cerr <<
"Only one child allowed for dataSeparatorNode on initialization!" << std::endl;
246 std::cerr <<
"The Core has initialized the scenegraph in a strange way!" << std::endl;
256 PluginFunctions::sceneGraphRootNode_ = _root_node;
260 PluginFunctions::sceneGraphRootNodeGlobal_ = _root_node;
265 if ( o_it->picked( _node_idx ) ) {
275 _identifiers.clear();
278 if ( o_it->source() )
279 _identifiers.push_back ( o_it->id() );
281 return ( ! _identifiers.empty() );
285 _identifiers.clear();
288 if ( o_it->target() )
289 _identifiers.push_back ( o_it->id() );
291 return ( !_identifiers.empty() );
300 if ( _identifier == -1 )
307 std::map<int, BaseObject*>::iterator it;
308 it = objectMap_.find(_identifier);
310 _object = (it != objectMap_.end() ? it->second : 0);
312 return ( _object != 0 );
317 if ( _identifier == -1 )
323 std::map<int, BaseObject*>::iterator it;
324 it = objectMap_.find(_identifier);
326 BaseObject*
object = (it != objectMap_.end() ? it->second : 0);
329 return ( _object != 0 );
333 if(_name.isEmpty())
return -1;
336 return object ?
object->
id() : -1;
344 if ( _identifier == -1 )
348 return (
object != 0 );
355 _identifiers.clear();
359 _identifiers.push_back( o_it->id() );
362 return (!_identifiers.empty());
367 _identifiers.clear();
371 _identifiers.push_back( o_it->id() );
374 return ( !_identifiers.empty() );
378 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
384 if ( (_viewer != ACTIVE_VIEWER ) && ( ( _viewer < 0 ) || _viewer >= (
int)examiner_widgets_.size()) ){
385 std::cerr <<
"Unable to set fixed view. Wrong viewer id (" << _viewer <<
")" << std::endl;
419 if ( _viewer == ACTIVE_VIEWER )
426 return examiner_widgets_[activeExaminer_]->glMapToGlobal(_point);
430 return examiner_widgets_[activeExaminer_]->glMapFromGlobal(_point);
435 if ( _viewer == ACTIVE_VIEWER )
437 else if ( _viewer == ALL_VIEWERS )
438 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
440 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
443 std::cerr <<
"Requested illegal viewer for setting DrawMode!!" << std::endl;
453 if ( _viewer == ACTIVE_VIEWER ) {
455 }
else if ( _viewer == ALL_VIEWERS )
456 std::cerr <<
"Please select viewer to get viewing direction!" << std::endl;
457 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
460 std::cerr <<
"Requested illegal viewer for viewingDirection!!" << std::endl;
469 viewingRay(_x,_y,_outOrigin,_outDirection,activeExaminer_);
482 return examiner_widgets_[activeExaminer_]->pick( _pickTarget,_mousePos,_nodeIdx,_targetIdx,_hitPointPtr );
488 if ( _examiner >= examiner_widgets_.size() ) {
489 std::cerr <<
"Wrong examiner id" << std::endl;
492 return examiner_widgets_[_examiner]->pick( _pickTarget,_mousePos,_nodeIdx,_targetIdx,_hitPointPtr );
499 const QPoint & _mousePos,
507 bool ok =
scenegraphPick(_examiner,_pickTarget,_mousePos, nodeIdx,_targetIdx,_hitPointPtr);
512 if ( _refine && (_hitPointPtr != 0) ) {
516 double x = mouse_pos.x();
517 double y = examiner_widget_->
glHeight() - mouse_pos.y();
524 *_hitPointPtr = _object->
refinePick(_pickTarget,*_hitPointPtr, mousePoint3d , direction , _targetIdx );
535 const QPoint & _mousePos,
541 return scenegraphPick(activeExaminer_,_pickTarget,_mousePos, _object,_targetIdx,_refine,_hitPointPtr );
549 const QRegion& _region,
550 QList<QPair<size_t, size_t> >& _list,
551 QVector<float>* _depths,
552 QVector<ACG::Vec3d>* _points)
554 return examiner_widgets_[activeExaminer_]->pick_region( _pickTarget, _region, _list, _depths, _points);
559 const QRegion& _region,
560 QList<QPair<size_t, size_t> >& _list,
561 QVector<float>* _depths,
562 QVector<ACG::Vec3d>* _points)
564 if ( _examiner >= examiner_widgets_.size() ) {
565 std::cerr <<
"Wrong examiner id" << std::endl;
568 return examiner_widgets_[_examiner]->pick_region( _pickTarget, _region, _list, _depths, _points);
600 shareGLWidget_ = _widget;
605 return shareGLWidget_;
613 if ( _id >= (
int)viewerProperties_.size() ) {
614 std::cerr <<
" Error, requested properties for non-existing Viewer!" << std::endl;
615 return dummyProperties;
619 _id = activeExaminer_;
621 return ( *viewerProperties_[_id] );
626 if ( _viewer == ACTIVE_VIEWER ) {
627 examiner_widgets_[activeExaminer_]->perspectiveProjection();
628 }
else if ( _viewer == ALL_VIEWERS )
629 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
631 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
632 examiner_widgets_[_viewer]->perspectiveProjection();
634 std::cerr <<
"Requested illegal viewer for perspectiveProjection()!!" << std::endl;
638 if ( _viewer == ACTIVE_VIEWER ) {
639 examiner_widgets_[activeExaminer_]->orthographicProjection();
640 }
else if ( _viewer == ALL_VIEWERS )
641 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
643 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
644 examiner_widgets_[_viewer]->orthographicProjection();
646 std::cerr <<
"Requested illegal viewer for orthographicProjection()!!" << std::endl;
652 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
653 examiner_widgets_[i]->
setFOVY(_fovy);
657 if ( _viewer == ACTIVE_VIEWER ) {
658 examiner_widgets_[activeExaminer_]->allowRotation(_mode);
659 }
else if ( _viewer == ALL_VIEWERS )
660 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
662 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
663 examiner_widgets_[_viewer]->allowRotation(_mode);
665 std::cerr <<
"Requested illegal viewer for allowRotation!!" << std::endl;
669 if ( _viewer == ACTIVE_VIEWER )
677 if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
678 return examiner_widgets_[_viewer]->allowRotation();
681 std::cerr <<
"Requested illegal viewer for isRotationAllowed!!" << std::endl;
691 if ( _viewer == ACTIVE_VIEWER ) {
692 examiner_widgets_[activeExaminer_]->viewingDirection(_dir,_up);
693 }
else if ( _viewer == ALL_VIEWERS )
694 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
696 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
697 examiner_widgets_[_viewer]->viewingDirection(_dir,_up);
699 std::cerr <<
"Requested illegal viewer for viewingDirection!!" << std::endl;
704 if ( _viewer == ACTIVE_VIEWER ) {
705 examiner_widgets_[activeExaminer_]->lookAt(_eye,_center, _up);
706 }
else if ( _viewer == ALL_VIEWERS )
707 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
708 examiner_widgets_[i]->
lookAt(_eye,_center, _up);
709 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
710 examiner_widgets_[_viewer]->lookAt(_eye,_center, _up);
712 std::cerr <<
"Requested illegal viewer for viewingDirection!!" << std::endl;
716 if ( _viewer == ACTIVE_VIEWER ) {
717 return examiner_widgets_[activeExaminer_]->trackBallCenter();
718 }
else if ( _viewer == ALL_VIEWERS )
719 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
721 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
722 return examiner_widgets_[_viewer]->trackBallCenter( );
724 std::cerr <<
"Requested illegal viewer for setTrackBallCenter!!" << std::endl;
726 return examiner_widgets_[activeExaminer_]->trackBallCenter();
730 if ( _viewer == ACTIVE_VIEWER ) {
731 examiner_widgets_[activeExaminer_]->setTrackBallCenter( _center );
732 }
else if ( _viewer == ALL_VIEWERS )
733 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
735 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
736 examiner_widgets_[_viewer]->setTrackBallCenter( _center );
738 std::cerr <<
"Requested illegal viewer for setTrackBallCenter!!" << std::endl;
742 if ( _viewer == ACTIVE_VIEWER ) {
743 examiner_widgets_[activeExaminer_]->setScenePos( _center, _radius );
744 }
else if ( _viewer == ALL_VIEWERS )
745 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
746 examiner_widgets_[i]->
setScenePos( _center, _radius );
747 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
748 examiner_widgets_[_viewer]->setScenePos( _center, _radius );
750 std::cerr <<
"Requested illegal viewer for setScenePos!!" << std::endl;
754 if ( _viewer == ACTIVE_VIEWER ) {
755 examiner_widgets_[activeExaminer_]->setScenePos( _center, examiner_widgets_[activeExaminer_]->scene_radius() );
756 }
else if ( _viewer == ALL_VIEWERS )
757 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
758 examiner_widgets_[i]->
setScenePos( _center, examiner_widgets_[i]->scene_radius() );
759 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
760 examiner_widgets_[_viewer]->setScenePos( _center, examiner_widgets_[_viewer]->scene_radius() );
762 std::cerr <<
"Requested illegal viewer for setScenePos!!" << std::endl;
767 if (_viewer == ACTIVE_VIEWER) {
768 examiner_widgets_[activeExaminer_]->setSceneCenter(_center);
769 }
else if (_viewer == ALL_VIEWERS) {
771 for (uint i = 0; i < examiner_widgets_.size(); ++i) {
772 examiner_widgets_[i]->setSceneCenter(_center);
774 }
else if ((_viewer >= 0) && _viewer < (
int) examiner_widgets_.size()) {
775 examiner_widgets_[_viewer]->setSceneCenter(_center);
777 std::cerr <<
"Requested illegal viewer for setSceneCenter!!" << std::endl;
783 if (_viewer == ACTIVE_VIEWER) {
784 return examiner_widgets_[activeExaminer_]->scene_center();
785 }
else if (_viewer == ALL_VIEWERS)
786 std::cerr <<
"Please select viewer to get sceneCenter!" << std::endl;
787 else if ((_viewer >= 0) && _viewer < (
int) examiner_widgets_.size())
788 return examiner_widgets_[_viewer]->scene_center();
790 std::cerr <<
"Requested illegal viewer for sceneCenter!!" << std::endl;
792 return examiner_widgets_[activeExaminer_]->scene_center();
796 return examiner_widgets_[activeExaminer_]->scene_radius();
800 if ( _viewer == ACTIVE_VIEWER ) {
801 return examiner_widgets_[activeExaminer_]->scene_radius();
802 }
else if ( _viewer == ALL_VIEWERS )
803 std::cerr <<
"Illegal request for scene radius. Please select one viewer!" << std::endl;
804 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
805 return examiner_widgets_[_viewer]->scene_radius();
807 std::cerr <<
"Requested illegal viewer for translate!!" << std::endl;
813 if ( _viewer == ACTIVE_VIEWER ) {
814 examiner_widgets_[activeExaminer_]->setSceneRadius(_radius);
815 }
else if ( _viewer == ALL_VIEWERS )
816 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
818 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
819 examiner_widgets_[_viewer]->setSceneRadius(_radius);
821 std::cerr <<
"Requested illegal viewer for translate!!" << std::endl;
825 if ( _viewer == ACTIVE_VIEWER ) {
826 examiner_widgets_[activeExaminer_]->translate(_vector);
827 }
else if ( _viewer == ALL_VIEWERS )
828 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
829 examiner_widgets_[i]->
translate(_vector);
830 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
831 examiner_widgets_[_viewer]->translate(_vector);
833 std::cerr <<
"Requested illegal viewer for translate!!" << std::endl;
841 if ( _viewer == ACTIVE_VIEWER ) {
842 examiner_widgets_[activeExaminer_]->rotate(_axis,_angle,_center);
843 }
else if ( _viewer == ALL_VIEWERS )
844 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
845 examiner_widgets_[i]->
rotate(_axis,_angle,_center);
846 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
847 examiner_widgets_[_viewer]->rotate(_axis,_angle,_center);
849 std::cerr <<
"Requested illegal viewer for rotate!!" << std::endl;
853 if ( _viewer == ACTIVE_VIEWER ) {
854 examiner_widgets_[activeExaminer_]->home();
855 }
else if ( _viewer == ALL_VIEWERS )
856 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
857 examiner_widgets_[i]->home();
858 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
859 examiner_widgets_[_viewer]->home();
861 std::cerr <<
"Requested illegal viewer for viewHome!!" << std::endl;
865 if ( _viewer == ACTIVE_VIEWER ) {
866 examiner_widgets_[activeExaminer_]->viewAll();
867 }
else if ( _viewer == ALL_VIEWERS )
868 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
869 examiner_widgets_[i]->
viewAll();
870 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
871 examiner_widgets_[_viewer]->viewAll();
873 std::cerr <<
"Requested illegal viewer for viewAll!!" << std::endl;
877 if ( _viewer == ACTIVE_VIEWER ) {
879 }
else if ( _viewer == ALL_VIEWERS )
880 std::cerr <<
"Please select viewer to get viewing direction!" << std::endl;
881 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
884 std::cerr <<
"Requested illegal viewer for viewingDirection!!" << std::endl;
891 if ( _viewer == ACTIVE_VIEWER) {
892 return (examiner_widgets_[activeExaminer_]->projectionMode() == 0);
893 }
else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() ){
894 return ( examiner_widgets_[_viewer]->projectionMode() == 0);
896 std::cerr <<
"Requested illegal viewer for isProjectionOrthographic!!" << std::endl;
902 if ( _viewer == ACTIVE_VIEWER ) {
904 }
else if ( _viewer == ALL_VIEWERS )
905 std::cerr <<
"Please select viewer to get eyePos!" << std::endl;
906 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
909 std::cerr <<
"Requested illegal viewer for eyePos!!" << std::endl;
915 if ( _viewer == ACTIVE_VIEWER ) {
917 }
else if ( _viewer == ALL_VIEWERS )
918 std::cerr <<
"Please select viewer to get up vector!" << std::endl;
919 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
922 std::cerr <<
"Requested illegal viewer for up vector!!" << std::endl;
931 if ( _viewer == ACTIVE_VIEWER ) {
933 }
else if ( _viewer == ALL_VIEWERS )
934 std::cerr <<
"Please select viewer to get fovy!" << std::endl;
935 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
938 std::cerr <<
"Requested illegal viewer for fovy!!" << std::endl;
945 for ( uint i = 0 ; i < examiner_widgets_.size(); ++i )
951 defaultMarker_ = _marker;
956 return defaultMarker_;
970 return PluginFunctions::sceneGraphRootNode_;
974 return PluginFunctions::dataRootNode_;
978 if (PluginFunctions::sceneGraphRootNode_){
992 if (PluginFunctions::sceneGraphRootNode_)
993 _node->
set_parent( PluginFunctions::sceneGraphRootNodeGlobal_ );
998 if (PluginFunctions::sceneGraphRootNode_){
1013 return(objectCounter_);
1019 return ( targetCounter_ );
1038 if ( o_it->visible() )
1057 _objects.push_back( o_it );
1065 examiner_widgets_[activeExaminer_]->flyTo(_position,_center,_time);
1073 ACG::Vec3d e = eye + t * (_move_back ? -0.5f : 0.5f);
1074 examiner_widgets_[activeExaminer_]->flyTo(e, _center, _time);
1079void viewerSnapshot(
int _viewer, QImage& _image,
int _width,
int _height,
bool _alpha,
1080 bool _hideCoordsys,
int _samples) {
1082 if ( _viewer == ACTIVE_VIEWER ) {
1083 examiner_widgets_[activeExaminer_]->snapshot(_image, _width, _height, _alpha, _hideCoordsys, _samples);
1084 }
else if ( _viewer == ALL_VIEWERS )
1085 std::cerr <<
"Please select viewer to get snapshot!" << std::endl;
1086 else if ( ( _viewer >= 0 ) && _viewer < (
int)examiner_widgets_.size() )
1087 examiner_widgets_[_viewer]->snapshot(_image, _width, _height, _alpha, _hideCoordsys, _samples);
1089 std::cerr <<
"Requested illegal viewer for snapshot!!" << std::endl;
1109 return (objectRoot_);
1120 if ( objectCounter_ < 0 )
1121 std::cerr <<
"Deleted more objects than created!!!" << std::endl;
1132 if ( targetCounter_ < 0 )
1133 std::cerr <<
"target object counter underflow!!!" << std::endl;
1142 std::map<int, BaseObject*>::iterator it;
1143 it = objectMap_.find(_objectId);
1145 if(it != objectMap_.end())
return;
1148 objectMap_.insert(std::pair<int, BaseObject*>(_objectId, _object));
1157 std::map<int, BaseObject*>::iterator it;
1158 it = objectMap_.find(_objectId);
1161 if(it != objectMap_.end()) objectMap_.erase(it);
1176QMap< std::string ,ACG::QtWidgets::SceneGraphWidgetGenerator* > getSceneGraphGeneratorList(){
1181 QWidget * parent,
const QString & caption,
1182 const QString & defaultDir,
const QString & filter,
1183 QString * selectedFilter, QFileDialog::Options options) {
1186 const QString result = QFileDialog::getOpenFileName(parent, caption, dir,
1187 filter, selectedFilter, options);
1188 if (result.length())
1194 QWidget * parent,
const QString & caption,
1195 const QString & defaultDir,
const QString & filter,
1196 QString * selectedFilter, QFileDialog::Options options,
1197 const QString & defaultSuffix) {
1209 QFileDialog dialog(parent, caption, dir, filter);
1210 dialog.setOptions(options);
1211 dialog.setAcceptMode(QFileDialog::AcceptSave);
1212 if (selectedFilter && !selectedFilter->isEmpty())
1213 dialog.selectNameFilter(*selectedFilter);
1214 dialog.setDefaultSuffix(defaultSuffix);
1215 if (dialog.exec() == QDialog::Accepted) {
1217 *selectedFilter = dialog.selectedNameFilter();
1218 QString result = dialog.selectedFiles().value(0);
1228 if (visibleOnly && !o_it->visible())
continue;
1229 result.append(o_it->getAllCommentsFlat());
1235 if (!ACG::SceneGraph::Material::support_json_serialization())
1236 return QStringList();
1241 if (visibleOnly && !o_it->visible())
continue;
1243 QString materialStr(QObject::tr(
"<not available>"));
1244 if (!o_it->materialNode())
1245 materialStr = QObject::tr(
"<not available: materialNode == null>");
1247 materialStr = o_it->materialNode()->material().serializeToJson();
1249 if (!result.empty())
1250 result.last().append(QString::fromUtf8(
","));
1251 result.append(QString::fromUtf8(
"\"%1\": %2").arg(o_it->name()).arg(materialStr));
1256void invalidatePickCaches() {
1257 for(
size_t i = 0; i < examiner_widgets_.size(); ++i) {
1258 examiner_widgets_[i]->invalidatePickCache();
1272 return pluginCommandLineOptions_;
1277 pluginCommandLineOptions_ = _pluginCommandLineOptions;
DLLEXPORT DataType typeId(QString _name)
Given a dataType Identifier string this function will return the id of the datatype.
const DataType DATA_ALL(UINT_MAX)
Identifier for all available objects.
DLLEXPORT OpenFlipperQSettings & OpenFlipperSettings()
QSettings object containing all program settings of OpenFlipper.
ActionMode
Enum listing action modes of the viewers.
Vec3d eye() const
get eye point
Vec3d viewing_direction() const
get viewing ray
void viewing_ray(int _x, int _y, Vec3d &_origin, Vec3d &_direction) const
double fovy() const
get field of view in y direction
Vec3d up() const
get up-vector w.r.t. camera coordinates
ChildIter childrenBegin()
Returns: begin-iterator of children.
BaseNode * parent()
Get the nodes parent node.
void set_parent(BaseNode *_parent)
Set the parent of this node.
virtual ACG::Vec3d refinePick(ACG::SceneGraph::PickTarget _pickTarget, const ACG::Vec3d _hitPoint, const ACG::Vec3d _start, const ACG::Vec3d _dir, const unsigned int _targetIdx)
Refine picking.
BaseObject * childExists(int _objectId)
Check if the element exists in the subtree of this element.
QVariant value(const QString &key, const QVariant &defaultValue=QVariant()) const
void setValue(const QString &key, const QVariant &value)
Wrapper function which makes it possible to enable Debugging output with -DOPENFLIPPER_SETTINGS_DEBUG...
Range adapter for ObjectIterator.
Range adapter for ObjectIterator.
int currentViewingDirection()
Pointer to the glState of the Viewer.
void objectMarker(ViewObjectMarker *_marker)
set object marker for viewer
ACG::Vec4f backgroundColor()
Get current background color.
Viewer::ActionMode actionMode()
get the action mode
void drawMode(ACG::SceneGraph::DrawModes::DrawMode _mode)
set draw mode (No test if this mode is available!)
std::string pickMode()
get active pick mode
QPoint adjustForDevicePixelRatio(QPoint const &point) const
adjust point for DPR
ACG::GLState & glState()
Get the glState of the Viewer.
bool rotationLocked()
Pointer to the glState of the Viewer.
virtual void makeCurrent()
Makes this widget the current widget for OpenGL operations.
virtual void snapshot(int _width=0, int _height=0, bool _alpha=false, bool _hideCoordsys=false, int samples=1)
unsigned int glHeight() const
get height of QGLWidget
void traverse(BaseNode *_node, Action &_action)
PickTarget
What target to use for picking.
void translate(const ACG::Vec3d &_vector, int _viewer)
Translate viewer pos by given vector.
void getCurrentViewImage(QImage &_image)
Returns a QImage of the current View.
void perspectiveProjection(int _viewer)
Switch to perspective Projection.
void addSceneGraphGenerator(ACG::QtWidgets::SceneGraphWidgetGenerator *_generator)
Add a scenegraph generator ( the handled type will be extracted from the generator)
void setSceneRadius(double _radius, int _viewer)
Set the background color of the examiner widget.
int targetCount()
Get the number of target objects.
void addObjectRenderingNode(ACG::SceneGraph::BaseNode *_node)
Add scenegraph node modifing object rendering.
ACG::Vec3d eyePos(int _viewer)
Get the current viewer position.
void addGlobalNode(ACG::SceneGraph::BaseNode *_node)
Add a global node.
double sceneRadius()
Returns the current scene radius from the active examiner widget.
const QVector< QPair< QString, QString > > & pluginCommandLineOptions()
Get command line plugin settings as key-value pairs.
int viewerId()
Return unique viewer id.
void viewerSnapshot(int _viewer, QImage &_image, int _width, int _height, bool _alpha, bool _hideCoordsys, int _samples)
Take a snapshot of a viewer.
void shareGLWidget(OFGLWidget *_widget)
Sets the main QGLWidget for gl data sharing.
Viewer::ViewerProperties & viewerProperties(int _id)
Get the viewer properties Use this functions to get basic viewer properties such as backgroundcolor o...
int getObjectId(const QString &_name)
void viewingDirection(const ACG::Vec3d &_dir, const ACG::Vec3d &_up, int _viewer)
Set the viewing direction.
void viewHome(int _viewer)
Go to home position.
void setBackColor(OpenMesh::Vec4f _color)
Set the background color of the examiner widget.
bool scenegraphRegionPick(ACG::SceneGraph::PickTarget _pickTarget, const QRegion &_region, QList< QPair< size_t, size_t > > &_list, QVector< float > *_depths, QVector< ACG::Vec3d > *_points)
void setTrackBallCenter(const ACG::Vec3d &_center, int _viewer)
Set the trackball Center.
QStringList collectObjectMaterials(bool visibleOnly, bool targetedOnly)
QPoint adjustForDevicePixelRatio(const QPoint &point)
int sourceCount()
Get the number of source objects.
DLLEXPORT double fovy(int _viewer)
Get field of view angle.
void setSceneGraphRootNode(SeparatorNode *_root_node)
bool getObject(const int _identifier, BaseObject *&_object)
Get the object which has the given identifier.
ACG::SceneGraph::BaseNode * getRootNode()
Get the root node for data objects.
QPoint mapToGlobal(const QPoint _point)
Map coordinates of GL Widget to global coordinates.
void setDataRoot(BaseObject *_root)
glViewer * viewer(int _viewerId)
Get a Viewer.
ObjectReferenceRange objectReferences(IteratorRestriction _restriction, DataType _dataType)
Iterable object range.
int objectCount()
Get the number of available objects.
void orthographicProjection(int _viewer)
Switch to orthographic Projection.
void setDataSeparatorNodes(SeparatorNode *_dataSeparatorNode)
Set the internal data root node pointers ( DO NOT USE!! )
void setScenePos(const ACG::Vec3d &_center, const double _radius, int _viewer)
Set the Scene position.
QString getOpenFileName(const QString &configProperty, QWidget *parent, const QString &caption, const QString &defaultDir, const QString &filter, QString *selectedFilter, QFileDialog::Options options)
const std::string pickMode()
Get the current Picking mode.
void viewingRay(int _x, int _y, ACG::Vec3d &_outOrigin, ACG::Vec3d &_outDirection)
Retrieve a viewing ray from the active examiner that can be used for raycasting.
void increaseObjectCount()
Decrease the number of current Object.
void setPluginCommandLineOptions(const QVector< QPair< QString, QString > > &_pluginCommandLineOptions)
void addObjectToMap(int _objectId, BaseObject *_object)
Add object to internal object map.
QStringList collectObjectComments(bool visibleOnly, bool targetedOnly)
QMap< std::string,ACG::QtWidgets::SceneGraphWidgetGenerator * > sceneGraphGenerators_
Map of scenegraph widget generators.
QPoint mapToLocal(const QPoint _point)
Map global coordinates to GL Widget local coordinates.
QString getEncodedExaminerView()
Get the encoded view for the active examiner.
void setSceneCenter(const ACG::Vec3d &_center, int _viewer)
ACG::Vec3d upVector(int _viewer)
Get the current up vector.
void rotate(const ACG::Vec3d &_axis, const double _angle, const ACG::Vec3d &_center, int _viewer)
Rotate Scene around axis.
int viewers()
Get the number of viewers.
bool getAllObjectIdentifiers(std::vector< int > &_identifiers)
Get identifiers of all objects.
bool getPickedObject(const size_t _node_idx, BaseObjectData *&_object)
Get the picked mesh.
BaseObject *& objectRoot()
Get the root of the object structure.
ViewObjectMarker * defaultViewObjectMarker()
Get the default ViewObjectMarker.
void setSceneGraphRootNodeGlobal(SeparatorNode *_root_node)
void setFixedView(int _mode, int _viewer)
Set a fixed View for a viewer.
bool objectExists(const int _identifier)
Check if an object with this identifier exists.
ACG::SceneGraph::DrawModes::DrawMode drawMode(int _viewer)
Get the current draw Mode of a Viewer.
bool examinerLightHandling()
returns if internal light handling is active.
void decreaseTargetCount()
Increase the number of current Object.
void get_all_objects(std::vector< BaseObjectData * > &_objects)
void setFOVY(double _fovy)
Set field of view angle.
QString getSaveFileName(const QString &configProperty, QWidget *parent, const QString &caption, const QString &defaultDir, const QString &filter, QString *selectedFilter, QFileDialog::Options options, const QString &defaultSuffix)
bool getSourceIdentifiers(std::vector< int > &_identifiers)
Get the identifiers of all objects marked as a source object.
void traverse(ACG::SceneGraph::MouseEventAction &_action)
const QStringList SOURCE_OBJECTS("source")
Iterable object range.
void removeObjectFromMap(int _objectId)
Remove object from internal object map.
bool isProjectionOrthographic(int _viewer)
Check if the projection is orthographic.
QStringList IteratorRestriction
Iterable object range.
int visibleCount()
Get the number of visible objects.
bool scenegraphPick(ACG::SceneGraph::PickTarget _pickTarget, const QPoint &_mousePos, size_t &_nodeIdx, size_t &_targetIdx, ACG::Vec3d *_hitPointPtr=0)
Execute picking operation on scenegraph.
Viewer::ActionMode actionMode()
Get the current Action mode.
void setDrawMode(const ACG::SceneGraph::DrawModes::DrawMode &_mode, int _viewer)
Set the draw Mode of a Viewer. .
void setViewerProperties(const std::vector< Viewer::ViewerProperties * > &_viewerProperties)
Set the internal viewerProperties pointer ( DO NOT USE!! )
void flyTo(const ACG::Vec3d &_position, const ACG::Vec3d &_center, double _time)
Fly to point and viewing direction (animated).
void setEncodedExaminerView(const QString &_view)
Set the encoded view for the active examiner.
void increaseTargetCount()
Decrease the number of current Object.
void allowRotation(bool _mode, int _viewer)
void setActiveExaminer(const unsigned int _id)
Set the active id of the examiner which got the last mouse events.
bool getTargetIdentifiers(std::vector< int > &_identifiers)
Get the identifiers of all objects marked as a target object.
void disableExaminerLightHandling()
Disable the core light handling.
bool getAllMeshes(std::vector< int > &_identifiers)
Get identifiers of all meshes.
void setMainGLContext()
Set current GL Context to main context.
unsigned int activeExaminer()
Get the id of the examiner which got the last mouse events.
void addGlobalStatusNode(ACG::SceneGraph::BaseNode *_node)
Adds a global status node.
const ACG::Vec3d trackBallCenter(int _viewer)
Get the trackball Center.
void lookAt(const ACG::Vec3d &_eye, const ACG::Vec3d &_center, const ACG::Vec3d &_up, int _viewer)
Set the look at transformation directly.
ACG::SceneGraph::BaseNode * getSceneGraphRootNode()
get scenegraph root node
const QStringList TARGET_OBJECTS("target")
Iterable object range.
void decreaseObjectCount()
Increase the number of current Object.
void setDefaultViewObjectMarker(ViewObjectMarker *_marker)
const ACG::Vec3d sceneCenter(int _viewer)
Get the current scene center.
ObjectRange objects(IteratorRestriction _restriction, DataType _dataType)
Iterable object range.
void viewAll(int _viewer)
View the whole scene.
void setViewObjectMarker(ViewObjectMarker *_marker)
void setViewers(const std::vector< glViewer * > &_viewerWidgets)
Set the internal Viewer pointer ( DO NOT USE!! )
const QStringList ALL_OBJECTS
Iterable object range.
BaseObjectData * baseObjectData(BaseObject *_object)
Cast an BaseObject to a BaseObjectData if possible.