From e37af671a9746343afc820b20d00081dcf0a3c51 Mon Sep 17 00:00:00 2001 From: Tazpn <tazpn@users.sourceforge.net> Date: Fri, 4 Aug 2006 00:01:40 +0000 Subject: [PATCH] Fix issue when importing Nifs without a scene NiNode --- NifImport/MaxNifImport.rc | 8 ++--- NifImport/MaxNifImport.vcproj | 22 +++++++------- NifImport/NIFImport.cpp | 56 +++++++++++++++++++++-------------- 3 files changed, 49 insertions(+), 37 deletions(-) diff --git a/NifImport/MaxNifImport.rc b/NifImport/MaxNifImport.rc index d343520..06f8df2 100644 --- a/NifImport/MaxNifImport.rc +++ b/NifImport/MaxNifImport.rc @@ -88,8 +88,8 @@ END // VS_VERSION_INFO VERSIONINFO - FILEVERSION 0,1,4,6 - PRODUCTVERSION 0,1,4,0 + FILEVERSION 0,1,6,8 + PRODUCTVERSION 0,1,6,0 FILEFLAGSMASK 0x37L #ifdef _DEBUG FILEFLAGS 0x21L @@ -105,12 +105,12 @@ BEGIN BLOCK "040904b0" BEGIN VALUE "FileDescription", "3ds Max Nif Importer" - VALUE "FileVersion", "0, 1, 4, 6" + VALUE "FileVersion", "0, 1, 6, 8" VALUE "InternalName", "MaxNifImport.dli" VALUE "LegalCopyright", "Copyright (c) 2006, NIF File Format Library and Tools\r\nAll rights reserved." VALUE "OriginalFilename", "MaxNifImport.dli" VALUE "ProductName", "3ds Max Nif Importer" - VALUE "ProductVersion", "0, 1, 4, 0" + VALUE "ProductVersion", "0, 1, 6, 0" VALUE "SpecialBuild", "Alpha" END END diff --git a/NifImport/MaxNifImport.vcproj b/NifImport/MaxNifImport.vcproj index cbd0c7b..652b007 100644 --- a/NifImport/MaxNifImport.vcproj +++ b/NifImport/MaxNifImport.vcproj @@ -58,9 +58,9 @@ ForceConformanceInForLoopScope="false" UsePrecompiledHeader="2" PrecompiledHeaderFile=".\Release\MaxNifImport.pch" - AssemblerListingLocation=".\Release\" - ObjectFile=".\Release\" - ProgramDataBaseFileName=".\Release\" + AssemblerListingLocation=".\Release7\" + ObjectFile=".\Release7\" + ProgramDataBaseFileName=".\Release7\" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="3" @@ -86,13 +86,13 @@ SuppressStartupBanner="true" AdditionalLibraryDirectories="C:\3dsmax7\maxsdk\lib" ModuleDefinitionFile=".\MaxNifImport.def" - ProgramDatabaseFile=".\Release\MaxNifImport.pdb" + ProgramDatabaseFile=".\Release7\MaxNifImport.pdb" SubSystem="2" OptimizeReferences="2" EnableCOMDATFolding="2" SetChecksum="true" BaseAddress="0x16860000" - ImportLibrary=".\Release\MaxNifImport.lib" + ImportLibrary=".\Release7\MaxNifImport.lib" /> <Tool Name="VCALinkTool" @@ -160,10 +160,10 @@ RuntimeLibrary="1" ForceConformanceInForLoopScope="false" UsePrecompiledHeader="2" - PrecompiledHeaderFile=".\Debug\MaxNifImport.pch" - AssemblerListingLocation=".\Debug\" - ObjectFile=".\Debug\" - ProgramDataBaseFileName=".\Debug\" + PrecompiledHeaderFile=".\Debug7\MaxNifImport.pch" + AssemblerListingLocation=".\Debug7\" + ObjectFile=".\Debug7\" + ProgramDataBaseFileName=".\Debug7\" WarningLevel="3" SuppressStartupBanner="true" DebugInformationFormat="3" @@ -191,10 +191,10 @@ IgnoreDefaultLibraryNames="msvcrtd.lib" ModuleDefinitionFile=".\MaxNifImport.def" GenerateDebugInformation="true" - ProgramDatabaseFile=".\Debug\MaxNifImport.pdb" + ProgramDatabaseFile=".\Debug7\MaxNifImport.pdb" SubSystem="2" BaseAddress="0x16860000" - ImportLibrary=".\Debug\MaxNifImport.lib" + ImportLibrary=".\Debug7\MaxNifImport.lib" /> <Tool Name="VCALinkTool" diff --git a/NifImport/NIFImport.cpp b/NifImport/NIFImport.cpp index c59900b..954e4cf 100644 --- a/NifImport/NIFImport.cpp +++ b/NifImport/NIFImport.cpp @@ -182,8 +182,6 @@ INode *NifImporter::GetNode(Niflib::NiNodeRef node) bool NifImporter::DoImport() { bool ok = true; - NiNodeRef rootNode = root; - vector<string> importedBones; if (!isBiped && importSkeleton && importBones) { @@ -233,30 +231,44 @@ bool NifImporter::DoImport() } if (isValid()) { - if (importBones) { - if (strmatch(rootNode->GetName(), "Scene Root")) - ImportBones(DynamicCast<NiNode>(rootNode->GetChildren())); - else - ImportBones(rootNode); - } - ok = ImportMeshes(rootNode); - - if (importSkeleton && removeUnusedImportedBones){ - vector<string> importedNodes = GetNamesOfNodes(nodes); - sort(importedBones.begin(), importedBones.end()); - sort(importedNodes.begin(), importedNodes.end()); - vector<string> results; - results.resize(importedBones.size()); - vector<string>::iterator end = set_difference ( - importedBones.begin(), importedBones.end(), - importedNodes.begin(), importedNodes.end(), results.begin()); - for (vector<string>::iterator itr = results.begin(); itr != end; ++itr){ - if (INode *node = gi->GetINodeByName((*itr).c_str())){ - node->Delete(0, TRUE); + if (root->IsDerivedType(NiNode::TypeConst())) + { + NiNodeRef rootNode = root; + + if (importBones) { + if (strmatch(rootNode->GetName(), "Scene Root")) + ImportBones(DynamicCast<NiNode>(rootNode->GetChildren())); + else + ImportBones(rootNode); + } + + ok = ImportMeshes(rootNode); + + if (importSkeleton && removeUnusedImportedBones){ + vector<string> importedNodes = GetNamesOfNodes(nodes); + sort(importedBones.begin(), importedBones.end()); + sort(importedNodes.begin(), importedNodes.end()); + vector<string> results; + results.resize(importedBones.size()); + vector<string>::iterator end = set_difference ( + importedBones.begin(), importedBones.end(), + importedNodes.begin(), importedNodes.end(), results.begin()); + for (vector<string>::iterator itr = results.begin(); itr != end; ++itr){ + if (INode *node = gi->GetINodeByName((*itr).c_str())){ + node->Delete(0, TRUE); + } } } } + else if (root->IsDerivedType(NiTriShape::TypeConst())) + { + ok |= ImportMesh(NiTriShapeRef(root)); + } + else if (root->IsDerivedType(NiTriStrips::TypeConst())) + { + ok |= ImportMesh(NiTriStripsRef(root)); + } } -- GitLab