From 7e26a61cf47f48e47ef4a4da8ba39e622b2d2e8d Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Mon, 20 Sep 2010 20:23:15 +0000 Subject: [PATCH] intial version of Qt4 based Snaprounding demo --- .gitattributes | 3 + .../demo/Snap_rounding_2/CMakeLists.txt | 57 ++++ .../demo/Snap_rounding_2/Snap_rounding_2.cpp | 291 ++++++++++++++++++ .../demo/Snap_rounding_2/Snap_rounding_2.qrc | 8 + .../demo/Snap_rounding_2/Snap_rounding_2.ui | 178 +++++++++++ .../about_Snap_rounding_2.html | 9 + 6 files changed, 546 insertions(+) create mode 100755 GraphicsView/demo/Snap_rounding_2/CMakeLists.txt create mode 100644 GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp create mode 100644 GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.qrc create mode 100644 GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.ui create mode 100644 GraphicsView/demo/Snap_rounding_2/about_Snap_rounding_2.html diff --git a/.gitattributes b/.gitattributes index c5e208b04a5..b7d9bc2476b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1445,6 +1445,9 @@ GraphicsView/demo/Segment_Delaunay_graph_2/icons/moving_point.pdf -text GraphicsView/demo/Segment_Delaunay_graph_2/icons/moving_point.png -text GraphicsView/demo/Segment_Delaunay_graph_2/icons/triangulation.pdf -text GraphicsView/demo/Segment_Delaunay_graph_2/icons/triangulation.png -text +GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.qrc -text +GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.ui -text +GraphicsView/demo/Snap_rounding_2/about_Snap_rounding_2.html svneol=native#text/html GraphicsView/demo/Stream_lines_2/Stream_lines_2.qrc -text GraphicsView/demo/Stream_lines_2/Stream_lines_2.ui -text GraphicsView/demo/Stream_lines_2/about_Stream_lines_2.html svneol=native#text/html diff --git a/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt b/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt new file mode 100755 index 00000000000..b348cb7e929 --- /dev/null +++ b/GraphicsView/demo/Snap_rounding_2/CMakeLists.txt @@ -0,0 +1,57 @@ +# Created by the script cgal_create_cmake_script +# This is the CMake script for compiling a CGAL application. + +project (Snap_rounding_2_demo) + +cmake_minimum_required(VERSION 2.4.5) + +set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true) + +if ( COMMAND cmake_policy ) + cmake_policy( SET CMP0003 NEW ) +endif() + +find_package(CGAL COMPONENTS Qt4) + +include(${CGAL_USE_FILE}) + +set( QT_USE_QTXML TRUE ) +set( QT_USE_QTMAIN TRUE ) +set( QT_USE_QTSCRIPT TRUE ) +set( QT_USE_QTOPENGL TRUE ) + + +find_package(Qt4) +include_directories (BEFORE ../../include) +include_directories (BEFORE ../../../Snap_rounding_2/include) + + +if ( CGAL_FOUND AND CGAL_Qt4_FOUND AND QT4_FOUND ) + +include(${QT_USE_FILE}) + +#-------------------------------- +# UI files (Qt Designer files) +qt4_wrap_ui( DT_UI_FILES Snap_rounding_2.ui ) + +# qrc files (resources files, that contain icons, at least) +qt4_add_resources ( DT_RESOURCE_FILES ./Snap_rounding_2.qrc ) + +# use the Qt MOC preprocessor on classes that derives from QObject +qt4_generate_moc( Snap_rounding_2.cpp Snap_rounding_2.moc ) + +# The executable itself. +add_executable ( Snap_rounding_2 Snap_rounding_2.cpp Snap_rounding_2.moc ${DT_UI_FILES} ${DT_RESOURCE_FILES} ) + +add_to_cached_list( CGAL_EXECUTABLE_TARGETS Snap_rounding_2 ) + +# Link with Qt libraries +target_link_libraries( Snap_rounding_2 ${QT_LIBRARIES} ) +# Link with CGAL +target_link_libraries( Snap_rounding_2 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES}) + +else() + + message(STATUS "NOTICE: This demo requires CGAL and Qt4, and will not be compiled.") + +endif() diff --git a/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp new file mode 100644 index 00000000000..e15504755b0 --- /dev/null +++ b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.cpp @@ -0,0 +1,291 @@ +#include + +// CGAL headers +#include +#include +#include +#include + +// Qt headers +#include +#include +#include +#include +#include + +// GraphicsView items and event filters (input classes) +#include +#include +#include +#include + +// for viewportsBbox +#include + +// the two base classes +#include "ui_Snap_rounding_2.h" +#include + +typedef CGAL::Exact_predicates_exact_constructions_kernel K; +typedef CGAL::Snap_rounding_traits_2 Traits; + +typedef K::Point_2 Point_2; +typedef K::Segment_2 Segment_2; +typedef K::Iso_rectangle_2 Iso_rectangle_2; + + + +class MainWindow : + public CGAL::Qt::DemosMainWindow, + public Ui::Snap_rounding_2 +{ + Q_OBJECT + +private: + + QGraphicsScene scene; + + CGAL::Qt::RegularGridGraphicsItem * rgi; + + CGAL::Qt::GraphicsViewPolylineInput * pi; + + std::list input; + std::list > output; + + typedef CGAL::Qt::SegmentsGraphicsItem > InputSegmentsGraphicsItem; + typedef CGAL::Qt::PolylinesGraphicsItem > > OutputPolylinesGraphicsItem; + InputSegmentsGraphicsItem * isgi; + OutputPolylinesGraphicsItem *plgi; + double delta; + +public: + MainWindow(); + +public slots: + + void processInput(CGAL::Object o); + + void on_actionLoadPoints_triggered(); + + void on_actionClear_triggered(); + + void on_actionSavePoints_triggered(); + + void on_actionGenerate_triggered(); + + void on_actionRecenter_triggered(); + + virtual void open(QString fileName); + +signals: + void changed(); +}; + + +MainWindow::MainWindow() + : DemosMainWindow(), delta(1.0) +{ + setupUi(this); + + this->graphicsView->setAcceptDrops(false); + + isgi = new InputSegmentsGraphicsItem(&input); + scene.addItem(isgi); + + plgi = new OutputPolylinesGraphicsItem(&output); + scene.addItem(plgi); + + // inputs polylines with 2 points + pi = new CGAL::Qt::GraphicsViewPolylineInput(this, &scene, 2, false); + QObject::connect(pi, SIGNAL(generate(CGAL::Object)), + this, SLOT(processInput(CGAL::Object))); + + scene.installEventFilter(pi); + + // Manual handling of actions + // + + QObject::connect(this->actionQuit, SIGNAL(triggered()), + this, SLOT(close())); + + // + // Setup the scene and the view + // + scene.setItemIndexMethod(QGraphicsScene::NoIndex); + scene.setSceneRect(-50, -50, 50, 50); + this->graphicsView->setScene(&scene); + + // Turn the vertical axis upside down + this->graphicsView->matrix().scale(1, -1); + this->graphicsView->setMouseTracking(true); + + rgi = new CGAL::Qt::RegularGridGraphicsItem(delta, delta); + + QObject::connect(this, SIGNAL(changed()), + rgi, SLOT(modelChanged())); + + QObject::connect(this, SIGNAL(changed()), + isgi, SLOT(modelChanged())); + + QObject::connect(this, SIGNAL(changed()), + plgi, SLOT(modelChanged())); + + + rgi->setVerticesPen(QPen(Qt::red, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + rgi->setEdgesPen(QPen(Qt::gray, 0, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + scene.addItem(rgi); + + plgi->setEdgesPen(QPen(Qt::blue, 0, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); + scene.addItem(plgi); + + + // The navigation adds zooming and translation functionality to the + // QGraphicsView + this->addNavigation(this->graphicsView); + + this->setupStatusBar(); + this->setupOptionsMenu(); + this->addAboutDemo(":/cgal/help/about_Snap_rounding_2.html"); + this->addAboutCGAL(); + + this->addRecentFiles(this->menuFile, this->actionQuit); + connect(this, SIGNAL(openRecentFile(QString)), + this, SLOT(open(QString))); +} + + + +void +MainWindow::processInput(CGAL::Object o) +{ + + std::list points; + if(CGAL::assign(points, o)){ + if(points.size() == 2) { + input.push_back(Segment_2(points.front(), points.back())); + output.clear(); + CGAL::snap_rounding_2::const_iterator,std::list > >(input.begin(), input.end(), output, delta, true, false); + } + else { + std::cerr << points.size() << std::endl; + } + } + emit(changed()); +} + +/* + * Qt Automatic Connections + * http://doc.trolltech.com/4.4/designer-using-a-component.html#automatic-connections + * + * setupUi(this) generates connections to the slots named + * "on__" + */ + + +void +MainWindow::on_actionClear_triggered() +{ + emit(changed()); +} + + +void +MainWindow::on_actionGenerate_triggered() +{ + on_actionRecenter_triggered(); + emit(changed()); +} + + + +void +MainWindow::on_actionLoadPoints_triggered() +{ + QString fileName = QFileDialog::getOpenFileName(this, + tr("Open grid file"), + "."); + if(! fileName.isEmpty()){ + open(fileName); + } +} + + +void +MainWindow::open(QString fileName) +{ +#if 0 + // wait cursor + QApplication::setOverrideCursor(Qt::WaitCursor); + std::ifstream ifs(qPrintable(fileName)); + + runge_kutta_integrator = new Runge_kutta_integrator(integrating); + double iXSize, iYSize; + iXSize = iYSize = 512; + unsigned int x_samples, y_samples; + ifs >> x_samples; + ifs >> y_samples; + regular_grid = new Regular_grid(x_samples, y_samples, iXSize, iYSize); + /*fill the grid with the appropreate values*/ + for (unsigned int i=0;i> xval; + ifs >> yval; + regular_grid->set_field(i, j, Vector(xval, yval)); + } + ifs.close(); + // default cursor + QApplication::restoreOverrideCursor(); + this->addToRecentFiles(fileName); + // actionRecenter->trigger(); + on_actionGenerate_triggered(); + emit(changed()); + +#endif +} + +void +MainWindow::on_actionSavePoints_triggered() +{ + /* + QString fileName = QFileDialog::getSaveFileName(this, + tr("Save points"), + "."); + if(! fileName.isEmpty()){ + std::ofstream ofs(qPrintable(fileName)); + + } + */ +} + + +void +MainWindow::on_actionRecenter_triggered() +{ + this->graphicsView->setSceneRect(isgi->boundingRect()); + this->graphicsView->fitInView(isgi->boundingRect(), Qt::KeepAspectRatio); +} + + +#include "Snap_rounding_2.moc" + +int main(int argc, char **argv) +{ + QApplication app(argc, argv); + + app.setOrganizationDomain("geometryfactory.com"); + app.setOrganizationName("GeometryFactory"); + app.setApplicationName("Snap_rounding_2 demo"); + + // Import resources from libCGALQt4. + // See http://doc.trolltech.com/4.4/qdir.html#Q_INIT_RESOURCE + Q_INIT_RESOURCE(File); + Q_INIT_RESOURCE(Snap_rounding_2); + Q_INIT_RESOURCE(Input); + Q_INIT_RESOURCE(CGAL); + + MainWindow mainWindow; + mainWindow.show(); + return app.exec(); +} diff --git a/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.qrc b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.qrc new file mode 100644 index 00000000000..7604c41cc81 --- /dev/null +++ b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.qrc @@ -0,0 +1,8 @@ + + + + + ../resources/about_CGAL.html + about_Snap_rounding_2.html + + diff --git a/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.ui b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.ui new file mode 100644 index 00000000000..137591eeb05 --- /dev/null +++ b/GraphicsView/demo/Snap_rounding_2/Snap_rounding_2.ui @@ -0,0 +1,178 @@ + + + GeometryFactory + Snap_rounding_2 + + + + 0 + 0 + 800 + 600 + + + + CGAL Snaprounding + + + + :/cgal/logos/cgal_icon:/cgal/logos/cgal_icon + + + + + + + Qt::StrongFocus + + + Qt::ScrollBarAlwaysOn + + + Qt::ScrollBarAlwaysOn + + + QGraphicsView::NoAnchor + + + + + + + + + File Tools + + + TopToolBarArea + + + false + + + + + + + + Visualization Tools + + + TopToolBarArea + + + false + + + + + + + 0 + 0 + 800 + 26 + + + + + &File + + + + + + + + + + + &Edit + + + + + &Tools + + + + + + + + + + + &About + + + + + About &CGAL + + + + + &Quit + + + Ctrl+Q + + + + + + :/cgal/fileToolbar/fileNew.png:/cgal/fileToolbar/fileNew.png + + + &Clear + + + Ctrl+C + + + + + + :/cgal/fileToolbar/fileOpen.png:/cgal/fileToolbar/fileOpen.png + + + &Load Points... + + + Ctrl+L + + + + + + :/cgal/fileToolbar/fileSave.png:/cgal/fileToolbar/fileSave.png + + + &Save Points... + + + Ctrl+S + + + + + + :/cgal/Input/zoom-best-fit:/cgal/Input/zoom-best-fit + + + Re&center the viewport + + + Ctrl+R + + + + + + + + + + + diff --git a/GraphicsView/demo/Snap_rounding_2/about_Snap_rounding_2.html b/GraphicsView/demo/Snap_rounding_2/about_Snap_rounding_2.html new file mode 100644 index 00000000000..2f5f2e1c69c --- /dev/null +++ b/GraphicsView/demo/Snap_rounding_2/about_Snap_rounding_2.html @@ -0,0 +1,9 @@ + + +

Snap Rounding

+

Copyright © 2010 GeometryFactory

+

This application illustrates the 2D Snap Rounding.

+

See also the online + manual.

+ +