"""Verify point culling removes its dangling wire geometry.""" import bpy from tools.nodes.common.nodes import interface_socket from tools.nodes.common.validity import delete_invalid_points def test_point_culling_removes_wire_edges_without_removing_adjacent_surface(): bpy.ops.wm.read_factory_settings(use_empty=True) mesh = bpy.data.meshes.new("Two Quads") mesh.from_pydata([(0, 0, 0), (1, 0, 0), (2, 0, 0), (0, 1, 0), (1, 1, 0), (2, 1, 0)], [], [(0, 1, 4, 3), (1, 2, 5, 4)]) obj = bpy.data.objects.new("Surface", mesh) bpy.context.collection.objects.link(obj) group = bpy.data.node_groups.new("Point Culling", "GeometryNodeTree") interface_socket(group, "Geometry", "INPUT", "NodeSocketGeometry") interface_socket(group, "Geometry", "OUTPUT", "NodeSocketGeometry") inlet = group.nodes.new("NodeGroupInput") outlet = group.nodes.new("NodeGroupOutput") index = group.nodes.new("GeometryNodeInputIndex") invalid = group.nodes.new("ShaderNodeMath") invalid.operation = "LESS_THAN" invalid.inputs[1].default_value = 1 group.links.new(index.outputs[0], invalid.inputs[0]) geometry = delete_invalid_points(group, inlet.outputs["Geometry"], invalid.outputs[0]) group.links.new(geometry, outlet.inputs["Geometry"]) modifier = obj.modifiers.new("Cull", "NODES") modifier.node_group = group evaluated = obj.evaluated_get(bpy.context.evaluated_depsgraph_get()) result = evaluated.to_mesh() try: assert len(result.polygons) == 1 assert len(result.edges) == 4 assert {tuple(vertex.co) for vertex in result.vertices} == { (1, 0, 0), (2, 0, 0), (1, 1, 0), (2, 1, 0), } finally: evaluated.to_mesh_clear()