diff options
author | Aki <please@ignore.pl> | 2024-04-06 02:34:19 +0200 |
---|---|---|
committer | Aki <please@ignore.pl> | 2024-04-06 02:34:19 +0200 |
commit | fbe5f352ff0f238266bc690a0b750674f80b1f02 (patch) | |
tree | 4ec2758cc6513014b6e3ef80b2d6c01da7337c7b /MagicEx | |
parent | effc8802a77375437b676ac4534789e819731671 (diff) | |
download | starshatter-fbe5f352ff0f238266bc690a0b750674f80b1f02.zip starshatter-fbe5f352ff0f238266bc690a0b750674f80b1f02.tar.gz starshatter-fbe5f352ff0f238266bc690a0b750674f80b1f02.tar.bz2 |
Added obj2mag and mag2obj utilities
Diffstat (limited to 'MagicEx')
-rw-r--r-- | MagicEx/CMakeLists.txt | 25 | ||||
-rw-r--r-- | MagicEx/include/MagicLoad.h (renamed from MagicEx/MagicLoad.h) | 11 | ||||
-rw-r--r-- | MagicEx/include/MagicLoad.inl.h | 32 | ||||
-rw-r--r-- | MagicEx/include/ModelFile3DS.h (renamed from MagicEx/ModelFile3DS.h) | 2 | ||||
-rw-r--r-- | MagicEx/include/ModelFileMAG.h (renamed from MagicEx/ModelFileMAG.h) | 2 | ||||
-rw-r--r-- | MagicEx/include/ModelFileOBJ.h (renamed from MagicEx/ModelFileOBJ.h) | 2 | ||||
-rw-r--r-- | MagicEx/src/MagicLoad.cpp (renamed from MagicEx/MagicLoad.cpp) | 14 | ||||
-rw-r--r-- | MagicEx/src/ModelFile3DS.cpp (renamed from MagicEx/ModelFile3DS.cpp) | 8 | ||||
-rw-r--r-- | MagicEx/src/ModelFileMAG.cpp (renamed from MagicEx/ModelFileMAG.cpp) | 6 | ||||
-rw-r--r-- | MagicEx/src/ModelFileOBJ.cpp (renamed from MagicEx/ModelFileOBJ.cpp) | 6 | ||||
-rw-r--r-- | MagicEx/src/mag2obj.cpp | 27 | ||||
-rw-r--r-- | MagicEx/src/obj2mag.cpp | 27 |
12 files changed, 134 insertions, 28 deletions
diff --git a/MagicEx/CMakeLists.txt b/MagicEx/CMakeLists.txt index 9c8038a..5c552fc 100644 --- a/MagicEx/CMakeLists.txt +++ b/MagicEx/CMakeLists.txt @@ -1,9 +1,24 @@ project(MagicEx) add_library( ${PROJECT_NAME} STATIC - MagicLoad.cpp - ModelFile3DS.cpp - ModelFileMAG.cpp - ModelFileOBJ.cpp) -target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + src/MagicLoad.cpp + src/ModelFile3DS.cpp + src/ModelFileMAG.cpp + src/ModelFileOBJ.cpp) +target_include_directories(${PROJECT_NAME} PUBLIC include/) target_link_libraries(${PROJECT_NAME} PUBLIC StarsEx PRIVATE l3ds) + + +add_executable(${PROJECT_NAME}_obj2mag src/obj2mag.cpp) +target_link_libraries(${PROJECT_NAME}_obj2mag PRIVATE ${PROJECT_NAME}) +set_target_properties(${PROJECT_NAME}_obj2mag PROPERTIES OUTPUT_NAME obj2mag) + + +add_executable(${PROJECT_NAME}_mag2obj src/mag2obj.cpp) +target_link_libraries(${PROJECT_NAME}_mag2obj PRIVATE ${PROJECT_NAME}) +set_target_properties(${PROJECT_NAME}_mag2obj PROPERTIES OUTPUT_NAME mag2obj) + + +install( + TARGETS ${PROJECT_NAME}_obj2mag ${PROJECT_NAME}_mag2obj RUNTIME + COMPONENT Tools DESTINATION ${CMAKE_INSTALL_PREFIX}) diff --git a/MagicEx/MagicLoad.h b/MagicEx/include/MagicLoad.h index 27b6380..f447945 100644 --- a/MagicEx/MagicLoad.h +++ b/MagicEx/include/MagicLoad.h @@ -1,18 +1,23 @@ /* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. - - AUTHOR: John DiCamillo */ #pragma once #include <windows.h> +#include <filesystem> + #include <Bitmap.h> +#include <Solid.h> int LoadBuffer(const char* filename, BYTE*& buf, bool null_terminate=false); int LoadTexture(const char* name, Bitmap*& bmp, int type=0); int LoadAlpha(const char* name, Bitmap& bitmap, int type=0); +template <typename ModelLoader> bool ImportInto(const std::filesystem::path& pathname, Solid* target); + + +#include "MagicLoad.inl.h" diff --git a/MagicEx/include/MagicLoad.inl.h b/MagicEx/include/MagicLoad.inl.h new file mode 100644 index 0000000..e32ba60 --- /dev/null +++ b/MagicEx/include/MagicLoad.inl.h @@ -0,0 +1,32 @@ +/* Starshatter: The Open Source Project + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors + Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors + Copyright (c) 1997-2006, Destroyer Studios LLC. +*/ + +#include <memory> + +#include <Solid.h> + + +template <typename ModelLoader> +bool +ImportInto(const char* pathname, Solid* target) +{ + ModelLoader loader {pathname}; + if (auto* original = target->GetModel()) { + auto solid = std::make_unique<Solid>(); + if (!solid->Load(&loader)) + return false; + auto* imported = solid->GetModel(); + original->GetMaterials().append(imported->GetMaterials()); + original->GetSurfaces().append(imported->GetSurfaces()); + original->OptimizeMaterials(); + imported->GetMaterials().clear(); + imported->GetSurfaces().clear(); + return true; + } + return target->Load(&loader); +} + + diff --git a/MagicEx/ModelFile3DS.h b/MagicEx/include/ModelFile3DS.h index 3cac828..e539d17 100644 --- a/MagicEx/ModelFile3DS.h +++ b/MagicEx/include/ModelFile3DS.h @@ -1,5 +1,5 @@ /* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. diff --git a/MagicEx/ModelFileMAG.h b/MagicEx/include/ModelFileMAG.h index 27466ae..e11d81c 100644 --- a/MagicEx/ModelFileMAG.h +++ b/MagicEx/include/ModelFileMAG.h @@ -1,5 +1,5 @@ /* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. diff --git a/MagicEx/ModelFileOBJ.h b/MagicEx/include/ModelFileOBJ.h index dcffc7d..3d9089c 100644 --- a/MagicEx/ModelFileOBJ.h +++ b/MagicEx/include/ModelFileOBJ.h @@ -1,5 +1,5 @@ /* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. diff --git a/MagicEx/MagicLoad.cpp b/MagicEx/src/MagicLoad.cpp index 2b13a93..6687f8b 100644 --- a/MagicEx/MagicLoad.cpp +++ b/MagicEx/src/MagicLoad.cpp @@ -1,18 +1,18 @@ /* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. AUTHOR: John DiCamillo */ -#include "MagicLoad.h" +#include <MagicLoad.h> -#include "Bitmap.h" -#include "Color.h" -#include "D3DXImage.h" -#include "Geometry.h" -#include "Pcx.h" +#include <Bitmap.h> +#include <Color.h> +#include <D3DXImage.h> +#include <Geometry.h> +#include <Pcx.h> int LoadBuffer(const char* filename, BYTE*& buf, bool null_terminate) diff --git a/MagicEx/ModelFile3DS.cpp b/MagicEx/src/ModelFile3DS.cpp index 4c4a157..aca54de 100644 --- a/MagicEx/ModelFile3DS.cpp +++ b/MagicEx/src/ModelFile3DS.cpp @@ -1,5 +1,5 @@ /* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. @@ -11,15 +11,15 @@ File loader for 3DStudio MAX 3DS format models */ -#include "ModelFile3DS.h" +#include <ModelFile3DS.h> #include <Bitmap.h> +#include <l3ds.h> #include <List.h> #include <Polygon.h> #include <Text.h> -#include "MagicLoad.h" -#include "l3ds.h" +#include <MagicLoad.h> // +--------------------------------------------------------------------+ diff --git a/MagicEx/ModelFileMAG.cpp b/MagicEx/src/ModelFileMAG.cpp index fe076ed..72e6b5b 100644 --- a/MagicEx/ModelFileMAG.cpp +++ b/MagicEx/src/ModelFileMAG.cpp @@ -1,5 +1,5 @@ /* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. @@ -11,13 +11,13 @@ File loader for MAG format models */ -#include "ModelFileMAG.h" +#include <ModelFileMAG.h> #include <Bitmap.h> #include <List.h> #include <Polygon.h> -#include "MagicLoad.h" +#include <MagicLoad.h> // +--------------------------------------------------------------------+ diff --git a/MagicEx/ModelFileOBJ.cpp b/MagicEx/src/ModelFileOBJ.cpp index c682bff..9ab7e69 100644 --- a/MagicEx/ModelFileOBJ.cpp +++ b/MagicEx/src/ModelFileOBJ.cpp @@ -1,5 +1,5 @@ /* Starshatter: The Open Source Project - Copyright (c) 2021-2022, Starshatter: The Open Source Project Contributors + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors Copyright (c) 1997-2006, Destroyer Studios LLC. @@ -11,14 +11,14 @@ File loader for Wavefront/OBJ format models */ -#include "ModelFileOBJ.h" +#include <ModelFileOBJ.h> #include <Bitmap.h> #include <Polygon.h> #include <List.h> #include <Text.h> -#include "MagicLoad.h" +#include <MagicLoad.h> // +--------------------------------------------------------------------+ diff --git a/MagicEx/src/mag2obj.cpp b/MagicEx/src/mag2obj.cpp new file mode 100644 index 0000000..a8ba386 --- /dev/null +++ b/MagicEx/src/mag2obj.cpp @@ -0,0 +1,27 @@ +/* Starshatter: The Open Source Project + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors + Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors + Copyright (c) 1997-2006, Destroyer Studios LLC. +*/ + +#include <memory> + +#include <Solid.h> + +#include <MagicLoad.h> +#include <ModelFileMAG.h> +#include <ModelFileOBJ.h> + + +int +main(int argc, char* argv[]) +{ + if (argc < 2) + return 1; + std::string pathname {argv[1]}; + auto solid = std::make_unique<Solid>(); + if (!ImportInto<ModelFileMAG>(pathname.c_str(), solid.get())) + return 1; + ModelFileOBJ exporter {(pathname + ".obj").c_str()}; + exporter.Save(solid->GetModel()); +} diff --git a/MagicEx/src/obj2mag.cpp b/MagicEx/src/obj2mag.cpp new file mode 100644 index 0000000..c9d22e0 --- /dev/null +++ b/MagicEx/src/obj2mag.cpp @@ -0,0 +1,27 @@ +/* Starshatter: The Open Source Project + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors + Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors + Copyright (c) 1997-2006, Destroyer Studios LLC. +*/ + +#include <memory> + +#include <Solid.h> + +#include <MagicLoad.h> +#include <ModelFileMAG.h> +#include <ModelFileOBJ.h> + + +int +main(int argc, char* argv[]) +{ + if (argc < 2) + return 1; + std::string pathname {argv[1]}; + auto solid = std::make_unique<Solid>(); + if (!ImportInto<ModelFileOBJ>(pathname.c_str(), solid.get())) + return 1; + ModelFileMAG exporter {(pathname + ".mag").c_str()}; + exporter.Save(solid->GetModel()); +} |