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