Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2020-12-30 22:12:29 +0300
committerHans Goudey <h.goudey@me.com>2020-12-30 22:12:29 +0300
commit8373f497bd159d4226d38cae0432e9a098afe175 (patch)
tree2b323e5bd6a516c4ef172459c31b21522a4228e8 /tests/python
parent2d86175baccb718d45ad04cb82ebdade4f56e86d (diff)
Add regression tests for curve conversion to mesh
This adds a basic set of tests for curve sampling and bevel generation. At the moment there are basic test cases for bevels, caps, and the filling of 2D curves, but more tests can be added in the future. Curves are actually converted to "DispLists" for displaying them in the viewport, so it's much simpler to rely on the mesh conversion operator instead of building a new test framework for another data structure. Differential Revision: https://developer.blender.org/D9958
Diffstat (limited to 'tests/python')
-rw-r--r--tests/python/CMakeLists.txt8
-rw-r--r--tests/python/curve_to_mesh.py111
2 files changed, 119 insertions, 0 deletions
diff --git a/tests/python/CMakeLists.txt b/tests/python/CMakeLists.txt
index bf949d66286..acf8010d13c 100644
--- a/tests/python/CMakeLists.txt
+++ b/tests/python/CMakeLists.txt
@@ -172,6 +172,14 @@ add_blender_test(
--python-text run_tests
)
+add_blender_test(
+ curve_to_mesh
+ ${TEST_SRC_DIR}/modeling/curve_to_mesh.blend
+ --python ${TEST_PYTHON_DIR}/curve_to_mesh.py
+ --
+ --run-all-tests
+)
+
# ------------------------------------------------------------------------------
# MODIFIERS TESTS
add_blender_test(
diff --git a/tests/python/curve_to_mesh.py b/tests/python/curve_to_mesh.py
new file mode 100644
index 00000000000..1e22ea8fd56
--- /dev/null
+++ b/tests/python/curve_to_mesh.py
@@ -0,0 +1,111 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# To run all tests, use
+# BLENDER_VERBOSE=1 ./bin/blender ../lib/tests/modeling/curve_to_mesh.blend --python ../blender/tests/python/bl_curve_to_mesh.py -- --run-all-tests
+# (that assumes the test is run from a build directory in the same directory as the source code)
+import bpy
+import os
+import sys
+
+sys.path.append(os.path.dirname(os.path.realpath(__file__)))
+from modules.mesh_test import MeshTest, OperatorSpecObjectMode, RunTest
+
+
+def main():
+ tests = [
+ MeshTest('2D Non Cyclic', 'test2DNonCyclic', 'expected2DNonCyclic',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('2D NURBS With Tail', 'test2DNURBSWithTail', 'expected2DNURBSWithTail',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('2D Shape With Hole', 'test2DShapeWithHole', 'expected2DShapeWithHole',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('2D Simple Lower Res', 'test2DSimpleLowerRes', 'expected2DSimpleLowerRes',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('2D Simple Low Res', 'test2DSimpleLowRes', 'expected2DSimpleLowRes',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('2D Square', 'test2DSquare', 'expected2DSquare',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Back', 'testBevelBack', 'expectedBevelBack',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Back Low Res', 'testBevelBackLowRes', 'expectedBevelBackLowRes',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Extrude Back', 'testBevelExtrudeBack', 'expectedBevelExtrudeBack',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Extrude Front', 'testBevelExtrudeFront', 'expectedBevelExtrudeFront',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Extrude Full', 'testBevelExtrudeFull', 'expectedBevelExtrudeFull',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Extrude Half', 'testBevelExtrudeHalf', 'expectedBevelExtrudeHalf',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Front', 'testBevelFront', 'expectedBevelFront',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Front Low Res', 'testBevelFrontLowRes', 'expectedBevelFrontLowRes',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Full', 'testBevelFull', 'expectedBevelFull',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Full Low Res', 'testBevelFullLowRes', 'expectedBevelFullLowRes',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Half', 'testBevelHalf', 'expectedBevelHalf',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Bevel Half Low Res', 'testBevelHalfLowRes', 'expectedBevelHalfLowRes',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Caps None', 'testCapsNone', 'expectedCapsNone',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Caps Object Bevel', 'testCapsObjectBevel', 'expectedCapsObjectBevel',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Caps Profile Bevel', 'testCapsProfileBevel', 'expectedCapsProfileBevel',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Caps Profile Bevel Half', 'testCapsProfileBevelHalf', 'expectedCapsProfileBevelHalf',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Caps Profile Bevel Quarter', 'testCapsProfileBevelQuarter', 'expectedCapsProfileBevelQuarter',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Caps Round Bevel', 'testCapsRoundBevel', 'expectedCapsRoundBevel',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Caps Round Bevel Extrude', 'testCapsRoundBevelExtrude', 'expectedCapsRoundBevelExtrude',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Caps Round Bevel Half', 'testCapsRoundBevelHalf', 'expectedCapsRoundBevelHalf',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Caps Round Bevel Quarter', 'testCapsRoundBevelQuarter', 'expectedCapsRoundBevelQuarter',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Extrude Back', 'testExtrudeBack', 'expectedExtrudeBack',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Extrude Front', 'testExtrudeFront', 'expectedExtrudeFront',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Extrude Full', 'testExtrudeFull', 'expectedExtrudeFull',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ MeshTest('Extrude Half', 'testExtrudeHalf', 'expectedExtrudeHalf',
+ [OperatorSpecObjectMode('convert', {'target': 'MESH'})]),
+ ]
+ operator_test = RunTest(tests)
+
+ command = list(sys.argv)
+ for i, cmd in enumerate(command):
+ if cmd == "--run-all-tests":
+ operator_test.do_compare = True
+ operator_test.run_all_tests()
+ break
+ elif cmd == "--run-test":
+ name = command[i + 1]
+ operator_test.do_compare = False
+ operator_test.run_test(name)
+ break
+
+
+if __name__ == "__main__":
+ main()