Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support images #94

Merged
merged 1 commit into from
Mar 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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