2#include "Engine/Operator/Attribute.h"
3#include "Engine/Operator/AttributeHandle.h"
4#include "Engine/Operator/Point.h"
5#include "Engine/Operator/Transform.h"
31 using iterator_category = std::forward_iterator_tag;
32 using difference_type = std::ptrdiff_t;
35 value_type operator*()
const {
return curOffset_; }
38 : primitive_(primitive), curOffset_(current) {}
54 return a.curOffset_ == b.curOffset_;
57 return a.curOffset_ != b.curOffset_;
65 Iterator end() {
return Iterator(primitive_, primitive_.getNumPoints()); }
71 Primitive(
const Primitive &other);
72 Primitive &operator=(
const Primitive &rhs);
73 virtual ~Primitive() =
default;
75 virtual PrimType getType()
const = 0;
76 virtual std::shared_ptr<Primitive> clone()
const = 0;
77 virtual TransformClass transformType()
const = 0;
78 virtual void applyTransform(
const bt::Matrix4 &mat, TransformClass transformClass) = 0;
79 void applyTransform(
const Transform &transform, TransformClass transformClass) {
80 applyTransform(transform.getMatrix(), transformClass);
82 virtual bool canMerge()
const {
return false; }
83 virtual void merge(std::shared_ptr<Primitive> other) {}
84 void incrementVersion();
86 virtual bool hasPoints()
const {
return false; }
87 virtual ga::Offset getNumPoints()
const {
return 0; }
88 virtual PointOffsets getPoints() {
return PointOffsets(*
this); }
90 ga::AttributeHandle<bt::intT> addIntAttribute(ga::AttributeOwner owner, std::string name,
91 bool intrinsic =
false);
92 ga::AttributeHandleBool addBoolAttribute(ga::AttributeOwner owner, std::string name,
93 bool intrinsic =
false);
94 ga::AttributeHandle<bt::Vector3> addVector3Attribute(ga::AttributeOwner owner, std::string name,
95 bool intrinsic =
false);
96 ga::AttributeHandle<bt::Matrix4> addMatrix4Attribute(ga::AttributeOwner owner, std::string name,
97 bool intrinsic =
false);
99 std::shared_ptr<ga::Attribute> getAttribByName(ga::AttributeOwner owner, std::string name,
100 bool includeIntrinsics =
false);
101 const size_t getNumAttributes(
const ga::AttributeOwner owner)
const;
102 std::weak_ptr<const ga::Attribute> getAttributeByIndex(ga::AttributeOwner owner,
103 unsigned int index)
const;
104 bool attributeExists(ga::AttributeOwner owner, std::string name);
106 bt::String getPath()
const {
return path_; };
107 void setPath(
const bt::String &path) { path_ = path; };
110 virtual ga::attribVector &getAttributeStore(
const ga::AttributeOwner &owner);
111 virtual const ga::attribVector &getAttributeStore(
const ga::AttributeOwner &owner)
const;
112 ga::attribVector deepCopyAttributes(ga::attribVector source);
114 std::string path_ =
"/prim";
115 ga::attribVector pointAttributes_;
116 ga::attribVector primitiveAttributes_;
Basic attribute, parameter, and node types for Enzo.
size_t Offset
ga::Offset is the index of an element in a given AttributeOwner.
Definition Types.h:43
Base class for all primitive types in the engine.
Definition Primitive.h:30
Definition Primitive.h:28