FIX missing update call for scale to post process
parent
234b759cbc
commit
abdd853ca5
|
@ -76,9 +76,25 @@ BaseImporter::~BaseImporter() {
|
||||||
// nothing to do here
|
// nothing to do here
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BaseImporter::UpdateImporterScale( Importer* pImp )
|
||||||
|
{
|
||||||
|
ai_assert(pImp != nullptr);
|
||||||
|
ai_assert(importerScale != 0.0);
|
||||||
|
ai_assert(fileScale != 0.0);
|
||||||
|
|
||||||
|
double activeScale = importerScale * fileScale;
|
||||||
|
|
||||||
|
// Set active scaling
|
||||||
|
pImp->SetPropertyFloat( AI_CONFIG_APP_SCALE_KEY, activeScale);
|
||||||
|
|
||||||
|
ASSIMP_LOG_DEBUG_F("UpdateImporterScale scale set: %f", activeScale );
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Imports the given file and returns the imported data.
|
// Imports the given file and returns the imported data.
|
||||||
aiScene* BaseImporter::ReadFile(const Importer* pImp, const std::string& pFile, IOSystem* pIOHandler) {
|
aiScene* BaseImporter::ReadFile(Importer* pImp, const std::string& pFile, IOSystem* pIOHandler) {
|
||||||
|
|
||||||
|
|
||||||
m_progress = pImp->GetProgressHandler();
|
m_progress = pImp->GetProgressHandler();
|
||||||
if (nullptr == m_progress) {
|
if (nullptr == m_progress) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -100,6 +116,11 @@ aiScene* BaseImporter::ReadFile(const Importer* pImp, const std::string& pFile,
|
||||||
{
|
{
|
||||||
InternReadFile( pFile, sc.get(), &filter);
|
InternReadFile( pFile, sc.get(), &filter);
|
||||||
|
|
||||||
|
// Calculate import scale hook - required because pImp not available anywhere else
|
||||||
|
// passes scale into ScaleProcess
|
||||||
|
UpdateImporterScale(pImp);
|
||||||
|
|
||||||
|
|
||||||
} catch( const std::exception& err ) {
|
} catch( const std::exception& err ) {
|
||||||
// extract error description
|
// extract error description
|
||||||
m_ErrorText = err.what();
|
m_ErrorText = err.what();
|
||||||
|
@ -112,7 +133,7 @@ aiScene* BaseImporter::ReadFile(const Importer* pImp, const std::string& pFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void BaseImporter::SetupProperties(const Importer* /*pImp*/)
|
void BaseImporter::SetupProperties(const Importer* pImp)
|
||||||
{
|
{
|
||||||
// the default implementation does nothing
|
// the default implementation does nothing
|
||||||
}
|
}
|
||||||
|
@ -588,6 +609,8 @@ aiScene* BatchLoader::GetImport( unsigned int which )
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
void BatchLoader::LoadAll()
|
void BatchLoader::LoadAll()
|
||||||
{
|
{
|
||||||
|
|
|
@ -192,9 +192,13 @@ void FBXImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IOS
|
||||||
|
|
||||||
// convert the FBX DOM to aiScene
|
// convert the FBX DOM to aiScene
|
||||||
ConvertToAssimpScene(pScene, doc, settings.removeEmptyBones, unit);
|
ConvertToAssimpScene(pScene, doc, settings.removeEmptyBones, unit);
|
||||||
|
|
||||||
// units is relative to CM :) we need it in meters for assimp
|
// size relative to cm
|
||||||
SetFileScale( doc.GlobalSettings().UnitScaleFactor() * 0.01f);
|
float size_relative_to_cm = doc.GlobalSettings().UnitScaleFactor();
|
||||||
|
|
||||||
|
// Set FBX file scale is relative to CM must be converted to M for
|
||||||
|
// assimp universal format (M)
|
||||||
|
SetFileScale( size_relative_to_cm * 0.01f);
|
||||||
|
|
||||||
std::for_each(tokens.begin(),tokens.end(),Util::delete_fun<Token>());
|
std::for_each(tokens.begin(),tokens.end(),Util::delete_fun<Token>());
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,10 @@ class IOStream;
|
||||||
class ASSIMP_API BaseImporter {
|
class ASSIMP_API BaseImporter {
|
||||||
friend class Importer;
|
friend class Importer;
|
||||||
|
|
||||||
|
private:
|
||||||
|
/* Pushes state into importer for the importer scale */
|
||||||
|
virtual void UpdateImporterScale( Importer* pImp );
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
/** Constructor to be privately used by #Importer */
|
/** Constructor to be privately used by #Importer */
|
||||||
|
@ -134,7 +138,7 @@ public:
|
||||||
* a suitable response to the caller.
|
* a suitable response to the caller.
|
||||||
*/
|
*/
|
||||||
aiScene* ReadFile(
|
aiScene* ReadFile(
|
||||||
const Importer* pImp,
|
Importer* pImp,
|
||||||
const std::string& pFile,
|
const std::string& pFile,
|
||||||
IOSystem* pIOHandler
|
IOSystem* pIOHandler
|
||||||
);
|
);
|
||||||
|
@ -209,14 +213,6 @@ public:
|
||||||
return applicationUnits;
|
return applicationUnits;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Returns scale used by application called by ScaleProcess */
|
|
||||||
double GetImporterScale() const
|
|
||||||
{
|
|
||||||
ai_assert(importerScale != 0);
|
|
||||||
ai_assert(fileScale != 0);
|
|
||||||
return importerScale * fileScale;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Called by #Importer::GetExtensionList for each loaded importer.
|
/** Called by #Importer::GetExtensionList for each loaded importer.
|
||||||
* Take the extension list contained in the structure returned by
|
* Take the extension list contained in the structure returned by
|
||||||
|
@ -230,6 +226,7 @@ protected:
|
||||||
double fileScale = 1.0;
|
double fileScale = 1.0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
/** Imports the given file into the given scene structure. The
|
/** Imports the given file into the given scene structure. The
|
||||||
* function is expected to throw an ImportErrorException if there is
|
* function is expected to throw an ImportErrorException if there is
|
||||||
|
|
Loading…
Reference in New Issue