1 // Copyright (c) 2010 INRIA Sophia-Antipolis (France). 2 // All rights reserved. 3 // 4 // This file is part of CGAL (www.cgal.org). 5 // 6 // $URL: https://github.com/CGAL/cgal/blob/v5.3/Polyhedron/demo/Polyhedron/Plugins/Mesh_3/Optimizer_thread.h $ 7 // $Id: Optimizer_thread.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot 8 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial 9 // 10 // 11 // Author(s) : Stephane Tayeb 12 // 13 //****************************************************************************** 14 // File Description : 15 //****************************************************************************** 16 17 #ifndef DEMO_MESH_3_OPTIMIZER_THREAD_H 18 #define DEMO_MESH_3_OPTIMIZER_THREAD_H 19 20 #include <QThread> 21 #include <QObject> 22 #include <QString> 23 #include <QStringList> 24 #include <QTimer> 25 26 #include <CGAL/Mesh_optimization_return_code.h> 27 28 class Scene_c3t3_item; 29 30 class Optimization_function_interface 31 { 32 public: ~Optimization_function_interface()33 virtual ~Optimization_function_interface() {} 34 35 // Launch 36 virtual CGAL::Mesh_optimization_return_code launch() = 0; 37 38 // Stop 39 virtual void stop() = 0; 40 41 // Logs 42 virtual QString name() const = 0; 43 virtual QStringList parameters_log() const = 0; 44 virtual QString status(double time_period) const = 0; 45 }; 46 47 48 class Optimizer_thread : public QThread 49 { 50 Q_OBJECT 51 public: 52 Optimizer_thread(Optimization_function_interface* f, Scene_c3t3_item* item); 53 virtual ~Optimizer_thread(); 54 55 // Scene item item()56 Scene_c3t3_item* item() const { return item_; } 57 58 // Infos about optimization return_code()59 CGAL::Mesh_optimization_return_code return_code() const { return rc_; } time()60 double time() const { return time_; } 61 62 // Logs optimizer_name()63 QString optimizer_name() const { return f_->name(); } parameters_log()64 QStringList parameters_log() const { return f_->parameters_log(); } 65 66 public Q_SLOTS: 67 // Stop 68 void stop(); 69 70 private Q_SLOTS: 71 // emit signal status report 72 void emit_status(); 73 74 Q_SIGNALS: 75 // Emitted at the end of the process 76 void done(Optimizer_thread*); 77 // Informs about status of the process 78 void status_report(QString); 79 80 protected: 81 // Overload of QThread function 82 virtual void run(); 83 84 private: 85 Optimization_function_interface* f_; 86 Scene_c3t3_item* item_; 87 CGAL::Mesh_optimization_return_code rc_; 88 double time_; // in seconds 89 QTimer* timer_; 90 double timer_period_; 91 }; 92 93 #endif // DEMO_MESH_3_OPTIMIZER_THREAD_H 94