Skip to content

Commit 7b1f2d1

Browse files
* improve performance by not doing any mode switching
1 parent c39e6bf commit 7b1f2d1

File tree

3 files changed

+21
-31
lines changed

3 files changed

+21
-31
lines changed

op_set_edge_curve.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import time
33
import bpy
44
from bpy.props import BoolProperty, IntProperty, FloatProperty, EnumProperty
5+
import bmesh
56

67
from . import op_set_edge_flow
78

@@ -21,10 +22,8 @@ def execute(self, context):
2122

2223
if not self.is_invoked:
2324
return self.invoke(context, None)
24-
25-
bpy.ops.object.mode_set(mode='OBJECT')
26-
27-
self.revert()
25+
else:
26+
self.revert()
2827

2928
for obj in self.objects:
3029
for edgeloop in self.edgeloops[obj]:
@@ -34,9 +33,9 @@ def execute(self, context):
3433
for i, vert in enumerate(edgeloop.verts):
3534
vert.co = edgeloop.initial_vert_positions[i].lerp(vert.co, self.mix)
3635

37-
self.bm[obj].to_mesh(obj.data)
36+
self.bm[obj].normal_update()
37+
bmesh.update_edit_mesh(obj.data)
3838

39-
bpy.ops.object.mode_set(mode='EDIT')
4039
self.is_invoked = False
4140
return {'FINISHED'}
4241

@@ -47,7 +46,6 @@ def invoke(self, context, event):
4746

4847
if event and not event.alt:
4948
self.tension = 100
50-
self.mix = 1.0
51-
49+
self.mix = 1.0
5250

5351
return self.execute(context)

op_set_edge_flow.py

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,12 @@ class SetEdgeLoopBase():
1010
def __init__(self):
1111
self.is_invoked = False
1212

13-
def get_bm(self, obj):
14-
bm = bmesh.new()
15-
bm.from_mesh(obj.data)
16-
bm.normal_update()
13+
def get_bm(self, obj):
14+
bm = bmesh.from_edit_mesh(obj.data)
1715
bm.verts.ensure_lookup_table()
1816
return bm
1917

20-
def revert(self):
21-
# print("reverting vertex positions")
18+
def revert(self):
2219
for obj in self.objects:
2320
for edgeloop in self.edgeloops[obj]:
2421
for i, vert in enumerate(edgeloop.verts):
@@ -41,11 +38,12 @@ def invoke(self, context):
4138
self.edgeloops = {}
4239
self.vert_positions = {}
4340

44-
bpy.ops.object.mode_set(mode='OBJECT')
45-
4641
ignore = set()
47-
4842
for obj in self.objects:
43+
if obj.mode != 'EDIT':
44+
ignore.add(obj)
45+
continue
46+
4947
self.bm[obj] = self.get_bm(obj)
5048

5149
edges = [e for e in self.bm[obj].edges if e.select]
@@ -120,10 +118,8 @@ def execute(self, context):
120118

121119
if not self.is_invoked:
122120
return self.invoke(context, None)
123-
124-
bpy.ops.object.mode_set(mode='OBJECT')
125-
126-
self.revert()
121+
else:
122+
self.revert()
127123

128124
for obj in self.objects:
129125
for i in range(self.iterations):
@@ -147,12 +143,10 @@ def execute(self, context):
147143
for i, vert in enumerate(edgeloop.verts):
148144
vert.co = edgeloop.initial_vert_positions[i].lerp(vert.co, self.mix)
149145

150-
self.bm[obj].to_mesh(obj.data)
151-
152-
bpy.ops.object.mode_set(mode='EDIT')
146+
self.bm[obj].normal_update()
147+
bmesh.update_edit_mesh(obj.data)
153148

154149
self.is_invoked = False
155-
156150
return {'FINISHED'}
157151

158152

op_set_edge_linear.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,15 @@ def execute(self, context):
3232

3333
if not self.is_invoked:
3434
return self.invoke(context, None)
35-
36-
bpy.ops.object.mode_set(mode='OBJECT')
37-
38-
self.revert()
35+
else:
36+
self.revert()
3937

4038
for obj in self.objects:
4139
for edgeloop in self.edgeloops[obj]:
4240
edgeloop.set_linear(self.space_evenly)
4341

44-
self.bm[obj].to_mesh(obj.data)
42+
self.bm[obj].normal_update()
43+
bmesh.update_edit_mesh(obj.data)
4544

46-
bpy.ops.object.mode_set(mode='EDIT')
4745
self.is_invoked = False
4846
return {'FINISHED'}

0 commit comments

Comments
 (0)