summaryrefslogtreecommitdiffhomepage
path: root/MagicEx
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2024-04-06 02:34:19 +0200
committerAki <please@ignore.pl>2024-04-06 02:34:19 +0200
commitfbe5f352ff0f238266bc690a0b750674f80b1f02 (patch)
tree4ec2758cc6513014b6e3ef80b2d6c01da7337c7b /MagicEx
parenteffc8802a77375437b676ac4534789e819731671 (diff)
downloadstarshatter-fbe5f352ff0f238266bc690a0b750674f80b1f02.zip
starshatter-fbe5f352ff0f238266bc690a0b750674f80b1f02.tar.gz
starshatter-fbe5f352ff0f238266bc690a0b750674f80b1f02.tar.bz2
Added obj2mag and mag2obj utilities
Diffstat (limited to 'MagicEx')
-rw-r--r--MagicEx/CMakeLists.txt25
-rw-r--r--MagicEx/include/MagicLoad.h (renamed from MagicEx/MagicLoad.h)11
-rw-r--r--MagicEx/include/MagicLoad.inl.h32
-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.cpp27
-rw-r--r--MagicEx/src/obj2mag.cpp27
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());
+}