Selaa lähdekoodia

AssimpView:
- postprocessing configuration is no (partially) configurable.
- adding linsk to Assimp homepage/bugtracker/forums.
- updating about dialog.
- fixing colors of texture view (tiny array overrun ...).
- minor UI theme adjustments.
- 'setup file extensions' works again.
- normal smooth limit is now used for primary import, too.
- minor spelling fixes in the UI.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@417 67173fc5-114c-0410-ac8e-9d2fd5bffc1f

aramis_acg 16 vuotta sitten
vanhempi
commit
84c6b4fde6

+ 3 - 0
CREDITS

@@ -61,3 +61,6 @@ Contributed fixes for the documentation and the doxygen markup
 
 - Zhao Lei
 Contributed several bugfixes fixing memory leaks and improving float parsing 
+
+- sueastside
+Updated PyAssimp to the latest Assimp data structures and provided a script to keep the Python binding up-to-date.

+ 5 - 6
mkutil/mkrev.bat

@@ -15,14 +15,13 @@ set /p addtext= < tmpfile.txt
 del /q tmpfile.txt
 cd ..\mkutil
 
-echo #define SVNRevision > revision.h
+echo #define SVNRevision > tmpfile.txt
 
-if exist tmpfile.txt del /q tmpfile.txt
-for /f "delims=" %%l in (revision.h) Do (
-      echo %%l %addtext% >> tmpfile.txt
+if exist revision.h del /q revision.h
+for /f "delims=" %%l in (tmpfile.txt) Do (
+      echo %%l %addtext% >> revision.h
 )
-del /q revision.h
-ren tmpfile.txt revision.h
+del /q tmpfile.txt
 
 
 

+ 1 - 1
tools/assimp_view/Display.h

@@ -87,7 +87,7 @@ private:
 		this->m_aiImageList[4] = 4;
 
 		this->m_avCheckerColors[0].x = this->m_avCheckerColors[0].y = this->m_avCheckerColors[0].z = 0.4f;
-		this->m_avCheckerColors[0].x = this->m_avCheckerColors[1].y = this->m_avCheckerColors[2].z = 0.6f;
+		this->m_avCheckerColors[1].x = this->m_avCheckerColors[1].y = this->m_avCheckerColors[1].z = 0.6f;
 	}
 
 public:

BIN
tools/assimp_view/HUD.png


+ 1 - 1
tools/assimp_view/LogDisplay.cpp

@@ -122,7 +122,7 @@ void CLogDisplay::OnRender()
 	// if no asset is loaded draw a "no asset loaded" text in the center
 	if (!g_pcAsset)
 		{
-			const char* szText = "No asset loaded\r\nUse [Viewer | Open asset] to load one";
+			const char* szText = "Nothing to display ... \r\nTry [Viewer | Open asset] to load an asset";
 
 		// shadow
 		RECT sCopy;

+ 174 - 42
tools/assimp_view/MessageProc.cpp

@@ -80,15 +80,22 @@ void MakeFileAssociations()
 
 	HKEY g_hRegistry;
 
-	aiString list;
+	aiString list, tmp;
 	aiGetExtensionList(&list);
+	tmp = list;
 
-	while (1) 
+	const char* sz = strtok(list.data,";");
+	do
 	{
-		RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Classes\\.3ds",NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
+		char buf[256];
+		assert(sz[0] == '*');
+		sprintf(buf,"Software\\Classes\\%s",sz+1);
+
+		RegCreateKeyEx(HKEY_CURRENT_USER,buf,NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
 		RegSetValueEx(g_hRegistry,"",0,REG_SZ,(const BYTE*)"ASSIMPVIEW_CLASS",(DWORD)strlen("ASSIMPVIEW_CLASS")+1);
 		RegCloseKey(g_hRegistry);
 	}
+	while (sz = strtok(NULL,";"));
 
 	RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Classes\\ASSIMPVIEW_CLASS",NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
 	RegCloseKey(g_hRegistry);
@@ -100,11 +107,7 @@ void MakeFileAssociations()
 	CLogDisplay::Instance().AddEntry("[OK] File assocations have been registered",
 		D3DCOLOR_ARGB(0xFF,0,0xFF,0));
 
-	aiString sz;
-	aiGetExtensionList(&sz);
-	CLogDisplay::Instance().AddEntry(sz.data,
-		D3DCOLOR_ARGB(0xFF,0,0xFF,0));
-	return;
+	CLogDisplay::Instance().AddEntry(tmp.data,D3DCOLOR_ARGB(0xFF,0,0xFF,0));
 	}
 
 
@@ -192,6 +195,16 @@ void LoadCheckerPatternColors()
 		(BYTE*) /* jep, this is evil */ CDisplay::Instance().GetSecondCheckerColor(),&dwTemp);
 }
 
+//-------------------------------------------------------------------------------
+// Changed pp setup
+//-------------------------------------------------------------------------------
+void UpdatePPSettings()
+{
+	DWORD dwValue = ppsteps;
+	RegSetValueExA(g_hRegistry,"PostProcessing",0,REG_DWORD,(const BYTE*)&dwValue,4);
+	UpdateWindow(g_hDlg);
+}
+
 //-------------------------------------------------------------------------------
 // Toggle the "Display Normals" state
 //-------------------------------------------------------------------------------
