DGtal 1.4.0
Loading...
Searching...
No Matches
viewer3D-11-extension.cpp
1
42#include <iostream>
43
44#include "DGtal/base/Common.h"
45#include "DGtal/helpers/StdDefs.h"
46#include "DGtal/io/viewers/Viewer3D.h"
48
49using namespace std;
50using namespace DGtal;
51using namespace Z3i;
52
54// Standard services - public :
55
57// Deriving from Viewer3D::Extension to add new callbacks to events.
58struct RandomPointKeyExtension : public Viewer3D<Space, KSpace>::Extension
59{
60 RandomPointKeyExtension()
61 {
62 }
63
64 // Here we override the "key pressed" event, and a point randomly in
65 // the scene if the key "Shift+R" is pressed.
66 virtual bool keyPressEvent( Viewer & viewer, QKeyEvent * event )
67 {
68 bool handled = false;
69 // Get event modifiers key
70 const Qt::KeyboardModifiers modifiers = event->modifiers();
71 if ( ( event->key() == Qt::Key_R ) && ( modifiers == Qt::ShiftModifier ) )
72 {
73 Point p = viewer.space().lowerBound();
74 Point q = viewer.space().upperBound();
75 Point d = q - p;
76 Point a( ( rand() % d[ 0 ] ) + p[ 0 ], ( rand() % d[ 1 ] ) + p[ 1 ],
77 ( rand() % d[ 2 ] ) + p[ 2 ] );
78 viewer << a;
79 viewer << Viewer::updateDisplay;
80 trace.info() << "Adding point " << a << std::endl;
81 handled = true;
82 }
83 return handled;
84 }
85
86 // We also override the Viewer3D::init method to add a key
87 // description in the help window.
88 virtual void init( Viewer & viewer )
89 {
90 viewer.setKeyDescription( Qt::ShiftModifier + Qt::Key_R,
91 "Creates a random digital point." );
92 }
93
94 // We also override the Viewer3D::helpString method to add a
95 // description to the viewer.
96 virtual QString helpString( const Viewer & /*viewer*/ ) const
97 {
98 QString text( "<h2> Random point Viewer3D </h2>" );
99 text += "Press Shift+R to add points.";
100 return text;
101 }
102};
104
105int main( int argc, char ** argv )
106{
107
108 QApplication application( argc, argv );
109
110 Point p1( 0, 0, 0 );
111 Point p2( 5, 5, 5 );
112 Point p3( 2, 3, 4 );
113 Domain domain( p1, p2 );
114
115 typedef Viewer3D<> MyViewer;
116 KSpace K;
117 K.init( p1, p2, true );
119 MyViewer viewer( K );
120 viewer.setExtension( new RandomPointKeyExtension );
122 viewer.show();
123 viewer << domain;
124 viewer << p1 << p2 << p3;
125
126 viewer << MyViewer::updateDisplay;
127 return application.exec();
128}
129// //
const KSpace & space() const
Definition Display3D.h:340
Aim: This class is a model of CCellularGridSpaceND. It represents the cubical grid as a cell complex,...
const Point & lowerBound() const
Return the lower bound for digital points in this space.
bool init(const Point &lower, const Point &upper, bool isClosed)
Specifies the upper and lower bounds for the maximal cells in this space.
const Point & upperBound() const
Return the upper bound for digital points in this space.
std::ostream & info()
virtual void show()
Overload QWidget method in order to add a call to updateList() method (to ensure that the lists are w...
void setExtension(Extension *ext)
Definition Viewer3D.h:312
DGtal is the top-level namespace which contains all DGtal functions and types.
Trace trace
Definition Common.h:153
STL namespace.
int main()
Definition testBits.cpp:56
KSpace K
Domain domain