fix batch reproject frame issue
parent
abb61ca6d4
commit
86fb848e4a
|
@ -69,19 +69,22 @@ def batch_reproject(obj, proj_type='VIEW', all_strokes=True, restore_frame=False
|
||||||
# matrix = np.array(obj.matrix_world, dtype='float64')
|
# matrix = np.array(obj.matrix_world, dtype='float64')
|
||||||
# matrix_inv = np.array(obj.matrix_world.inverted(), dtype='float64')
|
# matrix_inv = np.array(obj.matrix_world.inverted(), dtype='float64')
|
||||||
#mat = src.matrix_world
|
#mat = src.matrix_world
|
||||||
for l in obj.data.layers:
|
for layer in obj.data.layers:
|
||||||
if not all_strokes:
|
if not all_strokes:
|
||||||
if not l.select:
|
if not layer.select:
|
||||||
continue
|
continue
|
||||||
if l.hide or l.lock:
|
if layer.hide or layer.lock:
|
||||||
continue
|
continue
|
||||||
f = next((f for f in l.frames if f.frame_number == i), None)
|
|
||||||
if f is None:
|
frame = next((f for f in layer.frames if f.frame_number == i), None)
|
||||||
# FIXME: some strokes are ingored
|
if frame is None:
|
||||||
# print(f'skip {l.name}, no frame at {i}')
|
print(layer.name, 'Not found')
|
||||||
|
# FIXME: some strokes are ignored
|
||||||
|
# print(frame'skip {layer.name}, no frame at {i}')
|
||||||
continue
|
continue
|
||||||
for s in f.drawing.strokes:
|
|
||||||
# print(l.name, s.material_index)
|
for s in frame.drawing.strokes:
|
||||||
|
# print(layer.name, s.material_index)
|
||||||
|
|
||||||
## Batch matrix apply (Here is slower than list comprehension).
|
## Batch matrix apply (Here is slower than list comprehension).
|
||||||
# nb_points = len(s.points)
|
# nb_points = len(s.points)
|
||||||
|
@ -96,8 +99,8 @@ def batch_reproject(obj, proj_type='VIEW', all_strokes=True, restore_frame=False
|
||||||
|
|
||||||
# Basic method (Slower than foreach_set and compatible with GPv3)
|
# Basic method (Slower than foreach_set and compatible with GPv3)
|
||||||
## TODO: use low level api with curve offsets...
|
## TODO: use low level api with curve offsets...
|
||||||
for i, p in enumerate(s.points):
|
for pt_index, point in enumerate(s.points):
|
||||||
p.position = matrix_inv @ new_world_co_3d[i]
|
point.position = matrix_inv @ new_world_co_3d[pt_index]
|
||||||
|
|
||||||
## GPv2: ravel and use foreach_set
|
## GPv2: ravel and use foreach_set
|
||||||
## Ravel new coordinate on the fly
|
## Ravel new coordinate on the fly
|
||||||
|
@ -416,9 +419,6 @@ class GPTB_OT_batch_reproject_all_frames(bpy.types.Operator):
|
||||||
box = layout.box()
|
box = layout.box()
|
||||||
axis = context.scene.tool_settings.gpencil_sculpt.lock_axis
|
axis = context.scene.tool_settings.gpencil_sculpt.lock_axis
|
||||||
box.label(text=orient[axis][0], icon=orient[axis][1])
|
box.label(text=orient[axis][0], icon=orient[axis][1])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
t0 = time()
|
t0 = time()
|
||||||
|
|
Loading…
Reference in New Issue