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