feat: Implement cutout tool and depth generation features
- Added a new cutout tool for selecting regions in images, allowing users to choose mesh shapes based on selected areas. - Introduced depth generation capabilities for rasterized images, including normal data extraction. - Created jobs for generating depth planes and region data, enhancing the AI data generation workflow. - Developed a selection refinement process for cutout regions, improving accuracy in generated outputs. - Established a new region module for handling rasterized image regions and their associated AI generation tasks. - Enhanced node graph builders for asset generation, facilitating smoother integration of new features.
This commit is contained in:
@@ -27,21 +27,31 @@ def load_image_modules():
|
||||
|
||||
module_paths = (
|
||||
(
|
||||
"anyimage.operators.common.image",
|
||||
PROJECT_ROOT / "src" / "anyimage" / "operators" / "common" / "image.py",
|
||||
),
|
||||
(
|
||||
"anyimage.operators.common.node_asset",
|
||||
"anyimage.operators.common.image_data",
|
||||
PROJECT_ROOT
|
||||
/ "src"
|
||||
/ "anyimage"
|
||||
/ "operators"
|
||||
/ "common"
|
||||
/ "node_asset.py",
|
||||
/ "image_data.py",
|
||||
),
|
||||
(
|
||||
"anyimage.operators.common.material",
|
||||
PROJECT_ROOT / "src" / "anyimage" / "operators" / "common" / "material.py",
|
||||
"anyimage.operators.common.mesh_result",
|
||||
PROJECT_ROOT
|
||||
/ "src"
|
||||
/ "anyimage"
|
||||
/ "operators"
|
||||
/ "common"
|
||||
/ "mesh_result.py",
|
||||
),
|
||||
(
|
||||
"anyimage.operators.convert_to_plane.resolution",
|
||||
PROJECT_ROOT
|
||||
/ "src"
|
||||
/ "anyimage"
|
||||
/ "operators"
|
||||
/ "convert_to_plane"
|
||||
/ "resolution.py",
|
||||
),
|
||||
)
|
||||
packages = {
|
||||
@@ -50,6 +60,7 @@ def load_image_modules():
|
||||
"anyimage",
|
||||
"anyimage.operators",
|
||||
"anyimage.operators.common",
|
||||
"anyimage.operators.convert_to_plane",
|
||||
)
|
||||
}
|
||||
for package in packages.values():
|
||||
@@ -452,21 +463,7 @@ class ImageTest(unittest.TestCase):
|
||||
"img_normal.png",
|
||||
)
|
||||
|
||||
def test_copy_depth_image_renames_still_source(self):
|
||||
class FakeImage:
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
|
||||
def copy(self):
|
||||
return FakeImage("img.png.001")
|
||||
|
||||
source_object = SimpleNamespace(data=FakeImage("img.png"))
|
||||
|
||||
depth_image = self.image_depth.copy_depth_image(source_object)
|
||||
|
||||
self.assertEqual(depth_image.name, "img_depth.exr")
|
||||
|
||||
def test_color_and_material_names_use_source_image_base_name(self):
|
||||
def test_color_name_uses_source_image_base_name(self):
|
||||
source_object = SimpleNamespace(
|
||||
data=SimpleNamespace(name="img.png"),
|
||||
)
|
||||
@@ -475,19 +472,11 @@ class ImageTest(unittest.TestCase):
|
||||
self.image_depth.color_data_name(source_object),
|
||||
"img_color.png",
|
||||
)
|
||||
self.assertEqual(
|
||||
self.image_depth.material_data_name(source_object),
|
||||
"img",
|
||||
)
|
||||
source_object.data.name = "img.png.001"
|
||||
self.assertEqual(
|
||||
self.image_depth.color_data_name(source_object),
|
||||
"img.001_color.png",
|
||||
)
|
||||
self.assertEqual(
|
||||
self.image_depth.material_data_name(source_object),
|
||||
"img.001",
|
||||
)
|
||||
|
||||
def test_surface_displacement_is_set_to_displacement_only(self):
|
||||
class Material:
|
||||
@@ -501,14 +490,14 @@ class ImageTest(unittest.TestCase):
|
||||
"DISPLACEMENT",
|
||||
)
|
||||
|
||||
def test_plane_bounds_keep_image_aspect_and_empty_offset(self):
|
||||
def test_image_empty_bounds_keep_image_aspect_and_empty_offset(self):
|
||||
source = SimpleNamespace(
|
||||
data=SimpleNamespace(size=(800, 400)),
|
||||
empty_display_size=2.0,
|
||||
empty_image_offset=(-0.5, -0.5),
|
||||
)
|
||||
|
||||
bounds = self.image_depth.plane_bounds(source)
|
||||
bounds = self.image_depth.image_empty_bounds(source)
|
||||
|
||||
self.assertEqual(bounds, (-1.0, 1.0, -0.5, 0.5))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user