Skip to content

Commit

Permalink
Merge pull request #94 from mika-f/feature/support-image-formats
Browse files Browse the repository at this point in the history
  • Loading branch information
mika-f committed Mar 8, 2024
2 parents caf45fb + fc377e6 commit d3ce826
Show file tree
Hide file tree
Showing 20 changed files with 394 additions and 59 deletions.
3 changes: 2 additions & 1 deletion src/addon/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@
import bpy # nopep8


classes: list[type] = [operator.DropEventListener, preferences.DragAndDropPreferences]
classes: list[type] = [preferences.DragAndDropPreferences]

classes.extend(operator.get_operators())
classes.extend(formats.CLASSES)


Expand Down
2 changes: 2 additions & 0 deletions src/addon/formats/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from . import glb
from . import obj
from . import obj_legacy
from . import png
from . import ply
from . import stl
from . import stl_legacy
Expand All @@ -33,6 +34,7 @@
CLASSES.extend(fbx.OPERATORS)
CLASSES.extend(glb.OPERATORS)
CLASSES.extend(obj.OPERATORS)
CLASSES.extend(png.OPERATORS)
CLASSES.extend(ply.OPERATORS)
CLASSES.extend(stl.OPERATORS)
CLASSES.extend(svg.OPERATORS)
Expand Down
3 changes: 2 additions & 1 deletion src/addon/formats/abc.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@ def execute(self, context: Context) -> Set[str] | Set[int]:
class VIEW3D_MT_Space_Import_ABC(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import ABC File"

def format(self):
@staticmethod
def format():
return "abc"


Expand Down
3 changes: 2 additions & 1 deletion src/addon/formats/bvh.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,8 @@ def execute(self, context: Context) -> Set[str] | Set[int]:
class VIEW3D_MT_Space_Import_BVH(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Biovision Hierarchy File"

def format(self):
@staticmethod
def format():
return "bvh"


Expand Down
3 changes: 2 additions & 1 deletion src/addon/formats/dae.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ def execute(self, context: Context) -> Set[str] | Set[int]:
class VIEW3D_MT_Space_Import_DAE(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Collada File"

def format(self):
@staticmethod
def format():
return "dae"


Expand Down
3 changes: 2 additions & 1 deletion src/addon/formats/fbx.py
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,8 @@ def execute(self, context: Context):
class VIEW3D_MT_Space_Import_FBX(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import FBX File"

def format(self):
@staticmethod
def format():
return "fbx"


Expand Down
6 changes: 4 additions & 2 deletions src/addon/formats/glb.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,16 @@ def execute(self, context: Context):
class VIEW3D_MT_Space_Import_GLB(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import glTF File"

def format(self):
@staticmethod
def format():
return "glb"


class VIEW3D_MT_Space_Import_GLTF(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import glTF File"

def format(self):
@staticmethod
def format():
return "glb"


Expand Down
3 changes: 2 additions & 1 deletion src/addon/formats/obj.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,8 @@ def execute(self, context: Context):
class VIEW3D_MT_Space_Import_OBJ(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Wavefront OBJ File"

def format(self):
@staticmethod
def format():
return "obj"


Expand Down
3 changes: 2 additions & 1 deletion src/addon/formats/obj_legacy.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,8 @@ def execute(self, context: Context):
class VIEW3D_MT_Space_Import_OBJLegacy(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Wavefront OBJ File"

def format(self):
@staticmethod
def format():
return "obj"


Expand Down
3 changes: 2 additions & 1 deletion src/addon/formats/ply.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ def execute(self, context: Context) -> Set[str] | Set[int]:
class VIEW3D_MT_Space_Import_PLY(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Polygon File Format File"

def format(self):
@staticmethod
def format():
return "ply"


Expand Down
278 changes: 278 additions & 0 deletions src/addon/formats/png.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,278 @@
# ------------------------------------------------------------------------------------------
# Copyright (c) Natsuneko. All rights reserved.
# Licensed under the MIT License. See LICENSE in the project root for license information.
# ------------------------------------------------------------------------------------------

# pyright: reportGeneralTypeIssues=false
# pyright: reportUnknownArgumentType=false
# pyright: reportUnknownMemberType=false


import bpy.ops

from typing import cast
from bpy.types import Context

from .super import (
ImportWithDefaultsBase,
VIEW3D_MT_Space_Import_BASE,
)


class ImportImageWithDefaults(ImportWithDefaultsBase):
bl_idname = "object.import_image_with_defaults"
bl_label = "Import PNG File"

def execute(self, context: Context):

bpy.ops.object.empty_add(
type="IMAGE",
align="VIEW",
location=context.scene.cursor.location,
scale=(5, 5, 5),
)

empty = bpy.context.active_object

bpy.ops.image.open(filepath=self.filepath())
img = self.find_opened_image(self.filepath())

if img is not None:
empty.data = img

return {"FINISHED"}

def find_opened_image(self, path: str) -> bpy.types.Image | None:
for (
item
) in bpy.data.images.items(): # pyright: ignore[reportUnknownVariableType]
i = cast(bpy.types.Image, item[1]) # pyright: ignore[reportInvalidTypeForm]

if i.filepath == path:
return i


class VIEW3D_MT_Space_Import_BMP(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import BMP File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_BW(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Iris File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_CIN(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Cineon & DPX File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_DPX(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Cineon & DPX File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_EXR(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import OpenEXR File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_HDR(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import HDR File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_J2C(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import JPEG 2000 File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_JP2(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import JPEG 2000 File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_JPG(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import JPEG File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_JPEG(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import JPEG File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_PNG(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import PNG File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_RGB(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Iris File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_SGI(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Iris File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_TIF(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import TIFF File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_TIFF(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import TIFF File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_TGA(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import Targa File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


class VIEW3D_MT_Space_Import_WEBP(VIEW3D_MT_Space_Import_BASE):
bl_label = "Import WebP File"

@staticmethod
def format():
return "image"

@staticmethod
def has_custom_importer() -> bool:
return False


OPERATORS = [
ImportImageWithDefaults,
VIEW3D_MT_Space_Import_BMP,
VIEW3D_MT_Space_Import_BW,
VIEW3D_MT_Space_Import_CIN,
VIEW3D_MT_Space_Import_DPX,
VIEW3D_MT_Space_Import_EXR,
VIEW3D_MT_Space_Import_HDR,
VIEW3D_MT_Space_Import_J2C,
VIEW3D_MT_Space_Import_JP2,
VIEW3D_MT_Space_Import_JPG,
VIEW3D_MT_Space_Import_JPEG,
VIEW3D_MT_Space_Import_PNG,
VIEW3D_MT_Space_Import_RGB,
VIEW3D_MT_Space_Import_SGI,
VIEW3D_MT_Space_Import_TIF,
VIEW3D_MT_Space_Import_TIFF,
VIEW3D_MT_Space_Import_TGA,
VIEW3D_MT_Space_Import_WEBP,
]
Loading

0 comments on commit d3ce826

Please sign in to comment.