@@ -203,7 +216,6 @@ void ToggleNormals()
 	DWORD dwValue = 0;
 	if (g_sOptions.bRenderNormals)dwValue = 1;
 	RegSetValueExA(g_hRegistry,"RenderNormals",0,REG_DWORD,(const BYTE*)&dwValue,4);
-	UpdateWindow(g_hDlg);
 }
 
 //-------------------------------------------------------------------------------
@@ -232,7 +244,6 @@ void ToggleFPSView()
 	DWORD dwValue = 0;
 	if (g_bFPSView)dwValue = 1;
 	RegSetValueExA(g_hRegistry,"FPSView",0,REG_DWORD,(const BYTE*)&dwValue,4);
-	UpdateWindow(g_hDlg);
 }
 
 //-------------------------------------------------------------------------------
@@ -246,7 +257,6 @@ void ToggleMultipleLights()
 	DWORD dwValue = 0;
 	if (g_sOptions.b3Lights)dwValue = 1;
 	RegSetValueExA(g_hRegistry,"MultipleLights",0,REG_DWORD,(const BYTE*)&dwValue,4);
-	UpdateWindow(g_hDlg);
 }
 
 //-------------------------------------------------------------------------------
@@ -260,7 +270,6 @@ void ToggleLightRotate()
 	DWORD dwValue = 0;
 	if (g_sOptions.bLightRotate)dwValue = 1;
 	RegSetValueExA(g_hRegistry,"LightRotate",0,REG_DWORD,(const BYTE*)&dwValue,4);
-	UpdateWindow(g_hDlg);
 }
 
 //-------------------------------------------------------------------------------
@@ -274,7 +283,6 @@ void ToggleLowQuality()
 	DWORD dwValue = 0;
 	if (g_sOptions.bLowQuality)dwValue = 1;
 	RegSetValueExA(g_hRegistry,"LowQuality",0,REG_DWORD,(const BYTE*)&dwValue,4);
-	UpdateWindow(g_hDlg);
 }
 
 //-------------------------------------------------------------------------------
@@ -291,7 +299,6 @@ void ToggleSpecular()
 
 	// update all specular materials
 	CMaterialManager::Instance().UpdateSpecularMaterials();
-	UpdateWindow(g_hDlg);
 }
 
 //-------------------------------------------------------------------------------
@@ -308,7 +315,6 @@ void ToggleMats()
 
 	// update all specular materials
 	CMaterialManager::Instance().UpdateSpecularMaterials();
-	UpdateWindow(g_hDlg);
 }
 
 //-------------------------------------------------------------------------------
@@ -350,7 +356,6 @@ void ToggleWireFrame()
 	DWORD dwValue = 0;
 	if (RenderOptions::WIREFRAME == g_sOptions.eDrawMode)dwValue = 1;
 	RegSetValueExA(g_hRegistry,"Wireframe",0,REG_DWORD,(const BYTE*)&dwValue,4);
-	UpdateWindow(g_hDlg);
 }
 
 
@@ -386,7 +391,6 @@ void ToggleMS()
 	DWORD dwValue = 0;
 	if (g_sOptions.bMultiSample)dwValue = 1;
 	RegSetValueExA(g_hRegistry,"MultiSampling",0,REG_DWORD,(const BYTE*)&dwValue,4);
-	UpdateWindow(g_hDlg);
 }
 
 //-------------------------------------------------------------------------------
@@ -958,6 +962,28 @@ void OpenAsset()
 	return;
 }
 
+//-------------------------------------------------------------------------------
+void SetupPPUIState()
+{
+	
+	// fucking hell, that's ugly. anyone willing to rewrite me from scratch?
+	HMENU hMenu = GetMenu(g_hDlg);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_JIV,ppsteps & aiProcess_JoinIdenticalVertices ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_CTS,ppsteps & aiProcess_CalcTangentSpace ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_FD,ppsteps & aiProcess_FindDegenerates ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_FID,ppsteps & aiProcess_FindInvalidData ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_FIM,ppsteps & aiProcess_FindInstances ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_FIN,ppsteps & aiProcess_FixInfacingNormals ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_GUV,ppsteps & aiProcess_GenUVCoords ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_ICL,ppsteps & aiProcess_ImproveCacheLocality ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_OG,ppsteps & aiProcess_OptimizeGraph ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_OM,ppsteps & aiProcess_OptimizeMeshes ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_PTV,ppsteps & aiProcess_PreTransformVertices ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_RRM2,ppsteps & aiProcess_RemoveRedundantMaterials ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_TUV,ppsteps & aiProcess_TransformUVCoords ? MF_CHECKED : MF_UNCHECKED);
+	CheckMenuItem(hMenu,ID_VIEWER_PP_VDS,ppsteps & aiProcess_ValidateDataStructure ? MF_CHECKED : MF_UNCHECKED);
+}
+
 //-------------------------------------------------------------------------------
 // Initialize the user interface
 //-------------------------------------------------------------------------------
@@ -1149,6 +1175,12 @@ void InitUI()
 		g_sOptions.eDrawMode = RenderOptions::WIREFRAME;
 		CheckDlgButton(g_hDlg,IDC_TOGGLEWIRE,BST_CHECKED);
 	}
