aboutsummaryrefslogtreecommitdiff
path: root/src/o3d/obj3d.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/o3d/obj3d.h')
-rw-r--r--src/o3d/obj3d.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/o3d/obj3d.h b/src/o3d/obj3d.h
new file mode 100644
index 0000000..559ed63
--- /dev/null
+++ b/src/o3d/obj3d.h
@@ -0,0 +1,42 @@
+#ifndef O3D_OBJ3D_H
+#define O3D_OBJ3D_H
+
+#include <vector>
+#include <array>
+#include <iterator>
+#include "o3d/vertex.h"
+#include "o3d/tri_vertex.h"
+
+class Object3D {
+ public:
+ class TriangleVertex3Iterator {
+ public:
+ using iterator_category = std::input_iterator_tag;
+ using value_type = TriangleVertex3;
+ using difference_type = TriangleVertex3;
+ using pointer = const TriangleVertex3*;
+ using reference = TriangleVertex3;
+
+ explicit TriangleVertex3Iterator(const Object3D* obj, int face_ind = 0);
+ TriangleVertex3Iterator& operator++();
+ TriangleVertex3Iterator operator++(int);
+ bool operator==(TriangleVertex3Iterator other) const;
+ bool operator!=(TriangleVertex3Iterator other) const;
+ reference operator*() const;
+
+ private:
+ const Object3D* obj;
+ int face_ind;
+
+ };
+
+ Object3D(std::vector<Vertex3> pts, std::vector<std::array<int, 3>> faces);
+ TriangleVertex3Iterator begin();
+ TriangleVertex3Iterator end();
+
+ private:
+ std::vector<Vertex3> pts;
+ std::vector<std::array<int, 3>> faces;
+};
+
+#endif // O3D_OBJ3D_H