feat: Introduce Balloon Lasso Tool for mesh extraction
- Added BalloonTool workspace tool to facilitate the extraction of balloon meshes in the 3D viewport. - Implemented ActivateBalloonTool operator to activate the Balloon Lasso Tool. - Refactored BalloonLasso operator into ExtractBalloon for better clarity and functionality. - Enhanced properties for balloon extraction, including mode, thickness, resolution, and material reuse options. - Updated SnapFormSettings to include new balloon-related properties. - Improved material and image handling for balloon extraction, ensuring compatibility and reusability. - Added tests to validate the registration and functionality of the new balloon tools and properties.
This commit is contained in:
@@ -172,7 +172,77 @@ def surface_model_enum_items(_owner, _context):
|
||||
return _model_items(models)
|
||||
|
||||
|
||||
BALLOON_MODE_ITEMS = (
|
||||
(
|
||||
"POISSON",
|
||||
"Poisson",
|
||||
"Use a global Poisson field for smooth inflation",
|
||||
),
|
||||
(
|
||||
"TEDDY",
|
||||
"Teddy / Chordal Axis",
|
||||
"Use a Teddy-style chordal axis and local oval sections",
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def balloon_mode_property():
|
||||
return bpy.props.EnumProperty(
|
||||
name="Mode",
|
||||
description="Algorithm used to inflate the saved lasso region",
|
||||
items=BALLOON_MODE_ITEMS,
|
||||
default="POISSON",
|
||||
)
|
||||
|
||||
|
||||
def balloon_thickness_property():
|
||||
return bpy.props.FloatProperty(
|
||||
name="Thickness",
|
||||
description="Scale the Balloon thickness while keeping the lasso region",
|
||||
default=1.0,
|
||||
min=0.05,
|
||||
soft_max=5.0,
|
||||
)
|
||||
|
||||
|
||||
def balloon_resolution_property():
|
||||
return bpy.props.FloatProperty(
|
||||
name="Resolution (m)",
|
||||
description=(
|
||||
"Distance in meters between sampled mesh points; smaller values "
|
||||
"create more geometry"
|
||||
),
|
||||
default=0.1,
|
||||
min=0.005,
|
||||
soft_min=0.02,
|
||||
soft_max=0.5,
|
||||
max=10.0,
|
||||
)
|
||||
|
||||
|
||||
def balloon_reuse_material_property():
|
||||
return bpy.props.BoolProperty(
|
||||
name="Reuse Material",
|
||||
description="Reuse a compatible Balloon material made from the same image",
|
||||
default=True,
|
||||
)
|
||||
|
||||
|
||||
def balloon_radial_zoom_property(scale):
|
||||
return bpy.props.FloatVectorProperty(
|
||||
size=2,
|
||||
default=(scale, scale),
|
||||
min=0.01,
|
||||
options={"HIDDEN", "SKIP_SAVE"},
|
||||
)
|
||||
|
||||
class SnapFormSettings(bpy.types.PropertyGroup):
|
||||
balloon_mode: balloon_mode_property()
|
||||
balloon_thickness: balloon_thickness_property()
|
||||
balloon_resolution: balloon_resolution_property()
|
||||
balloon_reuse_material: balloon_reuse_material_property()
|
||||
balloon_thickness_radial_zoom: balloon_radial_zoom_property(100.0)
|
||||
balloon_resolution_radial_zoom: balloon_radial_zoom_property(1000.0)
|
||||
input_path: bpy.props.StringProperty(
|
||||
name="Image or Video",
|
||||
description="A single image or video file used for reconstruction",
|
||||
|
||||
Reference in New Issue
Block a user