diff --git a/3ds Max/Max2Babylon.sln b/3ds Max/Max2Babylon.sln index 303eb96a..1a632daf 100644 --- a/3ds Max/Max2Babylon.sln +++ b/3ds Max/Max2Babylon.sln @@ -35,54 +35,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Max2Babylon2022", "Max2Baby EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Max2Babylon2023", "Max2Babylon\2023\Max2Babylon2023.csproj", "{ED7E1CE3-156D-40A9-888E-ACEC3E93B0FB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Max2Babylon2024", "Max2Babylon\2024\Max2Babylon2024.csproj", "{2A1918B0-EB6C-4903-91FD-6ACAE5459B54}" +EndProject Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{00356433-4277-48bb-ac33-92d3c47fe28b}*SharedItemsImports = 13 - ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 - ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 - ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 - ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 - ..\SharedProjects\Utilities\Extensions.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 - ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{2a678a75-f8c2-41ba-814a-53e611f5eb96}*SharedItemsImports = 13 - ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 - ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 - ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 - ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 - ..\SharedProjects\Utilities\Extensions.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 - ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 - ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 - ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 - ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 - ..\SharedProjects\Utilities\Extensions.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 - ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 - ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 - ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 - ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 - ..\SharedProjects\Utilities\Extensions.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 - ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 - ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 - ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 - ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 - ..\SharedProjects\Utilities\Extensions.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 - ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{cc8bfa12-aff1-4f9f-9ee4-c4a3a5d86237}*SharedItemsImports = 13 - ..\SharedProjects\Utilities\Extensions.projitems*{daed1281-4757-4a4e-b252-b879b43193a3}*SharedItemsImports = 13 - ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 - ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 - ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 - ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 - ..\SharedProjects\Utilities\Extensions.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 - ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 - ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 - ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 - ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 - ..\SharedProjects\Utilities\Extensions.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 - ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 - ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 - ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 - ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 - ..\SharedProjects\Utilities\Extensions.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 - ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{fc25673f-b984-4261-b266-9bc8b874079f}*SharedItemsImports = 13 - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|ARM = Debug|ARM @@ -392,6 +347,42 @@ Global {ED7E1CE3-156D-40A9-888E-ACEC3E93B0FB}.Release|x64.Build.0 = Release|x64 {ED7E1CE3-156D-40A9-888E-ACEC3E93B0FB}.Release|x86.ActiveCfg = Release|Any CPU {ED7E1CE3-156D-40A9-888E-ACEC3E93B0FB}.Release|x86.Build.0 = Release|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|ARM.ActiveCfg = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|ARM.Build.0 = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|Mixed Platforms.ActiveCfg = Debug|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|Mixed Platforms.Build.0 = Debug|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|Win32.ActiveCfg = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|Win32.Build.0 = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|x64.ActiveCfg = Debug|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|x64.Build.0 = Debug|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|x86.ActiveCfg = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Debug|x86.Build.0 = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|Any CPU.ActiveCfg = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|Any CPU.Build.0 = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|ARM.ActiveCfg = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|ARM.Build.0 = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|Mixed Platforms.ActiveCfg = Debug|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|Mixed Platforms.Build.0 = Debug|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|Win32.ActiveCfg = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|Win32.Build.0 = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|x64.ActiveCfg = Debug|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|x64.Build.0 = Debug|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|x86.ActiveCfg = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Profile|x86.Build.0 = Debug|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|Any CPU.Build.0 = Release|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|ARM.ActiveCfg = Release|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|ARM.Build.0 = Release|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|Mixed Platforms.ActiveCfg = Release|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|Mixed Platforms.Build.0 = Release|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|Win32.ActiveCfg = Release|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|Win32.Build.0 = Release|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|x64.ActiveCfg = Release|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|x64.Build.0 = Release|x64 + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|x86.ActiveCfg = Release|Any CPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -405,8 +396,61 @@ Global {23892B0B-D8D2-4BCD-96DA-D590DD0D5C76} = {2139CC27-1C89-49C8-95AC-7715ACBADC1F} {EE8131F8-59AC-45C2-9E79-F07A4EBE45CB} = {2139CC27-1C89-49C8-95AC-7715ACBADC1F} {ED7E1CE3-156D-40A9-888E-ACEC3E93B0FB} = {2139CC27-1C89-49C8-95AC-7715ACBADC1F} + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54} = {2139CC27-1C89-49C8-95AC-7715ACBADC1F} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {B1C70ED2-1F05-433C-A16C-59F6C5BC9A0F} EndGlobalSection + GlobalSection(SharedMSBuildProjectFiles) = preSolution + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{00356433-4277-48bb-ac33-92d3c47fe28b}*SharedItemsImports = 13 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 + ..\SharedProjects\Utilities\Extensions.projitems*{23892b0b-d8d2-4bcd-96da-d590dd0d5c76}*SharedItemsImports = 4 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{2a1918b0-eb6c-4903-91fd-6acae5459b54}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{2a1918b0-eb6c-4903-91fd-6acae5459b54}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{2a1918b0-eb6c-4903-91fd-6acae5459b54}*SharedItemsImports = 4 + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{2a1918b0-eb6c-4903-91fd-6acae5459b54}*SharedItemsImports = 4 + ..\SharedProjects\Utilities\Extensions.projitems*{2a1918b0-eb6c-4903-91fd-6acae5459b54}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{2a678a75-f8c2-41ba-814a-53e611f5eb96}*SharedItemsImports = 13 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 + ..\SharedProjects\Utilities\Extensions.projitems*{2f49c726-a1f8-40d4-859f-1355949608dc}*SharedItemsImports = 4 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 + ..\SharedProjects\Utilities\Extensions.projitems*{2f49c726-a1f8-40d4-859f-135594960ddc}*SharedItemsImports = 4 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 + ..\SharedProjects\Utilities\Extensions.projitems*{2f49c726-a1f8-40d4-859f-1355949612dc}*SharedItemsImports = 4 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 + ..\SharedProjects\Utilities\Extensions.projitems*{310270a9-e0bc-4795-948a-750af82f31a6}*SharedItemsImports = 4 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{cc8bfa12-aff1-4f9f-9ee4-c4a3a5d86237}*SharedItemsImports = 13 + ..\SharedProjects\Utilities\Extensions.projitems*{daed1281-4757-4a4e-b252-b879b43193a3}*SharedItemsImports = 13 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 + ..\SharedProjects\Utilities\Extensions.projitems*{dd7c931a-8faf-4318-bb74-71dc858cc400}*SharedItemsImports = 4 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 + ..\SharedProjects\Utilities\Extensions.projitems*{ed7e1ce3-156d-40a9-888e-acec3e93b0fb}*SharedItemsImports = 4 + ..\SharedProjects\Babylon2GLTF\Babylon2GLTF.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 + ..\SharedProjects\BabylonExport.Entities\BabylonExport.Entities.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 + ..\SharedProjects\GltfExport.Entities\GltfExport.Entities.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 + ..\SharedProjects\Utilities\Extensions.projitems*{ee8131f8-59ac-45c2-9e79-f07a4ebe45cb}*SharedItemsImports = 4 + ..\SharedProjects\BabylonFileConverter\BabylonFileConverter.projitems*{fc25673f-b984-4261-b266-9bc8b874079f}*SharedItemsImports = 13 + EndGlobalSection EndGlobal diff --git a/3ds Max/Max2Babylon/2024/Max2Babylon2024.csproj b/3ds Max/Max2Babylon/2024/Max2Babylon2024.csproj new file mode 100644 index 00000000..f21ffb37 --- /dev/null +++ b/3ds Max/Max2Babylon/2024/Max2Babylon2024.csproj @@ -0,0 +1,435 @@ + + + + + Debug + AnyCPU + {2A1918B0-EB6C-4903-91FD-6ACAE5459B54} + Library + Properties + Max2Babylon + Max2Babylon + v4.8 + 512 + + SAK + SAK + SAK + SAK + ..\ + true + + + true + full + false + bin\Debug\ + TRACE;DEBUG;MAX2024 + prompt + 4 + false + true + AnyCPU + + + pdbonly + true + bin\Release\ + DEBUG;TRACE;MAX2024 + prompt + 4 + false + true + + + true + bin\Debug\ + TRACE;DEBUG;MAX2024 + true + full + x64 + prompt + MinimumRecommendedRules.ruleset + + + bin\Release\ + TRACE;MAX2024 + true + pdbonly + x64 + prompt + MinimumRecommendedRules.ruleset + true + + + + False + Refs\Autodesk.Max.dll + False + + + Refs\ExplorerFramework.dll + False + + + ..\..\Refs\GDImageLibrary.dll + + + False + Refs\ManagedServices.dll + False + + + Refs\MaxCustomControls.dll + False + + + False + ..\..\packages\Microsoft.WindowsAPICodePack-Core.1.1.0.0\lib\Microsoft.WindowsAPICodePack.dll + + + False + ..\..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.Shell.dll + + + False + ..\..\packages\Microsoft.WindowsAPICodePack-Shell.1.1.0.0\lib\Microsoft.WindowsAPICodePack.ShellExtensions.dll + + + ..\..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll + + + Refs\SceneExplorer.dll + False + + + ..\..\packages\SharpDX.3.1.1\lib\net45\SharpDX.dll + True + + + ..\..\packages\SharpDX.Mathematics.3.1.1\lib\net45\SharpDX.Mathematics.dll + True + + + + + + + + + + + + + ..\..\Refs\TargaImage.dll + + + ..\..\Refs\TQ.Texture.dll + + + + + BabylonActionCallback.cs + + + BabylonAnimationActionItem.cs + + + BabylonExportActionItem.cs + + + BabylonLoadAnimations.cs + + + BabylonPropertiesActionItem.cs + + + BabylonSkipFlatten.cs + + + BabylonStoreAnimations.cs + + + Descriptor.cs + + + Exporter\AnimationGroup.cs + + + Exporter\BabylonExporter.Animation.cs + + + Exporter\BabylonExporter.Camera.cs + + + Exporter\BabylonExporter.CustomAttributes.cs + + + Exporter\BabylonExporter.cs + + + Exporter\BabylonExporter.IMaterialExporter.cs + + + Exporter\BabylonExporter.Light.cs + + + Exporter\BabylonExporter.Logger.cs + + + Exporter\BabylonExporter.Material.cs + + + Exporter\BabylonExporter.Material.GLTF.cs + + + Exporter\BabylonExporter.Material.Pbr.cs + + + Exporter\BabylonExporter.Mesh.cs + + + Exporter\BabylonExporter.ShadowGenerator.cs + + + Exporter\BabylonExporter.Skeleton.cs + + + Exporter\BabylonExporter.Texture.cs + + + Exporter\GlobalVertex.cs + + + Exporter\MaxExportParameters.cs + + + Exporter\MaxGLTFMaterialExporter.cs + + + Extensions\ScaleSystem.cs + + + Forms\AnimationForm.cs + Form + + + Forms\AnimationForm.designer.cs + AnimationForm.cs + + + Forms\AnimationGroupControl.cs + UserControl + + + Forms\AnimationGroupControl.designer.cs + AnimationGroupControl.cs + + + Forms\CameraPropertiesForm.cs + Form + + + Forms\CameraPropertiesForm.Designer.cs + CameraPropertiesForm.cs + + + Forms\ExporterForm.cs + Form + + + Forms\ExporterForm.Designer.cs + ExporterForm.cs + + + Forms\LayerSelector.cs + Form + + + Forms\LayerSelector.designer.cs + LayerSelector.cs + + + Forms\LightPropertiesForm.cs + Form + + + Forms\LightPropertiesForm.Designer.cs + LightPropertiesForm.cs + + + Forms\MaxNodeTreeView.cs + Component + + + Forms\MaxNodeTreeView.designer.cs + MaxNodeTreeView.cs + + + Forms\MultiExportForm.cs + Form + + + Forms\MultiExportForm.designer.cs + MultiExportForm.cs + + + Forms\ObjectPropertiesForm.cs + Form + + + Forms\ObjectPropertiesForm.Designer.cs + ObjectPropertiesForm.cs + + + Forms\ScenePropertiesForm.cs + Form + + + Forms\ScenePropertiesForm.Designer.cs + ScenePropertiesForm.cs + + + Forms\Vector3Control.cs + UserControl + + + Forms\Vector3Control.Designer.cs + Vector3Control.cs + + + GlobalUtility.cs + + + Loader.cs + + + MaxScriptManager.cs + + + MaterialScripts.cs + + + Tools\LayerUtilities.cs + + + Tools\MeshUtlities.cs + + + Tools\ScriptsUtilities.cs + + + Tools\Tools.cs + + + Tools\VNormal.cs + + + Tools\WebServer.cs + + + Exporter\BabylonExporter.ExportItem.cs + + + Exporter\BabylonExporter.WorldModifiers.Skin.cs + + + + True + True + Resources.resx + + + + + Forms\AnimationForm.resx + AnimationForm.cs + + + Forms\AnimationGroupControl.resx + AnimationGroupControl.cs + + + Forms\CameraPropertiesForm.resx + CameraPropertiesForm.cs + + + Forms\ExporterForm.resx + ExporterForm.cs + + + Forms\LayerSelector.resx + LayerSelector.cs + + + Forms\LightPropertiesForm.resx + LightPropertiesForm.cs + + + Forms\MultiExportForm.resx + MultiExportForm.cs + + + Forms\ObjectPropertiesForm.resx + ObjectPropertiesForm.cs + + + Forms\ScenePropertiesForm.resx + ScenePropertiesForm.cs + + + Forms\Vector3Control.resx + Vector3Control.cs + + + Forms\MaxNodeTreeView.resx + MaxNodeTreeView.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + Scripts\ARNOLD_MATERIAL_CAT_DEF.ms + + + Scripts\BUMP_MAP_CAT_DEF.ms + + + Scripts\PHYSICAL_MATERIAL_CAT_DEF.ms + + + Scripts\STANDARD_MATERIAL_CAT_DEF.ms + + + + + + + + + + + + + + + + call "$(SolutionDir)Max2Babylon\OnPostBuild.bat" "$(ConfigurationName)" 2024 + + + call "$(SolutionDir)Max2Babylon\OnPreBuild.bat" "$(ConfigurationName)" + + + \ No newline at end of file diff --git a/3ds Max/Max2Babylon/2024/Properties/AssemblyInfo.cs b/3ds Max/Max2Babylon/2024/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..db1e723e --- /dev/null +++ b/3ds Max/Max2Babylon/2024/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Max2Babylon")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Max2Babylon")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2d621b1c-3661-49bd-8dd3-4c5de51fce94")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/3ds Max/Max2Babylon/2024/Properties/Resources.Designer.cs b/3ds Max/Max2Babylon/2024/Properties/Resources.Designer.cs new file mode 100644 index 00000000..69d702e1 --- /dev/null +++ b/3ds Max/Max2Babylon/2024/Properties/Resources.Designer.cs @@ -0,0 +1,113 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Max2Babylon.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Max2Babylon.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] ARNOLD_MATERIAL_CAT_DEF { + get { + object obj = ResourceManager.GetObject("ARNOLD_MATERIAL_CAT_DEF", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] BUMP_MAP_CAT_DEF { + get { + object obj = ResourceManager.GetObject("BUMP_MAP_CAT_DEF", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap MaxExporter { + get { + object obj = ResourceManager.GetObject("MaxExporter", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] PHYSICAL_MATERIAL_CAT_DEF { + get { + object obj = ResourceManager.GetObject("PHYSICAL_MATERIAL_CAT_DEF", resourceCulture); + return ((byte[])(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Byte[]. + /// + internal static byte[] STANDARD_MATERIAL_CAT_DEF { + get { + object obj = ResourceManager.GetObject("STANDARD_MATERIAL_CAT_DEF", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/3ds Max/Max2Babylon/2024/Properties/Resources.resx b/3ds Max/Max2Babylon/2024/Properties/Resources.resx new file mode 100644 index 00000000..6ad42aa7 --- /dev/null +++ b/3ds Max/Max2Babylon/2024/Properties/Resources.resx @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\Scripts\ARNOLD_MATERIAL_CAT_DEF.ms;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\..\Scripts\BUMP_MAP_CAT_DEF.ms;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\MaxExporter.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\Scripts\PHYSICAL_MATERIAL_CAT_DEF.ms;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\..\Scripts\STANDARD_MATERIAL_CAT_DEF.ms;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/3ds Max/Max2Babylon/2024/Refs/Autodesk.Max.dll b/3ds Max/Max2Babylon/2024/Refs/Autodesk.Max.dll new file mode 100644 index 00000000..4e63d4e9 Binary files /dev/null and b/3ds Max/Max2Babylon/2024/Refs/Autodesk.Max.dll differ diff --git a/3ds Max/Max2Babylon/2024/Refs/ExplorerFramework.dll b/3ds Max/Max2Babylon/2024/Refs/ExplorerFramework.dll new file mode 100644 index 00000000..683901f7 Binary files /dev/null and b/3ds Max/Max2Babylon/2024/Refs/ExplorerFramework.dll differ diff --git a/3ds Max/Max2Babylon/2024/Refs/ManagedServices.dll b/3ds Max/Max2Babylon/2024/Refs/ManagedServices.dll new file mode 100644 index 00000000..61738afc Binary files /dev/null and b/3ds Max/Max2Babylon/2024/Refs/ManagedServices.dll differ diff --git a/3ds Max/Max2Babylon/2024/Refs/MaxCustomControls.dll b/3ds Max/Max2Babylon/2024/Refs/MaxCustomControls.dll new file mode 100644 index 00000000..e967afad Binary files /dev/null and b/3ds Max/Max2Babylon/2024/Refs/MaxCustomControls.dll differ diff --git a/3ds Max/Max2Babylon/2024/Refs/SceneExplorer.dll b/3ds Max/Max2Babylon/2024/Refs/SceneExplorer.dll new file mode 100644 index 00000000..351b1ca5 Binary files /dev/null and b/3ds Max/Max2Babylon/2024/Refs/SceneExplorer.dll differ diff --git a/3ds Max/Max2Babylon/2024/Resources/MaxExporter.png b/3ds Max/Max2Babylon/2024/Resources/MaxExporter.png new file mode 100644 index 00000000..89b5610a Binary files /dev/null and b/3ds Max/Max2Babylon/2024/Resources/MaxExporter.png differ diff --git a/3ds Max/Max2Babylon/2024/packages.config b/3ds Max/Max2Babylon/2024/packages.config new file mode 100644 index 00000000..25a13046 --- /dev/null +++ b/3ds Max/Max2Babylon/2024/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/3ds Max/Max2Babylon/Descriptor.cs b/3ds Max/Max2Babylon/Descriptor.cs index 07ccc645..054d3170 100644 --- a/3ds Max/Max2Babylon/Descriptor.cs +++ b/3ds Max/Max2Babylon/Descriptor.cs @@ -49,7 +49,7 @@ public override string Category } } -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 public override string NonLocalizedClassName => "Babylon File Exporter"; #endif } diff --git a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Animation.cs b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Animation.cs index 3679be27..fdad085a 100644 --- a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Animation.cs +++ b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Animation.cs @@ -299,7 +299,7 @@ private List ExportBabylonKeysFromGameController(IIGameCont var keys = new List(); for (int indexKey = 0; indexKey < gameKeyTab.Count; indexKey++) { -#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021|| MAX2022 || MAX2023 +#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021|| MAX2022 || MAX2023 || MAX2024 var gameKey = gameKeyTab[indexKey]; #else var gameKey = gameKeyTab[new IntPtr(indexKey)]; diff --git a/3ds Max/Max2Babylon/Exporter/BabylonExporter.CustomAttributes.cs b/3ds Max/Max2Babylon/Exporter/BabylonExporter.CustomAttributes.cs index d66ec6ba..dd00e0be 100644 --- a/3ds Max/Max2Babylon/Exporter/BabylonExporter.CustomAttributes.cs +++ b/3ds Max/Max2Babylon/Exporter/BabylonExporter.CustomAttributes.cs @@ -16,7 +16,7 @@ partial class BabylonExporter public Dictionary ExportExtraAttributes(IIGameMaterial gameMaterial, BabylonScene babylonScene, List excludeAttributes = null) { // Retreive the max object -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand("obj = sceneMaterials[\"" + gameMaterial.MaterialName + "\"];", ManagedServices.MaxscriptSDK.ScriptSource.NotSpecified); #else ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand("obj = sceneMaterials[\"" + gameMaterial.MaterialName + "\"];"); @@ -34,12 +34,11 @@ public Dictionary ExportExtraAttributes(IIGameMaterial gameMater public Dictionary ExportExtraAttributes(IIGameNode gameNode, BabylonScene babylonScene, List excludeAttributes = null) { // Retreive the max object -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand("obj = maxOps.getNodeByHandle " + gameNode.MaxNode.Handle + ";", ManagedServices.MaxscriptSDK.ScriptSource.NotSpecified); #else ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand("obj = maxOps.getNodeByHandle " + gameNode.MaxNode.Handle + ";"); #endif - return _ExportExtraAttributes(gameNode.IGameObject.IPropertyContainer, babylonScene, excludeAttributes); } @@ -79,7 +78,7 @@ private Dictionary _ExportExtraAttributes(IIPropertyContainer pr + "\r\n" + ")" + "\r\n" + ")" + "\r\n" + "s"; -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 string result = ManagedServices.MaxscriptSDK.ExecuteStringMaxscriptQuery(cmd, ManagedServices.MaxscriptSDK.ScriptSource.NotSpecified); #else string result = ManagedServices.MaxscriptSDK.ExecuteStringMaxscriptQuery(cmd); diff --git a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Light.cs b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Light.cs index 3cd0fd61..2c482745 100644 --- a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Light.cs +++ b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Light.cs @@ -185,8 +185,8 @@ private BabylonNode ExportLight(IIGameScene scene, IIGameNode lightNode, Babylon foreach (var meshNode in maxScene.NodesListBySuperClass(SClass_ID.Geomobject)) { -#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 - if (meshNode.CastShadows) +#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 + if(meshNode.CastShadows) #else if (meshNode.CastShadows == 1) #endif diff --git a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Logger.cs b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Logger.cs index 90ee239d..6467dc2e 100644 --- a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Logger.cs +++ b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Logger.cs @@ -88,7 +88,7 @@ public void Print(IIParamBlock2 paramBlock, int logRank) { ParamType2 paramType = paramBlock.GetParameterType(i); -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 RaiseVerbose("paramBlock.GetLocalName(" + i + ")=" + paramBlock.GetLocalName(i, 0, false) + ", type=" + paramType, logRank + 1); #else RaiseVerbose("paramBlock.GetLocalName(" + i + ")=" + paramBlock.GetLocalName(i, 0) + ", type=" + paramType, logRank + 1); diff --git a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Material.cs b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Material.cs index 3db91fb8..06a747d9 100644 --- a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Material.cs +++ b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Material.cs @@ -45,7 +45,7 @@ protected ITexmap _getTexMapWithCache(IIGameMaterial materialNode, string name) for (int i = 0; i < materialNode.MaxMaterial.NumSubTexmaps; i++) { // according to https://help.autodesk.com/view/MAXDEV/2022/ENU/?guid=Max_Developer_Help_what_s_new_whats_new_3dsmax_2022_sdk_localization_html -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 ||MAX2024 var mn = materialNode.MaxMaterial.GetSubTexmapSlotName(i, false); // Non localized, then en-US #else var mn = materialNode.MaxMaterial.GetSubTexmapSlotName(i); // en-US @@ -83,7 +83,13 @@ protected ITexmap _getTexMap(IIGameMaterial materialNode, string name, bool cach { for (int i = 0; i < materialNode.MaxMaterial.NumSubTexmaps; i++) { +#if MAX2024 + // 3dsMax2024+ introduced new localized flag + var slotName = materialNode.MaxMaterial.GetSubTexmapSlotName(i, false); +#else var slotName = materialNode.MaxMaterial.GetSubTexmapSlotName(i); +#endif + // sometime the name of the material changed - plugin side effect with script material // so give a second chance with lowercase to be more resilient if (slotName == name || slotName == name.ToLower()) @@ -185,7 +191,12 @@ private void ExportMaterial(IIGameMaterial materialNode, BabylonScene babylonSce Print(materialNode.IPropertyContainer, 2); for (int i = 0; i < materialNode.MaxMaterial.NumSubTexmaps; i++) { +#if MAX2024 + // 3dsMax2024+ introduced new localized flag + RaiseVerbose("Texture[" + i + "] is named '" + materialNode.MaxMaterial.GetSubTexmapSlotName(i, false) + "'", 2); +#else RaiseVerbose("Texture[" + i + "] is named '" + materialNode.MaxMaterial.GetSubTexmapSlotName(i) + "'", 2); +#endif } } #endregion @@ -299,7 +310,7 @@ private void ExportMaterial(IIGameMaterial materialNode, BabylonScene babylonSce { ExportPbrSpecGlossMaterial(materialNode, babylonScene); } -#if MAX2023 +#if MAX2023 || MAX2024 else if (isGLTFMaterial(materialNode)) { ExportGLTFMaterial(materialNode, babylonScene); @@ -706,7 +717,7 @@ private void ExportPhysicalMaterial(IIGameMaterial materialNode, IIPropertyConta babylonMaterial.occlusionTexture = ExportTexture(ambientOcclusionTexmap, babylonScene); } -#if MAX2023 +#if MAX2023 || MAX2024 var normalMapAmount = propertyContainer.GetFloatProperty("bump_map_amt"); #else var normalMapAmount = propertyContainer.GetFloatProperty(91); @@ -958,12 +969,24 @@ private void ExportArnoldMaterial(IIGameMaterial materialNode, IIPropertyContain for (int i = 0; i < numOfTexMapSlots; i++) { - if (materialNode.MaxMaterial.GetSubTexmapSlotName(i) == "normal") + +#if MAX2024 + // 3dsMax2024+ introduced new localized flag + if(materialNode.MaxMaterial.GetSubTexmapSlotName(i,false) == "normal") +#else + if(materialNode.MaxMaterial.GetSubTexmapSlotName(i) == "normal") +#endif + { babylonMaterial.normalTexture = ExportPBRTexture(materialNode, i, babylonScene); } +#if MAX2024 + // 3dsMax2024+ introduced new localized flag + else if (materialNode.MaxMaterial.GetSubTexmapSlotName(i,false) == "emission") +#else else if (materialNode.MaxMaterial.GetSubTexmapSlotName(i) == "emission") +#endif { babylonMaterial.emissiveTexture = ExportPBRTexture(materialNode, i, babylonScene); } @@ -1149,7 +1172,7 @@ public IIGameMaterial isMaterialSupported(IIGameMaterial materialNode) // Physical materials if (isPhysicalMaterial(materialNode) || isPbrMetalRoughMaterial(materialNode) || isPbrSpecGlossMaterial(materialNode) -#if MAX2023 +#if MAX2023 || MAX2024 || isGLTFMaterial(materialNode) #endif ) @@ -1242,7 +1265,7 @@ private IIGameMaterial GetBakedMaterialFromShellMaterial(IIGameMaterial material private void AddAiStandardSurfaceBabylonAttributes(string attributesContainer, BabylonPBRMetallicRoughnessMaterial babylonMaterial = null) => AddCustomAttributes(attributesContainer, MaterialScripts.AIBabylonCAtDef, "ARNOLD_MATERIAL_CAT_DEF"); private void AddCustomAttributes(string attributesContainer, string cmdCreateBabylonAttributes, string def) => -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand(MaterialScripts.AddCustomAttribute(cmdCreateBabylonAttributes, attributesContainer, def), ManagedServices.MaxscriptSDK.ScriptSource.NotSpecified); #else ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand(MaterialScripts.AddCustomAttribute(cmdCreateBabylonAttributes, attributesContainer, def)); diff --git a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs index 513cbcf7..410afcd1 100644 --- a/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs +++ b/3ds Max/Max2Babylon/Exporter/BabylonExporter.Mesh.cs @@ -96,7 +96,7 @@ private BabylonNode ExportMesh(IIGameScene scene, IIGameNode meshNode, BabylonSc RaiseMessage(meshNode.Name, 1); // Instances -#if MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 var tabs = Loader.Global.INodeTab.Create(); #else var tabs = Loader.Global.NodeTab.Create(); @@ -112,7 +112,7 @@ private BabylonNode ExportMesh(IIGameScene scene, IIGameNode meshNode, BabylonSc // Check if this mesh has already been exported for (int index = 0; index < tabs.Count; index++) { -#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 var tab = tabs[index]; #else var tab = tabs[new IntPtr(index)]; @@ -212,7 +212,7 @@ private BabylonNode ExportMasterMesh(IIGameScene scene, IIGameNode meshNode, Bab } // Misc. -#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 babylonMesh.isVisible = meshNode.MaxNode.Renderable; babylonMesh.receiveShadows = meshNode.MaxNode.RcvShadows; babylonMesh.applyFog = meshNode.MaxNode.ApplyAtmospherics; @@ -373,7 +373,7 @@ private BabylonNode ExportMasterMesh(IIGameScene scene, IIGameNode meshNode, Bab bool hasUV2 = false; for (int i = 0; i < mappingChannels.Count; ++i) { -#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 var channelNum = mappingChannels[i]; #else var channelNum = mappingChannels[new IntPtr(i)]; @@ -655,7 +655,7 @@ private IEnumerable ExtractMorphTargetPoints(BabylonAbstractMesh babylo // the needed function is not available on the .net SDK, then we have to use Max Script. // TODO : use direct instance instead of manipulate string var script = $"with printAllElements on (for k in 0 to (WM3_MC_NumMPts ${babylonAbstractMesh.name}.Morpher {morphIndex}) collect (WM3_MC_GetMorphPoint ${babylonAbstractMesh.name}.morpher {morphIndex} k)) as string"; -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 var str = ManagedServices.MaxscriptSDK.ExecuteStringMaxscriptQuery(script, ManagedServices.MaxscriptSDK.ScriptSource.NotSpecified); #else var str = ManagedServices.MaxscriptSDK.ExecuteStringMaxscriptQuery(script); @@ -949,7 +949,7 @@ private void ExtractGeometry(BabylonAbstractMesh babylonAbstractMesh, List GetNormalBump3DSMaxOperations(ITexmap texM for (int i = 0; i != n; i++) { var tmp = custAtt.GetCustAttrib(i); -#if MAX2022 || MAX2023 - if (tmp.ClassName(false) == MaterialCustomBabylonAttributeName) +#if MAX2022 || MAX2023 || MAX2024 + if(tmp.ClassName(false) == MaterialCustomBabylonAttributeName) #else if (tmp.ClassName == MaterialCustomBabylonAttributeName) #endif @@ -1119,8 +1119,8 @@ private ITexmap _exportFresnelParameters(ITexmap texMap, out BabylonFresnelParam fresnelParameters = null; // Fallout -#if MAX2022 || MAX2023 - if (texMap.ClassName(false) == "Falloff") // This is the only way I found to detect it. This is crappy but it works +#if MAX2022 || MAX2023 || MAX2024 + if(texMap.ClassName(false) == "Falloff") // This is the only way I found to detect it. This is crappy but it works #else if (texMap.ClassName == "Falloff") // This is the only way I found to detect it. This is crappy but it works #endif @@ -1430,8 +1430,8 @@ private IBitmapTex _getMultiplyTexmap(ITexmap texMap, out float[] multiplyColor) return null; } -#if MAX2022 || MAX2023 - if (texMap.ClassName(false) == "RGB Multiply") +#if MAX2022 || MAX2023 || MAX2024 + if(texMap.ClassName(false) == "RGB Multiply") #else if (texMap.ClassName == "RGB Multiply") #endif @@ -1528,7 +1528,11 @@ private ITexmap _getTexMap(IIGameMaterial materialNode, string name) { for (int i = 0; i < materialNode.MaxMaterial.NumSubTexmaps; i++) { - if (materialNode.MaxMaterial.GetSubTexmapSlotName(i) == name) +#if MAX2024 + if (materialNode.MaxMaterial.GetSubTexmapSlotName(i,false) == name) +#else + if (materialNode.MaxMaterial.GetSubTexmapSlotName(i) == name) +#endif { return _getTexMap(materialNode, i); } diff --git a/3ds Max/Max2Babylon/Exporter/BabylonExporter.WorldModifiers.cs b/3ds Max/Max2Babylon/Exporter/BabylonExporter.WorldModifiers.cs index ffc34855..660f2a7e 100644 --- a/3ds Max/Max2Babylon/Exporter/BabylonExporter.WorldModifiers.cs +++ b/3ds Max/Max2Babylon/Exporter/BabylonExporter.WorldModifiers.cs @@ -20,9 +20,15 @@ private void ExportWorldModifiers(IIGameNode meshNode, BabylonScene babylonScene foreach (var modifier in derivedObject.Modifiers) { // TODO - Find another way to detect if modifier is a HairAndFur - if (modifier.Name == "Hair and Fur" || // English - modifier.Name == "Haar und Fell" || // German - modifier.Name == "Chevelure et Pelage") // French + +#if MAX2024 + var modifierName = modifier.GetName(false); +#else + var modifierName = modifier.Name; +#endif + if (modifierName == "Hair and Fur" || // English + modifierName == "Haar und Fell" || // German + modifierName == "Chevelure et Pelage") // French { var babylonFurMaterial = ExportFurModifier(modifier, babylonMesh.name, babylonScene); babylonScene.MaterialsList.Add(babylonFurMaterial); @@ -30,7 +36,7 @@ private void ExportWorldModifiers(IIGameNode meshNode, BabylonScene babylonScene } else { - RaiseWarning("Modifier or Language '" + modifier.Name + "' is not supported", 2); + RaiseWarning("Modifier or Language '" + modifierName + "' is not supported", 2); } } } diff --git a/3ds Max/Max2Babylon/Exporter/BabylonExporter.cs b/3ds Max/Max2Babylon/Exporter/BabylonExporter.cs index 79067879..ddd03576 100644 --- a/3ds Max/Max2Babylon/Exporter/BabylonExporter.cs +++ b/3ds Max/Max2Babylon/Exporter/BabylonExporter.cs @@ -137,7 +137,7 @@ public void BakeAnimationsFrame(IINode node,BakeAnimationType bakeAnimationType) IINode hierachyRoot = (node != null) ? node : Loader.Core.RootNode; -#if MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 var tobake = Loader.Global.INodeTab.Create(); #else var tobake = Loader.Global.NodeTab.Create(); @@ -350,7 +350,9 @@ public void Export(MaxExportParameters exportParameters) babylonScene.producer = new BabylonProducer { name = "3dsmax", -#if MAX2023 +#if MAX2024 + version = "2024", +#elif MAX2023 version = "2023", #elif MAX2022 version = "2022", @@ -641,8 +643,8 @@ public void Export(MaxExportParameters exportParameters) for (var index = 0; index < Loader.Core.NumAtmospheric; index++) { var atmospheric = Loader.Core.GetAtmospheric(index); -#if MAX2022 || MAX2023 - if (atmospheric != null && atmospheric.Active(0) && atmospheric.ClassName(false) == "Fog") +#if MAX2022 || MAX2023 || MAX2024 + if(atmospheric != null && atmospheric.Active(0) && atmospheric.ClassName(false) == "Fog") #else if (atmospheric != null && atmospheric.Active(0) && atmospheric.ClassName == "Fog") #endif @@ -1099,10 +1101,10 @@ private static List TabToList(ITab tab) List list = new List(); for (int i = 0; i < tab.Count; i++) { -#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2017 || MAX2018 || MAX2019 || MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 var item = tab[i]; #else - var item = tab[new IntPtr(i)]; + var item = tab[new IntPtr(i)]; #endif list.Add(item); } diff --git a/3ds Max/Max2Babylon/GlobalUtility.cs b/3ds Max/Max2Babylon/GlobalUtility.cs index 7af4f13d..ca624224 100644 --- a/3ds Max/Max2Babylon/GlobalUtility.cs +++ b/3ds Max/Max2Babylon/GlobalUtility.cs @@ -181,7 +181,7 @@ public override uint Start idActionTable = (uint)actionManager.NumActionTables; string actionTableName = "Babylon Actions"; -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 actionTable = Loader.Global.ActionTable.Create(idActionTable, 0, actionTableName); #else actionTable = Loader.Global.ActionTable.Create(idActionTable, 0, ref actionTableName); @@ -356,7 +356,7 @@ private void InstallMenus() private void AddCallbacks() { foreach (var s in MaterialScripts.AddCallbacks()) -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand(s,ManagedServices.MaxscriptSDK.ScriptSource.NotSpecified); #else ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand(s); diff --git a/3ds Max/Max2Babylon/Tools/LayerUtilities.cs b/3ds Max/Max2Babylon/Tools/LayerUtilities.cs index 536ae726..4f5f0fa8 100644 --- a/3ds Max/Max2Babylon/Tools/LayerUtilities.cs +++ b/3ds Max/Max2Babylon/Tools/LayerUtilities.cs @@ -39,7 +39,7 @@ public static bool HaveNode(this List layers, IINode node) public static bool HasNode(this IILayer layer,IINode node,bool checkInChild = true) { -#if MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 ITab nodes = Loader.Global.INodeTab.Create(); #else ITab nodes = Loader.Global.INodeTabNS.Create(); @@ -106,7 +106,7 @@ public static IEnumerable LayerTree(this IILayer layer) public static IEnumerable LayerNodes(this IILayer layer) { IILayerProperties layerProp = Loader.IIFPLayerManager.GetLayer(layer.Name); -#if MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 ITab nodes = Loader.Global.INodeTab.Create(); #else ITab nodes = Loader.Global.INodeTabNS.Create(); diff --git a/3ds Max/Max2Babylon/Tools/ScriptsUtilities.cs b/3ds Max/Max2Babylon/Tools/ScriptsUtilities.cs index 75c3b216..adbab5f3 100644 --- a/3ds Max/Max2Babylon/Tools/ScriptsUtilities.cs +++ b/3ds Max/Max2Babylon/Tools/ScriptsUtilities.cs @@ -25,7 +25,7 @@ public static void ExecuteMaxScriptCommand(string maxScriptCmd) { if (!string.IsNullOrEmpty(maxScriptCmd)) { -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand(maxScriptCmd, ManagedServices.MaxscriptSDK.ScriptSource.NotSpecified); #else ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand(maxScriptCmd); diff --git a/3ds Max/Max2Babylon/Tools/Tools.cs b/3ds Max/Max2Babylon/Tools/Tools.cs index 2ad36e1c..d3be74e9 100644 --- a/3ds Max/Max2Babylon/Tools/Tools.cs +++ b/3ds Max/Max2Babylon/Tools/Tools.cs @@ -190,7 +190,7 @@ public struct VersionNumber public static VersionNumber GetMaxVersion() { // https://getcoreinterface.typepad.com/blog/2017/02/querying-the-3ds-max-version.html -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 var versionString = ManagedServices.MaxscriptSDK.ExecuteStringMaxscriptQuery("getFileVersion \"$max/3dsmax.exe\"", ManagedServices.MaxscriptSDK.ScriptSource.NotSpecified); #else var versionString = ManagedServices.MaxscriptSDK.ExecuteStringMaxscriptQuery("getFileVersion \"$max/3dsmax.exe\""); @@ -317,7 +317,7 @@ public static float GetScaleFactorToMeters() //public abstract void GetSystemUnitInfo(IntPtr type, IntPtr scale); //public abstract double GetSystemUnitScale(int type); -#if MAX2022 || MAX2023 +#if MAX2022 || MAX2023 || MAX2024 GlobalInterface.Instance.GetSystemUnitInfo(pType, pScale); } float masterScale = (float)Loader.Global.GetSystemUnitScale(unitType); @@ -408,10 +408,18 @@ public static VNormal[] ComputeNormals(IMesh mesh, bool optimize) for (var index = 0; index < mesh.NumFaces; index++) { +#if MAX2024 + var face = mesh.GetFace(index); + Vector3 v0 = mesh.GetVert((int)face.V[0]).ToVector3(); + Vector3 v1 = mesh.GetVert((int)face.V[1]).ToVector3(); + Vector3 v2 = mesh.GetVert((int)face.V[2]).ToVector3(); + +#else var face = mesh.Faces[index]; Vector3 v0 = mesh.Verts[(int)face.V[0]].ToVector3(); Vector3 v1 = mesh.Verts[(int)face.V[1]].ToVector3(); Vector3 v2 = mesh.Verts[(int)face.V[2]].ToVector3(); +# endif fnorms[index] = Vector3.Cross((v1 - v0), (v2 - v1)); @@ -854,7 +862,7 @@ public static IINode FlattenHierarchy(this IINode node) IPolyObject polyObject = result.GetPolyObjectFromNode(); IEPoly nodeEPoly = (IEPoly)polyObject.GetInterface(Loader.EditablePoly); -#if MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 IINodeTab toflatten = Loader.Global.INodeTab.Create(); IINodeTab resultTarget = Loader.Global.INodeTab.Create(); #else @@ -926,7 +934,7 @@ public static void UnloadAllContainers() public static bool IsNodeSelected(this IINode node) { -#if MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 IINodeTab selection = Loader.Global.INodeTab.Create(); #else IINodeTab selection = Loader.Global.INodeTabNS.Create(); @@ -976,7 +984,7 @@ public static IIContainerObject GetContainer(this IList handles) public static List GetContainerInSelection() { -#if MAX2020 || MAX2021 || MAX2022 || MAX2023 +#if MAX2020 || MAX2021 || MAX2022 || MAX2023 || MAX2024 IINodeTab selection = Loader.Global.INodeTab.Create(); #else IINodeTab selection = Loader.Global.INodeTabNS.Create();