DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
IVViewer.cpp
1 
29 
30 #include <Inventor/nodes/SoCube.h>
31 #include "DGtal/io/viewers/IVViewer.h"
32 #include "DGtal/base/Common.h"
34 
35 using namespace std;
36 
38 // class IVViewer
40 
42 // Standard services - public :
43 
48 {
49 #ifdef SGI_INVENTOR
50  if ( myViewer != 0 ) delete (SoXtExaminerViewer*) myViewer;
51  // if ( myWindow != 0 ) delete (Widget) myWindow;
52 #else
53  if ( myViewer != 0 ) delete (SoQtExaminerViewer*) myViewer;
54  // if ( myWindow != 0 ) delete (QWidget*) myWindow;
55 #endif
56  if ( myRoot != 0 ) myRoot->unref();
57 }
58 
66 DGtal::IVViewer::IVViewer( int argc, char** argv )
67  : myWindow( 0 ), myViewer( 0 ), myRoot( 0 ), myTitle( "IVViewer" )
68 {
69  // Initialize Inventor and Xt
70 #ifdef SGI_INVENTOR
71  cout << "Initializing Inventor and Xt..." << endl;
72  myWindow = (Widget) SoXt::init( argc, argv, "Digital Viewer" );
73 #else
74  cout << "Initializing Inventor and Qt..." << endl;
75  myWindow = (QWidget*) SoQt::init( argc, argv, "Digital Viewer" );
76 #endif
77 
78  if (myWindow == 0) exit(1);
79 
80  // Define Inventor node.
81  cout << "Creating node, shapehints, material..." << endl;
82  myRoot = new SoSeparator;
83  myRoot->ref();
84 
85 #ifdef SGI_INVENTOR
86  myViewer = (SoXtExaminerViewer *)
87  new SoXtExaminerViewer( (Widget) myWindow );
88 #else
89  myViewer = (SoQtExaminerViewer *)
90  new SoQtExaminerViewer( (QWidget*) myWindow );
91 #endif
92 
93 }
94 
98 SoSeparator* DGtal::IVViewer::root() const
99 {
100  return myRoot;
101 }
102 
106 void DGtal::IVViewer::setTitle( const std::string & title )
107 {
108  myTitle = title;
109 }
110 
111 
112 
120 void DGtal::IVViewer::setCamera( float latitude, float longitude )
121 {
122  SbVec3f x_axis( 1.0, 0.0, 0.0 );
123  latitude *= M_PI / 180.0f;
124  SbRotation x_rot( x_axis, latitude );
125  SbVec3f y_axis( 0.0, 1.0, 0.0 );
126  longitude *= - M_PI / 180.0f;
127  SbRotation y_rot( y_axis, longitude );
128  SoTransform* transform = new SoTransform;
129  transform->rotation.setValue( y_rot * x_rot );
130  myRoot->insertChild( transform, 0 );
131 
132 }
133 
134 
139 {
140 #ifdef SGI_INVENTOR
141  SoXtExaminerViewer* lViewer = (SoXtExaminerViewer*) myViewer;
142 #else
143  SoQtExaminerViewer* lViewer = (SoQtExaminerViewer*) myViewer;
144 #endif
145 
146  lViewer->setSceneGraph( myRoot );
147  // lViewer->setTitle( myTitle.c_str() );
148  lViewer->show();
149  lViewer->viewAll();
150 
151 #ifdef SGI_INVENTOR
152  SoXt::show((Widget) myWindow);
153  SoXt::mainLoop();
154 #else
155  SoQt::show((QWidget*) myWindow);
156  SoQt::mainLoop();
157 #endif
158 
159 }
160 
161 
162 
164 // Interface - public :
165 
170 void
171 DGtal::IVViewer::selfDisplay ( std::ostream & out ) const
172 {
173  out << "[IVViewer]";
174 }
175 
180 bool
182 {
183  return true;
184 }
185 
186 
187 
189 // Internals - private :
190 
191 // //