2025-07-01
This commit is contained in:
@@ -0,0 +1,235 @@
|
||||
import bpy # type: ignore
|
||||
from bpy.types import PropertyGroup # type: ignore
|
||||
from bpy.props import BoolProperty, IntProperty, EnumProperty, PointerProperty, CollectionProperty, FloatProperty # type: ignore
|
||||
|
||||
#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+
|
||||
|
||||
class MFTProperties(bpy.types.PropertyGroup):
|
||||
|
||||
# v4.0.2
|
||||
#--------------------------------------------------#
|
||||
def update_tri(self, context):
|
||||
if self.tri_boolean:
|
||||
if self.quad_boolean:
|
||||
self.quad_boolean = False
|
||||
if self.poly_boolean:
|
||||
self.poly_boolean = False
|
||||
|
||||
def update_quad(self, context):
|
||||
if self.quad_boolean:
|
||||
if self.tri_boolean:
|
||||
self.tri_boolean = False
|
||||
if self.poly_boolean:
|
||||
self.poly_boolean = False
|
||||
|
||||
def update_poly(self, context):
|
||||
if self.poly_boolean:
|
||||
if self.tri_boolean:
|
||||
self.tri_boolean = False
|
||||
if self.quad_boolean:
|
||||
self.quad_boolean = False
|
||||
#--------------------------------------------------#
|
||||
|
||||
#---------------------- RemeshLocal ------------------------------#
|
||||
v1_boolean: bpy.props.BoolProperty(
|
||||
name="Fixing Tools V1",
|
||||
description="Enalbe Fixing Tools V1",
|
||||
default=False,
|
||||
) # type: ignore
|
||||
|
||||
remesh_option: bpy.props.EnumProperty(
|
||||
name="",
|
||||
items=[
|
||||
("regular", "Regular", "Current Mesh Size"),
|
||||
("fine", "Fine", "Current Mesh Size /2"),
|
||||
("coarse", "Coarse", "Current Mesh Size x2"),
|
||||
("customized", "Customized", ""),
|
||||
],
|
||||
default="regular",
|
||||
description="Mesh Size",
|
||||
) # type: ignore
|
||||
|
||||
# Define the property for Remesh
|
||||
mesh_size: bpy.props.FloatProperty(
|
||||
name="",
|
||||
default=0.2,
|
||||
description="Mesh Size",
|
||||
min=0.01, max=10, precision=2,
|
||||
) # type: ignore
|
||||
|
||||
# Define the property for aspect ratio
|
||||
aspect_ratio: bpy.props.FloatProperty(
|
||||
name="",
|
||||
default=0.5,
|
||||
description="100% Aspect Ratio -> SSS Triangle",
|
||||
min=0.1, max=1, precision=1,
|
||||
) # type: ignore
|
||||
|
||||
# Iteration times
|
||||
iter: bpy.props.IntProperty(
|
||||
name="",
|
||||
default=1,
|
||||
description="Iteration Times",
|
||||
min=1, max=10,
|
||||
) # type: ignore
|
||||
|
||||
#---------------------- FixMeshGlobal ------------------------------#
|
||||
|
||||
meshfixing: bpy.props.BoolProperty(
|
||||
name="Fixing Status",
|
||||
description="Mesh Fixing Status",
|
||||
default=False,
|
||||
) # type: ignore
|
||||
|
||||
sum_vertices: bpy.props.IntProperty() # type: ignore
|
||||
sum_edges : bpy.props.IntProperty() # type: ignore
|
||||
sum_faces : bpy.props.IntProperty() # type: ignore
|
||||
sum_holes : bpy.props.IntProperty() # type: ignore
|
||||
sum_volumes : bpy.props.IntProperty() # type: ignore
|
||||
|
||||
# v4.0.2
|
||||
tri_boolean: bpy.props.BoolProperty(
|
||||
name="Tri Mesh",
|
||||
description="Triangulate Mesh",
|
||||
default=True,
|
||||
update=update_tri,
|
||||
) # type: ignore
|
||||
|
||||
quad_boolean: bpy.props.BoolProperty(
|
||||
name="Quad Mesh",
|
||||
description="Quadrangulate Mesh",
|
||||
default=False,
|
||||
update=update_quad,
|
||||
) # type: ignore
|
||||
|
||||
poly_boolean: bpy.props.BoolProperty(
|
||||
name="Poly Mesh",
|
||||
description="Merge Faces on Shared Planes",
|
||||
default=False,
|
||||
update=update_poly,
|
||||
) # type: ignore
|
||||
|
||||
minor_parts_boolean: bpy.props.BoolProperty(
|
||||
name="Noise Shells",
|
||||
description="Remove Loose Parts",
|
||||
default=False,
|
||||
) # type: ignore
|
||||
|
||||
intersection_boolean: bpy.props.BoolProperty(
|
||||
name="Intersect Face",
|
||||
description="Fix Intersection",
|
||||
default=False,
|
||||
) # type: ignore
|
||||
|
||||
spikes_boolean: bpy.props.BoolProperty(
|
||||
name="Spikes",
|
||||
description="Remove Spikes",
|
||||
default=False,
|
||||
) # type: ignore
|
||||
|
||||
holes_boolean: bpy.props.BoolProperty(
|
||||
name="Fill Holes",
|
||||
description="Fill Holes",
|
||||
default=False,
|
||||
) # type: ignore
|
||||
|
||||
face_normal_boolean: bpy.props.BoolProperty(
|
||||
name="Face Normal",
|
||||
description="Recalculate Face Normal -> Outside",
|
||||
default=False,
|
||||
) # type: ignore
|
||||
|
||||
volume_intersection_boolean: bpy.props.BoolProperty(
|
||||
name="Intersect Volumes",
|
||||
description="Unify Intersecting Manifold Structures. \nThis operation removes mesh details such as Vertex Groups",
|
||||
default=False,
|
||||
) # type: ignore
|
||||
|
||||
# Define the minor parts threshold
|
||||
minor_parts_threshold: bpy.props.FloatProperty(
|
||||
name="",
|
||||
default=1,
|
||||
description="Loose Parts Face Threshold",
|
||||
min=0.1, max=5, precision=1,step=0.1,
|
||||
) # type: ignore
|
||||
|
||||
# Intersection angle limit
|
||||
intersection_angle_limit: bpy.props.FloatProperty(
|
||||
name="",
|
||||
default=10,
|
||||
description="Sharp Edges",
|
||||
min=1, max=60, precision=1,step=1.0,
|
||||
) # type: ignore
|
||||
|
||||
# Spikes angle limit
|
||||
spikes_angle_limit: bpy.props.FloatProperty(
|
||||
name="",
|
||||
default=10,
|
||||
description="Pointy Vertices",
|
||||
min=1, max=60, precision=1,step=1.0,
|
||||
) # type: ignore
|
||||
|
||||
statistics_boolean: bpy.props.BoolProperty(
|
||||
name="Statistics",
|
||||
description="Show Statistics of Mesh Repair",
|
||||
default=True,
|
||||
) # type: ignore
|
||||
#---------------------- SmoothLocal ------------------------------#
|
||||
localsmooth_angle_limit: bpy.props.EnumProperty(
|
||||
name="",
|
||||
items=[
|
||||
("90", "1", ""),
|
||||
("120", "2", ""),
|
||||
("150", "3", ""),
|
||||
#("customized", "Customized", ""),
|
||||
],
|
||||
default="120",
|
||||
description="Smooth",
|
||||
) # type: ignore
|
||||
|
||||
#---------------------- Bumper Reduction Depth ------------------------------#
|
||||
bumper_reduction: bpy.props.EnumProperty(
|
||||
name="",
|
||||
items=[
|
||||
("0", "No Offset", ""),
|
||||
("-3", "1 Offset", ""),
|
||||
("-5", "2 Offset", ""),
|
||||
("-7", "3 Offset", ""),
|
||||
#("customized", "Customized", ""),
|
||||
],
|
||||
default="0",
|
||||
description="Offset Level",
|
||||
) # type: ignore
|
||||
|
||||
# v4 WIZ
|
||||
wiz_boolean: bpy.props.BoolProperty(
|
||||
name="Fix Wizard 🧙",
|
||||
description="Pro Functions for Remesh and Fill Holes",
|
||||
default=True,
|
||||
) # type: ignore
|
||||
|
||||
wiz_fill_settings_boolean: bpy.props.BoolProperty(
|
||||
name="Smart Fill Settings",
|
||||
default=False,
|
||||
) # type: ignore
|
||||
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(MFTProperties)
|
||||
bpy.types.Scene.meshfixtool_properties = bpy.props.PointerProperty(type=MFTProperties)
|
||||
|
||||
def unregister():
|
||||
del bpy.types.Scene.meshfixtool_properties
|
||||
bpy.utils.unregister_class(MFTProperties)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user