+
+	if(ERROR_SUCCESS != RegQueryValueEx(g_hRegistry,"PostProcessing",NULL,NULL,(BYTE*)&dwValue,&dwTemp))
+		ppsteps = ppstepsdefault;
+	else ppsteps = dwValue;
+
+	SetupPPUIState();
 	LoadCheckerPatternColors();
 
 	SendDlgItemMessage(g_hDlg,IDC_SLIDERANIM,TBM_SETRANGEMIN,TRUE,0);
@@ -1649,6 +1681,7 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
 
 		case WM_COMMAND:
 
+			HMENU hMenu = GetMenu(g_hDlg);
 			if (ID_VIEWER_QUIT == LOWORD(wParam))
 				{
 				PostQuitMessage(0);
@@ -1680,6 +1713,22 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
 				{
 					CLogWindow::Instance().Show();
 				}
+			else if (ID__WEBSITE == LOWORD(wParam))
+				{
+					ShellExecute(NULL,"open","http://assimp.sourceforge.net","","",SW_SHOW);
+				}
+			else if (ID__WEBSITESF == LOWORD(wParam))
+				{
+					ShellExecute(NULL,"open","https://sourceforge.net/projects/assimp","","",SW_SHOW);
+				}
+			else if (ID_REPORTBUG == LOWORD(wParam))
+				{
+					ShellExecute(NULL,"open","https://sourceforge.net/tracker/?func=add&group_id=226462&atid=1067632","","",SW_SHOW);
+				}
+			else if (ID_FR == LOWORD(wParam))
+				{
+					ShellExecute(NULL,"open","https://sourceforge.net/forum/forum.php?forum_id=817653","","",SW_SHOW);
+				}
 			else if (ID_TOOLS_CLEARLOG == LOWORD(wParam))
 				{
 					CLogWindow::Instance().Clear();
@@ -1727,34 +1776,122 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
 					g_pcAsset->FlipNormals();
 					}
 				}
