1.0.0
This commit is contained in:
BIN
dist/text_texture_generator_v1.0.0.zip
vendored
BIN
dist/text_texture_generator_v1.0.0.zip
vendored
Binary file not shown.
BIN
dist/text_texture_generator_v1.0.0_free.zip
vendored
BIN
dist/text_texture_generator_v1.0.0_free.zip
vendored
Binary file not shown.
Binary file not shown.
@@ -688,21 +688,26 @@ def generate_texture_image(props, width, height):
|
||||
traceback.print_exc()
|
||||
return None, None
|
||||
|
||||
def generate_preview(props, preview_width=512, preview_height=512):
|
||||
def generate_preview(props, preview_width=None, preview_height=None):
|
||||
pass
|
||||
"""
|
||||
Generate a preview version of the texture at lower resolution.
|
||||
|
||||
Args:
|
||||
props: Text texture properties object
|
||||
preview_width: Preview image width (default: 512)
|
||||
preview_height: Preview image height (default: 512)
|
||||
preview_width: Preview image width. Defaults to the texture width if available.
|
||||
preview_height: Preview image height. Defaults to the texture height if available.
|
||||
|
||||
Returns:
|
||||
Blender image object or None on error
|
||||
"""
|
||||
try:
|
||||
pass
|
||||
# Use full texture resolution when not explicitly provided
|
||||
if not preview_width or preview_width <= 0:
|
||||
preview_width = getattr(props, 'texture_width', 512) or 512
|
||||
if not preview_height or preview_height <= 0:
|
||||
preview_height = getattr(props, 'texture_height', 512) or 512
|
||||
|
||||
# Generate at preview resolution
|
||||
result = generate_texture_image(props, preview_width, preview_height)
|
||||
|
||||
Binary file not shown.
@@ -162,37 +162,65 @@ class TEXT_TEXTURE_OT_preview(Operator):
|
||||
# Get properties and generate preview with correct parameters
|
||||
props = context.scene.text_texture_props
|
||||
preview_size = props.preview_size if hasattr(props, 'preview_size') else 512
|
||||
result = generate_preview(props, preview_size, preview_size)
|
||||
preview_width = getattr(props, 'texture_width', preview_size) or preview_size
|
||||
preview_height = getattr(props, 'texture_height', preview_size) or preview_size
|
||||
result = generate_preview(props, preview_width, preview_height)
|
||||
|
||||
if result:
|
||||
pass
|
||||
self.report({'INFO'}, f"Preview generated at {preview_size}px")
|
||||
self.report({'INFO'}, f"Preview generated at {preview_width}x{preview_height}px")
|
||||
|
||||
# Open the preview image in the image editor
|
||||
# Find or create an image editor area
|
||||
for area in context.screen.areas:
|
||||
# Always open a dedicated window to show the preview image
|
||||
try:
|
||||
pass
|
||||
if area.type == 'IMAGE_EDITOR':
|
||||
bpy.ops.wm.window_new()
|
||||
new_window = context.window_manager.windows[-1]
|
||||
new_screen = new_window.screen
|
||||
|
||||
# Try to reuse an existing image editor in the new window
|
||||
image_area = None
|
||||
for area in new_screen.areas:
|
||||
pass
|
||||
for space in area.spaces:
|
||||
if area.type == 'IMAGE_EDITOR':
|
||||
pass
|
||||
image_area = area
|
||||
break
|
||||
|
||||
# Otherwise convert the largest area to an image editor
|
||||
if not image_area and new_screen.areas:
|
||||
pass
|
||||
image_area = max(new_screen.areas, key=lambda a: a.width * a.height)
|
||||
image_area.type = 'IMAGE_EDITOR'
|
||||
|
||||
if image_area:
|
||||
pass
|
||||
for space in image_area.spaces:
|
||||
pass
|
||||
if space.type == 'IMAGE_EDITOR':
|
||||
pass
|
||||
space.image = result
|
||||
area.tag_redraw()
|
||||
image_area.tag_redraw()
|
||||
break
|
||||
break
|
||||
else:
|
||||
else:
|
||||
pass
|
||||
self.report({'WARNING'}, "Could not find area to display preview in new window")
|
||||
except Exception as window_err:
|
||||
pass
|
||||
# If no image editor found, try to open in UV editor or create viewer
|
||||
try:
|
||||
self.report({'WARNING'}, f"Preview window open failed: {window_err}. Showing in current window.")
|
||||
|
||||
# Fallback to setting image in any existing image editor
|
||||
for area in context.screen.areas:
|
||||
pass
|
||||
# Try to show in any available viewer
|
||||
bpy.ops.image.view_all('INVOKE_DEFAULT')
|
||||
except:
|
||||
pass
|
||||
# Fallback message
|
||||
self.report({'INFO'}, f"Preview '{result.name}' created - open Image Editor to view")
|
||||
if area.type == 'IMAGE_EDITOR':
|
||||
pass
|
||||
for space in area.spaces:
|
||||
pass
|
||||
if space.type == 'IMAGE_EDITOR':
|
||||
pass
|
||||
space.image = result
|
||||
area.tag_redraw()
|
||||
break
|
||||
break
|
||||
|
||||
return {'FINISHED'}
|
||||
else:
|
||||
|
||||
@@ -1028,6 +1028,42 @@ class TestGeneratePreview:
|
||||
call_args = mock_bpy.data.images.new.call_args[0]
|
||||
assert "128x128" in call_args[0]
|
||||
|
||||
def test_preview_defaults_to_texture_resolution(self):
|
||||
"""Preview falls back to full texture dimensions when none provided."""
|
||||
with patch('PIL.Image') as mock_pil_image_module, \
|
||||
patch('PIL.ImageDraw') as mock_pil_imagedraw_module, \
|
||||
patch('PIL.ImageFont') as mock_pil_imagefont_module, \
|
||||
patch('src.core.generation_engine.bpy') as mock_bpy:
|
||||
|
||||
mock_pil_image = MagicMock()
|
||||
mock_pil_image.size = (256, 128)
|
||||
mock_pil_image.getdata.return_value = [(255, 255, 255, 255)] * (256 * 128)
|
||||
mock_pil_image.transpose.return_value = mock_pil_image
|
||||
mock_pil_image_module.new.return_value = mock_pil_image
|
||||
mock_pil_image_module.FLIP_TOP_BOTTOM = 1
|
||||
|
||||
mock_draw = MagicMock()
|
||||
mock_draw.textbbox.return_value = (0, 0, 50, 25)
|
||||
mock_pil_imagedraw_module.Draw.return_value = mock_draw
|
||||
|
||||
mock_font = MagicMock()
|
||||
mock_pil_imagefont_module.load_default.return_value = mock_font
|
||||
|
||||
mock_blender_image = MagicMock()
|
||||
mock_blender_image.pixels = [0.0] * (256 * 128 * 4)
|
||||
mock_bpy.data.images.new.return_value = mock_blender_image
|
||||
mock_bpy.data.images.__contains__.return_value = False
|
||||
|
||||
props = create_mock_props(text="AutoSize")
|
||||
props.texture_width = 256
|
||||
props.texture_height = 128
|
||||
|
||||
result = generate_preview(props)
|
||||
|
||||
assert result is not None
|
||||
call_args = mock_bpy.data.images.new.call_args[0]
|
||||
assert "256x128" in call_args[0]
|
||||
|
||||
def test_preview_uses_same_props(self):
|
||||
"""Test that preview uses same properties as main generation."""
|
||||
with patch('PIL.Image') as mock_pil_image_module, \
|
||||
|
||||
Reference in New Issue
Block a user