Skip to content

Commit dad7953

Browse files
committed
Weight bleed power works as expected now, factor reverted to distance
1 parent a814b65 commit dad7953

File tree

3 files changed

+17
-18
lines changed

3 files changed

+17
-18
lines changed

mesh/helpers.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -415,16 +415,14 @@ def unsubdivide_preserve_uvs(obj, levels):
415415
bm.free()
416416

417417
def bmesh_vertex_group_bleed(bm, vertex_group_index, distance, power=1.0, only_tagged=False):
418-
# TODO Power as a parameter isn't very intuitive
419-
420-
if distance <= 0.0:
418+
if distance <= 0.0 or power <= 0.0:
421419
return
422420

423421
deform_layer = bm.verts.layers.deform.verify()
424422
def get_weight(vert):
425-
return vert[deform_layer].get(vertex_group_index, 0.0)
423+
return vert[deform_layer].get(vertex_group_index, 0.0) ** power
426424
def set_weight(vert, value):
427-
vert[deform_layer][vertex_group_index] = value
425+
vert[deform_layer][vertex_group_index] = value ** (1.0 / power)
428426

429427
openset = heapdict()
430428
for vert in bm.verts:
@@ -441,7 +439,6 @@ def set_weight(vert, value):
441439
continue
442440
other_vert_w = -w - (edge.calc_length() / distance)
443441
if other_vert_w > 0.0:
444-
other_vert_w **= power
445442
other_vert_old_w = get_weight(other_vert)
446443
if other_vert_w > other_vert_old_w:
447444
if other_vert_old_w > 0.0:

mesh/vertex_group_bleed.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,17 +22,18 @@ class GRET_OT_vertex_group_bleed(bpy.types.Operator):
2222
description="Subset of vertex groups to modify",
2323
default='ACTIVE',
2424
)
25-
factor: bpy.props.FloatProperty(
26-
name="Factor",
27-
description="Distance factor",
25+
distance: bpy.props.FloatProperty(
26+
name="Distance",
27+
description="Maximum smoothing distance",
28+
subtype='DISTANCE',
2829
default=1.0,
2930
min=0.0,
3031
)
3132
power: bpy.props.FloatProperty(
3233
name="Power",
33-
description="Power",
34+
description="Scaling factor for new weights",
3435
default=1.0,
35-
min=1.0,
36+
min=0.01,
3637
)
3738

3839
@classmethod
@@ -63,7 +64,7 @@ def execute(self, context):
6364
for vert in bm.verts:
6465
vert.tag = vert.select
6566
for vg_idx in vg_idxs:
66-
bmesh_vertex_group_bleed(bm, vg_idx, distance=self.factor / 100, power=self.power,
67+
bmesh_vertex_group_bleed(bm, vg_idx, distance=self.distance, power=self.power,
6768
only_tagged=obj.data.use_paint_mask_vertex)
6869

6970
bm.to_mesh(obj.data)

mesh/vertex_group_smooth_loops.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -271,17 +271,18 @@ class GRET_OT_vertex_group_smooth_loops(bpy.types.Operator):
271271
description="Subset of vertex groups to modify",
272272
default='ACTIVE',
273273
)
274-
factor: bpy.props.FloatProperty(
275-
name="Factor",
276-
description="Distance factor",
274+
distance: bpy.props.FloatProperty(
275+
name="Distance",
276+
description="Maximum smoothing distance",
277+
subtype='DISTANCE',
277278
default=1.0,
278279
min=0.0,
279280
)
280281
power: bpy.props.FloatProperty(
281282
name="Power",
282-
description="Power",
283+
description="Scaling factor for new weights",
283284
default=1.0,
284-
min=1.0,
285+
min=0.01,
285286
)
286287

287288
@classmethod
@@ -321,7 +322,7 @@ def execute(self, context):
321322
for vert_idx in vert_idxs:
322323
bm.verts[vert_idx].tag = True
323324
for vg_idx in vg_idxs:
324-
bmesh_vertex_group_bleed(bm, vg_idx, distance=self.factor / 100, power=self.power,
325+
bmesh_vertex_group_bleed(bm, vg_idx, distance=self.distance, power=self.power,
325326
only_tagged=True)
326327

327328
bm.to_mesh(obj.data)

0 commit comments

Comments
 (0)