Skip to content

Commit

Permalink
Merge pull request Hubs-Foundation#269 from BlenderDiplom/OpenImageFix
Browse files Browse the repository at this point in the history
Fix Open Image Relative Path failing - New Try
  • Loading branch information
keianhzo authored Mar 18, 2024
2 parents 32b6c62 + 3568f5e commit 85e0d0b
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions addons/io_hubs_addon/components/operators.py
Original file line number Diff line number Diff line change
Expand Up @@ -509,7 +509,7 @@ def invoke(self, context, event):


def split_and_prefix_report_messages(report_string):
return [f"{i+1:02d} {message}" for i, message in enumerate(report_string.split("\n\n"))]
return [f"{i + 1:02d} {message}" for i, message in enumerate(report_string.split("\n\n"))]


class CopyHubsComponent(Operator):
Expand Down Expand Up @@ -606,11 +606,12 @@ class OpenImage(Operator):
bl_label = "Open Image"
bl_options = {'REGISTER', 'UNDO'}

directory: StringProperty()
filepath: StringProperty(subtype="FILE_PATH")
files: CollectionProperty(type=PropertyGroup)
filter_folder: BoolProperty(default=True, options={"HIDDEN"})
filter_image: BoolProperty(default=True, options={"HIDDEN"})
target_property: StringProperty()
target_property: StringProperty(options={"HIDDEN"})

relative_path: BoolProperty(
name="Relative Path", description="Select the file relative to the blend file", default=True)
Expand All @@ -635,37 +636,35 @@ def poll(cls, context):

return True

def draw(self, context):
layout = self.layout
layout.prop(self, "relative_path")

def execute(self, context):
dirname = os.path.dirname(self.filepath)

if not self.files[0].name:
self.report({'INFO'}, "Open image cancelled. No image selected.")
self.report({'INFO'}, "Open image cancelled. No image selected.")
return {'CANCELLED'}

old_img = getattr(self.target, self.target_property)

# Load/Reload the first image and assign it to the target property, then load the rest of the images if they're not already loaded. This mimics Blender's default open files behavior.
primary_filepath = os.path.join(dirname, self.files[0].name)
primary_filepath = os.path.join(self.directory, self.files[0].name) # self.files is sorted alphabetically by Blender, self.files[0] is the 1. of the selection in alphabetical order
primary_img = bpy.data.images.load(
filepath=primary_filepath, check_existing=True)
primary_img.reload()
setattr(self.target, self.target_property, primary_img)

for f in self.files[1:]:
bpy.data.images.load(filepath=os.path.join(
dirname, f.name), check_existing=True)
self.directory, f.name), check_existing=True)

update_image_editors(old_img, primary_img)
redraw_component_ui(context)
return {'FINISHED'}

def invoke(self, context, event):
self.filepath = ""
self.target = context.target

last_image = getattr(self.target, self.target_property)
if type(last_image) is bpy.types.Image: # if the component has been assigned before, get its filepath
self.filepath = last_image.filepath # start the file browser at the location of the previous file

context.window_manager.fileselect_add(self)
return {'RUNNING_MODAL'}

Expand Down

0 comments on commit 85e0d0b

Please sign in to comment.