+
+			// fucking hell, this is ugly. anyone willing to rewrite it from scratch using wxwidgets or similar?
+			else if (ID_VIEWER_PP_JIV == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_JoinIdenticalVertices;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_JIV,ppsteps & aiProcess_JoinIdenticalVertices ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_CTS == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_CalcTangentSpace;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_CTS,ppsteps & aiProcess_CalcTangentSpace ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_FD == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_FindDegenerates;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_FD,ppsteps & aiProcess_FindDegenerates ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_FID == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_FindInvalidData;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_FID,ppsteps & aiProcess_FindInvalidData ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_FIM == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_FindInstances;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_FIM,ppsteps & aiProcess_FindInstances ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_FIN == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_FixInfacingNormals;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_FIN,ppsteps & aiProcess_FixInfacingNormals ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_GUV == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_GenUVCoords;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_GUV,ppsteps & aiProcess_GenUVCoords ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_ICL == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_ImproveCacheLocality;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_ICL,ppsteps & aiProcess_ImproveCacheLocality ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_OG == LOWORD(wParam))	{
+				if (ppsteps & aiProcess_PreTransformVertices) {
+					CLogDisplay::Instance().AddEntry("[ERROR] This setting is incompatible with \'Pretransform Vertices\'");
+				}
+				else {
+					ppsteps ^= aiProcess_OptimizeGraph;
+					CheckMenuItem(hMenu,ID_VIEWER_PP_OG,ppsteps & aiProcess_OptimizeGraph ? MF_CHECKED : MF_UNCHECKED);
+					UpdatePPSettings();
+				}
+			}
+			else if (ID_VIEWER_PP_OM == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_OptimizeMeshes;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_OM,ppsteps & aiProcess_OptimizeMeshes ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_PTV == LOWORD(wParam))	{
+				if (ppsteps & aiProcess_OptimizeGraph) {
+					CLogDisplay::Instance().AddEntry("[ERROR] This setting is incompatible with \'Optimize Scenegraph\'");
+				}
+				else {
+					ppsteps ^= aiProcess_PreTransformVertices;
+					CheckMenuItem(hMenu,ID_VIEWER_PP_PTV,ppsteps & aiProcess_PreTransformVertices ? MF_CHECKED : MF_UNCHECKED);
+					UpdatePPSettings();
+				}
+			}
+			else if (ID_VIEWER_PP_RRM2 == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_RemoveRedundantMaterials;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_RRM2,ppsteps & aiProcess_RemoveRedundantMaterials ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_TUV == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_TransformUVCoords;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_TUV,ppsteps & aiProcess_TransformUVCoords ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_PP_VDS == LOWORD(wParam))	{
+				ppsteps ^= aiProcess_ValidateDataStructure;
+				CheckMenuItem(hMenu,ID_VIEWER_PP_VDS,ppsteps & aiProcess_ValidateDataStructure ? MF_CHECKED : MF_UNCHECKED);
+				UpdatePPSettings();
+			}
+			else if (ID_VIEWER_RELOAD == LOWORD(wParam))
+			{
+				DeleteAsset();
+				LoadAsset();
+			}
+			else if (ID_IMPORTSETTINGS_RESETTODEFAULT == LOWORD(wParam))
+			{
+				ppsteps = ppstepsdefault;
+				UpdatePPSettings();
+				SetupPPUIState();
+			}
+			else if (ID_IMPORTSETTINGS_OPENPOST == LOWORD(wParam))
+			{
+				ShellExecute(NULL,"open","http://assimp.sourceforge.net/lib_html/ai_post_process_8h.html","","",SW_SHOW);
+			}
 			else if (ID_TOOLS_ORIGINALNORMALS == LOWORD(wParam))
 			{
 				if (g_pcAsset && g_pcAsset->pcScene)
 					{
 					g_pcAsset->SetNormalSet(AssimpView::AssetHelper::ORIGINAL);
-
-					HMENU hMenu = GetMenu(g_hDlg);
-					ModifyMenu(hMenu,ID_TOOLS_ORIGINALNORMALS,
-						MF_BYCOMMAND | MF_CHECKED | MF_STRING,ID_TOOLS_ORIGINALNORMALS,"Original normals");
-					ModifyMenu(hMenu,ID_TOOLS_HARDNORMALS,
-						MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_HARDNORMALS,"Hard normals");
-					ModifyMenu(hMenu,ID_TOOLS_SMOOTHNORMALS,
-						MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_SMOOTHNORMALS,"Smooth normals");
+					CheckMenuItem(hMenu,ID_TOOLS_ORIGINALNORMALS,MF_BYCOMMAND | MF_CHECKED);
+					CheckMenuItem(hMenu,ID_TOOLS_HARDNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
+					CheckMenuItem(hMenu,ID_TOOLS_SMOOTHNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
 					}
 				}
+
 			else if (ID_TOOLS_SMOOTHNORMALS == LOWORD(wParam))
 				{
 				if (g_pcAsset && g_pcAsset->pcScene)
 					{
 					g_pcAsset->SetNormalSet(AssimpView::AssetHelper::SMOOTH);
-
-					HMENU hMenu = GetMenu(g_hDlg);
-					ModifyMenu(hMenu,ID_TOOLS_SMOOTHNORMALS,
-						MF_BYCOMMAND | MF_CHECKED | MF_STRING,ID_TOOLS_SMOOTHNORMALS,"Smooth normals");
-					ModifyMenu(hMenu,ID_TOOLS_HARDNORMALS,
-						MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_HARDNORMALS,"Hard normals");
-					ModifyMenu(hMenu,ID_TOOLS_ORIGINALNORMALS,
-						MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_ORIGINALNORMALS,"Original normals");
+					CheckMenuItem(hMenu,ID_TOOLS_ORIGINALNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
+					CheckMenuItem(hMenu,ID_TOOLS_HARDNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
+					CheckMenuItem(hMenu,ID_TOOLS_SMOOTHNORMALS,MF_BYCOMMAND | MF_CHECKED);
 					}
 				}
 			else if (ID_TOOLS_HARDNORMALS == LOWORD(wParam))
@@ -1762,14 +1899,9 @@ INT_PTR CALLBACK MessageProc(HWND hwndDlg,UINT uMsg,
 				if (g_pcAsset && g_pcAsset->pcScene)
 					{
 					g_pcAsset->SetNormalSet(AssimpView::AssetHelper::HARD);
-
-					HMENU hMenu = GetMenu(g_hDlg);
-					ModifyMenu(hMenu,ID_TOOLS_HARDNORMALS,
-						MF_BYCOMMAND | MF_CHECKED | MF_STRING,ID_TOOLS_HARDNORMALS,"Hard normals");
-					ModifyMenu(hMenu,ID_TOOLS_ORIGINALNORMALS,
-						MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_ORIGINALNORMALS,"Original normals");
-					ModifyMenu(hMenu,ID_TOOLS_SMOOTHNORMALS,
-						MF_BYCOMMAND | MF_UNCHECKED | MF_STRING,ID_TOOLS_SMOOTHNORMALS,"Smooth normals");
+					CheckMenuItem(hMenu,ID_TOOLS_ORIGINALNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
+					CheckMenuItem(hMenu,ID_TOOLS_HARDNORMALS,MF_BYCOMMAND | MF_CHECKED);
+					CheckMenuItem(hMenu,ID_TOOLS_SMOOTHNORMALS,MF_BYCOMMAND | MF_UNCHECKED);
 					}
 				}
 			else if (ID_TOOLS_STEREOVIEW == LOWORD(wParam))
@@ -2107,7 +2239,7 @@ int APIENTRY _tWinMain(HINSTANCE hInstance,
 			"ASSIMP ModelViewer",MB_OK);
 		return -4;
 		}
-	CLogDisplay::Instance().AddEntry("[OK] assimp_view has been initialized successfully");
+	CLogDisplay::Instance().AddEntry("[OK] Here we go!");
 
 	// create the log window
 	CLogWindow::Instance().Init();

BIN
tools/assimp_view/assimp_view.aps


+ 26 - 17
tools/assimp_view/assimp_view.cpp

@@ -76,6 +76,25 @@ IDirect3DTexture9* g_pcTexture		= NULL;
 bool g_bPlay						= false;
 double g_dCurrent = 0.;
 
+// default pp steps
+unsigned int ppsteps = aiProcess_CalcTangentSpace | // calculate tangents and bitangents if possible
+		aiProcess_JoinIdenticalVertices    | // join identical vertices/ optimize indexing
+		aiProcess_ValidateDataStructure    | // perform a full validation of the loader's output
+		aiProcess_ImproveCacheLocality     | // improve the cache locality of the output vertices
+		aiProcess_RemoveRedundantMaterials | // remove redundant materials
+		aiProcess_FindDegenerates          | // remove degenerated polygons from the import
+		aiProcess_FindInvalidData          | // detect invalid model data, such as invalid normal vectors
+		aiProcess_GenUVCoords              | // convert spherical, cylindrical, box and planar mapping to proper UVs
+		aiProcess_TransformUVCoords        | // preprocess UV transformations (scaling, translation ...)
+		aiProcess_FindInstances            | // search for instanced meshes and remove them by references to one master
+		aiProcess_LimitBoneWeights         | // limit bone weights to 4 per vertex
+		aiProcess_OptimizeMeshes		   | // join small meshes, if possible;
+		0;
+
+unsigned int ppstepsdefault = ppsteps;
+
+bool nopointslines = false;
+
 extern bool g_bWasFlipped			/*= false*/;
 
 aiMatrix4x4 g_mWorld;
@@ -129,31 +148,21 @@ DWORD WINAPI LoadThreadProc(LPVOID lpParameter)
 	double fCur = (double)timeGetTime();
 
 	aiSetImportPropertyInteger(AI_CONFIG_IMPORT_TER_MAKE_UVS,1);
-	aiSetImportPropertyFloat(AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE,80.f);
+	aiSetImportPropertyFloat(AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE,g_smoothAngle);
+	aiSetImportPropertyInteger(AI_CONFIG_PP_SBP_REMOVE,nopointslines ? aiPrimitiveType_LINE | aiPrimitiveType_POINT : 0 );
+
 	//aiSetImportPropertyInteger(AI_CONFIG_PP_FD_REMOVE,1);
 	//aiSetImportPropertyInteger(AI_CONFIG_PP_PTV_KEEP_HIERARCHY,1);
 
 	// Call ASSIMPs C-API to load the file
 	g_pcAsset->pcScene = (aiScene*)aiImportFile(g_szFileName,
-		aiProcess_CalcTangentSpace		   | // calculate tangents and bitangents if possible
-		aiProcess_JoinIdenticalVertices    | // join identical vertices/ optimize indexing
-		aiProcess_Triangulate			   | // triangulate polygons with more than 3 edges
+
+		ppsteps | /* configurable pp steps */
 		aiProcess_GenSmoothNormals		   | // generate smooth normal vectors if not existing
-		aiProcess_ConvertToLeftHanded	   | // convert everything to D3D left handed space
 		aiProcess_SplitLargeMeshes         | // split large, unrenderable meshes into submeshes
-		aiProcess_ValidateDataStructure    | // perform a full validation of the loader's output
-		aiProcess_ImproveCacheLocality     | // improve the cache locality of the output vertices
-		aiProcess_RemoveRedundantMaterials | // remove redundant materials
+		aiProcess_Triangulate			   | // triangulate polygons with more than 3 edges
+		aiProcess_ConvertToLeftHanded	   | // convert everything to D3D left handed space
 		aiProcess_SortByPType              | // make 'clean' meshes which consist of a single typ of primitives
-		aiProcess_FindDegenerates          | // remove degenerated polygons from the import
-		aiProcess_FindInvalidData          | // detect invalid model data, such as invalid normal vectors
-		aiProcess_GenUVCoords              | // convert spherical, cylindrical, box and planar mapping to proper UVs
-		aiProcess_TransformUVCoords        | // preprocess UV transformations (scaling, translation ...)
-		aiProcess_FindInstances            | // search for instanced meshes and remove them by references to one master
-		aiProcess_LimitBoneWeights         | // limit bone weights to 4 per vertex
-		aiProcess_OptimizeMeshes		   | // join small meshes, if possible
-//		aiProcess_OptimizeGraph            | // optimize unneeded nodes away
-//		aiProcess_PreTransformVertices |
 		0);
 
 	// get the end time of zje operation, calculate delta t

+ 4 - 1
tools/assimp_view/assimp_view.h

@@ -276,7 +276,10 @@ enum EClickPos
 	extern bool g_bPlay						/*= false*/;
 
 	extern double g_dCurrent;
-	extern float g_smoothAngle /*= 90.f*/;
+	extern float g_smoothAngle /*= 80.f*/;
+
+	extern unsigned int ppsteps,ppstepsdefault;
+	extern bool nopointslines;
 	}
 
 #endif // !! AV_MAIN_H_INCLUDED

+ 68 - 38
tools/assimp_view/assimp_view.rc

@@ -1,7 +1,6 @@
 // Microsoft Visual C++ generated resource script.
 //
 #include "resource.h"
-#include "../../mkutil/revision.h"
 
 #define APSTUDIO_READONLY_SYMBOLS
 /////////////////////////////////////////////////////////////////////////////
@@ -38,26 +37,24 @@ IDI_ASSIMP_VIEW         ICON                    "../shared/assimp_tools_icon.ico
 // Dialog
 //
 
-IDD_ABOUTBOX DIALOGEX 22, 17, 283, 169
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_CAPTION | WS_SYSMENU
+IDD_ABOUTBOX DIALOGEX 22, 17, 283, 149
+STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_CAPTION | WS_SYSMENU
 CAPTION "About Open Asset Import Library"
-FONT 10, "MS Shell Dlg", 400, 0, 0x0
+FONT 9, "Courier New", 400, 0, 0x0
 BEGIN
-    LTEXT           "Open Asset Import Library (Assimp)",IDC_STATIC,77,13,121,12
-    LTEXT           "A free C/C++ library for game && graphics developers. Developed by members of the german game development community www.zfx.info",IDC_STATIC,47,26,204,24
-    LTEXT           "Thomas Schulze \t\taka <Schrompf> ",IDC_STATIC,55,80,192,8
-    LTEXT           "Kim Kulling \t\t\taka <Kimmi> ",IDC_STATIC,55,92,186,8
-    LTEXT           "Rainer Schmidt \t\t\taka <Guru>",IDC_STATIC,55,104,180,8
-    LTEXT           "Alexander Gessler\t\taka <Aramis>",IDC_STATIC,55,68,186,8
-    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,60,282,1
-    LTEXT           "assimp.sourceforge.net",IDC_STATIC,7,137,78,8
-    DEFPUSHBUTTON   "Love this library",IDOK,200,128,67,14
+    LTEXT           "Open Asset Import Library (Assimp)",IDC_STATIC,30,14,144,9
+    LTEXT           "A free C/C++ library to read various well-known 3D model formats into a straightforward in-memory format that can be easily read and processed by applications. Licensed under a 3-clause BSD license.",IDC_STATIC,31,34,204,24
+    LTEXT           "(c) 2008-2009. Assimp Development Team. See the CREDITS file for a list of all contributors.",IDC_STATIC,30,65,204,23
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,27,282,1
+    LTEXT           "http://assimp.sourceforge.net  http://www.zfx.info",IDC_STATIC,31,101,127,22
+    DEFPUSHBUTTON   "Love this library",IDOK,186,110,84,14
     CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,148,283,1
-    CONTROL         130,IDC_STATIC,"Static",SS_BITMAP,0,149,514,20
+    CONTROL         130,IDC_STATIC,"Static",SS_BITMAP,0,129,514,20
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,10,281,1
 END
 
-IDD_DIALOGMAIN DIALOGEX 0, 0, 594, 380
-STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_DIALOGMAIN DIALOGEX 0, 0, 594, 381
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
 EXSTYLE WS_EX_ACCEPTFILES
 CAPTION "Open Asset Import Library - ModelViewer "
 MENU IDR_MENU1
@@ -74,9 +71,9 @@ BEGIN
     CONTROL         "Display normals",IDC_TOGGLENORMALS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,473,271,65,10
     CONTROL         "Toggle AutoRotate",IDC_AUTOROTATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,473,348,74,10
     EDITTEXT        IDC_EVERT,504,11,32,12,ES_AUTOHSCROLL | ES_READONLY
-    EDITTEXT        IDC_EFACE,562,11,29,12,ES_AUTOHSCROLL | ES_READONLY
-    EDITTEXT        IDC_EMAT,562,24,29,12,ES_AUTOHSCROLL | ES_READONLY
-    EDITTEXT        IDC_EFPS,562,50,29,12,ES_AUTOHSCROLL | ES_READONLY
+    EDITTEXT        IDC_EFACE,565,11,29,12,ES_AUTOHSCROLL | ES_READONLY
+    EDITTEXT        IDC_EMAT,565,24,29,12,ES_AUTOHSCROLL | ES_READONLY
+    EDITTEXT        IDC_EFPS,565,50,29,12,ES_AUTOHSCROLL | ES_READONLY
     CONTROL         "Rotate light sources",IDC_LIGHTROTATE,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,473,368,74,10
     CONTROL         "Two lights",IDC_3LIGHTS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,473,281,48,10
     LTEXT           "Time:",IDC_LOADTIME,475,51,29,8
@@ -101,16 +98,16 @@ BEGIN
     CONTROL         148,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,470,229,114,9
     CONTROL         147,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,470,336,114,9
     CONTROL         146,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,470,65,114,9
-    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDVERT,469,0,1,380
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDVERT,469,0,1,381
     CONTROL         149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,584,0,10,9
     CONTROL         149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,584,65,10,9
-    CONTROL         149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,583,229,10,9
+    CONTROL         149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,584,229,10,9
     CONTROL         149,IDC_STATIC,"Static",SS_BITMAP | SS_CENTERIMAGE,584,336,10,9
     LTEXT           "Nodes:",IDC_NUMNODES,476,26,24,8
     EDITTEXT        IDC_ENODEWND,504,24,32,12,ES_AUTOHSCROLL | ES_READONLY
-    CONTROL         "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,470,74,123,155
+    CONTROL         "",IDC_TREE1,"SysTreeView32",TVS_HASBUTTONS | TVS_HASLINES | TVS_SHOWSELALWAYS | WS_BORDER | WS_TABSTOP,471,74,123,155
     LTEXT           "Mesh:",IDC_NUMMESHES,540,39,20,8
-    EDITTEXT        IDC_EMESH,562,37,29,12,ES_AUTOHSCROLL | ES_READONLY
+    EDITTEXT        IDC_EMESH,565,37,29,12,ES_AUTOHSCROLL | ES_READONLY
     CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDVERT,567,238,1,93
     CONTROL         "Button1",IDC_LCOLOR1,"Button",BS_OWNERDRAW | WS_TABSTOP,570,242,21,17
     CONTROL         "Button1",IDC_LCOLOR2,"Button",BS_OWNERDRAW | WS_TABSTOP,570,262,21,17
@@ -156,18 +153,20 @@ BEGIN
     CONTROL         "",IDC_EDIT1,"RichEdit20A",ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | ES_NUMBER | WS_VSCROLL | WS_TABSTOP,3,4,358,174,WS_EX_STATICEDGE
 END
 
-IDD_DIALOGSMOOTH DIALOGEX 0, 0, 253, 86
+IDD_DIALOGSMOOTH DIALOGEX 0, 0, 278, 141
 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Set smooth limit "
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    DEFPUSHBUTTON   "OK",IDOK,195,53,50,14
-    PUSHBUTTON      "Cancel",IDCANCEL,143,53,50,14
-    EDITTEXT        IDC_EDITSM,107,7,139,14,ES_AUTOHSCROLL | ES_NUMBER
+    DEFPUSHBUTTON   "OK",IDOK,213,94,50,14
+    PUSHBUTTON      "Cancel",IDCANCEL,161,94,50,14
+    EDITTEXT        IDC_EDITSM,99,7,175,14,ES_AUTOHSCROLL | ES_NUMBER
     LTEXT           "Angle limit (in degrees):",IDC_STATIC,13,10,76,8
-    LTEXT           "The angle limit defines the maximum angle that may be between two adjacent face normals that they're smoothed together.",IDC_STATIC,13,27,231,19
-    LTEXT           "NOTE: use 'Smooth normals' to update the normals to the new settings",IDC_STATIC,12,75,230,8
-    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,7,73,239,1
+    LTEXT           "The angle limit defines the maximum angle that may be between two adjacent face normals that they're smoothed together.",IDC_STATIC,13,31,253,19
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,113,278,1
+    LTEXT           "This setting is also used during import, but it can be overriden by single model importers to match the original look of a model as closely as possible. Examples include 3DS, ASE and LWO, all of them relying on smoothing groups and their own angle limits. ",IDC_STATIC,13,51,254,33
+    LTEXT           "NOTE: New settings don't take effect immediately, use 'Smooth Normals' or 'Reload' to update the model.",IDC_STATIC,14,118,254,22
+    CONTROL         "",IDC_STATIC,"Static",SS_ETCHEDHORZ,0,90,277,1
 END
 
 
@@ -205,8 +204,8 @@ END
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,0,SVNRevision,0
- PRODUCTVERSION 1,0,SVNRevision,1
+ FILEVERSION 1,0,412,0
+ PRODUCTVERSION 1,0,412,1
  FILEFLAGSMASK 0x17L
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -249,7 +248,7 @@ BEGIN
     IDD_ABOUTBOX, DIALOG
     BEGIN
         TOPMARGIN, 1
-        BOTTOMMARGIN, 158
+        BOTTOMMARGIN, 138
     END
 
     IDD_LOADDIALOG, DIALOG
@@ -277,9 +276,9 @@ BEGIN
     IDD_DIALOGSMOOTH, DIALOG
     BEGIN
         LEFTMARGIN, 7
-        RIGHTMARGIN, 246
+        RIGHTMARGIN, 271
         TOPMARGIN, 7
-        BOTTOMMARGIN, 79
+        BOTTOMMARGIN, 134
     END
 END
 #endif    // APSTUDIO_INVOKED
@@ -313,8 +312,36 @@ BEGIN
     BEGIN
         MENUITEM "Open Asset",                  ID_VIEWER_OPEN
         MENUITEM "Close Asset",                 ID_VIEWER_CLOSEASSET
+        MENUITEM "Reload",                      ID_VIEWER_RELOAD
+        POPUP "Import settings"
+        BEGIN
+            MENUITEM "Calculate Tangent Space",     ID_VIEWER_PP_CTS
+            MENUITEM "Compute Indexed Meshes",      ID_VIEWER_PP_JIV
+            MENUITEM "Optimize Materials",          ID_VIEWER_PP_RRM2
+            MENUITEM "Optimize Meshes",             ID_VIEWER_PP_OM
+            MENUITEM "Optimize Scenegraph",         ID_VIEWER_PP_OG
+            MENUITEM "Find Instanced Meshes",       ID_VIEWER_PP_FIM
+            MENUITEM "Run Full Validation",         ID_VIEWER_PP_VDS
+            MENUITEM "Pretransform Vertices",       ID_VIEWER_PP_PTV
+            MENUITEM "VCache Optimization",         ID_VIEWER_PP_ICL
+            MENUITEM "Fix Infacing Normals",        ID_VIEWER_PP_FIN
+            MENUITEM "Find Degenerates",            ID_VIEWER_PP_FD
+            MENUITEM "Find Invalid Data",           ID_VIEWER_PP_FID
+            MENUITEM "Generate UV Coords",          ID_VIEWER_PP_GUV
+            MENUITEM "Transform UV Coords",         ID_VIEWER_PP_TUV
+            MENUITEM "Remove Lines and Points",     ID_VIEWER_PP_RLINE_PNT, GRAYED
+            MENUITEM SEPARATOR
+            MENUITEM "(required) Triangulate",      ID_VIEWER_PP_JIV, GRAYED
+            MENUITEM "(required) Limit Bone Weights", ID_VIEWER_PP_JIV, GRAYED
+            MENUITEM "(required) Split Large Meshes", ID_VIEWER_PP_JIV, GRAYED
+            MENUITEM "(required) Sort by primitive type", ID_VIEWER_PP_JIV, GRAYED
+            MENUITEM "(required) Convert to Left-Handed", ID_VIEWER_PP_JIV, GRAYED
+            MENUITEM SEPARATOR
+            MENUITEM "Reset to default",            ID_IMPORTSETTINGS_RESETTODEFAULT
+            MENUITEM "Open Post-Process Short Reference", ID_IMPORTSETTINGS_OPENPOST
+        END
         MENUITEM SEPARATOR
-        MENUITEM "Screenshot",                  ID_VIEWER_SAVESCREENSHOTTOFILE
+        MENUITEM "Save Screenshot",             ID_VIEWER_SAVESCREENSHOTTOFILE
         MENUITEM "Reset view",                  ID_VIEWER_RESETVIEW
         MENUITEM "Memory consumption",          ID_VIEWER_MEMORYCONSUMATION
         MENUITEM SEPARATOR
@@ -352,12 +379,15 @@ BEGIN
     BEGIN
         POPUP "Feedback"
         BEGIN
-            MENUITEM "Report bug",                  ID_FEEDBACK_GH
-            MENUITEM "Feature request",             ID_FEEDBACK_FEATUREREQUEST
+            MENUITEM "Report bug",                  ID_REPORTBUG
+            MENUITEM "Feature request/discuss",     ID_FR
         END
         MENUITEM "Help",                        ID__HELP
         MENUITEM SEPARATOR
         MENUITEM "About",                       ID__ABOUT
+        MENUITEM SEPARATOR
+        MENUITEM "Website",                     ID__WEBSITE
+        MENUITEM "SF.net Project Page",         ID__WEBSITESF
     END
 END
 

+ 29 - 1
tools/assimp_view/resource.h

@@ -41,6 +41,7 @@
 #define IDR_TXPOPUP                     156
 #define IDR_MATPOPUP                    157
 #define IDD_DIALOGSMOOTH                159
+#define SVNRevision                     412
 #define IDC_CHECK1                      1000
 #define IDC_TOGGLEMS                    1000
 #define IDC_CHECK2                      1001
@@ -187,6 +188,33 @@
 #define ID_SMOOTHANGLE_120              32849
 #define ID_SMOOTHANGLE_NONE             32850
 #define ID_TOOLS_SETANGLELIMIT          32851
+#define ID_VIEWER_PP_JIV                32852
+#define ID_VIEWER_PP_RRM                32852
+#define ID_VIEWER_PP_OM                 32853
+#define ID_VIEWER_PP_OG                 32854
+#define ID_VIEWER_PP_FIM                32855
+#define ID_VIEWER_PP_VDS                32856
+#define ID_VIEWER_PP_PTV                32857
+#define ID_VIEWER_PP_ICL                32858
+#define ID_VIEWER_PP_FIN                32859
+#define ID_VIEWER_PP_FD                 32860
+#define ID_VIEWER_PP_FID                32861
+#define ID_VIEWER_PP_GUV                32862
+#define ID_VIEWER_PP_TUV                32863
+#define ID_VIEWER_PP_RLINE_PNT          32864
+#define ID_REPORTBUG                    32865
+#define ID_FR                           32866
+#define ID__WEBSITE                     32867
+#define ID__SF                          32868
+#define ID__                            32869
+#define ID__WEBSITESF                   32870
+#define ID_IMPORTSETTINGS_CALCULATETANGENTSPACE 32871
+#define ID_VIEWER_CTS                   32872
+#define ID_VIEWER_PP_CTS                32873
+#define ID_VIEWER_RELOAD                32874
+#define ID_VIEWER_PP_RRM2               32875
+#define ID_IMPORTSETTINGS_RESETTODEFAULT 32876
+#define ID_IMPORTSETTINGS_OPENPOST      32877
 #define IDC_STATIC                      -1
 
 // Next default values for new objects
@@ -195,7 +223,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NO_MFC                     1
 #define _APS_NEXT_RESOURCE_VALUE        160
-#define _APS_NEXT_COMMAND_VALUE         32852
+#define _APS_NEXT_COMMAND_VALUE         32878
 #define _APS_NEXT_CONTROL_VALUE         1057
 #define _APS_NEXT_SYMED_VALUE           110
 #endif

+ 4 - 0
workspaces/vc8/assimp_view.vcproj

@@ -1613,6 +1613,10 @@
 			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
 			>
+			<File
+				RelativePath="..\..\tools\shared\assimp_tools_icon.ico"
+				>
+			</File>
 			<File
 				RelativePath="..\..\tools\assimp_view\assimp_view.ico"
 				>