2024-08-08 14:42:24 +02:00
|
|
|
# SPDX-FileCopyrightText: 2024 Blender Authors
|
|
|
|
#
|
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
|
|
|
|
# ./blender.bin --background --python tests/python/bl_pyapi_grease_pencil.py -- --verbose
|
|
|
|
import bpy
|
|
|
|
import unittest
|
|
|
|
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Tests
|
|
|
|
|
|
|
|
class TestGreasePencil(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.gp = bpy.data.grease_pencils_v3.new("test_grease_pencil")
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
bpy.data.grease_pencils_v3.remove(self.gp)
|
|
|
|
del self.gp
|
|
|
|
|
|
|
|
def test_grease_pencil_new(self):
|
|
|
|
self.assertEqual(self.gp.name, "test_grease_pencil")
|
|
|
|
self.assertEqual(len(self.gp.layers), 0)
|
|
|
|
|
|
|
|
|
|
|
|
class TestGreasePencilLayers(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.gp = bpy.data.grease_pencils_v3.new("test_grease_pencil")
|
|
|
|
self.gp.layers.new("test_layer01")
|
|
|
|
self.gp.layers.new("test_layer02")
|
|
|
|
self.gp.layers.new("test_layer03")
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
bpy.data.grease_pencils_v3.remove(self.gp)
|
|
|
|
del self.gp
|
|
|
|
|
|
|
|
def test_grease_pencil_layers_new(self):
|
|
|
|
self.assertEqual(len(self.gp.layers), 3)
|
|
|
|
# Test empty name
|
|
|
|
self.gp.layers.new("")
|
|
|
|
self.assertEqual(self.gp.layers[-1].name, "Layer")
|
|
|
|
self.gp.layers.new("")
|
|
|
|
self.assertEqual(self.gp.layers[-1].name, "Layer.001")
|
|
|
|
|
|
|
|
def test_grease_pencil_layers_rename(self):
|
|
|
|
self.gp.layers[0].name = "test"
|
|
|
|
self.assertEqual(self.gp.layers[0].name, "test")
|
|
|
|
self.gp.layers[0].name = ""
|
|
|
|
self.assertEqual(self.gp.layers[0].name, "Layer")
|
|
|
|
self.gp.layers[0].name = "test_layer02"
|
|
|
|
self.assertEqual(self.gp.layers[0].name, "test_layer02.001")
|
|
|
|
|
|
|
|
def test_grease_pencil_layers_remove(self):
|
|
|
|
self.gp.layers.remove(self.gp.layers[-1])
|
|
|
|
self.assertEqual(len(self.gp.layers), 2)
|
|
|
|
self.assertEqual(self.gp.layers[-1].name, "test_layer02")
|
|
|
|
|
|
|
|
def test_grease_pencil_layers_move_down(self):
|
|
|
|
# Move the top most layer down
|
|
|
|
self.gp.layers.move(self.gp.layers[-1], 'DOWN')
|
|
|
|
self.assertEqual(self.gp.layers[0].name, "test_layer01")
|
|
|
|
self.assertEqual(self.gp.layers[1].name, "test_layer03")
|
|
|
|
self.assertEqual(self.gp.layers[2].name, "test_layer02")
|
|
|
|
|
|
|
|
def test_grease_pencil_layers_move_up(self):
|
|
|
|
# Move the bottom most layer up
|
|
|
|
self.gp.layers.move(self.gp.layers[0], 'UP')
|
|
|
|
self.assertEqual(self.gp.layers[0].name, "test_layer02")
|
|
|
|
self.assertEqual(self.gp.layers[1].name, "test_layer01")
|
|
|
|
self.assertEqual(self.gp.layers[2].name, "test_layer03")
|
|
|
|
|
|
|
|
|
2024-11-22 12:47:50 +01:00
|
|
|
class TestGreasePencilFrame(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.gp = bpy.data.grease_pencils_v3.new("test_grease_pencil")
|
|
|
|
self.layer = self.gp.layers.new("test_layer01")
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
bpy.data.grease_pencils_v3.remove(self.gp)
|
|
|
|
del self.gp
|
|
|
|
|
|
|
|
def test_grease_pencil_frame_add(self):
|
|
|
|
frame1 = self.layer.frames.new(0)
|
|
|
|
frame2 = self.layer.frames.new(-100)
|
|
|
|
frame3 = self.layer.frames.new(10)
|
|
|
|
with self.assertRaises(RuntimeError):
|
|
|
|
self.layer.frames.new(10)
|
|
|
|
|
|
|
|
self.assertEqual(len(self.layer.frames), 3)
|
|
|
|
self.assertEqual(frame1.frame_number, 0)
|
|
|
|
self.assertEqual(frame2.frame_number, -100)
|
|
|
|
self.assertEqual(frame3.frame_number, 10)
|
|
|
|
|
|
|
|
def test_grease_pencil_frame_remove(self):
|
|
|
|
self.layer.frames.new(0)
|
|
|
|
self.layer.frames.new(-10)
|
|
|
|
frame3 = self.layer.frames.new(20)
|
|
|
|
|
|
|
|
self.assertEqual(len(self.layer.frames), 3)
|
|
|
|
|
|
|
|
self.layer.frames.remove(0)
|
|
|
|
self.layer.frames.remove(-10)
|
|
|
|
|
|
|
|
with self.assertRaises(RuntimeError):
|
|
|
|
self.layer.frames.remove(19)
|
|
|
|
|
|
|
|
self.assertEqual(len(self.layer.frames), 1)
|
|
|
|
self.assertEqual(frame3.frame_number, 20)
|
|
|
|
|
|
|
|
def test_grease_pencil_frame_copy(self):
|
|
|
|
self.layer.frames.new(0)
|
|
|
|
self.layer.frames.new(-10)
|
|
|
|
self.layer.frames.new(20)
|
|
|
|
|
|
|
|
self.assertEqual(len(self.layer.frames), 3)
|
|
|
|
|
|
|
|
frame = self.layer.frames.copy(0, 1)
|
|
|
|
|
|
|
|
self.assertEqual(len(self.layer.frames), 4)
|
|
|
|
self.assertEqual(frame.frame_number, 1)
|
|
|
|
|
|
|
|
with self.assertRaises(RuntimeError):
|
|
|
|
self.layer.frames.copy(0, 1)
|
|
|
|
|
|
|
|
with self.assertRaises(RuntimeError):
|
|
|
|
self.layer.frames.copy(10, 20)
|
|
|
|
|
|
|
|
def test_grease_pencil_frame_move(self):
|
|
|
|
self.layer.frames.new(0)
|
|
|
|
self.layer.frames.new(-10)
|
|
|
|
self.layer.frames.new(20)
|
|
|
|
|
|
|
|
self.assertEqual(len(self.layer.frames), 3)
|
|
|
|
|
|
|
|
frame = self.layer.frames.move(0, 1)
|
|
|
|
|
|
|
|
self.assertEqual(frame.frame_number, 1)
|
|
|
|
|
|
|
|
with self.assertRaises(RuntimeError):
|
|
|
|
self.layer.frames.move(0, 1)
|
|
|
|
|
|
|
|
with self.assertRaises(RuntimeError):
|
|
|
|
self.layer.frames.move(-10, 20)
|
|
|
|
|
2024-11-22 14:19:20 +01:00
|
|
|
def test_grease_pencil_frame_set(self):
|
|
|
|
frame1 = self.layer.frames.new(0)
|
|
|
|
frame1.drawing.add_strokes([3, 5, 7, 11])
|
|
|
|
|
|
|
|
self.assertEqual(len(frame1.drawing.strokes), 4)
|
|
|
|
|
|
|
|
frame1.drawing = None
|
|
|
|
self.assertEqual(len(frame1.drawing.strokes), 0)
|
|
|
|
|
|
|
|
frame2 = self.layer.frames.new(10)
|
|
|
|
frame2.drawing.add_strokes([13, 17])
|
|
|
|
|
|
|
|
frame1.drawing = frame2.drawing
|
|
|
|
self.assertEqual(len(frame1.drawing.strokes), 2)
|
|
|
|
self.assertEqual(len(frame1.drawing.strokes[0].points), 13)
|
|
|
|
self.assertEqual(len(frame1.drawing.strokes[1].points), 17)
|
|
|
|
|
|
|
|
layer2 = self.gp.layers.new("test_layer02")
|
|
|
|
frame2 = layer2.frames.new(0)
|
|
|
|
frame2.drawing.add_strokes([19, 23])
|
|
|
|
|
|
|
|
frame1.drawing = frame2.drawing
|
|
|
|
self.assertEqual(len(frame1.drawing.strokes), 2)
|
|
|
|
self.assertEqual(len(frame1.drawing.strokes[0].points), 19)
|
|
|
|
self.assertEqual(len(frame1.drawing.strokes[1].points), 23)
|
|
|
|
|
2024-11-22 12:47:50 +01:00
|
|
|
|
2024-08-15 10:58:21 +02:00
|
|
|
class TestGreasePencilDrawing(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.gp = bpy.data.grease_pencils_v3.new("test_grease_pencil")
|
|
|
|
layer = self.gp.layers.new("test_layer01")
|
|
|
|
frame = layer.frames.new(0)
|
|
|
|
self.drawing = frame.drawing
|
|
|
|
|
|
|
|
stroke_sizes = [3, 5, 7, 11]
|
|
|
|
self.drawing.add_strokes(stroke_sizes)
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
bpy.data.grease_pencils_v3.remove(self.gp)
|
|
|
|
del self.gp
|
|
|
|
|
|
|
|
def test_grease_pencil_drawing_add_strokes(self):
|
|
|
|
self.assertEqual(len(self.drawing.strokes), 4)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[0].points), 3)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[1].points), 5)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[2].points), 7)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[3].points), 11)
|
|
|
|
|
|
|
|
def test_grease_pencil_drawing_remove_all_strokes(self):
|
|
|
|
self.drawing.remove_strokes()
|
2024-10-08 14:12:58 +02:00
|
|
|
self.assertEqual(len(self.drawing.strokes), 0)
|
2024-08-15 10:58:21 +02:00
|
|
|
|
|
|
|
def test_grease_pencil_drawing_remove_strokes(self):
|
|
|
|
self.drawing.remove_strokes(indices=[0, 2])
|
|
|
|
self.assertEqual(len(self.drawing.strokes), 2)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[0].points), 5)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[1].points), 11)
|
|
|
|
|
|
|
|
def test_grease_pencil_drawing_resize_strokes(self):
|
|
|
|
self.drawing.resize_strokes([20, 25, 15, 30])
|
|
|
|
self.assertEqual(len(self.drawing.strokes), 4)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[0].points), 20)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[1].points), 25)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[2].points), 15)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[3].points), 30)
|
|
|
|
|
|
|
|
self.drawing.resize_strokes([1, 2], indices=[0, 2])
|
|
|
|
self.assertEqual(len(self.drawing.strokes), 4)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[0].points), 1)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[1].points), 25)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[2].points), 2)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[3].points), 30)
|
|
|
|
|
2024-10-31 16:22:44 +01:00
|
|
|
def test_grease_pencil_drawing_stroke_add_points(self):
|
|
|
|
self.drawing.strokes[0].add_points(5)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[0].points), 8)
|
|
|
|
|
|
|
|
new_points = self.drawing.strokes[1].add_points(5)
|
|
|
|
self.assertEqual(len(new_points), 5)
|
|
|
|
|
|
|
|
def test_grease_pencil_drawing_stroke_remove_points(self):
|
|
|
|
self.drawing.strokes[0].remove_points(1)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[0].points), 2)
|
|
|
|
|
|
|
|
self.drawing.strokes[1].remove_points(10)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[1].points), 1)
|
|
|
|
|
2024-08-15 10:58:21 +02:00
|
|
|
def test_grease_pencil_drawing_strokes_slice(self):
|
|
|
|
self.assertEqual(len(self.drawing.strokes[:]), 4)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[0:]), 4)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[:4]), 4)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[-4:]), 4)
|
|
|
|
|
|
|
|
self.assertEqual(len(self.drawing.strokes[:5]), 4)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[-5:]), 4)
|
|
|
|
|
|
|
|
self.assertEqual(len(self.drawing.strokes[4:]), 0)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[:0]), 0)
|
|
|
|
self.assertEqual(len(self.drawing.strokes[:-4]), 0)
|
|
|
|
|
|
|
|
strokes = self.drawing.strokes[1:]
|
|
|
|
self.assertEqual(len(strokes), 3)
|
|
|
|
self.assertEqual(len(strokes[0].points), 5)
|
|
|
|
self.assertEqual(len(strokes[1].points), 7)
|
|
|
|
self.assertEqual(len(strokes[2].points), 11)
|
|
|
|
|
|
|
|
strokes = self.drawing.strokes[:-1]
|
|
|
|
self.assertEqual(len(strokes), 3)
|
|
|
|
self.assertEqual(len(strokes[0].points), 3)
|
|
|
|
self.assertEqual(len(strokes[1].points), 5)
|
|
|
|
self.assertEqual(len(strokes[2].points), 7)
|
|
|
|
|
|
|
|
strokes = self.drawing.strokes[:1]
|
|
|
|
self.assertEqual(len(strokes), 1)
|
|
|
|
self.assertEqual(len(strokes[0].points), 3)
|
|
|
|
|
|
|
|
strokes = self.drawing.strokes[-1:]
|
|
|
|
self.assertEqual(len(strokes), 1)
|
|
|
|
self.assertEqual(len(strokes[0].points), 11)
|
|
|
|
|
|
|
|
strokes = self.drawing.strokes[1:-1]
|
|
|
|
self.assertEqual(len(strokes), 2)
|
|
|
|
self.assertEqual(len(strokes[0].points), 5)
|
|
|
|
self.assertEqual(len(strokes[1].points), 7)
|
|
|
|
|
|
|
|
strokes = self.drawing.strokes[1:][1:]
|
|
|
|
self.assertEqual(len(strokes), 2)
|
|
|
|
self.assertEqual(len(strokes[0].points), 7)
|
|
|
|
self.assertEqual(len(strokes[1].points), 11)
|
|
|
|
|
|
|
|
strokes = self.drawing.strokes[:-1][1:]
|
|
|
|
self.assertEqual(len(strokes), 2)
|
|
|
|
self.assertEqual(len(strokes[0].points), 5)
|
|
|
|
self.assertEqual(len(strokes[1].points), 7)
|
|
|
|
|
|
|
|
strokes = self.drawing.strokes[1:-1][1:]
|
|
|
|
self.assertEqual(len(strokes), 1)
|
|
|
|
self.assertEqual(len(strokes[0].points), 7)
|
|
|
|
|
|
|
|
strokes = self.drawing.strokes[1:-1][:-1]
|
|
|
|
self.assertEqual(len(strokes), 1)
|
|
|
|
self.assertEqual(len(strokes[0].points), 5)
|
|
|
|
|
|
|
|
|
2024-08-08 14:42:24 +02:00
|
|
|
if __name__ == '__main__':
|
|
|
|
import sys
|
|
|
|
sys.argv = [__file__] + (sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else [])
|
|
|
|
unittest.main()
|