]> git.tdb.fi Git - r2c2.git/blob - source/libr2c2/profile.h
Allow custom objects for tracks
[r2c2.git] / source / libr2c2 / profile.h
1 /* $Id$
2
3 This file is part of R²C²
4 Copyright © 2010 Mikkosoft Productions, Mikko Rasa
5 Distributed under the GPL
6 */
7
8 #ifndef LIBR2C2_PROFILE_H_
9 #define LIBR2C2_PROFILE_H_
10
11 #include <vector>
12 #include <msp/datafile/objectloader.h>
13 #include "geometry.h"
14
15 namespace R2C2 {
16
17 class Profile
18 {
19 public:
20         class Loader: public Msp::DataFile::ObjectLoader<Profile>
21         {
22         public:
23                 Loader(Profile &);
24         private:
25                 void point(float, float);
26                 void smooth_point(float, float);
27         };
28
29         struct Vertex
30         {
31                 Point pos;
32                 Point normal;
33                 bool smooth;
34         };
35
36 private:
37         std::vector<Vertex> vertices;
38         Point min_coords;
39         Point max_coords;
40
41 public:
42         void append_vertex(const Point &, bool);
43         unsigned get_n_vertices() const { return vertices.size(); }
44         const Vertex &get_vertex(unsigned) const;
45         const Point &get_min_coords() const { return min_coords; }
46         const Point &get_max_coords() const { return max_coords; }
47         float get_width() const { return max_coords.x-min_coords.x; }
48         float get_height() const { return max_coords.y-min_coords.y; }
49 };
50
51 } // namespace R2C2
52
53 #endif