Update ArmaturePopulate.cpp
- Introduce tabs width of 4. - Add missing brackets - Use c++ comment blockspull/2987/head
parent
407c550240
commit
8fd053315c
|
@ -4,7 +4,6 @@ Open Asset Import Library (assimp)
|
||||||
|
|
||||||
Copyright (c) 2006-2020, assimp team
|
Copyright (c) 2006-2020, assimp team
|
||||||
|
|
||||||
|
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
@ -36,7 +35,6 @@ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
#include "ArmaturePopulate.h"
|
#include "ArmaturePopulate.h"
|
||||||
|
@ -50,12 +48,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
namespace Assimp {
|
namespace Assimp {
|
||||||
|
|
||||||
/// The default class constructor.
|
/// The default class constructor.
|
||||||
ArmaturePopulate::ArmaturePopulate() : BaseProcess()
|
ArmaturePopulate::ArmaturePopulate() :
|
||||||
{}
|
BaseProcess() {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
/// The class destructor.
|
/// The class destructor.
|
||||||
ArmaturePopulate::~ArmaturePopulate()
|
ArmaturePopulate::~ArmaturePopulate() {
|
||||||
{}
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
bool ArmaturePopulate::IsActive(unsigned int pFlags) const {
|
bool ArmaturePopulate::IsActive(unsigned int pFlags) const {
|
||||||
return (pFlags & aiProcess_PopulateArmatureData) != 0;
|
return (pFlags & aiProcess_PopulateArmatureData) != 0;
|
||||||
|
@ -99,12 +100,12 @@ void ArmaturePopulate::Execute(aiScene *out) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Reprocess all nodes to calculate bone transforms properly based on the REAL
|
// Reprocess all nodes to calculate bone transforms properly based on the REAL
|
||||||
* mOffsetMatrix not the local. */
|
// mOffsetMatrix not the local.
|
||||||
/* Before this would use mesh transforms which is wrong for bone transforms */
|
// Before this would use mesh transforms which is wrong for bone transforms
|
||||||
/* Before this would work for simple character skeletons but not complex meshes
|
// Before this would work for simple character skeletons but not complex meshes
|
||||||
* with multiple origins */
|
// with multiple origins
|
||||||
/* Source: sketch fab log cutter fbx */
|
// Source: sketch fab log cutter fbx
|
||||||
void ArmaturePopulate::BuildBoneList(aiNode *current_node,
|
void ArmaturePopulate::BuildBoneList(aiNode *current_node,
|
||||||
const aiNode *root_node,
|
const aiNode *root_node,
|
||||||
const aiScene *scene,
|
const aiScene *scene,
|
||||||
|
@ -125,7 +126,7 @@ void ArmaturePopulate::BuildBoneList(aiNode *current_node,
|
||||||
aiBone *bone = mesh->mBones[boneId];
|
aiBone *bone = mesh->mBones[boneId];
|
||||||
ai_assert(bone);
|
ai_assert(bone);
|
||||||
|
|
||||||
// duplicate meshes exist with the same bones sometimes :)
|
// duplicate mehes exist with the same bones sometimes :)
|
||||||
// so this must be detected
|
// so this must be detected
|
||||||
if (std::find(bones.begin(), bones.end(), bone) == bones.end()) {
|
if (std::find(bones.begin(), bones.end(), bone) == bones.end()) {
|
||||||
// add the element once
|
// add the element once
|
||||||
|
@ -141,7 +142,7 @@ void ArmaturePopulate::BuildBoneList(aiNode *current_node,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prepare flat node list which can be used for non recursive lookups later */
|
// Prepare flat node list which can be used for non recursive lookups later
|
||||||
void ArmaturePopulate::BuildNodeList(const aiNode *current_node,
|
void ArmaturePopulate::BuildNodeList(const aiNode *current_node,
|
||||||
std::vector<aiNode *> &nodes) {
|
std::vector<aiNode *> &nodes) {
|
||||||
ai_assert(current_node);
|
ai_assert(current_node);
|
||||||
|
@ -150,17 +151,17 @@ void ArmaturePopulate::BuildNodeList(const aiNode *current_node,
|
||||||
aiNode *child = current_node->mChildren[nodeId];
|
aiNode *child = current_node->mChildren[nodeId];
|
||||||
ai_assert(child);
|
ai_assert(child);
|
||||||
|
|
||||||
if (child->mNumMeshes == 0)
|
if (child->mNumMeshes == 0) {
|
||||||
nodes.push_back(child);
|
nodes.push_back(child);
|
||||||
|
}
|
||||||
|
|
||||||
BuildNodeList(child, nodes);
|
BuildNodeList(child, nodes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A bone stack allows us to have multiple armatures, with the same bone names
|
// A bone stack allows us to have multiple armatures, with the same bone names
|
||||||
* A bone stack allows us also to retrieve bones true transform even with
|
// A bone stack allows us also to retrieve bones true transform even with
|
||||||
* duplicate names :)
|
// duplicate names :)
|
||||||
*/
|
|
||||||
void ArmaturePopulate::BuildBoneStack(aiNode *current_node,
|
void ArmaturePopulate::BuildBoneStack(aiNode *current_node,
|
||||||
const aiNode *root_node,
|
const aiNode *root_node,
|
||||||
const aiScene *scene,
|
const aiScene *scene,
|
||||||
|
@ -193,12 +194,10 @@ void ArmaturePopulate::BuildBoneStack(aiNode *current_node,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Returns the armature root node
|
||||||
/* Returns the armature root node */
|
// This is required to be detected for a bone initially, it will recurse up
|
||||||
/* This is required to be detected for a bone initially, it will recurse up
|
// until it cannot find another bone and return the node No known failure
|
||||||
* until it cannot find another bone and return the node No known failure
|
// points. (yet)
|
||||||
* points. (yet)
|
|
||||||
*/
|
|
||||||
aiNode *ArmaturePopulate::GetArmatureRoot(aiNode *bone_node,
|
aiNode *ArmaturePopulate::GetArmatureRoot(aiNode *bone_node,
|
||||||
std::vector<aiBone *> &bone_list) {
|
std::vector<aiBone *> &bone_list) {
|
||||||
while (bone_node) {
|
while (bone_node) {
|
||||||
|
@ -215,9 +214,7 @@ aiNode *ArmaturePopulate::GetArmatureRoot(aiNode *bone_node,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Simple IsBoneNode check if this could be a bone
|
||||||
|
|
||||||
/* Simple IsBoneNode check if this could be a bone */
|
|
||||||
bool ArmaturePopulate::IsBoneNode(const aiString &bone_name,
|
bool ArmaturePopulate::IsBoneNode(const aiString &bone_name,
|
||||||
std::vector<aiBone *> &bones) {
|
std::vector<aiBone *> &bones) {
|
||||||
for (aiBone *bone : bones) {
|
for (aiBone *bone : bones) {
|
||||||
|
@ -229,12 +226,11 @@ bool ArmaturePopulate::IsBoneNode(const aiString &bone_name,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Pop this node by name from the stack if found */
|
// Pop this node by name from the stack if found
|
||||||
/* Used in multiple armature situations with duplicate node / bone names */
|
// Used in multiple armature situations with duplicate node / bone names
|
||||||
/* Known flaw: cannot have nodes with bone names, will be fixed in later release
|
// Known flaw: cannot have nodes with bone names, will be fixed in later release
|
||||||
*/
|
// (serious to be fixed) Known flaw: nodes which have more than one bone could
|
||||||
/* (serious to be fixed) Known flaw: nodes which have more than one bone could
|
// be prematurely dropped from stack
|
||||||
* be prematurely dropped from stack */
|
|
||||||
aiNode *ArmaturePopulate::GetNodeFromStack(const aiString &node_name,
|
aiNode *ArmaturePopulate::GetNodeFromStack(const aiString &node_name,
|
||||||
std::vector<aiNode *> &nodes) {
|
std::vector<aiNode *> &nodes) {
|
||||||
std::vector<aiNode *>::iterator iter;
|
std::vector<aiNode *>::iterator iter;
|
||||||
|
@ -263,7 +259,4 @@ aiNode *ArmaturePopulate::GetNodeFromStack(const aiString &node_name,
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // Namespace Assimp
|
} // Namespace Assimp
|
||||||
|
|
Loading…
Reference in New Issue