Enzo
Loading...
Searching...
No Matches
NodePacket.h
1#pragma once
2#include "Engine/Operator/Primitive.h"
3#include <memory>
4#include <vector>
5
6namespace enzo {
7
8class NodePacket {
9 public:
10 // Lazy forward iterator that flattens transforms across all primitives.
11 // See NodePacket.cpp for Iterator method implementations.
12 struct Transforms {
13 struct Iterator {
14 using iterator_category = std::forward_iterator_tag;
15 using difference_type = std::ptrdiff_t;
16 using value_type = Transform;
17
18 Iterator(std::vector<std::shared_ptr<geo::Primitive>> &primitives,
19 TransformClass transformClass, size_t primIdx);
20
21 Transform operator*() const;
22 Iterator &operator++();
23 Iterator operator++(int);
24 friend bool operator==(const Iterator &a, const Iterator &b) {
25 return a.primIdx_ == b.primIdx_ && a.offset_ == b.offset_;
26 }
27 friend bool operator!=(const Iterator &a, const Iterator &b) { return !(a == b); }
28
29 private:
30 std::vector<std::shared_ptr<geo::Primitive>> &primitives_;
31 TransformClass transformClass_;
32 size_t primIdx_;
33 ga::Offset offset_ = 0;
34 std::shared_ptr<ga::Attribute> curAttrib_;
35 size_t curSize_ = 0;
36
37 void advance();
38 };
39
40 Transforms(std::vector<std::shared_ptr<geo::Primitive>> &primitives,
41 TransformClass transformClass)
42 : primitives_(primitives), transformClass_(transformClass) {}
43
44 Iterator begin() { return Iterator(primitives_, transformClass_, 0); }
45 Iterator end() { return Iterator(primitives_, transformClass_, primitives_.size()); }
46
47 private:
48 std::vector<std::shared_ptr<geo::Primitive>> &primitives_;
49 TransformClass transformClass_;
50 };
51
52 void addPrimitive(std::shared_ptr<enzo::geo::Primitive> primitive);
53 void attemptMerge(std::shared_ptr<geo::Primitive> prim);
54
55 std::shared_ptr<enzo::geo::Primitive> getPrimitive(unsigned int index);
56 std::shared_ptr<const enzo::geo::Primitive> getPrimitive(unsigned int index) const;
57 std::shared_ptr<geo::Primitive> getPrimAtPath(const std::string &path);
58 std::shared_ptr<const geo::Primitive> getPrimAtPath(const std::string &path) const;
59
60 const std::vector<std::shared_ptr<enzo::geo::Primitive>> &getPrimitives() const {
61 return primitives_;
62 }
63 std::vector<std::shared_ptr<enzo::geo::Primitive>> getPrimitives(enzo::geo::PrimType type) const;
64
65 Transforms getTransforms(TransformClass transformClass) {
66 return Transforms(primitives_, transformClass);
67 }
68
69 size_t size() const;
70 NodePacket deepCopy() const;
71
72 private:
73 std::vector<std::shared_ptr<enzo::geo::Primitive>> primitives_;
74};
75
76} // namespace enzo
size_t Offset
ga::Offset is the index of an element in a given AttributeOwner.
Definition Types.h:43
Definition NodePacket.h:8
Definition Transform.h:7
Definition NodePacket.h:13
Definition NodePacket.h:12