2023-08-16 00:20:26 +10:00
|
|
|
# SPDX-FileCopyrightText: 2020-2023 Blender Authors
|
2023-06-15 13:09:04 +10:00
|
|
|
#
|
2022-02-11 09:07:11 +11:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
2020-01-13 07:11:45 -05:00
|
|
|
|
|
|
|
|
import bpy
|
|
|
|
|
import os
|
|
|
|
|
import sys
|
2023-07-25 21:43:53 +10:00
|
|
|
from random import seed
|
2020-01-13 07:11:45 -05:00
|
|
|
|
|
|
|
|
seed(0)
|
|
|
|
|
|
|
|
|
|
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
|
2021-07-27 21:00:28 +05:30
|
|
|
from modules.mesh_test import SpecMeshTest, OperatorSpecEditMode, RunTest
|
2020-01-13 07:11:45 -05:00
|
|
|
|
|
|
|
|
# Central vertical loop of Suzanne
|
2025-07-11 17:13:50 +10:00
|
|
|
MONKEY_LOOP_VERT = {
|
|
|
|
|
68, 69, 71, 73, 74, 75, 76, 77, 90, 129, 136, 175, 188, 189, 198, 207,
|
|
|
|
|
216, 223, 230, 301, 302, 303, 304, 305, 306, 307, 308,
|
|
|
|
|
}
|
|
|
|
|
MONKEY_LOOP_EDGE = {
|
|
|
|
|
131, 278, 299, 305, 307, 334, 337, 359, 384, 396, 399, 412, 415, 560,
|
|
|
|
|
567, 572, 577, 615, 622, 627, 632, 643, 648, 655, 660, 707,
|
|
|
|
|
}
|
2020-01-13 07:11:45 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def main():
|
|
|
|
|
tests = [
|
|
|
|
|
# bisect
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeBisect",
|
|
|
|
|
"testCubeBisect",
|
|
|
|
|
"expectedCubeBisect",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"bisect",
|
|
|
|
|
{"plane_co": (0, 0, 0), "plane_no": (0, 1, 1), "clear_inner": True, "use_fill": True},
|
|
|
|
|
'FACE',
|
|
|
|
|
{0, 1, 2, 3, 4, 5},
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# blend from shape
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeBlendFromShape",
|
|
|
|
|
"testCubeBlendFromShape",
|
|
|
|
|
"expectedCubeBlendFromShape",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("blend_from_shape", {"shape": "Key 1"}, 'FACE', {0, 1, 2, 3, 4, 5})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# bridge edge loops
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeBridgeEdgeLoop",
|
|
|
|
|
"testCubeBrigeEdgeLoop",
|
|
|
|
|
"expectedCubeBridgeEdgeLoop",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("bridge_edge_loops", {}, "FACE", {0, 1})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# decimate
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"MonkeyDecimate",
|
|
|
|
|
"testMonkeyDecimate",
|
|
|
|
|
"expectedMonkeyDecimate",
|
|
|
|
|
[OperatorSpecEditMode("decimate", {"ratio": 0.1}, "FACE", {i for i in range(500)})],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# delete
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeDeleteVertices",
|
|
|
|
|
"testCubeDeleteVertices",
|
|
|
|
|
"expectedCubeDeleteVertices",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("delete", {}, "VERT", {3})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeDeleteFaces",
|
|
|
|
|
"testCubeDeleteFaces",
|
|
|
|
|
"expectedCubeDeleteFaces",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("delete", {}, "FACE", {0})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeDeleteEdges",
|
|
|
|
|
"testCubeDeleteEdges",
|
|
|
|
|
"expectedCubeDeleteEdges",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("delete", {}, "EDGE", {0, 1, 2, 3})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# delete edge loop
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"MonkeyDeleteEdgeLoopVertices",
|
|
|
|
|
"testMokneyDeleteEdgeLoopVertices",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedMonkeyDeleteEdgeLoopVertices",
|
|
|
|
|
[OperatorSpecEditMode("delete_edgeloop", {}, "VERT", MONKEY_LOOP_VERT)],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"MonkeyDeleteEdgeLoopEdges",
|
|
|
|
|
"testMokneyDeleteEdgeLoopEdges",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedMonkeyDeleteEdgeLoopEdges",
|
|
|
|
|
[OperatorSpecEditMode("delete_edgeloop", {}, "EDGE", MONKEY_LOOP_EDGE)],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# delete loose
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeDeleteLooseVertices",
|
|
|
|
|
"testCubeDeleteLooseVertices",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedCubeDeleteLooseVertices",
|
2025-07-11 17:13:50 +10:00
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"delete_loose",
|
|
|
|
|
{"use_verts": True, "use_edges": False, "use_faces": False},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(12)},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"CubeDeleteLooseEdges",
|
|
|
|
|
"testCubeDeleteLooseEdges",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedCubeDeleteLooseEdges",
|
2025-07-11 17:13:50 +10:00
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"delete_loose",
|
|
|
|
|
{"use_verts": False, "use_edges": True, "use_faces": False},
|
|
|
|
|
"EDGE",
|
|
|
|
|
{i for i in range(14)},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"CubeDeleteLooseFaces",
|
|
|
|
|
"testCubeDeleteLooseFaces",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedCubeDeleteLooseFaces",
|
2025-07-11 17:13:50 +10:00
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"delete_loose",
|
|
|
|
|
{"use_verts": False, "use_edges": False, "use_faces": True},
|
|
|
|
|
"FACE",
|
|
|
|
|
{i for i in range(7)},
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# dissolve degenerate
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeDissolveDegenerate",
|
|
|
|
|
"testCubeDissolveDegenerate",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedCubeDissolveDegenerate",
|
|
|
|
|
[OperatorSpecEditMode("dissolve_degenerate", {}, "VERT", {i for i in range(8)})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# dissolve edges
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CylinderDissolveEdges.UseVertsFalse",
|
|
|
|
|
"testCylinderDissolveEdges",
|
|
|
|
|
"expectedCylinderDissolveEdges.DissolveNoVerts",
|
2025-01-29 16:14:32 -05:00
|
|
|
[OperatorSpecEditMode("dissolve_edges", {"use_verts": False}, "EDGE", {0, 5, 6, 9})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CylinderDissolveEdges.AngleThrehsoldNoDissolve",
|
|
|
|
|
"testCylinderDissolveEdges",
|
|
|
|
|
"expectedCylinderDissolveEdges.DissolveNoVerts",
|
|
|
|
|
[OperatorSpecEditMode("dissolve_edges", {"use_verts": True, "angle_threshold": 0}, "EDGE", {0, 5, 6, 9})],
|
2025-06-05 05:33:49 +00:00
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CylinderDissolveEdges.AngleThresholdSomeDissolve",
|
|
|
|
|
"testCylinderDissolveEdges",
|
|
|
|
|
"expectedCylinderDissolveEdges.DissolveThresh.218166",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"dissolve_edges", {"use_verts": True, "angle_threshold": 0.218166}, "EDGE", {0, 5, 6, 9}
|
|
|
|
|
)
|
|
|
|
|
],
|
2025-06-05 05:33:49 +00:00
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CylinderDissolveEdges.AngleThresholdAllDissolve",
|
|
|
|
|
"testCylinderDissolveEdges",
|
|
|
|
|
"expectedCylinderDissolveEdges.DissolveAllVerts",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"dissolve_edges", {"use_verts": True, "angle_threshold": 3.14159}, "EDGE", {0, 5, 6, 9}
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# dissolve faces
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeDissolveFaces",
|
|
|
|
|
"testCubeDissolveFaces",
|
|
|
|
|
"expectedCubeDissolveFaces",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("dissolve_faces", {}, "VERT", {5, 34, 47, 49, 83, 91, 95})],
|
|
|
|
|
),
|
2022-08-02 16:43:42 +02:00
|
|
|
# dissolve limited
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"SphereDissolveLimited",
|
|
|
|
|
"testSphereDissolveLimited",
|
|
|
|
|
"expectedSphereDissolveLimited",
|
2022-08-02 16:43:42 +02:00
|
|
|
[OperatorSpecEditMode("dissolve_limited", {"angle_limit": 0.610865}, "FACE", {20, 23, 26, 29, 32})],
|
|
|
|
|
),
|
|
|
|
|
# dissolve mode
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"PlaneDissolveMode",
|
|
|
|
|
"testPlaneDissolveMode",
|
|
|
|
|
"expectedPlaneDissolveMode",
|
2022-08-02 16:43:42 +02:00
|
|
|
[OperatorSpecEditMode("dissolve_mode", {"use_verts": True}, "FACE", {0, 1, 2, 10, 12, 13})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# dissolve verts
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeDissolveVerts",
|
|
|
|
|
"testCubeDissolveVerts",
|
|
|
|
|
"expectedCubeDissolveVerts",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("dissolve_verts", {}, "VERT", {16, 20, 22, 23, 25})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# duplicate
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"ConeDuplicateVertices",
|
|
|
|
|
"testConeDuplicateVertices",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedConeDuplicateVertices",
|
|
|
|
|
[OperatorSpecEditMode("duplicate", {}, "VERT", {i for i in range(33)} - {23})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"ConeDuplicateOneVertex",
|
|
|
|
|
"testConeDuplicateOneVertex",
|
|
|
|
|
"expectedConeDuplicateOneVertex",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("duplicate", {}, "VERT", {23})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"ConeDuplicateFaces",
|
|
|
|
|
"testConeDuplicateFaces",
|
|
|
|
|
"expectedConeDuplicateFaces",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("duplicate", {}, "FACE", {6, 9})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"ConeDuplicateEdges",
|
|
|
|
|
"testConeDuplicateEdges",
|
|
|
|
|
"expectedConeDuplicateEdges",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("duplicate", {}, "EDGE", {i for i in range(64)})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# edge collapse
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CylinderEdgeCollapse",
|
|
|
|
|
"testCylinderEdgeCollapse",
|
|
|
|
|
"expectedCylinderEdgeCollapse",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("edge_collapse", {}, "EDGE", {1, 9, 4})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# edge face add
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeEdgeFaceAddFace",
|
|
|
|
|
"testCubeEdgeFaceAddFace",
|
|
|
|
|
"expectedCubeEdgeFaceAddFace",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("edge_face_add", {}, "VERT", {1, 3, 4, 5, 7})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeEdgeFaceAddEdge",
|
|
|
|
|
"testCubeEdgeFaceAddEdge",
|
|
|
|
|
"expectedCubeEdgeFaceAddEdge",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("edge_face_add", {}, "VERT", {4, 5})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# edge rotate
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeEdgeRotate",
|
|
|
|
|
"testCubeEdgeRotate",
|
|
|
|
|
"expectedCubeEdgeRotate",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("edge_rotate", {}, "EDGE", {1})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# edge split
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeEdgeSplit",
|
|
|
|
|
"testCubeEdgeSplit",
|
|
|
|
|
"expectedCubeEdgeSplit",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("edge_split", {}, "EDGE", {2, 5, 8, 11, 14, 17, 20, 23})],
|
|
|
|
|
),
|
2021-02-12 01:22:28 +05:30
|
|
|
# edge ring select - Cannot be tested. Need user input.
|
2025-07-11 17:13:50 +10:00
|
|
|
# SpecMeshTest(
|
|
|
|
|
# "CubeEdgeRingSelect",
|
|
|
|
|
# "testCubeEdgeRingSelect",
|
|
|
|
|
# "expectedCubeEdgeRingSelect",
|
|
|
|
|
# [OperatorSpecEditMode("edgering_select", {}, "EDGE", {5, 20, 25, 26})],
|
|
|
|
|
# ),
|
|
|
|
|
# SpecMeshTest(
|
|
|
|
|
# "EmptyMeshEdgeRingSelect",
|
|
|
|
|
# "testGridEdgeRingSelect",
|
|
|
|
|
# "expectedGridEdgeRingSelect",
|
|
|
|
|
# [OperatorSpecEditMode("edgering_select", {}, "VERT", {65, 66, 67})],
|
|
|
|
|
# ),
|
|
|
|
|
# SpecMeshTest(
|
|
|
|
|
# "EmptyMeshEdgeRingSelect",
|
|
|
|
|
# "testEmptyMeshdgeRingSelect",
|
|
|
|
|
# "expectedEmptyMeshEdgeRingSelect",
|
|
|
|
|
# [OperatorSpecEditMode("edgering_select", {}, "VERT", {})],
|
|
|
|
|
# ),
|
2021-01-30 22:42:21 +01:00
|
|
|
# edges select sharp
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeEdgesSelectSharp",
|
|
|
|
|
"testCubeEdgeSelectSharp",
|
|
|
|
|
"expectedCubeEdgeSelectSharp",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("edges_select_sharp", {}, "EDGE", {20})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"SphereEdgesSelectSharp",
|
|
|
|
|
"testSphereEdgesSelectSharp",
|
|
|
|
|
"expectedSphereEdgeSelectSharp",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("edges_select_sharp", {"sharpness": 0.25}, "EDGE", {288})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"HoledSphereEdgesSelectSharp",
|
|
|
|
|
"testHoledSphereEdgesSelectSharp",
|
|
|
|
|
"expectedHoledSphereEdgeSelectSharp",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("edges_select_sharp", {"sharpness": 0.18}, "VERT", {})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"EmptyMeshEdgesSelectSharp",
|
|
|
|
|
"testEmptyMeshEdgeSelectSharp",
|
|
|
|
|
"expectedEmptyMeshEdgeSelectSharp",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("edges_select_sharp", {}, "VERT", {})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# face make planar
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"MonkeyFaceMakePlanar",
|
|
|
|
|
"testMonkeyFaceMakePlanar",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedMonkeyFaceMakePlanar",
|
|
|
|
|
[OperatorSpecEditMode("face_make_planar", {}, "FACE", {i for i in range(500)})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# face split by edges
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"PlaneFaceSplitByEdges",
|
|
|
|
|
"testPlaneFaceSplitByEdges",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedPlaneFaceSplitByEdges",
|
|
|
|
|
[OperatorSpecEditMode("face_split_by_edges", {}, "VERT", {i for i in range(6)})],
|
|
|
|
|
),
|
2021-02-12 01:22:28 +05:30
|
|
|
# faces select linked flat
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeFacesSelectLinkedFlat",
|
|
|
|
|
"testCubeFaceSelectLinkedFlat",
|
|
|
|
|
"expectedCubeFaceSelectLinkedFlat",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("faces_select_linked_flat", {}, "FACE", {7})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"PlaneFacesSelectLinkedFlat",
|
|
|
|
|
"testPlaneFaceSelectLinkedFlat",
|
|
|
|
|
"expectedPlaneFaceSelectLinkedFlat",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("faces_select_linked_flat", {}, "VERT", {1})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"EmptyMeshFacesSelectLinkedFlat",
|
|
|
|
|
"testEmptyMeshFaceSelectLinkedFlat",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedEmptyMeshFaceSelectLinkedFlat",
|
|
|
|
|
[OperatorSpecEditMode("faces_select_linked_flat", {}, "VERT", {})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# fill
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"IcosphereFill",
|
|
|
|
|
"testIcosphereFill",
|
|
|
|
|
"expectedIcosphereFill",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("fill", {}, "EDGE", {20, 21, 22, 23, 24, 45, 46, 47, 48, 49})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"IcosphereFillUseBeautyFalse",
|
2025-07-11 17:13:50 +10:00
|
|
|
"testIcosphereFillUseBeautyFalse",
|
|
|
|
|
"expectedIcosphereFillUseBeautyFalse",
|
|
|
|
|
[OperatorSpecEditMode("fill", {"use_beauty": False}, "EDGE", {20, 21, 22, 23, 24, 45, 46, 47, 48, 49})],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# fill grid
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"PlaneFillGrid",
|
|
|
|
|
"testPlaneFillGrid",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedPlaneFillGrid",
|
|
|
|
|
[OperatorSpecEditMode("fill_grid", {}, "EDGE", {1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 15})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"PlaneFillGridSimpleBlending",
|
|
|
|
|
"testPlaneFillGridSimpleBlending",
|
|
|
|
|
"expectedPlaneFillGridSimpleBlending",
|
2025-07-11 17:13:50 +10:00
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"fill_grid", {"use_interp_simple": True}, "EDGE", {1, 2, 3, 4, 5, 7, 9, 10, 11, 12, 13, 15}
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
2025-02-18 13:04:20 +11:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"PlaneFillGridReplaceExistingTris",
|
|
|
|
|
"testPlaneFillGridReplaceExisting",
|
2025-02-18 13:04:20 +11:00
|
|
|
"expectedPlaneFillGridReplaceExistingTris",
|
|
|
|
|
[OperatorSpecEditMode("fill_grid", {}, "EDGE", {44, 60, 45, 68, 43, 75, 76, 73, 74, 70, 33, 59, 35, 67})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"PlaneFillGridReplaceExistingQuads",
|
|
|
|
|
"testPlaneFillGridReplaceExisting",
|
2025-02-18 13:04:20 +11:00
|
|
|
"expectedPlaneFillGridReplaceExistingQuads",
|
|
|
|
|
[OperatorSpecEditMode("fill_grid", {}, "FACE", {3, 4, 5, 9, 10, 11, 14, 15, 16})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# fill holes
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"SphereFillHoles",
|
|
|
|
|
"testSphereFillHoles",
|
|
|
|
|
"expectedSphereFillHoles",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("fill_holes", {"sides": 9}, "VERT", {i for i in range(481)})],
|
|
|
|
|
),
|
2021-04-29 19:59:11 +05:30
|
|
|
# face shade smooth (not a real test)
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeShadeSmooth",
|
|
|
|
|
"testCubeShadeSmooth",
|
|
|
|
|
"expectedCubeShadeSmooth",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("faces_shade_smooth", {}, "VERT", {i for i in range(8)})],
|
|
|
|
|
),
|
2021-04-29 19:59:11 +05:30
|
|
|
# faces shade flat (not a real test)
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeShadeFlat",
|
|
|
|
|
"testCubeShadeFlat",
|
|
|
|
|
"expectedCubeShadeFlat",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("faces_shade_flat", {}, "FACE", {i for i in range(6)})],
|
|
|
|
|
),
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
# hide
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"HideFace",
|
|
|
|
|
"testCubeHideFace",
|
|
|
|
|
"expectedCubeHideFace",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("hide", {}, "FACE", {3})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"HideEdge",
|
|
|
|
|
"testCubeHideEdge",
|
|
|
|
|
"expectedCubeHideEdge",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("hide", {}, "EDGE", {1})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"HideVertex",
|
|
|
|
|
"testCubeHideVertex",
|
|
|
|
|
"expectedCubeHideVertex",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("hide", {}, "VERT", {0})],
|
|
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
# inset faces
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
|
|
|
|
"CubeInset",
|
2025-07-11 17:13:50 +10:00
|
|
|
"testCubeInset",
|
|
|
|
|
"expectedCubeInset",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"inset",
|
|
|
|
|
{"thickness": 0.2},
|
|
|
|
|
"VERT",
|
|
|
|
|
{5, 16, 17, 19, 20, 22, 23, 34, 47, 49, 50, 52, 59, 61, 62, 65, 83, 91, 95},
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"CubeInsetEvenOffsetFalse",
|
2025-07-11 17:13:50 +10:00
|
|
|
"testCubeInsetEvenOffsetFalse",
|
|
|
|
|
"expectedCubeInsetEvenOffsetFalse",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"inset",
|
|
|
|
|
{"thickness": 0.2, "use_even_offset": False},
|
|
|
|
|
"VERT",
|
|
|
|
|
{5, 16, 17, 19, 20, 22, 23, 34, 47, 49, 50, 52, 59, 61, 62, 65, 83, 91, 95},
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"CubeInsetDepth",
|
|
|
|
|
"testCubeInsetDepth",
|
2025-07-11 17:13:50 +10:00
|
|
|
"expectedCubeInsetDepth",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"inset",
|
|
|
|
|
{"thickness": 0.2, "depth": 0.2},
|
|
|
|
|
"VERT",
|
|
|
|
|
{5, 16, 17, 19, 20, 22, 23, 34, 47, 49, 50, 52, 59, 61, 62, 65, 83, 91, 95},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"GridInsetRelativeOffset",
|
|
|
|
|
"testGridInsetRelativeOffset",
|
2022-04-19 15:25:55 +10:00
|
|
|
"expectedGridInsetRelativeOffset",
|
2025-07-11 17:13:50 +10:00
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"inset",
|
|
|
|
|
{"thickness": 0.4, "use_relative_offset": True},
|
|
|
|
|
"FACE",
|
|
|
|
|
{35, 36, 37, 45, 46, 47, 55, 56, 57},
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
2021-01-30 22:42:21 +01:00
|
|
|
# loop multi select
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"MokeyLoopMultiSelect",
|
|
|
|
|
"testMonkeyLoopMultiSelect",
|
|
|
|
|
"expectedMonkeyLoopMultiSelect",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("loop_multi_select", {}, "VERT", {355, 359, 73, 301, 302})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"HoledGridLoopMultiSelect",
|
|
|
|
|
"testGridLoopMultiSelect",
|
|
|
|
|
"expectedGridLoopMultiSelect",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("loop_multi_select", {}, "VERT", {257, 169, 202, 207, 274, 278, 63})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"EmptyMeshLoopMultiSelect",
|
|
|
|
|
"testEmptyMeshLoopMultiSelect",
|
|
|
|
|
"expectedEmptyMeshLoopMultiSelect",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("loop_multi_select", {}, "VERT", {})],
|
|
|
|
|
),
|
2021-04-29 19:59:11 +05:30
|
|
|
# mark seam
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeMarkSeam",
|
|
|
|
|
"testCubeMarkSeam",
|
|
|
|
|
"expectedCubeMarkSeam",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("mark_seam", {}, "EDGE", {1})],
|
|
|
|
|
),
|
2022-08-02 16:43:42 +02:00
|
|
|
# merge normals
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeMergeNormals",
|
|
|
|
|
"testCubeMergeNormals",
|
|
|
|
|
"expectedCubeMergeNormals",
|
2022-08-02 16:43:42 +02:00
|
|
|
[OperatorSpecEditMode("merge_normals", {}, "FACE", {3, 5})],
|
|
|
|
|
),
|
2024-06-21 19:06:00 +02:00
|
|
|
# Quads convert to tris
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeQuadsConvertToTris",
|
|
|
|
|
"testCubeQuadsConvertToTris",
|
|
|
|
|
"expectedCubeQuadsConvertToTris",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"quads_convert_to_tris",
|
|
|
|
|
{"quad_method": "BEAUTY", "ngon_method": "BEAUTY"},
|
|
|
|
|
'FACE',
|
|
|
|
|
{0, 1, 2, 3, 4, 5},
|
|
|
|
|
)
|
|
|
|
|
],
|
2024-06-21 19:06:00 +02:00
|
|
|
),
|
2021-01-30 22:42:21 +01:00
|
|
|
# select all
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CircleSelectAll",
|
|
|
|
|
"testCircleSelectAll",
|
|
|
|
|
"expectedCircleSelectAll",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_all", {}, "VERT", {1})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"IsolatedVertsSelectAll",
|
|
|
|
|
"testIsolatedVertsSelectAll",
|
|
|
|
|
"expectedIsolatedVertsSelectAll",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_all", {}, "VERT", {})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"EmptyMeshSelectAll",
|
|
|
|
|
"testEmptyMeshSelectAll",
|
|
|
|
|
"expectedEmptyMeshSelectAll",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_all", {}, "VERT", {})],
|
|
|
|
|
),
|
2021-01-30 22:42:21 +01:00
|
|
|
# select axis - Cannot be tested. Needs active vert selection
|
2021-07-27 21:00:28 +05:30
|
|
|
# SpecMeshTest("MonkeySelectAxisX", "testMonkeySelectAxisX", "expectedMonkeySelectAxisX",
|
2021-01-30 22:42:21 +01:00
|
|
|
# [OperatorSpecEditMode("select_axis", {"axis": "X"}, "VERT", {13})]),
|
2021-07-27 21:00:28 +05:30
|
|
|
# SpecMeshTest("MonkeySelectAxisY", "testMonkeySelectAxisY", "expectedMonkeySelectAxisY",
|
2021-01-30 22:42:21 +01:00
|
|
|
# [OperatorSpecEditMode("select_axis", {"axis": "Y", "sign": "NEG"}, "FACE", {317})]),
|
2021-07-27 21:00:28 +05:30
|
|
|
# SpecMeshTest("MonkeySelectAxisXYZ", "testMonkeySelectAxisXYZ", "expectedMonkeySelectAxisXYZ",
|
2021-01-30 22:42:21 +01:00
|
|
|
# [OperatorSpecEditMode("select_axis", {"axis": "X", "sign": "NEG"}, "FACE", {317}),
|
|
|
|
|
# OperatorSpecEditMode("select_axis", {"axis": "Y", "sign": "POS"}, "FACE", {}),
|
|
|
|
|
# OperatorSpecEditMode("select_axis", {"axis": "Z", "sign": "NEG"}, "FACE", {})]),
|
|
|
|
|
# select faces by sides
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeSelectFacesBySide",
|
|
|
|
|
"testCubeSelectFacesBySide",
|
|
|
|
|
"expectedCubeSelectFacesBySide",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_face_by_sides", {"number": 4}, "FACE", {})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeSelectFacesBySideGreater",
|
|
|
|
|
"testCubeSelectFacesBySideGreater",
|
|
|
|
|
"expectedCubeSelectFacesBySideGreater",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"select_face_by_sides", {"number": 4, "type": "GREATER", "extend": True}, "FACE", {}
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeSelectFacesBySideLess",
|
|
|
|
|
"testCubeSelectFacesBySideLess",
|
|
|
|
|
"expectedCubeSelectFacesBySideLess",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"select_face_by_sides", {"number": 4, "type": "GREATER", "extend": True}, "FACE", {}
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
2021-01-30 22:42:21 +01:00
|
|
|
# select interior faces
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeSelectInteriorFaces",
|
|
|
|
|
"testCubeSelectInteriorFaces",
|
|
|
|
|
"expectedCubeSelectInteriorFaces",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_face_by_sides", {"number": 4}, "FACE", {})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"HoledCubeSelectInteriorFaces",
|
|
|
|
|
"testHoledCubeSelectInteriorFaces",
|
|
|
|
|
"expectedHoledCubeSelectInteriorFaces",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_face_by_sides", {"number": 4}, "FACE", {})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"EmptyMeshSelectInteriorFaces",
|
|
|
|
|
"testEmptyMeshSelectInteriorFaces",
|
|
|
|
|
"expectedEmptyMeshSelectInteriorFaces",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_face_by_sides", {"number": 4}, "FACE", {})],
|
|
|
|
|
),
|
2021-01-30 22:42:21 +01:00
|
|
|
# select less
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"MonkeySelectLess",
|
|
|
|
|
"testMonkeySelectLess",
|
|
|
|
|
"expectedMonkeySelectLess",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"select_less",
|
|
|
|
|
{},
|
|
|
|
|
"VERT",
|
|
|
|
|
{
|
|
|
|
|
2, 8, 24, 34, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 68,
|
|
|
|
|
69, 70, 71, 74, 75, 78, 80, 81, 82, 83, 90, 91, 93, 95, 97, 99,
|
|
|
|
|
101, 109, 111, 115, 117, 119, 121, 123, 125, 127, 129, 130, 131,
|
|
|
|
|
132, 133, 134, 135, 136, 138, 141, 143, 145, 147, 149, 151, 153,
|
|
|
|
|
155, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
|
|
|
|
|
175, 176, 177, 178, 181, 182, 184, 185, 186, 187, 188, 189, 190,
|
|
|
|
|
192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
|
|
|
|
|
206, 207, 208, 210, 216, 217, 218, 219, 220, 221, 222, 229, 230,
|
|
|
|
|
231, 233, 235, 237, 239, 241, 243, 245, 247, 249, 251, 253, 255,
|
|
|
|
|
257, 259, 263, 267, 269, 271, 275, 277, 289, 291, 293, 295, 309,
|
|
|
|
|
310, 311, 312, 316, 317, 318, 319, 320, 323, 325, 327, 329, 331,
|
|
|
|
|
341, 347, 349, 350, 351, 354, 356, 359, 361, 363, 365, 367, 369,
|
|
|
|
|
375, 379, 381, 382, 385, 386, 387, 388, 389, 390, 391, 392, 393,
|
|
|
|
|
394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406,
|
|
|
|
|
407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
|
|
|
|
|
420, 421, 423, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
|
|
|
|
|
435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447,
|
|
|
|
|
448, 449, 450, 451, 452, 454, 455, 456, 457, 458, 459, 460, 461,
|
|
|
|
|
462, 463, 464, 471, 473, 474, 475, 476, 477, 478, 479, 480, 481,
|
|
|
|
|
482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 495,
|
|
|
|
|
496, 497, 498, 499, 502, 505,
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"HoledCubeSelectLess",
|
|
|
|
|
"testHoledCubeSelectLess",
|
|
|
|
|
"expectedHoledCubeSelectLess",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_face_by_sides", {}, "FACE", {})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"EmptyMeshSelectLess",
|
|
|
|
|
"testEmptyMeshSelectLess",
|
|
|
|
|
"expectedEmptyMeshSelectLess",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_face_by_sides", {}, "VERT", {})],
|
|
|
|
|
),
|
2021-01-30 22:42:21 +01:00
|
|
|
# select linked
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"PlanesSelectLinked",
|
|
|
|
|
"testPlanesSelectLinked",
|
|
|
|
|
"expectedPlanesSelectedLinked",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_linked", {}, "VERT", {7})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubesSelectLinked",
|
|
|
|
|
"testCubesSelectLinked",
|
|
|
|
|
"expectedCubesSelectLinked",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_linked", {}, "VERT", {11})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"EmptyMeshSelectLinked",
|
|
|
|
|
"testEmptyMeshSelectLinked",
|
|
|
|
|
"expectedEmptyMeshSelectLinked",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_linked", {}, "VERT", {})],
|
|
|
|
|
),
|
2021-04-29 19:59:11 +05:30
|
|
|
# select nth (checkered deselect)
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CircleSelect2nd",
|
|
|
|
|
"testCircleSelect2nd",
|
|
|
|
|
"expectedCircleSelect2nd",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("select_nth", {}, "VERT", {i for i in range(32)})],
|
|
|
|
|
),
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
# Subdivide edgering - Not currently functional, operator returns inconsistently
|
2025-07-11 17:13:50 +10:00
|
|
|
# SpecMeshTest(
|
|
|
|
|
# "SubdivideEdgeringSurface",
|
|
|
|
|
# "testCylinderSubdivideEdgering",
|
|
|
|
|
# "expectedCylinderSubdivideEdgeringSurface",
|
|
|
|
|
# [
|
|
|
|
|
# OperatorSpecEditMode(
|
|
|
|
|
# "subdivide_edgering",
|
|
|
|
|
# {"number_cuts": 5, "interpolation": 'SURFACE', "profile_shape_factor": 0.1},
|
|
|
|
|
# "EDGE",
|
|
|
|
|
# {0, (i for i in range(96) if (i % 3))},
|
|
|
|
|
# )
|
|
|
|
|
# ],
|
|
|
|
|
# ),
|
|
|
|
|
# SpecMeshTest(
|
|
|
|
|
# "SubdivideEdgeringPath",
|
|
|
|
|
# "testCylinderSubdivideEdgering",
|
|
|
|
|
# "expectedCylinderSubdivideEdgeringPath",
|
|
|
|
|
# [
|
|
|
|
|
# OperatorSpecEditMode(
|
|
|
|
|
# "subdivide_edgering",
|
|
|
|
|
# {"number_cuts": 5, "interpolation": 'PATH', "profile_shape_factor": 0.1},
|
|
|
|
|
# "EDGE",
|
|
|
|
|
# {0, (i for i in range(96) if (i % 3))},
|
|
|
|
|
# )
|
|
|
|
|
# ],
|
|
|
|
|
# ),
|
|
|
|
|
# SpecMeshTest(
|
|
|
|
|
# "SubdivideEdgeringLinear",
|
|
|
|
|
# "testCylinderSubdivideEdgering",
|
|
|
|
|
# "expectedCylinderSubdivideEdgeringLinear",
|
|
|
|
|
# [
|
|
|
|
|
# OperatorSpecEditMode(
|
|
|
|
|
# "subdivide_edgering",
|
|
|
|
|
# {"number_cuts": 5, "interpolation": 'LINEAR', "profile_shape_factor": 0.1},
|
|
|
|
|
# "EDGE",
|
|
|
|
|
# {0, (i for i in range(96) if (i % 3))},
|
|
|
|
|
# )
|
|
|
|
|
# ],
|
|
|
|
|
# ),
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
|
|
|
|
|
# Symmetry Snap
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"SymmetrySnap",
|
|
|
|
|
"testPlaneSymmetrySnap",
|
|
|
|
|
"expectedPlaneSymmetrySnap",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"symmetry_snap",
|
|
|
|
|
{"direction": 'POSITIVE_X', "threshold": 1, "factor": 0.75, "use_center": False},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(5)},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"SymmetrySnapCenter",
|
|
|
|
|
"testPlaneSymmetrySnap",
|
|
|
|
|
"expectedPlaneSymmetrySnapCenter",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"symmetry_snap",
|
|
|
|
|
{"direction": 'NEGATIVE_X', "threshold": 1, "factor": 0.75, "use_center": True},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(5)},
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
2022-11-16 18:28:01 +01:00
|
|
|
# Triangulate Faces
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"Triangulate Faces",
|
|
|
|
|
"testCubeTriangulate",
|
|
|
|
|
"expectedCubeTriangulate",
|
2022-11-16 18:28:01 +01:00
|
|
|
[OperatorSpecEditMode("quads_convert_to_tris", {}, "FACE", {i for i in range(6)})],
|
|
|
|
|
),
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
# Tris to Quads
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"TrisToQuads 10 deg no topo",
|
|
|
|
|
"testPlanesTrisToQuad",
|
|
|
|
|
"expectedPlanesTrisToQuad.10.notopo",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"tris_convert_to_quads",
|
|
|
|
|
{
|
|
|
|
|
"face_threshold": 0.174533,
|
|
|
|
|
"shape_threshold": 0.174533,
|
|
|
|
|
"topology_influence": 0,
|
|
|
|
|
"deselect_joined": False,
|
|
|
|
|
"uvs": True,
|
|
|
|
|
"vcols": True,
|
|
|
|
|
"seam": True,
|
|
|
|
|
"sharp": True,
|
|
|
|
|
"materials": True,
|
|
|
|
|
},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(42)},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"TrisToQuads 10 deg negligible topo",
|
|
|
|
|
"testPlanesTrisToQuad",
|
|
|
|
|
"expectedPlanesTrisToQuad.10.notopo",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"tris_convert_to_quads",
|
|
|
|
|
{
|
|
|
|
|
"face_threshold": 0.174533,
|
|
|
|
|
"shape_threshold": 0.174533,
|
|
|
|
|
"topology_influence": 0.01,
|
|
|
|
|
"deselect_joined": False,
|
|
|
|
|
"uvs": True,
|
|
|
|
|
"vcols": True,
|
|
|
|
|
"seam": True,
|
|
|
|
|
"sharp": True,
|
|
|
|
|
"materials": True,
|
|
|
|
|
},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(42)},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"TrisToQuads 180 deg no topo",
|
|
|
|
|
"testPlanesTrisToQuad",
|
|
|
|
|
"expectedPlanesTrisToQuad.180.notopo",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"tris_convert_to_quads",
|
|
|
|
|
{
|
|
|
|
|
"face_threshold": 3.14159,
|
|
|
|
|
"shape_threshold": 3.14159,
|
|
|
|
|
"topology_influence": 0,
|
|
|
|
|
"deselect_joined": False,
|
|
|
|
|
"uvs": True,
|
|
|
|
|
"vcols": True,
|
|
|
|
|
"seam": True,
|
|
|
|
|
"sharp": True,
|
|
|
|
|
"materials": True,
|
|
|
|
|
},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(42)},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"TrisToQuads 180 deg topo",
|
|
|
|
|
"testPlanesTrisToQuad",
|
|
|
|
|
"expectedPlanesTrisToQuad.180.topo",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"tris_convert_to_quads",
|
|
|
|
|
{
|
|
|
|
|
"face_threshold": 3.14159,
|
|
|
|
|
"shape_threshold": 3.14159,
|
|
|
|
|
"topology_influence": 1,
|
|
|
|
|
"deselect_joined": False,
|
|
|
|
|
"uvs": True,
|
|
|
|
|
"vcols": True,
|
|
|
|
|
"seam": True,
|
|
|
|
|
"sharp": True,
|
|
|
|
|
"materials": True,
|
|
|
|
|
},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(42)},
|
|
|
|
|
)
|
|
|
|
|
],
|
Modeling: add support for merging triangles with reference to topology
A new parameter, topology influence, is added that causes the
join_triangles operator to prioritize edge joins that create quads with
sensible geometry relative to existing quads, instead of selecting the
'flattest' and 'squarest' next pair and then leaving leftover triangles
with no partners to merge with.
This produces its best results with the face and shape thresholds set to
180 degrees (no hard limits as a restriction against merging) and
topology influence somewhere between 100-130%, depending on the mesh.
Too low and many parallelograms and triangles are left, too high and the
algorithm tries too hard and starts making errors.
Note that both quads already present in the selection, as well as the
quads that are generated during the operator, will influence the
topology around them. This allows the modeler to manually merge a few
quads in key areas of the mesh, as a hint to the algorithm, indicating
what result they way they want to see, and the algorithm will then take
those quads into account and try to build around them according to the
modeler's guidance.
A new checkbox to leave only the remaining triangles selected has also
been added. This helps users visualize what remains to be fixed.
Ref !128610
2024-10-10 14:32:03 +11:00
|
|
|
),
|
2021-04-29 19:59:11 +05:30
|
|
|
# unsubdivide
|
|
|
|
|
# normal case
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeFaceUnsubdivide",
|
|
|
|
|
"testCubeUnsubdivide",
|
|
|
|
|
"expectedCubeUnsubdivide",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("unsubdivide", {}, "FACE", {i for i in range(6)})],
|
|
|
|
|
),
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
# UV Manipulation
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"UVRotate",
|
|
|
|
|
"testCubeUV",
|
|
|
|
|
"expectedCubeUVRotate",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("uvs_rotate", {}, "FACE", {2})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"UVRotateCCW",
|
|
|
|
|
"testCubeUV",
|
|
|
|
|
"expectedCubeUVRotateCCW",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("uvs_rotate", {"use_ccw": True}, "FACE", {2})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"UVReverse",
|
|
|
|
|
"testCubeUV",
|
|
|
|
|
"expectedCubeUVReverse",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("uvs_reverse", {}, "FACE", {2})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"UVAdd",
|
|
|
|
|
"testCubeUV",
|
|
|
|
|
"expectedCubeUVAdd",
|
|
|
|
|
[OperatorSpecEditMode("uv_texture_add", {}, "FACE", {})],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"UVRemove",
|
|
|
|
|
"testCubeUV",
|
|
|
|
|
"expectedCubeUVRemove",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("uv_texture_remove", {}, "FACE", {})],
|
|
|
|
|
),
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
# Vert Connect Concave
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"VertexConnectConcave",
|
|
|
|
|
"testPlaneVertConnectConcave",
|
|
|
|
|
"expectedPlaneVertConnectConcave",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("vert_connect_concave", {}, "FACE", {0})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"VertexConnectConcaveConvexPentagon",
|
|
|
|
|
"testPentagonVertConnectConcave",
|
|
|
|
|
"expectedPentagonVertConnectConcave",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("vert_connect_concave", {}, "FACE", {0})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"VertexConnectConcaveQuad",
|
|
|
|
|
"testPlaneVertConnectConcaveQuad",
|
|
|
|
|
"expectedPlaneVertConnectConcaveQuad",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("vert_connect_concave", {}, "FACE", {0})],
|
|
|
|
|
),
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
# Vert Connect Nonplanar
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"VertexConnectNonplanar",
|
|
|
|
|
"testPlaneVertConnectNonplanar",
|
|
|
|
|
"expectedPlaneVertConnectNonplanar",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"vert_connect_nonplanar", {"angle_limit": 0.17453292}, "VERT", {i for i in range(9)}
|
|
|
|
|
)
|
|
|
|
|
],
|
2022-04-19 15:25:55 +10:00
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"VertexConnectNonplanarNgon",
|
|
|
|
|
"testPlaneVertConnectNonplanarNgon",
|
|
|
|
|
"expectedPlaneVertConnectNonplanarNgon",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("vert_connect_nonplanar", {"angle_limit": 0.218166}, "VERT", {i for i in range(6)})],
|
|
|
|
|
),
|
2023-02-12 14:37:16 +11:00
|
|
|
# #87259 - test cases
|
2022-04-19 15:25:55 +10:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"CubeEdgeUnsubdivide",
|
|
|
|
|
"testCubeEdgeUnsubdivide",
|
|
|
|
|
"expectedCubeEdgeUnsubdivide",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("unsubdivide", {}, "EDGE", {i for i in range(6)})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"UVSphereUnsubdivide",
|
|
|
|
|
"testUVSphereUnsubdivide",
|
|
|
|
|
"expectedUVSphereUnsubdivide",
|
2022-04-19 15:25:55 +10:00
|
|
|
[OperatorSpecEditMode("unsubdivide", {'iterations': 9}, "FACE", {i for i in range(512)})],
|
|
|
|
|
),
|
2021-04-29 19:59:11 +05:30
|
|
|
# vert connect path
|
|
|
|
|
# Tip: It works only if there is an already existing face or more than 2 vertices.
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"PlaneVertConnectPath",
|
|
|
|
|
"testPlaneVertConnectPath",
|
|
|
|
|
"expectedPlaneVertConnectPath",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"vert_connect_path",
|
|
|
|
|
{},
|
|
|
|
|
"VERT",
|
|
|
|
|
(0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14),
|
|
|
|
|
select_history=True,
|
|
|
|
|
)
|
|
|
|
|
],
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
),
|
|
|
|
|
# Laplacian Smooth
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"LaplacianSmoothDefault",
|
|
|
|
|
"testSphereLaplacianSmoothDefault",
|
|
|
|
|
"expectedSphereLaplacianSmoothDefault",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"vertices_smooth_laplacian", {"preserve_volume": False}, "VERT", {i for i in range(482)}
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"LaplacianSmoothHighValues",
|
|
|
|
|
"testSphereLaplacianSmoothHigh",
|
|
|
|
|
"expectedSphereLaplacianSmoothHigh",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"vertices_smooth_laplacian",
|
|
|
|
|
{"preserve_volume": False, "repeat": 100, "lambda_factor": 10.0},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(482)},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"LaplacianSmoothBorder",
|
|
|
|
|
"testCubeLaplacianSmoothBorder",
|
|
|
|
|
"expectedCubeLaplacianSmoothBorder",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"vertices_smooth_laplacian",
|
|
|
|
|
{"preserve_volume": False, "lambda_border": 1.0},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(25)},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"LaplacianSmoothHighBorder",
|
|
|
|
|
"testCubeLaplacianSmoothHighBorder",
|
|
|
|
|
"expectedCubeLaplacianSmoothHighBorder",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"vertices_smooth_laplacian",
|
|
|
|
|
{"preserve_volume": False, "lambda_border": 100.0},
|
|
|
|
|
"VERT",
|
|
|
|
|
{i for i in range(25)},
|
|
|
|
|
)
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
|
|
|
|
"LaplacianSmoothPreserveVolume",
|
|
|
|
|
"testSphereLaplacianSmoothPreserveVol",
|
|
|
|
|
"expectedSphereLaplacianSmoothPreserveVol",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"vertices_smooth_laplacian", {"preserve_volume": True}, "VERT", {i for i in range(482)}
|
|
|
|
|
)
|
|
|
|
|
],
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
),
|
|
|
|
|
# wireframe
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"WireFrameDefault",
|
|
|
|
|
"testCubeWireframeDefault",
|
|
|
|
|
"expectedCubeWireframeDefault",
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
[OperatorSpecEditMode("wireframe", {}, "FACE", {i for i in range(6)})],
|
|
|
|
|
),
|
|
|
|
|
SpecMeshTest(
|
2025-07-11 17:13:50 +10:00
|
|
|
"WireFrameAlt",
|
|
|
|
|
"testCubeWireframeAlt",
|
|
|
|
|
"expectedCubeWireframeAlt",
|
|
|
|
|
[
|
|
|
|
|
OperatorSpecEditMode(
|
|
|
|
|
"wireframe",
|
|
|
|
|
{
|
|
|
|
|
"use_boundary": False,
|
|
|
|
|
"use_even_offset": False,
|
|
|
|
|
"use_relative_offset": True,
|
|
|
|
|
"use_replace": False,
|
|
|
|
|
"thickness": 0.3,
|
|
|
|
|
"offset": 0.3,
|
|
|
|
|
"use_crease": True,
|
|
|
|
|
"crease_weight": 0.01,
|
|
|
|
|
},
|
|
|
|
|
"FACE",
|
|
|
|
|
{i for i in range(6)},
|
|
|
|
|
)
|
|
|
|
|
],
|
Tests: add edit-mesh operator tests
Added operator tests for hide, symmetry_snap, tris_convert_to_quads,
uvs_rotate, uvs_rotate, uv_texture_add, uv_texture_remove,
vert_connect_concave, vert_connect_nonplanar, vertex_color_add,
vertex_color_remove, vertices_smooth_laplacian, wireframe,
sculpt_vertex_color_add and sculpt_vertex_color_remove.
Ref D11798
Reviewed By: campbellbarton
2021-11-30 17:35:57 +11:00
|
|
|
),
|
2020-01-13 07:11:45 -05:00
|
|
|
]
|
|
|
|
|
|
2020-12-17 20:44:55 +05:30
|
|
|
operators_test = RunTest(tests)
|
2020-01-13 07:11:45 -05:00
|
|
|
|
|
|
|
|
command = list(sys.argv)
|
|
|
|
|
for i, cmd in enumerate(command):
|
|
|
|
|
if cmd == "--run-all-tests":
|
2020-12-17 20:44:55 +05:30
|
|
|
operators_test.do_compare = True
|
2020-01-13 07:11:45 -05:00
|
|
|
operators_test.run_all_tests()
|
|
|
|
|
break
|
|
|
|
|
elif cmd == "--run-test":
|
2020-12-17 20:44:55 +05:30
|
|
|
operators_test.do_compare = False
|
|
|
|
|
name = command[i + 1]
|
|
|
|
|
operators_test.run_test(name)
|
2020-01-13 07:11:45 -05:00
|
|
|
break
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2020-04-27 17:43:47 +02:00
|
|
|
main()
|