diff --git a/code/AssetLib/3DS/3DSConverter.cpp b/code/AssetLib/3DS/3DSConverter.cpp index 4c964e7e2..5cae63b9d 100644 --- a/code/AssetLib/3DS/3DSConverter.cpp +++ b/code/AssetLib/3DS/3DSConverter.cpp @@ -57,13 +57,13 @@ namespace Assimp { static constexpr unsigned int NotSet = 0xcdcdcdcd; // ------------------------------------------------------------------------------------------------ -// Setup final material indices, generae a default material if necessary +// Setup final material indices, generate a default material if necessary void Discreet3DSImporter::ReplaceDefaultMaterial() { // Try to find an existing material that matches the // typical default material setting: // - no textures // - diffuse color (in grey!) - // NOTE: This is here to workaround the fact that some + // NOTE: This is here to work-around the fact that some // exporters are writing a default material, too. unsigned int idx(NotSet); for (unsigned int i = 0; i < mScene->mMaterials.size(); ++i) { @@ -72,7 +72,9 @@ void Discreet3DSImporter::ReplaceDefaultMaterial() { it = static_cast(::tolower(static_cast(it))); } - if (std::string::npos == s.find("default")) continue; + if (std::string::npos == s.find("default")) { + continue; + } if (mScene->mMaterials[i].mDiffuse.r != mScene->mMaterials[i].mDiffuse.g || @@ -85,22 +87,22 @@ void Discreet3DSImporter::ReplaceDefaultMaterial() { idx = i; } if (NotSet == idx) { - idx = (unsigned int)mScene->mMaterials.size(); + idx = static_cast(mScene->mMaterials.size()); } // now iterate through all meshes and through all faces and // find all faces that are using the default material unsigned int cnt = 0; for (auto i = mScene->mMeshes.begin(); i != mScene->mMeshes.end(); ++i) { - for (auto a = (*i).mFaceMaterials.begin(); a != (*i).mFaceMaterials.end(); ++a) { + for (auto a = i->mFaceMaterials.begin(); a != i->mFaceMaterials.end(); ++a) { // NOTE: The additional check seems to be necessary, // some exporters seem to generate invalid data here - if (NotSet == (*a)) { - (*a) = idx; + if (NotSet == *a) { + *a = idx; ++cnt; } else if ((*a) >= mScene->mMaterials.size()) { - (*a) = idx; + *a = idx; ASSIMP_LOG_WARN("Material index overflow in 3DS file. Using default material"); ++cnt; } @@ -326,7 +328,7 @@ void Discreet3DSImporter::ConvertMeshes(aiScene *pcOut) { aiString name; // we need to split all meshes by their materials - for (std::vector::iterator i = mScene->mMeshes.begin(); i != mScene->mMeshes.end(); ++i) { + for (auto i = mScene->mMeshes.begin(); i != mScene->mMeshes.end(); ++i) { std::unique_ptr[]> aiSplit(new std::vector[mScene->mMaterials.size()]); name.length = ASSIMP_itoa10(name.data, num++); @@ -341,7 +343,7 @@ void Discreet3DSImporter::ConvertMeshes(aiScene *pcOut) { if (aiSplit[p].empty()) { continue; } - aiMesh *meshOut = new aiMesh(); + auto *meshOut = new aiMesh(); meshOut->mName = name; meshOut->mPrimitiveTypes = aiPrimitiveType_TRIANGLE; @@ -410,7 +412,7 @@ void Discreet3DSImporter::AddNodeToGraph(aiScene *pcSOut, aiNode *pcOut, // Find all meshes with the same name as the node for (unsigned int a = 0; a < pcSOut->mNumMeshes; ++a) { - const D3DS::Mesh *pcMesh = (const D3DS::Mesh *)pcSOut->mMeshes[a]->mColors[0]; + const auto *pcMesh = (const D3DS::Mesh *)pcSOut->mMeshes[a]->mColors[0]; ai_assert(nullptr != pcMesh); if (pcIn->mName == pcMesh->mName) @@ -419,7 +421,7 @@ void Discreet3DSImporter::AddNodeToGraph(aiScene *pcSOut, aiNode *pcOut, if (!iArray.empty()) { // The matrix should be identical for all meshes with the // same name. It HAS to be identical for all meshes ..... - D3DS::Mesh *imesh = ((D3DS::Mesh *)pcSOut->mMeshes[iArray[0]]->mColors[0]); + auto *imesh = ((D3DS::Mesh *)pcSOut->mMeshes[iArray[0]]->mColors[0]); // Compute the inverse of the transformation matrix to move the // vertices back to their relative and local space @@ -487,7 +489,7 @@ void Discreet3DSImporter::AddNodeToGraph(aiScene *pcSOut, aiNode *pcOut, if (pcIn->aRotationKeys.size()) { // FIX to get to Assimp's quaternion conventions - for (std::vector::iterator it = pcIn->aRotationKeys.begin(); it != pcIn->aRotationKeys.end(); ++it) { + for (auto it = pcIn->aRotationKeys.begin(); it != pcIn->aRotationKeys.end(); ++it) { (*it).mValue.w *= -1.f; } @@ -781,7 +783,7 @@ void Discreet3DSImporter::ConvertScene(aiScene *pcOut) { // ... and convert the 3DS materials to aiMaterial's for (unsigned int i = 0; i < pcOut->mNumMaterials; ++i) { - aiMaterial *pcNew = new aiMaterial(); + auto *pcNew = new aiMaterial(); ConvertMaterial(mScene->mMaterials[i], *pcNew); pcOut->mMaterials[i] = pcNew; } diff --git a/code/AssetLib/3DS/3DSExporter.cpp b/code/AssetLib/3DS/3DSExporter.cpp index 443011c0d..15748cd6d 100644 --- a/code/AssetLib/3DS/3DSExporter.cpp +++ b/code/AssetLib/3DS/3DSExporter.cpp @@ -76,26 +76,26 @@ class ChunkWriter { public: ChunkWriter(StreamWriterLE &writer, uint16_t chunk_type) : - writer(writer) { - chunk_start_pos = writer.GetCurrentPos(); + mWriter(writer) { + mChunkStartPos = writer.GetCurrentPos(); writer.PutU2(chunk_type); writer.PutU4((uint32_t)CHUNK_SIZE_NOT_SET); } ~ChunkWriter() { - std::size_t head_pos = writer.GetCurrentPos(); + std::size_t head_pos = mWriter.GetCurrentPos(); - ai_assert(head_pos > chunk_start_pos); - const std::size_t chunk_size = head_pos - chunk_start_pos; + ai_assert(head_pos > mChunkStartPos); + const std::size_t chunk_size = head_pos - mChunkStartPos; - writer.SetCurrentPos(chunk_start_pos + SIZE_OFFSET); - writer.PutU4(static_cast(chunk_size)); - writer.SetCurrentPos(head_pos); + mWriter.SetCurrentPos(mChunkStartPos + SIZE_OFFSET); + mWriter.PutU4(static_cast(chunk_size)); + mWriter.SetCurrentPos(head_pos); } private: - StreamWriterLE &writer; - std::size_t chunk_start_pos; + StreamWriterLE &mWriter; + std::size_t mChunkStartPos; }; // Return an unique name for a given |mesh| attached to |node| that @@ -541,7 +541,7 @@ void Discreet3DSExporter::WriteFaceMaterialChunk(const aiMesh &mesh) { // ------------------------------------------------------------------------------------------------ void Discreet3DSExporter::WriteString(const std::string &s) { - for (std::string::const_iterator it = s.begin(); it != s.end(); ++it) { + for (auto it = s.begin(); it != s.end(); ++it) { writer.PutI1(*it); } writer.PutI1('\0'); diff --git a/code/AssetLib/3DS/3DSLoader.cpp b/code/AssetLib/3DS/3DSLoader.cpp index 1ee0b8b28..36d42b076 100644 --- a/code/AssetLib/3DS/3DSLoader.cpp +++ b/code/AssetLib/3DS/3DSLoader.cpp @@ -75,7 +75,7 @@ static constexpr aiImporterDesc desc = { // - computes its length #define ASSIMP_3DS_BEGIN_CHUNK() \ while (true) { \ - if (stream->GetRemainingSizeToLimit() < sizeof(Discreet3DS::Chunk)) { \ + if (mStream->GetRemainingSizeToLimit() < sizeof(Discreet3DS::Chunk)) { \ return; \ } \ Discreet3DS::Chunk chunk; \ @@ -83,23 +83,23 @@ static constexpr aiImporterDesc desc = { int chunkSize = chunk.Size - sizeof(Discreet3DS::Chunk); \ if (chunkSize <= 0) \ continue; \ - const unsigned int oldReadLimit = stream->SetReadLimit( \ - stream->GetCurrentPos() + chunkSize); + const unsigned int oldReadLimit = mStream->SetReadLimit( \ + mStream->GetCurrentPos() + chunkSize); // ------------------------------------------------------------------------------------------------ // End a parsing block // Must follow at the end of each parsing block, reset chunk end marker to previous value #define ASSIMP_3DS_END_CHUNK() \ - stream->SkipToReadLimit(); \ - stream->SetReadLimit(oldReadLimit); \ - if (stream->GetRemainingSizeToLimit() == 0) \ + mStream->SkipToReadLimit(); \ + mStream->SetReadLimit(oldReadLimit); \ + if (mStream->GetRemainingSizeToLimit() == 0) \ return; \ } // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer Discreet3DSImporter::Discreet3DSImporter() : - stream(), mLastNodeIndex(), mCurrentNode(), mRootNode(), mScene(), mMasterScale(), bHasBG(), bIsPrj() { + mStream(nullptr), mLastNodeIndex(), mCurrentNode(), mRootNode(), mScene(), mMasterScale(), bHasBG(), bIsPrj() { // empty } @@ -138,14 +138,14 @@ void Discreet3DSImporter::InternReadFile(const std::string &pFile, if (theStream.GetRemainingSize() < 16) { throw DeadlyImportError("3DS file is either empty or corrupt: ", pFile); } - this->stream = &theStream; + mStream = &theStream; // Allocate our temporary 3DS representation - D3DS::Scene _scene; + Scene _scene; mScene = &_scene; // Initialize members - D3DS::Node _rootNode("UNNAMED"); + Node _rootNode("UNNAMED"); mLastNodeIndex = -1; mCurrentNode = &_rootNode; mRootNode = mCurrentNode; @@ -166,12 +166,12 @@ void Discreet3DSImporter::InternReadFile(const std::string &pFile, // vectors from the smoothing groups we read from the // file. for (auto &mesh : mScene->mMeshes) { - if (mesh.mFaces.size() > 0 && mesh.mPositions.size() == 0) { + if (mesh.mFaces.size() > 0 && mesh.mPositions.empty()) { throw DeadlyImportError("3DS file contains faces but no vertices: ", pFile); } CheckIndices(mesh); MakeUnique(mesh); - ComputeNormalsWithSmoothingsGroups(mesh); + ComputeNormalsWithSmoothingsGroups(mesh); } // Replace all occurrences of the default material with a @@ -196,12 +196,12 @@ void Discreet3DSImporter::InternReadFile(const std::string &pFile, AI_DEBUG_INVALIDATE_PTR(mRootNode); AI_DEBUG_INVALIDATE_PTR(mScene); - AI_DEBUG_INVALIDATE_PTR(this->stream); + AI_DEBUG_INVALIDATE_PTR(mStream); } // ------------------------------------------------------------------------------------------------ // Applies a master-scaling factor to the imported scene -void Discreet3DSImporter::ApplyMasterScale(aiScene *pScene) { +void Discreet3DSImporter::ApplyMasterScale(const aiScene *pScene) { // There are some 3DS files with a zero scaling factor if (!mMasterScale) mMasterScale = 1.0f; @@ -223,14 +223,14 @@ void Discreet3DSImporter::ApplyMasterScale(aiScene *pScene) { void Discreet3DSImporter::ReadChunk(Discreet3DS::Chunk *pcOut) { ai_assert(pcOut != nullptr); - pcOut->Flag = stream->GetI2(); - pcOut->Size = stream->GetI4(); + pcOut->Flag = mStream->GetI2(); + pcOut->Size = mStream->GetI4(); - if (pcOut->Size - sizeof(Discreet3DS::Chunk) > stream->GetRemainingSize()) { + if (pcOut->Size - sizeof(Discreet3DS::Chunk) > mStream->GetRemainingSize()) { throw DeadlyImportError("Chunk is too large"); } - if (pcOut->Size - sizeof(Discreet3DS::Chunk) > stream->GetRemainingSizeToLimit()) { + if (pcOut->Size - sizeof(Discreet3DS::Chunk) > mStream->GetRemainingSizeToLimit()) { ASSIMP_LOG_ERROR("3DS: Chunk overflow"); } } @@ -241,8 +241,7 @@ void Discreet3DSImporter::SkipChunk() { Discreet3DS::Chunk psChunk; ReadChunk(&psChunk); - stream->IncPtr(psChunk.Size - sizeof(Discreet3DS::Chunk)); - return; + mStream->IncPtr(psChunk.Size - sizeof(Discreet3DS::Chunk)); } // ------------------------------------------------------------------------------------------------ @@ -294,7 +293,7 @@ void Discreet3DSImporter::ParseEditorChunk() { case Discreet3DS::CHUNK_VERSION: { // print the version number char buff[10]; - ASSIMP_itoa10(buff, stream->GetI2()); + ASSIMP_itoa10(buff, mStream->GetI2()); ASSIMP_LOG_INFO("3DS file format version: ", buff); } break; }; @@ -309,10 +308,10 @@ void Discreet3DSImporter::ParseObjectChunk() { switch (chunk.Flag) { case Discreet3DS::CHUNK_OBJBLOCK: { unsigned int cnt = 0; - const char *sz = (const char *)stream->GetPtr(); + const auto *sz = (const char *)mStream->GetPtr(); // Get the name of the geometry object - while (stream->GetI1()) + while (mStream->GetI1()) ++cnt; ParseChunk(sz, cnt); } break; @@ -340,8 +339,8 @@ void Discreet3DSImporter::ParseObjectChunk() { // Specifies the background image. The string should already be // properly 0 terminated but we need to be sure unsigned int cnt = 0; - const char *sz = (const char *)stream->GetPtr(); - while (stream->GetI1()) + auto *sz = (const char *)mStream->GetPtr(); + while (mStream->GetI1()) ++cnt; mBackgroundImage = std::string(sz, cnt); } break; @@ -352,7 +351,7 @@ void Discreet3DSImporter::ParseObjectChunk() { case Discreet3DS::CHUNK_MASTER_SCALE: // Scene master scaling factor - mMasterScale = stream->GetF4(); + mMasterScale = mStream->GetF4(); break; }; ASSIMP_3DS_END_CHUNK(); @@ -379,15 +378,15 @@ void Discreet3DSImporter::ParseChunk(const char *name, unsigned int num) { case Discreet3DS::CHUNK_LIGHT: { // This starts a new light - aiLight *light = new aiLight(); + auto *light = new aiLight(); mScene->mLights.push_back(light); light->mName.Set(std::string(name, num)); // First read the position of the light - light->mPosition.x = stream->GetF4(); - light->mPosition.y = stream->GetF4(); - light->mPosition.z = stream->GetF4(); + light->mPosition.x = mStream->GetF4(); + light->mPosition.y = mStream->GetF4(); + light->mPosition.z = mStream->GetF4(); light->mColorDiffuse = aiColor3D(1.f, 1.f, 1.f); @@ -408,19 +407,19 @@ void Discreet3DSImporter::ParseChunk(const char *name, unsigned int num) { case Discreet3DS::CHUNK_CAMERA: { // This starts a new camera - aiCamera *camera = new aiCamera(); + auto *camera = new aiCamera(); mScene->mCameras.push_back(camera); camera->mName.Set(std::string(name, num)); // First read the position of the camera - camera->mPosition.x = stream->GetF4(); - camera->mPosition.y = stream->GetF4(); - camera->mPosition.z = stream->GetF4(); + camera->mPosition.x = mStream->GetF4(); + camera->mPosition.y = mStream->GetF4(); + camera->mPosition.z = mStream->GetF4(); // Then the camera target - camera->mLookAt.x = stream->GetF4() - camera->mPosition.x; - camera->mLookAt.y = stream->GetF4() - camera->mPosition.y; - camera->mLookAt.z = stream->GetF4() - camera->mPosition.z; + camera->mLookAt.x = mStream->GetF4() - camera->mPosition.x; + camera->mLookAt.y = mStream->GetF4() - camera->mPosition.y; + camera->mLookAt.z = mStream->GetF4() - camera->mPosition.z; ai_real len = camera->mLookAt.Length(); if (len < 1e-5) { @@ -432,12 +431,12 @@ void Discreet3DSImporter::ParseChunk(const char *name, unsigned int num) { camera->mLookAt /= len; // And finally - the camera rotation angle, in counter clockwise direction - const ai_real angle = AI_DEG_TO_RAD(stream->GetF4()); + const ai_real angle = AI_DEG_TO_RAD(mStream->GetF4()); aiQuaternion quat(camera->mLookAt, angle); camera->mUp = quat.GetMatrix() * aiVector3D(0.0, 1.0, 0.0); // Read the lense angle - camera->mHorizontalFOV = AI_DEG_TO_RAD(stream->GetF4()); + camera->mHorizontalFOV = AI_DEG_TO_RAD(mStream->GetF4()); if (camera->mHorizontalFOV < 0.001f) { camera->mHorizontalFOV = float(AI_DEG_TO_RAD(45.f)); } @@ -463,34 +462,34 @@ void Discreet3DSImporter::ParseLightChunk() { light->mType = aiLightSource_SPOT; // We wouldn't need to normalize here, but we do it - light->mDirection.x = stream->GetF4() - light->mPosition.x; - light->mDirection.y = stream->GetF4() - light->mPosition.y; - light->mDirection.z = stream->GetF4() - light->mPosition.z; + light->mDirection.x = mStream->GetF4() - light->mPosition.x; + light->mDirection.y = mStream->GetF4() - light->mPosition.y; + light->mDirection.z = mStream->GetF4() - light->mPosition.z; light->mDirection.Normalize(); // Now the hotspot and falloff angles - in degrees - light->mAngleInnerCone = AI_DEG_TO_RAD(stream->GetF4()); + light->mAngleInnerCone = AI_DEG_TO_RAD(mStream->GetF4()); // FIX: the falloff angle is just an offset - light->mAngleOuterCone = light->mAngleInnerCone + AI_DEG_TO_RAD(stream->GetF4()); + light->mAngleOuterCone = light->mAngleInnerCone + AI_DEG_TO_RAD(mStream->GetF4()); break; // intensity multiplier case Discreet3DS::CHUNK_DL_MULTIPLIER: - light->mColorDiffuse = light->mColorDiffuse * stream->GetF4(); + light->mColorDiffuse = light->mColorDiffuse * mStream->GetF4(); break; // light color case Discreet3DS::CHUNK_RGBF: case Discreet3DS::CHUNK_LINRGBF: - light->mColorDiffuse.r *= stream->GetF4(); - light->mColorDiffuse.g *= stream->GetF4(); - light->mColorDiffuse.b *= stream->GetF4(); + light->mColorDiffuse.r *= mStream->GetF4(); + light->mColorDiffuse.g *= mStream->GetF4(); + light->mColorDiffuse.b *= mStream->GetF4(); break; // light attenuation case Discreet3DS::CHUNK_DL_ATTENUATE: - light->mAttenuationLinear = stream->GetF4(); + light->mAttenuationLinear = mStream->GetF4(); break; }; @@ -505,10 +504,10 @@ void Discreet3DSImporter::ParseCameraChunk() { // get chunk type switch (chunk.Flag) { // near and far clip plane - case Discreet3DS::CHUNK_CAM_RANGES: - camera->mClipPlaneNear = stream->GetF4(); - camera->mClipPlaneFar = stream->GetF4(); - break; + case Discreet3DS::CHUNK_CAM_RANGES: + camera->mClipPlaneNear = mStream->GetF4(); + camera->mClipPlaneFar = mStream->GetF4(); + break; } ASSIMP_3DS_END_CHUNK(); @@ -555,14 +554,13 @@ void Discreet3DSImporter::InverseNodeSearch(D3DS::Node *pcNode, D3DS::Node *pcCu // ------------------------------------------------------------------------------------------------ // Find a node with a specific name in the import hierarchy -D3DS::Node *FindNode(D3DS::Node *root, const std::string &name) { +Node *FindNode(Node *root, const std::string &name) { if (root->mName == name) { return root; } - for (std::vector::iterator it = root->mChildren.begin(); it != root->mChildren.end(); ++it) { - D3DS::Node *nd = FindNode(*it, name); - if (nullptr != nd) { + for (auto it = root->mChildren.begin(); it != root->mChildren.end(); ++it) { + if (auto *nd = FindNode(*it, name); nullptr != nd) { return nd; } } @@ -580,7 +578,7 @@ bool KeyUniqueCompare(const T &first, const T &second) { // ------------------------------------------------------------------------------------------------ // Skip some additional import data. void Discreet3DSImporter::SkipTCBInfo() { - unsigned int flags = stream->GetI2(); + unsigned int flags = mStream->GetI2(); if (!flags) { // Currently we can't do anything with these values. They occur @@ -591,19 +589,19 @@ void Discreet3DSImporter::SkipTCBInfo() { } if (flags & Discreet3DS::KEY_USE_TENS) { - stream->IncPtr(4); + mStream->IncPtr(4); } if (flags & Discreet3DS::KEY_USE_BIAS) { - stream->IncPtr(4); + mStream->IncPtr(4); } if (flags & Discreet3DS::KEY_USE_CONT) { - stream->IncPtr(4); + mStream->IncPtr(4); } if (flags & Discreet3DS::KEY_USE_EASE_FROM) { - stream->IncPtr(4); + mStream->IncPtr(4); } if (flags & Discreet3DS::KEY_USE_EASE_TO) { - stream->IncPtr(4); + mStream->IncPtr(4); } } @@ -622,15 +620,15 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { // First of all: get the name of the object unsigned int cnt = 0; - const char *sz = (const char *)stream->GetPtr(); + auto *sz = (const char *)mStream->GetPtr(); - while (stream->GetI1()) + while (mStream->GetI1()) ++cnt; std::string name = std::string(sz, cnt); // Now find out whether we have this node already (target animation channels // are stored with a separate object ID) - D3DS::Node *pcNode = FindNode(mRootNode, name); + Node *pcNode = FindNode(mRootNode, name); int instanceNumber = 1; if (pcNode) { @@ -646,10 +644,10 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { pcNode->mInstanceNumber = instanceNumber; // There are two unknown values which we can safely ignore - stream->IncPtr(4); + mStream->IncPtr(4); // Now read the hierarchy position of the object - uint16_t hierarchy = stream->GetI2() + 1; + uint16_t hierarchy = mStream->GetI2() + 1; pcNode->mHierarchyPos = hierarchy; pcNode->mHierarchyIndex = mLastNodeIndex; @@ -678,8 +676,8 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { // This is the "real" name of a $$$DUMMY object { - const char *sz = (const char *)stream->GetPtr(); - while (stream->GetI1()) + const char *sz = (const char *)mStream->GetPtr(); + while (mStream->GetI1()) ; // If object name is DUMMY, take this one instead @@ -698,16 +696,16 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { } // Pivot = origin of rotation and scaling - mCurrentNode->vPivot.x = stream->GetF4(); - mCurrentNode->vPivot.y = stream->GetF4(); - mCurrentNode->vPivot.z = stream->GetF4(); + mCurrentNode->vPivot.x = mStream->GetF4(); + mCurrentNode->vPivot.y = mStream->GetF4(); + mCurrentNode->vPivot.z = mStream->GetF4(); break; // //////////////////////////////////////////////////////////////////// // POSITION KEYFRAME case Discreet3DS::CHUNK_TRACKPOS: { - stream->IncPtr(10); - const unsigned int numFrames = stream->GetI4(); + mStream->IncPtr(10); + const unsigned int numFrames = mStream->GetI4(); bool sortKeys = false; // This could also be meant as the target position for @@ -720,16 +718,16 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { l->reserve(numFrames); for (unsigned int i = 0; i < numFrames; ++i) { - const unsigned int fidx = stream->GetI4(); + const unsigned int fidx = mStream->GetI4(); // Setup a new position key aiVectorKey v; v.mTime = (double)fidx; SkipTCBInfo(); - v.mValue.x = stream->GetF4(); - v.mValue.y = stream->GetF4(); - v.mValue.z = stream->GetF4(); + v.mValue.x = mStream->GetF4(); + v.mValue.y = mStream->GetF4(); + v.mValue.z = mStream->GetF4(); // check whether we'll need to sort the keys if (!l->empty() && v.mTime <= l->back().mTime) @@ -759,11 +757,11 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { bool sortKeys = false; std::vector *l = &mCurrentNode->aCameraRollKeys; - stream->IncPtr(10); - const unsigned int numFrames = stream->GetI4(); + mStream->IncPtr(10); + const unsigned int numFrames = mStream->GetI4(); l->reserve(numFrames); for (unsigned int i = 0; i < numFrames; ++i) { - const unsigned int fidx = stream->GetI4(); + const unsigned int fidx = mStream->GetI4(); // Setup a new position key aiFloatKey v; @@ -771,7 +769,7 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { // This is just a single float SkipTCBInfo(); - v.mValue = stream->GetF4(); + v.mValue = mStream->GetF4(); // Check whether we'll need to sort the keys if (!l->empty() && v.mTime <= l->back().mTime) @@ -798,26 +796,26 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { // //////////////////////////////////////////////////////////////////// // ROTATION KEYFRAME case Discreet3DS::CHUNK_TRACKROTATE: { - stream->IncPtr(10); - const unsigned int numFrames = stream->GetI4(); + mStream->IncPtr(10); + const unsigned int numFrames = mStream->GetI4(); bool sortKeys = false; std::vector *l = &mCurrentNode->aRotationKeys; l->reserve(numFrames); for (unsigned int i = 0; i < numFrames; ++i) { - const unsigned int fidx = stream->GetI4(); + const unsigned int fidx = mStream->GetI4(); SkipTCBInfo(); aiQuatKey v; v.mTime = (double)fidx; // The rotation keyframe is given as an axis-angle pair - const float rad = stream->GetF4(); + const float rad = mStream->GetF4(); aiVector3D axis; - axis.x = stream->GetF4(); - axis.y = stream->GetF4(); - axis.z = stream->GetF4(); + axis.x = mStream->GetF4(); + axis.y = mStream->GetF4(); + axis.z = mStream->GetF4(); if (!axis.x && !axis.y && !axis.z) axis.y = 1.f; @@ -842,16 +840,16 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { // //////////////////////////////////////////////////////////////////// // SCALING KEYFRAME case Discreet3DS::CHUNK_TRACKSCALE: { - stream->IncPtr(10); - const unsigned int numFrames = stream->GetI2(); - stream->IncPtr(2); + mStream->IncPtr(10); + const unsigned int numFrames = mStream->GetI2(); + mStream->IncPtr(2); bool sortKeys = false; std::vector *l = &mCurrentNode->aScalingKeys; l->reserve(numFrames); for (unsigned int i = 0; i < numFrames; ++i) { - const unsigned int fidx = stream->GetI4(); + const unsigned int fidx = mStream->GetI4(); SkipTCBInfo(); // Setup a new key @@ -859,9 +857,9 @@ void Discreet3DSImporter::ParseHierarchyChunk(uint16_t parent) { v.mTime = (double)fidx; // ... and read its value - v.mValue.x = stream->GetF4(); - v.mValue.y = stream->GetF4(); - v.mValue.z = stream->GetF4(); + v.mValue.x = mStream->GetF4(); + v.mValue.y = mStream->GetF4(); + v.mValue.z = mStream->GetF4(); // check whether we'll need to sort the keys if (!l->empty() && v.mTime <= l->back().mTime) @@ -902,23 +900,23 @@ void Discreet3DSImporter::ParseFaceChunk() { if (num > mMesh.mFaces.size()) { throw DeadlyImportError("3DS: More smoothing groups than faces"); } - for (std::vector::iterator i = mMesh.mFaces.begin(); m != num; ++i, ++m) { + for (auto i = mMesh.mFaces.begin(); m != num; ++i, ++m) { // nth bit is set for nth smoothing group - (*i).iSmoothGroup = stream->GetI4(); + i->iSmoothGroup = mStream->GetI4(); } } break; case Discreet3DS::CHUNK_FACEMAT: { // at fist an asciiz with the material name - const char *sz = (const char *)stream->GetPtr(); - while (stream->GetI1()) + const char *sz = (const char *)mStream->GetPtr(); + while (mStream->GetI1()) ; // find the index of the material unsigned int idx = 0xcdcdcdcd, cnt = 0; - for (std::vector::const_iterator i = mScene->mMaterials.begin(); i != mScene->mMaterials.end(); ++i, ++cnt) { + for (auto i = mScene->mMaterials.begin(); i != mScene->mMaterials.end(); ++i, ++cnt) { // use case independent comparisons. hopefully it will work. - if ((*i).mName.length() && !ASSIMP_stricmp(sz, (*i).mName.c_str())) { + if (i->mName.length() && !ASSIMP_stricmp(sz, i->mName.c_str())) { idx = cnt; break; } @@ -928,9 +926,9 @@ void Discreet3DSImporter::ParseFaceChunk() { } // Now continue and read all material indices - cnt = (uint16_t)stream->GetI2(); + cnt = (uint16_t)mStream->GetI2(); for (unsigned int i = 0; i < cnt; ++i) { - unsigned int fidx = (uint16_t)stream->GetI2(); + unsigned int fidx = (uint16_t)mStream->GetI2(); // check range if (fidx >= mMesh.mFaceMaterials.size()) { @@ -955,59 +953,59 @@ void Discreet3DSImporter::ParseMeshChunk() { switch (chunk.Flag) { case Discreet3DS::CHUNK_VERTLIST: { // This is the list of all vertices in the current mesh - int num = (int)(uint16_t)stream->GetI2(); + int num = (int)(uint16_t)mStream->GetI2(); mMesh.mPositions.reserve(num); while (num-- > 0) { aiVector3D v; - v.x = stream->GetF4(); - v.y = stream->GetF4(); - v.z = stream->GetF4(); + v.x = mStream->GetF4(); + v.y = mStream->GetF4(); + v.z = mStream->GetF4(); mMesh.mPositions.push_back(v); } } break; case Discreet3DS::CHUNK_TRMATRIX: { // This is the RLEATIVE transformation matrix of the current mesh. Vertices are // pretransformed by this matrix wonder. - mMesh.mMat.a1 = stream->GetF4(); - mMesh.mMat.b1 = stream->GetF4(); - mMesh.mMat.c1 = stream->GetF4(); - mMesh.mMat.a2 = stream->GetF4(); - mMesh.mMat.b2 = stream->GetF4(); - mMesh.mMat.c2 = stream->GetF4(); - mMesh.mMat.a3 = stream->GetF4(); - mMesh.mMat.b3 = stream->GetF4(); - mMesh.mMat.c3 = stream->GetF4(); - mMesh.mMat.a4 = stream->GetF4(); - mMesh.mMat.b4 = stream->GetF4(); - mMesh.mMat.c4 = stream->GetF4(); + mMesh.mMat.a1 = mStream->GetF4(); + mMesh.mMat.b1 = mStream->GetF4(); + mMesh.mMat.c1 = mStream->GetF4(); + mMesh.mMat.a2 = mStream->GetF4(); + mMesh.mMat.b2 = mStream->GetF4(); + mMesh.mMat.c2 = mStream->GetF4(); + mMesh.mMat.a3 = mStream->GetF4(); + mMesh.mMat.b3 = mStream->GetF4(); + mMesh.mMat.c3 = mStream->GetF4(); + mMesh.mMat.a4 = mStream->GetF4(); + mMesh.mMat.b4 = mStream->GetF4(); + mMesh.mMat.c4 = mStream->GetF4(); } break; case Discreet3DS::CHUNK_MAPLIST: { // This is the list of all UV coords in the current mesh - int num = (int)(uint16_t)stream->GetI2(); + int num = (int)(uint16_t)mStream->GetI2(); mMesh.mTexCoords.reserve(num); while (num-- > 0) { aiVector3D v; - v.x = stream->GetF4(); - v.y = stream->GetF4(); + v.x = mStream->GetF4(); + v.y = mStream->GetF4(); mMesh.mTexCoords.push_back(v); } } break; case Discreet3DS::CHUNK_FACELIST: { // This is the list of all faces in the current mesh - int num = (int)(uint16_t)stream->GetI2(); + int num = (int)(uint16_t)mStream->GetI2(); mMesh.mFaces.reserve(num); while (num-- > 0) { // 3DS faces are ALWAYS triangles mMesh.mFaces.emplace_back(); - D3DS::Face &sFace = mMesh.mFaces.back(); + Face &sFace = mMesh.mFaces.back(); - sFace.mIndices[0] = (uint16_t)stream->GetI2(); - sFace.mIndices[1] = (uint16_t)stream->GetI2(); - sFace.mIndices[2] = (uint16_t)stream->GetI2(); + sFace.mIndices[0] = (uint16_t)mStream->GetI2(); + sFace.mIndices[1] = (uint16_t)mStream->GetI2(); + sFace.mIndices[2] = (uint16_t)mStream->GetI2(); - stream->IncPtr(2); // skip edge visibility flag + mStream->IncPtr(2); // skip edge visibility flag } // Resize the material array (0xcdcdcdcd marks the default material; so if a face is @@ -1015,7 +1013,7 @@ void Discreet3DSImporter::ParseMeshChunk() { mMesh.mFaceMaterials.resize(mMesh.mFaces.size(), 0xcdcdcdcd); // Larger 3DS files could have multiple FACE chunks here - chunkSize = (int)stream->GetRemainingSizeToLimit(); + chunkSize = (int)mStream->GetRemainingSizeToLimit(); if (chunkSize > (int)sizeof(Discreet3DS::Chunk)) ParseFaceChunk(); } break; @@ -1032,9 +1030,9 @@ void Discreet3DSImporter::ParseMaterialChunk() { { // The material name string is already zero-terminated, but we need to be sure ... - const char *sz = (const char *)stream->GetPtr(); + const char *sz = (const char *)mStream->GetPtr(); unsigned int cnt = 0; - while (stream->GetI1()) + while (mStream->GetI1()) ++cnt; if (!cnt) { @@ -1102,7 +1100,7 @@ void Discreet3DSImporter::ParseMaterialChunk() { case Discreet3DS::CHUNK_MAT_SHADING: // This is the material shading mode - mScene->mMaterials.back().mShading = (D3DS::Discreet3DS::shadetype3ds)stream->GetI2(); + mScene->mMaterials.back().mShading = (Discreet3DS::shadetype3ds)mStream->GetI2(); break; case Discreet3DS::CHUNK_MAT_TWO_SIDE: @@ -1178,31 +1176,31 @@ void Discreet3DSImporter::ParseTextureChunk(D3DS::Texture *pcOut) { switch (chunk.Flag) { case Discreet3DS::CHUNK_MAPFILE: { // The material name string is already zero-terminated, but we need to be sure ... - const char *sz = (const char *)stream->GetPtr(); + const char *sz = (const char *)mStream->GetPtr(); unsigned int cnt = 0; - while (stream->GetI1()) + while (mStream->GetI1()) ++cnt; pcOut->mMapName = std::string(sz, cnt); } break; case Discreet3DS::CHUNK_PERCENTD: // Manually parse the blend factor - pcOut->mTextureBlend = ai_real(stream->GetF8()); + pcOut->mTextureBlend = ai_real(mStream->GetF8()); break; case Discreet3DS::CHUNK_PERCENTF: // Manually parse the blend factor - pcOut->mTextureBlend = stream->GetF4(); + pcOut->mTextureBlend = mStream->GetF4(); break; case Discreet3DS::CHUNK_PERCENTW: // Manually parse the blend factor - pcOut->mTextureBlend = (ai_real)((uint16_t)stream->GetI2()) / ai_real(100.0); + pcOut->mTextureBlend = (ai_real)((uint16_t) mStream->GetI2()) / ai_real(100.0); break; case Discreet3DS::CHUNK_MAT_MAP_USCALE: // Texture coordinate scaling in the U direction - pcOut->mScaleU = stream->GetF4(); + pcOut->mScaleU = mStream->GetF4(); if (0.0f == pcOut->mScaleU) { ASSIMP_LOG_WARN("Texture coordinate scaling in the x direction is zero. Assuming 1."); pcOut->mScaleU = 1.0f; @@ -1210,7 +1208,7 @@ void Discreet3DSImporter::ParseTextureChunk(D3DS::Texture *pcOut) { break; case Discreet3DS::CHUNK_MAT_MAP_VSCALE: // Texture coordinate scaling in the V direction - pcOut->mScaleV = stream->GetF4(); + pcOut->mScaleV = mStream->GetF4(); if (0.0f == pcOut->mScaleV) { ASSIMP_LOG_WARN("Texture coordinate scaling in the y direction is zero. Assuming 1."); pcOut->mScaleV = 1.0f; @@ -1219,21 +1217,21 @@ void Discreet3DSImporter::ParseTextureChunk(D3DS::Texture *pcOut) { case Discreet3DS::CHUNK_MAT_MAP_UOFFSET: // Texture coordinate offset in the U direction - pcOut->mOffsetU = -stream->GetF4(); + pcOut->mOffsetU = -mStream->GetF4(); break; case Discreet3DS::CHUNK_MAT_MAP_VOFFSET: // Texture coordinate offset in the V direction - pcOut->mOffsetV = stream->GetF4(); + pcOut->mOffsetV = mStream->GetF4(); break; case Discreet3DS::CHUNK_MAT_MAP_ANG: // Texture coordinate rotation, CCW in DEGREES - pcOut->mRotation = -AI_DEG_TO_RAD(stream->GetF4()); + pcOut->mRotation = -AI_DEG_TO_RAD(mStream->GetF4()); break; case Discreet3DS::CHUNK_MAT_MAP_TILING: { - const uint16_t iFlags = stream->GetI2(); + const uint16_t iFlags = mStream->GetI2(); // Get the mapping mode (for both axes) if (iFlags & 0x2u) @@ -1258,9 +1256,11 @@ ai_real Discreet3DSImporter::ParsePercentageChunk() { ReadChunk(&chunk); if (Discreet3DS::CHUNK_PERCENTF == chunk.Flag) { - return stream->GetF4() * ai_real(100) / ai_real(0xFFFF); - } else if (Discreet3DS::CHUNK_PERCENTW == chunk.Flag) { - return (ai_real)((uint16_t)stream->GetI2()) / (ai_real)0xFFFF; + return mStream->GetF4() * ai_real(100) / ai_real(0xFFFF); + } + + if (Discreet3DS::CHUNK_PERCENTW == chunk.Flag) { + return (ai_real)((uint16_t)mStream->GetI2()) / (ai_real)0xFFFF; } return get_qnan(); @@ -1291,9 +1291,9 @@ void Discreet3DSImporter::ParseColorChunk(aiColor3D *out, bool acceptPercent) { *out = clrError; return; } - out->r = stream->GetF4(); - out->g = stream->GetF4(); - out->b = stream->GetF4(); + out->r = mStream->GetF4(); + out->g = mStream->GetF4(); + out->b = mStream->GetF4(); break; case Discreet3DS::CHUNK_LINRGBB: @@ -1305,15 +1305,15 @@ void Discreet3DSImporter::ParseColorChunk(aiColor3D *out, bool acceptPercent) { return; } const ai_real invVal = ai_real(1.0) / ai_real(255.0); - out->r = (ai_real)(uint8_t)stream->GetI1() * invVal; - out->g = (ai_real)(uint8_t)stream->GetI1() * invVal; - out->b = (ai_real)(uint8_t)stream->GetI1() * invVal; + out->r = (ai_real)(uint8_t)mStream->GetI1() * invVal; + out->g = (ai_real)(uint8_t)mStream->GetI1() * invVal; + out->b = (ai_real)(uint8_t)mStream->GetI1() * invVal; } break; // Percentage chunks are accepted, too. case Discreet3DS::CHUNK_PERCENTF: if (acceptPercent && 4 <= diff) { - out->g = out->b = out->r = stream->GetF4(); + out->g = out->b = out->r = mStream->GetF4(); break; } *out = clrError; @@ -1321,14 +1321,14 @@ void Discreet3DSImporter::ParseColorChunk(aiColor3D *out, bool acceptPercent) { case Discreet3DS::CHUNK_PERCENTW: if (acceptPercent && 1 <= diff) { - out->g = out->b = out->r = (ai_real)(uint8_t)stream->GetI1() / ai_real(255.0); + out->g = out->b = out->r = (ai_real)(uint8_t)mStream->GetI1() / ai_real(255.0); break; } *out = clrError; return; default: - stream->IncPtr(diff); + mStream->IncPtr(diff); // Skip unknown chunks, hope this won't cause any problems. return ParseColorChunk(out, acceptPercent); }; diff --git a/code/AssetLib/3DS/3DSLoader.h b/code/AssetLib/3DS/3DSLoader.h index fab1c0950..37ac262d9 100644 --- a/code/AssetLib/3DS/3DSLoader.h +++ b/code/AssetLib/3DS/3DSLoader.h @@ -49,7 +49,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include - #include "3DSHelper.h" #include @@ -99,8 +98,7 @@ protected: // ------------------------------------------------------------------- /** Converts a temporary material to the outer representation */ - void ConvertMaterial(D3DS::Material& p_cMat, - aiMaterial& p_pcOut); + void ConvertMaterial(Material& p_cMat, aiMaterial& p_pcOut); // ------------------------------------------------------------------- /** Read a chunk @@ -117,12 +115,10 @@ protected: ai_real ParsePercentageChunk(); // ------------------------------------------------------------------- - /** Parse a color chunk. mCurrent will point to the next - * chunk behind afterwards. If no color chunk is found - * QNAN is returned in all members. - */ - void ParseColorChunk(aiColor3D* p_pcOut, - bool p_bAcceptPercent = true); + /** Parse a color chunk. mCurrent will point to the next chunk behind + * afterward. If no color chunk is found QNAN is returned in all members. + */ + void ParseColorChunk(aiColor3D* p_pcOut, bool p_bAcceptPercent = true); // ------------------------------------------------------------------- /** Skip a chunk in the file @@ -130,7 +126,7 @@ protected: void SkipChunk(); // ------------------------------------------------------------------- - /** Generate the nodegraph + /** Generate the node-graph */ void GenerateNodeGraph(aiScene* pcOut); @@ -192,7 +188,7 @@ protected: // ------------------------------------------------------------------- /** Parse a texture chunk in the file */ - void ParseTextureChunk(D3DS::Texture* pcOut); + void ParseTextureChunk(Texture* pcOut); // ------------------------------------------------------------------- /** Convert the meshes in the file @@ -221,48 +217,47 @@ protected: // ------------------------------------------------------------------- /** generate unique vertices for a mesh */ - void MakeUnique(D3DS::Mesh& sMesh); + void MakeUnique(Mesh& sMesh); // ------------------------------------------------------------------- /** Add a node to the node graph */ - void AddNodeToGraph(aiScene* pcSOut,aiNode* pcOut,D3DS::Node* pcIn, + void AddNodeToGraph(aiScene* pcSOut,aiNode* pcOut,Node* pcIn, aiMatrix4x4& absTrafo); // ------------------------------------------------------------------- /** Search for a node in the graph. * Called recursively */ - void InverseNodeSearch(D3DS::Node* pcNode,D3DS::Node* pcCurrent); + void InverseNodeSearch(Node* pcNode, Node* pcCurrent); // ------------------------------------------------------------------- /** Apply the master scaling factor to the mesh */ - void ApplyMasterScale(aiScene* pScene); + void ApplyMasterScale(const aiScene* pScene); // ------------------------------------------------------------------- /** Clamp all indices in the file to a valid range */ - void CheckIndices(D3DS::Mesh& sMesh); + void CheckIndices(Mesh& sMesh); // ------------------------------------------------------------------- /** Skip the TCB info in a track key */ void SkipTCBInfo(); -protected: - +private: /** Stream to read from */ - StreamReaderLE* stream; + StreamReaderLE* mStream; /** Last touched node index */ short mLastNodeIndex; /** Current node, root node */ - D3DS::Node* mCurrentNode, *mRootNode; + Node* mCurrentNode, *mRootNode; /** Scene under construction */ - D3DS::Scene* mScene; + Scene* mScene; /** Ambient base color of the scene */ aiColor3D mClrAmbient; diff --git a/code/AssetLib/3MF/3MFTypes.h b/code/AssetLib/3MF/3MFTypes.h index 1c7e327f0..4d5a2e116 100644 --- a/code/AssetLib/3MF/3MFTypes.h +++ b/code/AssetLib/3MF/3MFTypes.h @@ -49,8 +49,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. struct aiMaterial; struct aiMesh; -namespace Assimp { -namespace D3MF { +namespace Assimp:: D3MF { enum class ResourceType { RT_Object, @@ -65,8 +64,7 @@ class Resource { public: int mId; - Resource(int id) : - mId(id) { + explicit Resource(int id) : mId(id) { // empty } @@ -77,7 +75,7 @@ public: } }; -class EmbeddedTexture : public Resource { +class EmbeddedTexture final : public Resource { public: std::string mPath; std::string mContentType; @@ -85,12 +83,7 @@ public: std::string mTilestyleV; std::vector mBuffer; - EmbeddedTexture(int id) : - Resource(id), - mPath(), - mContentType(), - mTilestyleU(), - mTilestyleV() { + explicit EmbeddedTexture(int id) : Resource(id) { // empty } @@ -101,13 +94,12 @@ public: } }; -class Texture2DGroup : public Resource { +class Texture2DGroup final : public Resource { public: std::vector mTex2dCoords; int mTexId; - Texture2DGroup(int id) : - Resource(id), - mTexId(-1) { + + explicit Texture2DGroup(int id) : Resource(id), mTexId(-1) { // empty } @@ -118,11 +110,11 @@ public: } }; -class ColorGroup : public Resource { +class ColorGroup final : public Resource { public: std::vector mColors; - ColorGroup(int id) : - Resource(id){ + + explicit ColorGroup(int id) : Resource(id) { // empty } @@ -133,13 +125,11 @@ public: } }; -class BaseMaterials : public Resource { +class BaseMaterials final : public Resource { public: std::vector mMaterialIndex; - BaseMaterials(int id) : - Resource(id), - mMaterialIndex() { + explicit BaseMaterials(int id) : Resource(id) { // empty } @@ -155,14 +145,14 @@ struct Component { aiMatrix4x4 mTransformation; }; -class Object : public Resource { +class Object final : public Resource { public: MeshArray mMeshes; std::vector mMeshIndex; std::vector mComponents; std::string mName; - Object(int id) : + explicit Object(int id) : Resource(id), mName(std::string("Object_") + ai_to_string(id)) { // empty @@ -175,5 +165,4 @@ public: } }; -} // namespace D3MF -} // namespace Assimp +} // namespace Assimp::D3MF diff --git a/code/AssetLib/3MF/3MFXmlTags.h b/code/AssetLib/3MF/3MFXmlTags.h index 2efa4c9ff..8d90d858c 100644 --- a/code/AssetLib/3MF/3MFXmlTags.h +++ b/code/AssetLib/3MF/3MFXmlTags.h @@ -40,85 +40,80 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once -namespace Assimp { -namespace D3MF { - -namespace XmlTag { +namespace Assimp::D3MF::XmlTag { // Root tag - const char* const RootTag = "3MF"; + constexpr char RootTag[] = "3MF"; // Meta-data - const char* const meta = "metadata"; - const char* const meta_name = "name"; + constexpr char meta[] = "metadata"; + constexpr char meta_name[] = "name"; // Model-data specific tags - const char* const model = "model"; - const char* const model_unit = "unit"; - const char* const metadata = "metadata"; - const char* const resources = "resources"; - const char* const object = "object"; - const char* const mesh = "mesh"; - const char* const components = "components"; - const char* const component = "component"; - const char* const vertices = "vertices"; - const char* const vertex = "vertex"; - const char* const triangles = "triangles"; - const char* const triangle = "triangle"; - const char* const x = "x"; - const char* const y = "y"; - const char* const z = "z"; - const char* const v1 = "v1"; - const char* const v2 = "v2"; - const char* const v3 = "v3"; - const char* const id = "id"; - const char* const pid = "pid"; - const char* const pindex = "pindex"; - const char* const p1 = "p1"; - const char *const p2 = "p2"; - const char *const p3 = "p3"; - const char* const name = "name"; - const char* const type = "type"; - const char* const build = "build"; - const char* const item = "item"; - const char* const objectid = "objectid"; - const char* const transform = "transform"; - const char *const path = "path"; + constexpr char model[] = "model"; + constexpr char model_unit[] = "unit"; + constexpr char metadata[] = "metadata"; + constexpr char resources[] = "resources"; + constexpr char object[] = "object"; + constexpr char mesh[] = "mesh"; + constexpr char components[] = "components"; + constexpr char component[] = "component"; + constexpr char vertices[] = "vertices"; + constexpr char vertex[] = "vertex"; + constexpr char triangles[] = "triangles"; + constexpr char triangle[] = "triangle"; + constexpr char x[] = "x"; + constexpr char y[] = "y"; + constexpr char z[] = "z"; + constexpr char v1[] = "v1"; + constexpr char v2[] = "v2"; + constexpr char v3[] = "v3"; + constexpr char id[] = "id"; + constexpr char pid[] = "pid"; + constexpr char pindex[] = "pindex"; + constexpr char p1[] = "p1"; + constexpr char p2[] = "p2"; + constexpr char p3[] = "p3"; + constexpr char name[] = "name"; + constexpr char type[] = "type"; + constexpr char build[] = "build"; + constexpr char item[] = "item"; + constexpr char objectid[] = "objectid"; + constexpr char transform[] = "transform"; + constexpr char path[] = "path"; // Material definitions - const char* const basematerials = "basematerials"; - const char* const basematerials_base = "base"; - const char* const basematerials_name = "name"; - const char* const basematerials_displaycolor = "displaycolor"; - const char* const texture_2d = "m:texture2d"; - const char *const texture_group = "m:texture2dgroup"; - const char *const texture_content_type = "contenttype"; - const char *const texture_tilestyleu = "tilestyleu"; - const char *const texture_tilestylev = "tilestylev"; - const char *const texture_2d_coord = "m:tex2coord"; - const char *const texture_cuurd_u = "u"; - const char *const texture_cuurd_v = "v"; + constexpr char basematerials[] = "basematerials"; + constexpr char basematerials_base[] = "base"; + constexpr char basematerials_name[] = "name"; + constexpr char basematerials_displaycolor[] = "displaycolor"; + constexpr char texture_2d[] = "m:texture2d"; + constexpr char texture_group[] = "m:texture2dgroup"; + constexpr char texture_content_type[] = "contenttype"; + constexpr char texture_tilestyleu[] = "tilestyleu"; + constexpr char texture_tilestylev[] = "tilestylev"; + constexpr char texture_2d_coord[] = "m:tex2coord"; + constexpr char texture_cuurd_u[] = "u"; + constexpr char texture_cuurd_v[] = "v"; // vertex color definitions - const char *const colorgroup = "m:colorgroup"; - const char *const color_item = "m:color"; - const char *const color_vaule = "color"; + constexpr char colorgroup[] = "m:colorgroup"; + constexpr char color_item[] = "m:color"; + constexpr char color_value[] = "color"; // Meta info tags - const char* const CONTENT_TYPES_ARCHIVE = "[Content_Types].xml"; - const char* const ROOT_RELATIONSHIPS_ARCHIVE = "_rels/.rels"; - const char* const SCHEMA_CONTENTTYPES = "http://schemas.openxmlformats.org/package/2006/content-types"; - const char* const SCHEMA_RELATIONSHIPS = "http://schemas.openxmlformats.org/package/2006/relationships"; - const char* const RELS_RELATIONSHIP_CONTAINER = "Relationships"; - const char* const RELS_RELATIONSHIP_NODE = "Relationship"; - const char* const RELS_ATTRIB_TARGET = "Target"; - const char* const RELS_ATTRIB_TYPE = "Type"; - const char* const RELS_ATTRIB_ID = "Id"; - const char* const PACKAGE_START_PART_RELATIONSHIP_TYPE = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"; - const char* const PACKAGE_PRINT_TICKET_RELATIONSHIP_TYPE = "http://schemas.microsoft.com/3dmanufacturing/2013/01/printticket"; - const char* const PACKAGE_TEXTURE_RELATIONSHIP_TYPE = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dtexture"; - const char* const PACKAGE_CORE_PROPERTIES_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"; - const char* const PACKAGE_THUMBNAIL_RELATIONSHIP_TYPE = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail"; -} + constexpr char CONTENT_TYPES_ARCHIVE[] = "[Content_Types].xml"; + constexpr char ROOT_RELATIONSHIPS_ARCHIVE[] = "_rels/.rels"; + constexpr char SCHEMA_CONTENTTYPES[] = "http://schemas.openxmlformats.org/package/2006/content-types"; + constexpr char SCHEMA_RELATIONSHIPS[] = "http://schemas.openxmlformats.org/package/2006/relationships"; + constexpr char RELS_RELATIONSHIP_CONTAINER[] = "Relationships"; + constexpr char RELS_RELATIONSHIP_NODE[] = "Relationship"; + constexpr char RELS_ATTRIB_TARGET[] = "Target"; + constexpr char RELS_ATTRIB_TYPE[] = "Type"; + constexpr char RELS_ATTRIB_ID[] = "Id"; + constexpr char PACKAGE_START_PART_RELATIONSHIP_TYPE[] = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"; + constexpr char PACKAGE_PRINT_TICKET_RELATIONSHIP_TYPE[] = "http://schemas.microsoft.com/3dmanufacturing/2013/01/printticket"; + constexpr char PACKAGE_TEXTURE_RELATIONSHIP_TYPE[] = "http://schemas.microsoft.com/3dmanufacturing/2013/01/3dtexture"; + constexpr char PACKAGE_CORE_PROPERTIES_RELATIONSHIP_TYPE[] = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"; + constexpr char PACKAGE_THUMBNAIL_RELATIONSHIP_TYPE[] = "http://schemas.openxmlformats.org/package/2006/relationships/metadata/thumbnail"; -} // Namespace D3MF -} // Namespace Assimp +} // namespace Assimp::D3MF diff --git a/code/AssetLib/3MF/D3MFExporter.cpp b/code/AssetLib/3MF/D3MFExporter.cpp index 64b94e593..71e35352f 100644 --- a/code/AssetLib/3MF/D3MFExporter.cpp +++ b/code/AssetLib/3MF/D3MFExporter.cpp @@ -48,7 +48,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include -#include #include #include "3MFXmlTags.h" @@ -94,7 +93,7 @@ D3MFExporter::~D3MFExporter() { mRelations.clear(); } -bool D3MFExporter::validate() { +bool D3MFExporter::validate() const { if (mArchiveName.empty()) { return false; } diff --git a/code/AssetLib/3MF/D3MFExporter.h b/code/AssetLib/3MF/D3MFExporter.h index 7830086d2..32b05137f 100644 --- a/code/AssetLib/3MF/D3MFExporter.h +++ b/code/AssetLib/3MF/D3MFExporter.h @@ -68,7 +68,7 @@ class D3MFExporter { public: D3MFExporter( const char* pFile, const aiScene* pScene ); ~D3MFExporter(); - bool validate(); + bool validate() const; bool exportArchive( const char *file ); bool exportContentTypes(); bool exportRelations(); diff --git a/code/AssetLib/3MF/D3MFImporter.h b/code/AssetLib/3MF/D3MFImporter.h index 215b8b870..780eff880 100644 --- a/code/AssetLib/3MF/D3MFImporter.h +++ b/code/AssetLib/3MF/D3MFImporter.h @@ -53,7 +53,7 @@ namespace Assimp { /// /// Implements the basic topology import and embedded textures. // --------------------------------------------------------------------------- -class D3MFImporter : public BaseImporter { +class D3MFImporter final : public BaseImporter { public: /// @brief The default class constructor. D3MFImporter() = default; diff --git a/code/AssetLib/3MF/XmlSerializer.cpp b/code/AssetLib/3MF/XmlSerializer.cpp index 44293800d..2e9dd508c 100644 --- a/code/AssetLib/3MF/XmlSerializer.cpp +++ b/code/AssetLib/3MF/XmlSerializer.cpp @@ -680,7 +680,7 @@ void XmlSerializer::ReadColor(XmlNode &node, ColorGroup *colorGroup) { for (XmlNode currentNode : node.children()) { const std::string currentName = currentNode.name(); if (currentName == XmlTag::color_item) { - const char *color = currentNode.attribute(XmlTag::color_vaule).as_string(); + const char *color = currentNode.attribute(XmlTag::color_value).as_string(); aiColor4D color_value; if (parseColor(color, color_value)) { colorGroup->mColors.push_back(color_value); diff --git a/code/AssetLib/AC/ACLoader.h b/code/AssetLib/AC/ACLoader.h index 1a07f6091..592521965 100644 --- a/code/AssetLib/AC/ACLoader.h +++ b/code/AssetLib/AC/ACLoader.h @@ -60,7 +60,7 @@ namespace Assimp { // --------------------------------------------------------------------------- /** AC3D (*.ac) importer class */ -class AC3DImporter : public BaseImporter { +class AC3DImporter final : public BaseImporter { public: AC3DImporter(); ~AC3DImporter() override = default; diff --git a/code/AssetLib/AMF/AMFImporter.cpp b/code/AssetLib/AMF/AMFImporter.cpp index 9417e9142..c4255d483 100644 --- a/code/AssetLib/AMF/AMFImporter.cpp +++ b/code/AssetLib/AMF/AMFImporter.cpp @@ -327,8 +327,7 @@ void AMFImporter::ParseNode_Root() { // Multi elements - Yes. // Parent element - . void AMFImporter::ParseNode_Constellation(XmlNode &node) { - std::string id; - id = node.attribute("id").as_string(); + std::string id = node.attribute("id").as_string(); // create and if needed - define new grouping object. AMFNodeElementBase *ne = new AMFConstellation(mNodeElement_Cur); diff --git a/code/AssetLib/AMF/AMFImporter.hpp b/code/AssetLib/AMF/AMFImporter.hpp index 47851d574..7892e217b 100644 --- a/code/AssetLib/AMF/AMFImporter.hpp +++ b/code/AssetLib/AMF/AMFImporter.hpp @@ -97,7 +97,7 @@ namespace Assimp { /// new - and children , , , , , /// old - and children , , , , , /// -class AMFImporter : public BaseImporter { +class AMFImporter final : public BaseImporter { using AMFMetaDataArray = std::vector; public: diff --git a/code/AssetLib/AMF/AMFImporter_Node.hpp b/code/AssetLib/AMF/AMFImporter_Node.hpp index 8fb2abf6a..644ae0cf7 100644 --- a/code/AssetLib/AMF/AMFImporter_Node.hpp +++ b/code/AssetLib/AMF/AMFImporter_Node.hpp @@ -107,7 +107,7 @@ protected: }; // class IAMFImporter_NodeElement /// A collection of objects or constellations with specific relative locations. -struct AMFConstellation : public AMFNodeElementBase { +struct AMFConstellation final : public AMFNodeElementBase { /// Constructor. /// \param [in] pParent - pointer to parent node. AMFConstellation(AMFNodeElementBase *pParent) : @@ -116,7 +116,7 @@ struct AMFConstellation : public AMFNodeElementBase { }; // struct CAMFImporter_NodeElement_Constellation /// Part of constellation. -struct AMFInstance : public AMFNodeElementBase { +struct AMFInstance final : public AMFNodeElementBase { std::string ObjectID; ///< ID of object for instantiation. /// \var Delta - The distance of translation in the x, y, or z direction, respectively, in the referenced object's coordinate system, to diff --git a/code/AssetLib/AMF/AMFImporter_Postprocess.cpp b/code/AssetLib/AMF/AMFImporter_Postprocess.cpp index f7a4b0892..ba4764968 100644 --- a/code/AssetLib/AMF/AMFImporter_Postprocess.cpp +++ b/code/AssetLib/AMF/AMFImporter_Postprocess.cpp @@ -57,8 +57,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. namespace Assimp { aiColor4D AMFImporter::SPP_Material::GetColor(const float /*pX*/, const float /*pY*/, const float /*pZ*/) const { - aiColor4D tcol; - // Check if stored data are supported. if (!Composition.empty()) { throw DeadlyImportError("IME. GetColor for composition"); @@ -68,7 +66,7 @@ aiColor4D AMFImporter::SPP_Material::GetColor(const float /*pX*/, const float /* throw DeadlyImportError("IME. GetColor, composed color"); } - tcol = Color->Color; + aiColor4D tcol = Color->Color; // Check if default color must be used if ((tcol.r == 0) && (tcol.g == 0) && (tcol.b == 0) && (tcol.a == 0)) { @@ -532,11 +530,9 @@ void AMFImporter::Postprocess_BuildMeshSet(const AMFMesh &pNodeElement, const st col_arr.reserve(VertexCount_Max * 2); { // fill arrays - size_t vert_idx_from, vert_idx_to; - // first iteration. - vert_idx_to = 0; - vert_idx_from = VertexIndex_GetMinimal(face_list_cur, nullptr); + size_t vert_idx_to = 0; + size_t vert_idx_from = VertexIndex_GetMinimal(face_list_cur, nullptr); vert_arr.push_back(pVertexCoordinateArray.at(vert_idx_from)); col_arr.push_back(Vertex_CalculateColor(vert_idx_from)); if (vert_idx_from != vert_idx_to) VertexIndex_Replace(face_list_cur, vert_idx_from, vert_idx_to); diff --git a/code/AssetLib/ASE/ASELoader.cpp b/code/AssetLib/ASE/ASELoader.cpp index a34ca7f76..2797f9140 100644 --- a/code/AssetLib/ASE/ASELoader.cpp +++ b/code/AssetLib/ASE/ASELoader.cpp @@ -1270,5 +1270,4 @@ bool ASEImporter::GenerateNormals(ASE::Mesh &mesh) { } #endif // ASSIMP_BUILD_NO_3DS_IMPORTER - -#endif // !! ASSIMP_BUILD_NO_BASE_IMPORTER +#endif // ASSIMP_BUILD_NO_ASE_IMPORTER diff --git a/code/AssetLib/ASE/ASELoader.h b/code/AssetLib/ASE/ASELoader.h index 05710718a..d58119c34 100644 --- a/code/AssetLib/ASE/ASELoader.h +++ b/code/AssetLib/ASE/ASELoader.h @@ -59,7 +59,7 @@ namespace Assimp { /** Importer class for the 3DS ASE ASCII format. * */ -class ASEImporter : public BaseImporter { +class ASEImporter final : public BaseImporter { public: ASEImporter(); ~ASEImporter() override = default; diff --git a/code/AssetLib/ASE/ASEParser.h b/code/AssetLib/ASE/ASEParser.h index 408c1ee08..462ebab1b 100644 --- a/code/AssetLib/ASE/ASEParser.h +++ b/code/AssetLib/ASE/ASEParser.h @@ -64,7 +64,7 @@ using namespace D3DS; // --------------------------------------------------------------------------- /** Helper structure representing an ASE material */ -struct Material : public D3DS::Material { +struct Material final : D3DS::Material { //! Default constructor has been deleted Material() = delete; @@ -115,7 +115,7 @@ struct Material : public D3DS::Material { return *this; } - ~Material() = default; + ~Material() override = default; //! Contains all sub materials of this material std::vector avSubMaterials; diff --git a/code/AssetLib/Assbin/AssbinFileWriter.cpp b/code/AssetLib/Assbin/AssbinFileWriter.cpp index d4e25e16b..aec23d598 100644 --- a/code/AssetLib/Assbin/AssbinFileWriter.cpp +++ b/code/AssetLib/Assbin/AssbinFileWriter.cpp @@ -239,29 +239,7 @@ inline size_t WriteArray(IOStream *stream, const T *in, unsigned int size) { * and the chunk contents to the container stream. This allows relatively easy chunk * chunk construction, even recursively. */ -class AssbinChunkWriter : public IOStream { -private: - uint8_t *buffer; - uint32_t magic; - IOStream *container; - size_t cur_size, cursor, initial; - -private: - // ------------------------------------------------------------------- - void Grow(size_t need = 0) { - size_t new_size = std::max(initial, std::max(need, cur_size + (cur_size >> 1))); - - const uint8_t *const old = buffer; - buffer = new uint8_t[new_size]; - - if (old) { - memcpy(buffer, old, cur_size); - delete[] old; - } - - cur_size = new_size; - } - +class AssbinChunkWriter final : public IOStream { public: AssbinChunkWriter(IOStream *container, uint32_t magic, size_t initial = 4096) : buffer(nullptr), @@ -315,6 +293,28 @@ public: return pCount; } + +private: + // ------------------------------------------------------------------- + void Grow(size_t need = 0) { + size_t new_size = std::max(initial, std::max(need, cur_size + (cur_size >> 1))); + + const uint8_t *const old = buffer; + buffer = new uint8_t[new_size]; + + if (old) { + memcpy(buffer, old, cur_size); + delete[] old; + } + + cur_size = new_size; + } + +private: + uint8_t *buffer; + uint32_t magic; + IOStream *container; + size_t cur_size, cursor, initial; }; // ---------------------------------------------------------------------------------- diff --git a/code/AssetLib/Assxml/AssxmlFileWriter.cpp b/code/AssetLib/Assxml/AssxmlFileWriter.cpp index c6842f5c6..79b164729 100644 --- a/code/AssetLib/Assxml/AssxmlFileWriter.cpp +++ b/code/AssetLib/Assxml/AssxmlFileWriter.cpp @@ -77,8 +77,7 @@ static int ioprintf(IOStream *io, const char *format, ...) { } static const int Size = 4096; - char sz[Size]; - ::memset(sz, '\0', Size); + char sz[Size] = {}; va_list va; va_start(va, format); const unsigned int nSize = vsnprintf(sz, Size - 1, format, va); @@ -350,7 +349,7 @@ static void WriteDump(const char *pFile, const char *cmd, const aiScene *scene, for (unsigned int n = 0; n < mat->mNumProperties; ++n) { const aiMaterialProperty *prop = mat->mProperties[n]; - const char *sz = ""; + auto sz = ""; if (prop->mType == aiPTI_Float) { sz = "float"; } else if (prop->mType == aiPTI_Integer) { diff --git a/code/AssetLib/B3D/B3DImporter.h b/code/AssetLib/B3D/B3DImporter.h index 05f63d75b..8a1a6b598 100644 --- a/code/AssetLib/B3D/B3DImporter.h +++ b/code/AssetLib/B3D/B3DImporter.h @@ -60,7 +60,7 @@ struct aiAnimation; namespace Assimp{ -class B3DImporter : public BaseImporter{ +class B3DImporter final : public BaseImporter{ public: B3DImporter() = default; ~B3DImporter() override; diff --git a/code/AssetLib/BVH/BVHLoader.h b/code/AssetLib/BVH/BVHLoader.h index 9c7361a8c..4bc575331 100644 --- a/code/AssetLib/BVH/BVHLoader.h +++ b/code/AssetLib/BVH/BVHLoader.h @@ -61,7 +61,7 @@ namespace Assimp { * the hierarchy. It contains no actual mesh data, but we generate a dummy mesh * inside the loader just to be able to see something. */ -class BVHLoader : public BaseImporter { +class BVHLoader final : public BaseImporter { /** Possible animation channels for which the motion data holds the values */ enum ChannelType { diff --git a/code/AssetLib/Blender/BlenderLoader.h b/code/AssetLib/Blender/BlenderLoader.h index e844ba378..48c730dec 100644 --- a/code/AssetLib/Blender/BlenderLoader.h +++ b/code/AssetLib/Blender/BlenderLoader.h @@ -105,7 +105,7 @@ class BlenderModifier; * call it is outsourced to BlenderDNA.cpp/BlenderDNA.h. This class only performs the * conversion from intermediate format to aiScene. */ // ------------------------------------------------------------------------------------------- -class BlenderImporter : public BaseImporter, public LogFunctions { +class BlenderImporter final : public BaseImporter, public LogFunctions { public: BlenderImporter(); ~BlenderImporter() override; diff --git a/code/AssetLib/Blender/BlenderModifier.h b/code/AssetLib/Blender/BlenderModifier.h index f2f34eaa9..5d2cf05ff 100644 --- a/code/AssetLib/Blender/BlenderModifier.h +++ b/code/AssetLib/Blender/BlenderModifier.h @@ -114,7 +114,7 @@ private: * Mirror modifier. Status: implemented. */ // ------------------------------------------------------------------------------------------- -class BlenderModifier_Mirror : public BlenderModifier { +class BlenderModifier_Mirror final : public BlenderModifier { public: // -------------------- virtual bool IsActive( const ModifierData& modin); @@ -131,7 +131,7 @@ public: // ------------------------------------------------------------------------------------------- /** Subdivision modifier. Status: dummy. */ // ------------------------------------------------------------------------------------------- -class BlenderModifier_Subdivision : public BlenderModifier { +class BlenderModifier_Subdivision final : public BlenderModifier { public: // -------------------- diff --git a/code/AssetLib/Blender/BlenderScene.h b/code/AssetLib/Blender/BlenderScene.h index 5e0c1ca36..e022050fb 100644 --- a/code/AssetLib/Blender/BlenderScene.h +++ b/code/AssetLib/Blender/BlenderScene.h @@ -47,8 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "BlenderDNA.h" -namespace Assimp { -namespace Blender { +namespace Assimp::Blender { // Minor parts of this file are extracts from blender data structures, // declared in the ./source/blender/makesdna directory. @@ -115,32 +114,32 @@ struct Collection; static const size_t MaxNameLen = 1024; // ------------------------------------------------------------------------------- -struct ID : ElemBase { +struct ID final : ElemBase { char name[MaxNameLen] WARN; short flag; }; // ------------------------------------------------------------------------------- -struct ListBase : ElemBase { +struct ListBase final : ElemBase { std::shared_ptr first; std::weak_ptr last; }; // ------------------------------------------------------------------------------- -struct PackedFile : ElemBase { +struct PackedFile final : ElemBase { int size WARN; int seek WARN; std::shared_ptr data WARN; }; // ------------------------------------------------------------------------------- -struct GroupObject : ElemBase { +struct GroupObject final : ElemBase { std::shared_ptr prev, next FAIL; std::shared_ptr ob; }; // ------------------------------------------------------------------------------- -struct Group : ElemBase { +struct Group final : ElemBase { ID id FAIL; int layer; @@ -148,32 +147,32 @@ struct Group : ElemBase { }; // ------------------------------------------------------------------------------- -struct CollectionObject : ElemBase { +struct CollectionObject final : ElemBase { //CollectionObject* prev; std::shared_ptr next; Object *ob; }; // ------------------------------------------------------------------------------- -struct CollectionChild : ElemBase { +struct CollectionChild final : ElemBase { std::shared_ptr next, prev; std::shared_ptr collection; }; // ------------------------------------------------------------------------------- -struct Collection : ElemBase { +struct Collection final : ElemBase { ID id FAIL; ListBase gobject; // CollectionObject ListBase children; // CollectionChild }; // ------------------------------------------------------------------------------- -struct World : ElemBase { +struct World final : ElemBase { ID id FAIL; }; // ------------------------------------------------------------------------------- -struct MVert : ElemBase { +struct MVert final : ElemBase { float co[3] FAIL; float no[3] FAIL; // read as short and divided through / 32767.f char flag; @@ -185,31 +184,31 @@ struct MVert : ElemBase { }; // ------------------------------------------------------------------------------- -struct MEdge : ElemBase { +struct MEdge final : ElemBase { int v1, v2 FAIL; char crease, bweight; short flag; }; // ------------------------------------------------------------------------------- -struct MLoop : ElemBase { +struct MLoop final : ElemBase { int v, e; }; // ------------------------------------------------------------------------------- -struct MLoopUV : ElemBase { +struct MLoopUV final : ElemBase { float uv[2]; int flag; }; // ------------------------------------------------------------------------------- // Note that red and blue are not swapped, as with MCol -struct MLoopCol : ElemBase { +struct MLoopCol final : ElemBase { unsigned char r, g, b, a; }; // ------------------------------------------------------------------------------- -struct MPoly : ElemBase { +struct MPoly final : ElemBase { int loopstart; int totloop; short mat_nr; @@ -217,26 +216,26 @@ struct MPoly : ElemBase { }; // ------------------------------------------------------------------------------- -struct MTexPoly : ElemBase { +struct MTexPoly final : ElemBase { Image *tpage; char flag, transp; short mode, tile, pad; }; // ------------------------------------------------------------------------------- -struct MCol : ElemBase { +struct MCol final : ElemBase { char r, g, b, a FAIL; }; // ------------------------------------------------------------------------------- -struct MFace : ElemBase { +struct MFace final : ElemBase { int v1, v2, v3, v4 FAIL; int mat_nr FAIL; char flag; }; // ------------------------------------------------------------------------------- -struct TFace : ElemBase { +struct TFace final : ElemBase { float uv[4][2] FAIL; int col[4] FAIL; char flag; @@ -246,7 +245,7 @@ struct TFace : ElemBase { }; // ------------------------------------------------------------------------------- -struct MTFace : ElemBase { +struct MTFace final : ElemBase { MTFace() : flag(0), mode(0), @@ -264,24 +263,24 @@ struct MTFace : ElemBase { }; // ------------------------------------------------------------------------------- -struct MDeformWeight : ElemBase { +struct MDeformWeight final : ElemBase { int def_nr FAIL; float weight FAIL; }; // ------------------------------------------------------------------------------- -struct MDeformVert : ElemBase { +struct MDeformVert final : ElemBase { vector dw WARN; int totweight; }; // ------------------------------------------------------------------------------- -#define MA_RAYMIRROR 0x40000 -#define MA_TRANSPARENCY 0x10000 -#define MA_RAYTRANSP 0x20000 -#define MA_ZTRANSP 0x00040 +constexpr uint32_t MA_RAYMIRROR = 0x40000; +constexpr uint32_t MA_TRANSPARENCY = 0x10000; +constexpr uint32_t MA_RAYTRANSP = 0x20000; +constexpr uint32_t MA_ZTRANSP = 0x00040; -struct Material : ElemBase { +struct Material final : ElemBase { ID id FAIL; float r, g, b WARN; @@ -403,7 +402,7 @@ CustomDataLayer 104 char name 32 64 void *data 96 8 */ -struct CustomDataLayer : ElemBase { +struct CustomDataLayer final : ElemBase { int type; int offset; int flag; @@ -441,7 +440,7 @@ CustomData 208 BLI_mempool *pool 192 8 CustomDataExternal *external 200 8 */ -struct CustomData : ElemBase { +struct CustomData final : ElemBase { vector> layers; int typemap[42]; // CD_NUMTYPES int totlayer; @@ -454,7 +453,7 @@ struct CustomData : ElemBase { }; // ------------------------------------------------------------------------------- -struct Mesh : ElemBase { +struct Mesh final : ElemBase { ID id FAIL; int totface FAIL; @@ -491,7 +490,7 @@ struct Mesh : ElemBase { }; // ------------------------------------------------------------------------------- -struct Library : ElemBase { +struct Library final : ElemBase { ID id FAIL; char name[240] WARN; @@ -515,7 +514,7 @@ struct Camera : ElemBase { }; // ------------------------------------------------------------------------------- -struct Lamp : ElemBase { +struct Lamp final : ElemBase { enum FalloffType { FalloffType_Constant = 0x0, @@ -602,7 +601,7 @@ struct Lamp : ElemBase { }; // ------------------------------------------------------------------------------- -struct ModifierData : ElemBase { +struct ModifierData final : ElemBase { enum ModifierType { eModifierType_None = 0, eModifierType_Subsurf, @@ -652,9 +651,8 @@ struct SharedModifierData : ElemBase { ModifierData modifier; }; - // ------------------------------------------------------------------------------- -struct SubsurfModifierData : SharedModifierData { +struct SubsurfModifierData final : SharedModifierData { enum Type { @@ -674,7 +672,7 @@ struct SubsurfModifierData : SharedModifierData { }; // ------------------------------------------------------------------------------- -struct MirrorModifierData : SharedModifierData { +struct MirrorModifierData final : SharedModifierData { enum Flags { Flags_CLIPPING = 1 << 0, @@ -692,7 +690,7 @@ struct MirrorModifierData : SharedModifierData { }; // ------------------------------------------------------------------------------- -struct Object : ElemBase { +struct Object final : ElemBase { ID id FAIL; enum Type { @@ -733,7 +731,7 @@ struct Object : ElemBase { }; // ------------------------------------------------------------------------------- -struct Base : ElemBase { +struct Base final : ElemBase { Base *prev WARN; std::shared_ptr next WARN; std::shared_ptr object WARN; @@ -745,7 +743,7 @@ struct Base : ElemBase { }; // ------------------------------------------------------------------------------- -struct Scene : ElemBase { +struct Scene final : ElemBase { ID id FAIL; std::shared_ptr camera WARN; @@ -759,7 +757,7 @@ struct Scene : ElemBase { }; // ------------------------------------------------------------------------------- -struct Image : ElemBase { +struct Image final : ElemBase { ID id FAIL; char name[240] WARN; @@ -789,7 +787,7 @@ struct Image : ElemBase { }; // ------------------------------------------------------------------------------- -struct Tex : ElemBase { +struct Tex final : ElemBase { // actually, the only texture type we support is Type_IMAGE enum Type { @@ -874,14 +872,13 @@ struct Tex : ElemBase { //char use_nodes; - Tex() : - imaflag(ImageFlags_INTERPOL), type(Type_CLOUDS) { + Tex() : imaflag(ImageFlags_INTERPOL), type(Type_CLOUDS) { // empty } }; // ------------------------------------------------------------------------------- -struct MTex : ElemBase { +struct MTex final : ElemBase { enum Projection { Proj_N = 0, @@ -970,6 +967,6 @@ struct MTex : ElemBase { MTex() = default; }; -} // namespace Blender -} // namespace Assimp +} // namespace Assimp::Blender + #endif diff --git a/code/AssetLib/COB/COBLoader.h b/code/AssetLib/COB/COBLoader.h index 737f64591..0b89eef98 100644 --- a/code/AssetLib/COB/COBLoader.h +++ b/code/AssetLib/COB/COBLoader.h @@ -72,7 +72,7 @@ namespace COB { * * Currently relatively limited, loads only ASCII files and needs more test coverage. */ // ------------------------------------------------------------------------------------------- -class COBImporter : public BaseImporter { +class COBImporter final : public BaseImporter { public: COBImporter() = default; ~COBImporter() override = default; diff --git a/code/AssetLib/COB/COBScene.h b/code/AssetLib/COB/COBScene.h index d73a4306b..7a8ffca13 100644 --- a/code/AssetLib/COB/COBScene.h +++ b/code/AssetLib/COB/COBScene.h @@ -52,21 +52,18 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include -namespace Assimp { -namespace COB { +namespace Assimp::COB { // ------------------ /** Represents a single vertex index in a face */ -struct VertexIndex -{ +struct VertexIndex { // intentionally uninitialized unsigned int pos_idx,uv_idx; }; // ------------------ /** COB Face data structure */ -struct Face -{ +struct Face { // intentionally uninitialized unsigned int material, flags; std::vector indices; @@ -74,10 +71,9 @@ struct Face // ------------------ /** COB chunk header information */ -const unsigned int NO_SIZE = UINT_MAX; +constexpr unsigned int NO_SIZE = UINT_MAX; -struct ChunkInfo -{ +struct ChunkInfo { ChunkInfo () : id (0) , parent_id (0) @@ -101,8 +97,7 @@ struct ChunkInfo // ------------------ /** A node in the scenegraph */ -struct Node : public ChunkInfo -{ +struct Node : ChunkInfo { enum Type { TYPE_MESH,TYPE_GROUP,TYPE_LIGHT,TYPE_CAMERA,TYPE_BONE }; @@ -128,7 +123,7 @@ struct Node : public ChunkInfo // ------------------ /** COB Mesh data structure */ -struct Mesh : public Node +struct Mesh final : Node { using ChunkInfo::operator=; enum DrawFlags { @@ -162,24 +157,21 @@ struct Mesh : public Node // ------------------ /** COB Group data structure */ -struct Group : public Node -{ +struct Group final : Node { using ChunkInfo::operator=; Group() : Node(TYPE_GROUP) {} }; // ------------------ /** COB Bone data structure */ -struct Bone : public Node -{ +struct Bone final : Node { using ChunkInfo::operator=; Bone() : Node(TYPE_BONE) {} }; // ------------------ /** COB Light data structure */ -struct Light : public Node -{ +struct Light final : Node { enum LightType { SPOT,LOCAL,INFINITE }; @@ -195,24 +187,23 @@ struct Light : public Node // ------------------ /** COB Camera data structure */ -struct Camera : public Node -{ +struct Camera final : Node { using ChunkInfo::operator=; - Camera() : Node(TYPE_CAMERA) {} + Camera() : Node(TYPE_CAMERA) { + // empty + } }; // ------------------ /** COB Texture data structure */ -struct Texture -{ +struct Texture { std::string path; aiUVTransform transform; }; // ------------------ /** COB Material data structure */ -struct Material : ChunkInfo -{ +struct Material : ChunkInfo { using ChunkInfo::operator=; enum Shader { FLAT,PHONG,METAL @@ -244,11 +235,13 @@ struct Material : ChunkInfo // ------------------ /** Embedded bitmap, for instance for the thumbnail image */ -struct Bitmap : ChunkInfo -{ - Bitmap() : orig_size() {} - struct BitmapHeader - { +struct Bitmap : ChunkInfo { + Bitmap() : orig_size() { + // empty + } + + struct BitmapHeader { + // empty }; BitmapHeader head; @@ -256,13 +249,12 @@ struct Bitmap : ChunkInfo std::vector buff_zipped; }; -typedef std::deque< std::shared_ptr > NodeList; -typedef std::vector< Material > MaterialList; +using NodeList = std::deque< std::shared_ptr>; +using MaterialList = std::vector< Material >; // ------------------ /** Represents a master COB scene, even if we loaded just a single COB file */ -struct Scene -{ +struct Scene { NodeList nodes; MaterialList materials; @@ -270,7 +262,6 @@ struct Scene Bitmap thumbnail; }; - } // end COB -} // end Assimp +} // end Assimp::COB #endif diff --git a/code/AssetLib/CSM/CSMLoader.h b/code/AssetLib/CSM/CSMLoader.h index 881b568ac..77af5c52c 100644 --- a/code/AssetLib/CSM/CSMLoader.h +++ b/code/AssetLib/CSM/CSMLoader.h @@ -58,7 +58,7 @@ namespace Assimp { * Link to file format specification: * \samples\Motion\Docs\CSM.rtf */ -class CSMImporter : public BaseImporter { +class CSMImporter final : public BaseImporter { public: CSMImporter(); ~CSMImporter() override = default; diff --git a/code/AssetLib/Collada/ColladaExporter.h b/code/AssetLib/Collada/ColladaExporter.h index 26fd22f6d..20064215f 100644 --- a/code/AssetLib/Collada/ColladaExporter.h +++ b/code/AssetLib/Collada/ColladaExporter.h @@ -65,7 +65,7 @@ class IOSystem; /// Helper class to export a given scene to a Collada file. Just for my personal /// comfort when implementing it. -class ColladaExporter { +class ColladaExporter final { public: /// Constructor for a specific scene to export ColladaExporter(const aiScene *pScene, IOSystem *pIOSystem, const std::string &path, const std::string &file); diff --git a/code/AssetLib/Collada/ColladaLoader.cpp b/code/AssetLib/Collada/ColladaLoader.cpp index 8294820ba..b6aaee36a 100644 --- a/code/AssetLib/Collada/ColladaLoader.cpp +++ b/code/AssetLib/Collada/ColladaLoader.cpp @@ -1819,4 +1819,4 @@ std::string ColladaLoader::FindNameForNode(const Node *pNode) { } // Namespace Assimp -#endif // !! ASSIMP_BUILD_NO_DAE_IMPORTER +#endif // !! ASSIMP_BUILD_NO_COLLADA_IMPORTER diff --git a/code/AssetLib/Collada/ColladaLoader.h b/code/AssetLib/Collada/ColladaLoader.h index 5cd3c19df..e0da22d56 100644 --- a/code/AssetLib/Collada/ColladaLoader.h +++ b/code/AssetLib/Collada/ColladaLoader.h @@ -82,7 +82,7 @@ struct ColladaMeshIndex { * Collada is over-engineered to death, with every new iteration bringing more useless stuff, * so I limited the data to what I think is useful for games. */ -class ColladaLoader : public BaseImporter { +class ColladaLoader final : public BaseImporter { public: /// The class constructor. ColladaLoader(); diff --git a/code/AssetLib/Collada/ColladaParser.cpp b/code/AssetLib/Collada/ColladaParser.cpp index 1cb3f8763..bb0cc138a 100644 --- a/code/AssetLib/Collada/ColladaParser.cpp +++ b/code/AssetLib/Collada/ColladaParser.cpp @@ -2423,4 +2423,4 @@ InputType ColladaParser::GetTypeForSemantic(const std::string &semantic) { return IT_Invalid; } -#endif // !! ASSIMP_BUILD_NO_DAE_IMPORTER +#endif // !! ASSIMP_BUILD_NO_COLLADA_IMPORTER diff --git a/code/AssetLib/DXF/DXFLoader.h b/code/AssetLib/DXF/DXFLoader.h index 8cc798fbc..5437cef2e 100644 --- a/code/AssetLib/DXF/DXFLoader.h +++ b/code/AssetLib/DXF/DXFLoader.h @@ -66,7 +66,7 @@ namespace DXF { /** * @brief DXF importer implementation. */ -class DXFImporter : public BaseImporter { +class DXFImporter final : public BaseImporter { public: DXFImporter() = default; ~DXFImporter() override = default; diff --git a/code/AssetLib/FBX/FBXDocument.h b/code/AssetLib/FBX/FBXDocument.h index efeb0073e..a0073341d 100644 --- a/code/AssetLib/FBX/FBXDocument.h +++ b/code/AssetLib/FBX/FBXDocument.h @@ -174,7 +174,7 @@ class NodeAttribute : public Object { public: NodeAttribute(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~NodeAttribute() = default; + ~NodeAttribute() override = default; const PropertyTable& Props() const { ai_assert(props.get()); @@ -186,11 +186,11 @@ private: }; /** DOM base class for FBX camera settings attached to a node */ -class CameraSwitcher : public NodeAttribute { +class CameraSwitcher final : public NodeAttribute { public: CameraSwitcher(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~CameraSwitcher() = default; + ~CameraSwitcher() override= default; int CameraID() const { return cameraId; @@ -231,11 +231,11 @@ private: /** DOM base class for FBX cameras attached to a node */ -class Camera : public NodeAttribute { +class Camera final : public NodeAttribute { public: Camera(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~Camera() = default; + ~Camera() override = default; fbx_simple_property(Position, aiVector3D, aiVector3D(0,0,0)) fbx_simple_property(UpVector, aiVector3D, aiVector3D(0,1,0)) @@ -257,24 +257,24 @@ public: }; /** DOM base class for FBX null markers attached to a node */ -class Null : public NodeAttribute { +class Null final : public NodeAttribute { public: Null(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~Null() = default; + ~Null() override = default; }; /** DOM base class for FBX limb node markers attached to a node */ -class LimbNode : public NodeAttribute { +class LimbNode final : public NodeAttribute { public: LimbNode(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~LimbNode() = default; + ~LimbNode() override = default; }; /** DOM base class for FBX lights attached to a node */ -class Light : public NodeAttribute { +class Light final : public NodeAttribute { public: Light(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~Light() = default; + ~Light() override = default; enum Type { Type_Point, @@ -329,7 +329,7 @@ public: }; /** DOM base class for FBX models (even though its semantics are more "node" than "model" */ -class Model : public Object { +class Model final : public Object { public: enum RotOrder { RotOrder_EulerXYZ = 0, @@ -354,7 +354,7 @@ public: Model(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~Model() = default; + ~Model() override = default; fbx_simple_property(QuaternionInterpolate, int, 0) @@ -477,11 +477,11 @@ private: }; /** DOM class for generic FBX textures */ -class Texture : public Object { +class Texture final : public Object { public: Texture(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~Texture(); + ~Texture() override; const std::string& Type() const { return type; @@ -542,10 +542,10 @@ private: }; /** DOM class for layered FBX textures */ -class LayeredTexture : public Object { +class LayeredTexture final : public Object { public: LayeredTexture(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~LayeredTexture(); + ~LayeredTexture() override; // Can only be called after construction of the layered texture object due to construction flag. void fillTexture(const Document& doc); @@ -608,11 +608,11 @@ using TextureMap = std::fbx_unordered_map; using LayeredTextureMap = std::fbx_unordered_map; /** DOM class for generic FBX videos */ -class Video : public Object { +class Video final : public Object { public: Video(uint64_t id, const Element& element, const Document& doc, const std::string& name); - virtual ~Video(); + ~Video() override; const std::string& Type() const { return type; @@ -697,10 +697,10 @@ using KeyTimeList = std::vector; using KeyValueList = std::vector; /** Represents a FBX animation curve (i.e. a 1-dimensional set of keyframes and values therefore) */ -class AnimationCurve : public Object { +class AnimationCurve final : public Object { public: AnimationCurve(uint64_t id, const Element& element, const std::string& name, const Document& doc); - virtual ~AnimationCurve() = default; + ~AnimationCurve() override = default; /** get list of keyframe positions (time). * Invariant: |GetKeys()| > 0 */ @@ -733,7 +733,7 @@ private: using AnimationCurveMap = std::map; /** Represents a FBX animation curve (i.e. a mapping from single animation curves to nodes) */ -class AnimationCurveNode : public Object { +class AnimationCurveNode final : public Object { public: /* the optional white list specifies a list of property names for which the caller wants animations for. If the curve node does not match one of these, std::range_error @@ -741,7 +741,7 @@ public: AnimationCurveNode(uint64_t id, const Element& element, const std::string& name, const Document& doc, const char *const *target_prop_whitelist = nullptr, size_t whitelist_size = 0); - virtual ~AnimationCurveNode() = default; + ~AnimationCurveNode() override = default; const PropertyTable& Props() const { ai_assert(props.get()); @@ -783,7 +783,7 @@ private: using AnimationCurveNodeList = std::vector; /** Represents a FBX animation layer (i.e. a list of node animations) */ -class AnimationLayer : public Object { +class AnimationLayer final : public Object { public: AnimationLayer(uint64_t id, const Element& element, const std::string& name, const Document& doc); virtual ~AnimationLayer() = default; @@ -806,7 +806,7 @@ private: using AnimationLayerList = std::vector; /** Represents a FBX animation stack (i.e. a list of animation layers) */ -class AnimationStack : public Object { +class AnimationStack final : public Object { public: AnimationStack(uint64_t id, const Element& element, const std::string& name, const Document& doc); virtual ~AnimationStack() = default; @@ -851,7 +851,7 @@ using WeightIndexArray = std::vector; /** DOM class for BlendShapeChannel deformers */ -class BlendShapeChannel : public Deformer { +class BlendShapeChannel final : public Deformer { public: BlendShapeChannel(uint64_t id, const Element& element, const Document& doc, const std::string& name); @@ -876,7 +876,7 @@ private: }; /** DOM class for BlendShape deformers */ -class BlendShape : public Deformer { +class BlendShape final : public Deformer { public: BlendShape(uint64_t id, const Element& element, const Document& doc, const std::string& name); @@ -891,7 +891,7 @@ private: }; /** DOM class for skin deformer clusters (aka sub-deformers) */ -class Cluster : public Deformer { +class Cluster final : public Deformer { public: Cluster(uint64_t id, const Element& element, const Document& doc, const std::string& name); @@ -935,7 +935,7 @@ private: }; /** DOM class for skin deformers */ -class Skin : public Deformer { +class Skin final : public Deformer { public: Skin(uint64_t id, const Element& element, const Document& doc, const std::string& name); diff --git a/code/AssetLib/FBX/FBXImporter.h b/code/AssetLib/FBX/FBXImporter.h index 467a7cf68..073815631 100644 --- a/code/AssetLib/FBX/FBXImporter.h +++ b/code/AssetLib/FBX/FBXImporter.h @@ -67,7 +67,7 @@ typedef class basic_formatter, std::allocator /// /// See http://en.wikipedia.org/wiki/FBX // ------------------------------------------------------------------------------------------- -class FBXImporter : public BaseImporter, public LogFunctions { +class FBXImporter final : public BaseImporter, public LogFunctions { public: /// @brief The class constructor. FBXImporter() = default; diff --git a/code/AssetLib/LWO/LWOMaterial.cpp b/code/AssetLib/LWO/LWOMaterial.cpp index 34f1dd152..a1a4d14a4 100644 --- a/code/AssetLib/LWO/LWOMaterial.cpp +++ b/code/AssetLib/LWO/LWOMaterial.cpp @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2025, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -1150,4 +1148,4 @@ void LWOImporter::LoadLWO3Surface(unsigned int size) { } } -#endif // !! ASSIMP_BUILD_NO_X_IMPORTER +#endif // ASSIMP_BUILD_NO_LWO_IMPORTER diff --git a/code/Common/Assimp.cpp b/code/Common/Assimp.cpp index f84951b1f..f81f9714d 100644 --- a/code/Common/Assimp.cpp +++ b/code/Common/Assimp.cpp @@ -67,13 +67,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. using namespace Assimp; namespace Assimp { + // underlying structure for aiPropertyStore -typedef BatchLoader::PropertyMap PropertyMap; +using PropertyMap = BatchLoader::PropertyMap ; #if defined(__has_warning) -#if __has_warning("-Wordered-compare-function-pointers") -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wordered-compare-function-pointers" +# if __has_warning("-Wordered-compare-function-pointers") +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wordered-compare-function-pointers" #endif #endif @@ -111,6 +112,7 @@ void GetImporterInstanceList(std::vector &out); /** will delete all registered importers. */ void DeleteImporterInstanceList(std::vector &out); + } // namespace Assimp #ifndef ASSIMP_BUILD_SINGLETHREADED @@ -127,7 +129,7 @@ public: ai_assert(nullptr != s.callback); } - ~LogToCallbackRedirector() { + ~LogToCallbackRedirector() override { #ifndef ASSIMP_BUILD_SINGLETHREADED std::lock_guard lock(gLogStreamMutex); #endif @@ -146,7 +148,7 @@ public: } /** @copydoc LogStream::write */ - void write(const char *message) { + void write(const char *message) override { mStream.callback(message, mStream.user); } diff --git a/code/Common/BaseProcess.h b/code/Common/BaseProcess.h index c35dab013..c5fda68ff 100644 --- a/code/Common/BaseProcess.h +++ b/code/Common/BaseProcess.h @@ -68,11 +68,11 @@ public: //! Represents data that is allocated on the heap, thus needs to be deleted template - struct THeapData : public Base { + struct THeapData final : Base { explicit THeapData(T *in) : data(in) {} - ~THeapData() { + ~THeapData() override { delete data; } T *data; @@ -80,11 +80,11 @@ public: //! Represents static, by-value data not allocated on the heap template - struct TStaticData : public Base { + struct TStaticData final : Base { explicit TStaticData(T in) : data(in) {} - ~TStaticData() = default; + ~TStaticData() override= default; T data; }; diff --git a/code/Common/DefaultLogger.cpp b/code/Common/DefaultLogger.cpp index 59f55d26c..dfa761622 100644 --- a/code/Common/DefaultLogger.cpp +++ b/code/Common/DefaultLogger.cpp @@ -334,8 +334,8 @@ bool DefaultLogger::attachStream(LogStream *pStream, unsigned int severity) { } } - LogStreamInfo *pInfo = new LogStreamInfo(severity, pStream); - m_StreamArray.push_back(pInfo); + m_StreamArray.push_back(new LogStreamInfo(severity, pStream)); + return true; } diff --git a/code/Common/DefaultProgressHandler.h b/code/Common/DefaultProgressHandler.h index bf40afd46..f599c3ecb 100644 --- a/code/Common/DefaultProgressHandler.h +++ b/code/Common/DefaultProgressHandler.h @@ -53,7 +53,7 @@ namespace Assimp { /** * @brief Internal default implementation of the #ProgressHandler interface. */ -class DefaultProgressHandler : public ProgressHandler { +class DefaultProgressHandler final : public ProgressHandler { public: /// @brief Ignores the update callback. bool Update(float) override { diff --git a/code/Common/Importer.cpp b/code/Common/Importer.cpp index a71c28df6..1d05d9116 100644 --- a/code/Common/Importer.cpp +++ b/code/Common/Importer.cpp @@ -733,7 +733,7 @@ const aiScene* Importer::ReadFile( const char* _pFile, unsigned int pFlags) { return nullptr; } } -#endif // no validation +#endif // ASSIMP_BUILD_NO_VALIDATEDS_PROCESS // Preprocess the scene and prepare it for post-processing if (profiler) { diff --git a/code/PostProcessing/ArmaturePopulate.h b/code/PostProcessing/ArmaturePopulate.h index 939d3cb3a..8da76a5a3 100644 --- a/code/PostProcessing/ArmaturePopulate.h +++ b/code/PostProcessing/ArmaturePopulate.h @@ -65,22 +65,22 @@ namespace Assimp { * You can contact RevoluPowered * For more info about this */ -class ASSIMP_API ArmaturePopulate : public BaseProcess { +class ASSIMP_API ArmaturePopulate final : public BaseProcess { public: /// The default class constructor. ArmaturePopulate() = default; /// The class destructor. - virtual ~ArmaturePopulate() = default; + ~ArmaturePopulate() override = default; /// Overwritten, @see BaseProcess - virtual bool IsActive( unsigned int pFlags ) const; + bool IsActive( unsigned int pFlags ) const override; /// Overwritten, @see BaseProcess - virtual void SetupProperties( const Importer* pImp ); + void SetupProperties( const Importer* pImp ) override; /// Overwritten, @see BaseProcess - virtual void Execute( aiScene* pScene ); + void Execute( aiScene* pScene ) override; static aiNode *GetArmatureRoot(aiNode *bone_node, std::vector &bone_list); diff --git a/code/PostProcessing/CalcTangentsProcess.h b/code/PostProcessing/CalcTangentsProcess.h index 708f3b492..f1a8cf901 100644 --- a/code/PostProcessing/CalcTangentsProcess.h +++ b/code/PostProcessing/CalcTangentsProcess.h @@ -58,7 +58,7 @@ namespace Assimp * because the joining of vertices also considers tangents and bitangents for * uniqueness. */ -class ASSIMP_API_WINONLY CalcTangentsProcess : public BaseProcess { +class ASSIMP_API_WINONLY CalcTangentsProcess final : public BaseProcess { public: CalcTangentsProcess(); ~CalcTangentsProcess() override = default; diff --git a/code/PostProcessing/ComputeUVMappingProcess.h b/code/PostProcessing/ComputeUVMappingProcess.h index 663b4686f..c19961130 100644 --- a/code/PostProcessing/ComputeUVMappingProcess.h +++ b/code/PostProcessing/ComputeUVMappingProcess.h @@ -58,7 +58,7 @@ namespace Assimp { /** ComputeUVMappingProcess - converts special mappings, such as spherical, * cylindrical or boxed to proper UV coordinates for rendering. */ -class ComputeUVMappingProcess : public BaseProcess { +class ComputeUVMappingProcess final : public BaseProcess { public: ComputeUVMappingProcess() = default; ~ComputeUVMappingProcess() override = default; diff --git a/code/PostProcessing/ConvertToLHProcess.h b/code/PostProcessing/ConvertToLHProcess.h index f6f876ef6..3e768ced3 100644 --- a/code/PostProcessing/ConvertToLHProcess.h +++ b/code/PostProcessing/ConvertToLHProcess.h @@ -72,7 +72,7 @@ namespace Assimp { * * @note RH-LH and LH-RH is the same, so this class can be used for both */ -class MakeLeftHandedProcess : public BaseProcess { +class MakeLeftHandedProcess final : public BaseProcess { public: MakeLeftHandedProcess() = default; ~MakeLeftHandedProcess() override = default; @@ -147,7 +147,7 @@ public: // --------------------------------------------------------------------------- /** Postprocessing step to flip the UV coordinate system of the import data */ -class FlipUVsProcess : public BaseProcess +class FlipUVsProcess final : public BaseProcess { friend class Importer; @@ -156,13 +156,13 @@ public: FlipUVsProcess(); /** Destructor, private as well */ - ~FlipUVsProcess(); + ~FlipUVsProcess() override; // ------------------------------------------------------------------- - bool IsActive( unsigned int pFlags) const; + bool IsActive( unsigned int pFlags) const override; // ------------------------------------------------------------------- - void Execute( aiScene* pScene); + void Execute( aiScene* pScene) override; protected: void ProcessMesh( aiMesh* pMesh); diff --git a/code/PostProcessing/DeboneProcess.h b/code/PostProcessing/DeboneProcess.h index a7fb13cd4..780df5386 100644 --- a/code/PostProcessing/DeboneProcess.h +++ b/code/PostProcessing/DeboneProcess.h @@ -66,7 +66,7 @@ namespace Assimp { * the bone are split from the mesh. The split off (new) mesh is boneless. At any * point in time, bones without affect upon a given mesh are to be removed. */ -class DeboneProcess : public BaseProcess { +class DeboneProcess final : public BaseProcess { public: DeboneProcess(); ~DeboneProcess() override = default; diff --git a/code/PostProcessing/DropFaceNormalsProcess.h b/code/PostProcessing/DropFaceNormalsProcess.h index 859ac9c05..f2628a199 100644 --- a/code/PostProcessing/DropFaceNormalsProcess.h +++ b/code/PostProcessing/DropFaceNormalsProcess.h @@ -52,7 +52,7 @@ namespace Assimp { // --------------------------------------------------------------------------- /** The DropFaceNormalsProcess computes face normals for all faces of all meshes */ -class ASSIMP_API_WINONLY DropFaceNormalsProcess : public BaseProcess { +class ASSIMP_API_WINONLY DropFaceNormalsProcess final : public BaseProcess { public: DropFaceNormalsProcess() = default; ~DropFaceNormalsProcess() override = default; diff --git a/code/PostProcessing/EmbedTexturesProcess.h b/code/PostProcessing/EmbedTexturesProcess.h index 5fbc440ab..d1f88c0ac 100644 --- a/code/PostProcessing/EmbedTexturesProcess.h +++ b/code/PostProcessing/EmbedTexturesProcess.h @@ -58,7 +58,7 @@ namespace Assimp { * it will check if a file with the same name exists at the root folder * of the imported model. And if so, it uses that. */ -class ASSIMP_API EmbedTexturesProcess : public BaseProcess { +class ASSIMP_API EmbedTexturesProcess final : public BaseProcess { public: /// The default class constructor. EmbedTexturesProcess() = default; diff --git a/code/PostProcessing/ImproveCacheLocality.cpp b/code/PostProcessing/ImproveCacheLocality.cpp index 0445920d6..9e4ad7f15 100644 --- a/code/PostProcessing/ImproveCacheLocality.cpp +++ b/code/PostProcessing/ImproveCacheLocality.cpp @@ -380,4 +380,3 @@ ai_real ImproveCacheLocalityProcess::ProcessMesh(aiMesh *pMesh, unsigned int mes } } // namespace Assimp - diff --git a/include/assimp/BlobIOSystem.h b/include/assimp/BlobIOSystem.h index 4f554fdfd..800d75542 100644 --- a/include/assimp/BlobIOSystem.h +++ b/include/assimp/BlobIOSystem.h @@ -64,7 +64,7 @@ class BlobIOSystem; // -------------------------------------------------------------------------------------------- /** Redirect IOStream to a blob */ // -------------------------------------------------------------------------------------------- -class BlobIOStream : public IOStream { +class BlobIOStream final : public IOStream { public: /// @brief The class constructor with all needed parameters /// @param creator Pointer to the creator instance @@ -84,7 +84,6 @@ public: /// @brief The class destructor. ~BlobIOStream() override; -public: // ------------------------------------------------------------------- aiExportDataBlob *GetBlob() { aiExportDataBlob *blob = new aiExportDataBlob(); @@ -193,11 +192,10 @@ private: // -------------------------------------------------------------------------------------------- /** Redirect IOSystem to a blob */ // -------------------------------------------------------------------------------------------- -class BlobIOSystem : public IOSystem { +class BlobIOSystem final : public IOSystem { friend class BlobIOStream; - typedef std::pair BlobEntry; - + using BlobEntry = std::pair; public: /// @brief The default class constructor. @@ -230,7 +228,7 @@ public: const bool hasBaseName = baseName != AI_BLOBIO_MAGIC; // one must be the master - aiExportDataBlob *master = nullptr, *cur; + aiExportDataBlob *master = nullptr; for (const BlobEntry &blobby : blobs) { if (blobby.first == magicName) { @@ -245,7 +243,7 @@ public: return nullptr; } - cur = master; + aiExportDataBlob *cur = master; for (const BlobEntry &blobby : blobs) { if (blobby.second == master) { diff --git a/include/assimp/DefaultIOSystem.h b/include/assimp/DefaultIOSystem.h index 5b50b10a4..a3aff4961 100644 --- a/include/assimp/DefaultIOSystem.h +++ b/include/assimp/DefaultIOSystem.h @@ -56,7 +56,7 @@ namespace Assimp { // --------------------------------------------------------------------------- /** Default implementation of IOSystem using the standard C file functions */ -class ASSIMP_API DefaultIOSystem : public IOSystem { +class ASSIMP_API DefaultIOSystem final : public IOSystem { public: // ------------------------------------------------------------------- /** Tests for the existence of a file at the given path. */ diff --git a/include/assimp/DefaultLogger.hpp b/include/assimp/DefaultLogger.hpp index ef8ad2c5a..b23ccfce6 100644 --- a/include/assimp/DefaultLogger.hpp +++ b/include/assimp/DefaultLogger.hpp @@ -82,7 +82,7 @@ struct LogStreamInfo; * If you wish to customize the logging at an even deeper level supply your own * implementation of #Logger to #set(). * @note The whole logging stuff causes a small extra overhead for all imports. */ -class ASSIMP_API DefaultLogger : public Logger { +class ASSIMP_API DefaultLogger final : public Logger { public: // ---------------------------------------------------------------------- /** @brief Creates a logging instance. diff --git a/include/assimp/Exceptional.h b/include/assimp/Exceptional.h index d0f851a60..9ea2788bc 100644 --- a/include/assimp/Exceptional.h +++ b/include/assimp/Exceptional.h @@ -104,7 +104,7 @@ public: /** FOR EXPORTER PLUGINS ONLY: Simple exception class to be thrown if an * unrecoverable error occurs while exporting. Exporting APIs return * nullptr instead of a valid aiScene then. */ -class ASSIMP_API DeadlyExportError : public DeadlyErrorBase { +class ASSIMP_API DeadlyExportError final : public DeadlyErrorBase { public: /** Constructor with arguments */ template diff --git a/tools/assimp_cmd/CompareDump.cpp b/tools/assimp_cmd/CompareDump.cpp index 42ae0d6df..b7334a034 100644 --- a/tools/assimp_cmd/CompareDump.cpp +++ b/tools/assimp_cmd/CompareDump.cpp @@ -81,7 +81,7 @@ class sliced_chunk_iterator; /// /// @brief Sentinel exception to return quickly from deeply nested control paths //////////////////////////////////////////////////////////////////////////////////////////////////// -class compare_fails_exception : public virtual std::exception { +class compare_fails_exception final : public virtual std::exception { public: enum {MAX_ERR_LEN = 4096}; diff --git a/tools/assimp_cmd/Export.cpp b/tools/assimp_cmd/Export.cpp index d5014ec3c..046dfbff0 100644 --- a/tools/assimp_cmd/Export.cpp +++ b/tools/assimp_cmd/Export.cpp @@ -165,4 +165,4 @@ int Assimp_Export(const char *const *params, unsigned int num) { return AssimpCmdError::Success; } -#endif // no export +#endif // ASSIMP_BUILD_NO_EXPORT