TDME2 1.9.121
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Node.cpp
Go to the documentation of this file.
2
3#include <map>
4#include <string>
5#include <vector>
6
7#include <tdme/tdme.h>
14#include <tdme/math/Matrix4x4.h>
15#include <tdme/math/Vector3.h>
16
17using std::map;
18using std::string;
19using std::vector;
20
30
31Node::Node(Model* model, Node* parentNode, const string& id, const string& name)
32{
33 this->model = model;
34 this->parentNode = parentNode;
35 this->id = id;
36 this->name = name;
38 this->animation = nullptr;
39 this->skinning = nullptr;
40 this->joint = false;
41 this->verticesUpdated = false;
42 this->normalsUpdated = false;
43}
44
46 if (animation != nullptr) delete animation;
47 if (skinning != nullptr) delete skinning;
48}
49
50void Node::setVertices(const vector<Vector3>& vertices)
51{
52 this->vertices.resize(vertices.size());
53 auto i = 0;
54 for (auto& vertex: vertices) {
55 this->vertices[i++] = vertex;
56 }
57 this->verticesUpdated = true;
58}
59
60void Node::setNormals(const vector<Vector3>& normals)
61{
62 this->normals.resize(normals.size());
63 auto i = 0;
64 for (auto& normal: normals) {
65 this->normals[i++] = normal;
66 }
67 this->normalsUpdated = true;
68}
69
70void Node::setTextureCoordinates(const vector<TextureCoordinate>& textureCoordinates)
71{
72 this->textureCoordinates.resize(textureCoordinates.size());
73 auto i = 0;
74 for (auto& textureCoordinate: textureCoordinates) {
75 this->textureCoordinates[i++] = textureCoordinate;
76 }
77}
78
79void Node::setTangents(const vector<Vector3>& tangents)
80{
81 this->tangents.resize(tangents.size());
82 auto i = 0;
83 for (auto& tangent: tangents) {
84 this->tangents[i++] = tangent;
85 }
86}
87
88void Node::setBitangents(const vector<Vector3>& bitangents)
89{
90 this->bitangents.resize(bitangents.size());
91 auto i = 0;
92 for (auto& bitangent: bitangents) {
93 this->bitangents[i++] = bitangent;
94 }
95}
96
97void Node::setAnimation(Animation* animation) {
98 if (this->animation != nullptr && this->animation != animation) delete this->animation;
99 this->animation = animation;
100}
101
103{
104 if (this->skinning != nullptr && this->skinning != skinning) delete this->skinning;
105 if (skinning != nullptr) model->setHasSkinning(true);
106 this->skinning = skinning;
107}
108
109int32_t Node::getFaceCount() const
110{
111 auto faceCount = 0;
112 for (auto& facesEntity : facesEntities) {
113 faceCount += facesEntity.getFaces().size();
114 }
115 return faceCount;
116}
117
119 for (auto& facesEntity: facesEntities) {
120 if (facesEntity.getId() == id) return &facesEntity;
121 }
122 return nullptr;
123}
124
125void Node::setFacesEntities(const vector<FacesEntity>& facesEntities)
126{
127 this->facesEntities.resize(facesEntities.size());
128 auto i = 0;
129 for (auto& facesEntity: facesEntities) {
130 this->facesEntities[i++] = facesEntity;
131 }
132}
133
134void Node::setOrigins(const vector<Vector3>& origins) {
135 this->origins.resize(origins.size());
136 auto i = 0;
137 for (auto& origin: origins) {
138 this->origins[i++] = origin;
139 }
140}
141
142Node* Node::getSubNodeById(const string& nodeId)
143{
144 auto nodeIt = subNodes.find(nodeId);
145 if (nodeIt != subNodes.end()) {
146 return nodeIt->second;
147 }
148 return nullptr;
149}
Represents a model face, consisting of vertex, normal, tangent and bitangent vectors,...
Definition: Face.h:19
Node faces entity A node can have multiple entities containing faces and a applied material.
Definition: FacesEntity.h:28
Representation of a 3d model.
Definition: Model.h:32
void setHasSkinning(bool hasSkinning)
Set up if model has skinning.
Definition: Model.h:70
Model node.
Definition: Node.h:31
int32_t getFaceCount() const
Definition: Node.cpp:109
Node * getSubNodeById(const string &nodeId)
Returns a sub node by id.
Definition: Node.cpp:142
Skinning * skinning
Definition: Node.h:45
FacesEntity * getFacesEntity(const string &id)
Find faces entity by id.
Definition: Node.cpp:118
void setAnimation(Animation *animation)
Sets animation object.
Definition: Node.cpp:97
void setTextureCoordinates(const vector< TextureCoordinate > &textureCoordinates)
Set texture coordinates.
Definition: Node.cpp:70
vector< Vector3 > bitangents
Definition: Node.h:43
void setOrigins(const vector< Vector3 > &origins)
Set origins.
Definition: Node.cpp:134
void setVertices(const vector< Vector3 > &vertices)
Set vertices.
Definition: Node.cpp:50
void setFacesEntities(const vector< FacesEntity > &facesEntities)
Set up faces entities.
Definition: Node.cpp:125
void setSkinning(Skinning *skinning)
Sets skinning object.
Definition: Node.cpp:102
~Node()
Destructor.
Definition: Node.cpp:45
vector< FacesEntity > facesEntities
Definition: Node.h:46
map< string, Node * > subNodes
Definition: Node.h:48
vector< Vector3 > tangents
Definition: Node.h:42
vector< Vector3 > normals
Definition: Node.h:40
Matrix4x4 transformationsMatrix
Definition: Node.h:38
vector< Vector3 > origins
Definition: Node.h:47
vector< Vector3 > vertices
Definition: Node.h:39
vector< TextureCoordinate > textureCoordinates
Definition: Node.h:41
void setNormals(const vector< Vector3 > &normals)
Set normals.
Definition: Node.cpp:60
Animation * animation
Definition: Node.h:44
void setBitangents(const vector< Vector3 > &bitangents)
Set bitangents.
Definition: Node.cpp:88
void setTangents(const vector< Vector3 > &tangents)
Set tangents.
Definition: Node.cpp:79
Skinning definition for nodes.
Definition: Skinning.h:27
Class representing texture UV coordinates data.
4x4 3D Matrix class
Definition: Matrix4x4.h:24
Matrix4x4 & identity()
Setup identity matrix.
Definition: Matrix4x4.h:326
3D vector 3 class
Definition: Vector3.h:22