From f99e874704100bf9279a60611ff13b962c84fff7 Mon Sep 17 00:00:00 2001 From: Ozan Tonkal Date: Thu, 5 Sep 2013 20:53:57 +0200 Subject: [PATCH] tutorial: creating_widgets code --- .../tutorial_code/viz/creating_widgets.cpp | 106 ++++++++++++++++++ .../cpp/tutorial_code/viz/launching_viz.cpp | 23 +++- 2 files changed, 124 insertions(+), 5 deletions(-) create mode 100644 samples/cpp/tutorial_code/viz/creating_widgets.cpp diff --git a/samples/cpp/tutorial_code/viz/creating_widgets.cpp b/samples/cpp/tutorial_code/viz/creating_widgets.cpp new file mode 100644 index 0000000000..1c0f9a34ea --- /dev/null +++ b/samples/cpp/tutorial_code/viz/creating_widgets.cpp @@ -0,0 +1,106 @@ +/** + * @file creating_widgets.cpp + * @brief Creating custom widgets using VTK + * @author Ozan Cagri Tonkal + */ + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace cv; +using namespace std; + +/** + * @function help + * @brief Display instructions to use this tutorial program + */ +void help() +{ + cout + << "--------------------------------------------------------------------------" << endl + << "This program shows how to create a custom widget. You can create your own " + << "widgets by extending Widget2D/Widget3D, and with the help of WidgetAccessor." << endl + << "Usage:" << endl + << "./creating_widgets" << endl + << endl; +} + +/** + * @class TriangleWidget + * @brief Defining our own 3D Triangle widget + */ +class TriangleWidget : public viz::Widget3D +{ + public: + TriangleWidget(const Point3f &pt1, const Point3f &pt2, const Point3f &pt3, const viz::Color & color = viz::Color::white()); +}; + +/** + * @function TriangleWidget::TriangleWidget + * @brief Constructor + */ +TriangleWidget::TriangleWidget(const Point3f &pt1, const Point3f &pt2, const Point3f &pt3, const viz::Color & color) +{ + // Create a triangle + vtkSmartPointer points = vtkSmartPointer::New(); + points->InsertNextPoint(pt1.x, pt1.y, pt1.z); + points->InsertNextPoint(pt2.x, pt2.y, pt2.z); + points->InsertNextPoint(pt3.x, pt3.y, pt3.z); + + vtkSmartPointer triangle = vtkSmartPointer::New(); + triangle->GetPointIds()->SetId(0,0); + triangle->GetPointIds()->SetId(1,1); + triangle->GetPointIds()->SetId(2,2); + + vtkSmartPointer cells = vtkSmartPointer::New(); + cells->InsertNextCell(triangle); + + // Create a polydata object + vtkSmartPointer polyData = vtkSmartPointer::New(); + + // Add the geometry and topology to the polydata + polyData->SetPoints(points); + polyData->SetPolys(cells); + + // Create mapper and actor + vtkSmartPointer mapper = vtkSmartPointer::New(); + mapper->SetInput(polyData); + + vtkSmartPointer actor = vtkSmartPointer::New(); + actor->SetMapper(mapper); + + // Store this actor in the widget in order that visualizer can access it + viz::WidgetAccessor::setProp(*this, actor); +} + +/** + * @function main + */ +int main() +{ + help(); + + /// Create a window + viz::Viz3d myWindow("Creating Widgets"); + + /// Create a triangle widget + TriangleWidget tw(Point3f(0.0,0.0,0.0), Point3f(1.0,1.0,1.0), Point3f(0.0,1.0,0.0)); + + /// Show widget in the visualizer window + myWindow.showWidget("TRIANGLE", tw); + + /// Start event loop + myWindow.spin(); + + return 0; +} diff --git a/samples/cpp/tutorial_code/viz/launching_viz.cpp b/samples/cpp/tutorial_code/viz/launching_viz.cpp index 1827b33ea1..8dc9a617f0 100644 --- a/samples/cpp/tutorial_code/viz/launching_viz.cpp +++ b/samples/cpp/tutorial_code/viz/launching_viz.cpp @@ -1,9 +1,19 @@ +/** + * @file launching_viz.cpp + * @brief Launching visualization window + * @author Ozan Cagri Tonkal + */ + #include #include using namespace cv; using namespace std; +/** + * @function help + * @brief Display instructions to use this tutorial program + */ void help() { cout @@ -11,10 +21,13 @@ void help() << "This program shows how to launch a 3D visualization window. You can stop event loop to continue executing. " << "You can access the same window via its name. You can run event loop for a given period of time. " << endl << "Usage:" << endl - << "./window_demo" << endl + << "./launching_viz" << endl << endl; } +/** + * @function main + */ int main() { help(); @@ -41,10 +54,10 @@ int main() sameWindow.spinOnce(1, true); while(!sameWindow.wasStopped()) { - /// Interact with window - - /// Event loop for 1 millisecond - sameWindow.spinOnce(1, true); + /// Interact with window + + /// Event loop for 1 millisecond + sameWindow.spinOnce(1, true); } /// Once more event loop is stopped