mirror of
https://github.com/blender/blender
synced 2026-10-25 03:07:01 +03:00
Filling relied on original face ids to decide which
faces must stay valid, these are only set for CCW faces,
so every edge inside a CW face was dissolved.
The "Fill Curve" node then output only the holes.
Resolve by using the hole status for output types with holes,
as the even-odd & non-zero rules accept either orientation.
Note that this changes how winding multiple times is interpreted,
each lap flips the even-odd "fill" state.
So 1x winding around a polygon is filled, 2x isn't 3x is ... and so on
(matching SVG/PostScript behavior for the even-odd method).
Remove `USE_FACE_ORDERED_EDGE_DEDUPE` since it doesn't define expected
behavior for filling and was only added as a stress test.
An OBJ face that walks its boundary twice no longer imports as a face,
update the test data accordingly.
Technically a regression in [0], although it only worked by accident:
the face-id flood used to escape the face boundary and tag the whole CDT
(the slowdown [0] resolved), so no interior edges were dissolved.
Limiting the flood-fill exposed that `add_face_ids` skips CW faces,
leaving the input face winding to decide which faces are kept,
even though even-odd filling should ignore the winding.
[0]:
|
||
|---|---|---|
| .. | ||
| all_curves.txt | ||
| all_curves_as_nurbs.txt | ||
| all_objects.txt | ||
| all_objects_mat_groups.txt | ||
| all_quads.txt | ||
| all_tris.txt | ||
| cube.txt | ||
| cube4m_clamp_2.txt | ||
| cube4m_clamp_05.txt | ||
| cube_all_data_triangulated.txt | ||
| cube_loose_edges_verts.txt | ||
| cube_normal_edit.txt | ||
| cube_o_after_verts.txt | ||
| cube_vertex_groups.txt | ||
| cubes_clamp_15.txt | ||
| cubes_positioned.txt | ||
| cubes_vertex_colors.txt | ||
| cubes_vertex_colors_mrgb.txt | ||
| cubes_with_textures.txt | ||
| cubes_with_textures_rel.txt | ||
| edges.txt | ||
| faces_invalid_or_with_holes.txt | ||
| fgons.txt | ||
| invalid_faces.txt | ||
| invalid_indices.txt | ||
| invalid_syntax.txt | ||
| invalid_vertex_group_index.txt | ||
| makehuman.txt | ||
| materials.txt | ||
| materials_pbr.txt | ||
| materials_without_pbr.txt | ||
| non_uniform_scale.txt | ||
| nurbs.txt | ||
| nurbs_curves.txt | ||
| nurbs_cyclic.txt | ||
| nurbs_endpoint.txt | ||
| nurbs_invalid_indices.txt | ||
| nurbs_manual.txt | ||
| nurbs_mesh.txt | ||
| polylines.txt | ||
| rhino_curve_arc_bezier_deg2.txt | ||
| rhino_curve_bezier_deg3_cyclic.txt | ||
| rhino_curve_bezier_deg4_rat.txt | ||
| rhino_curve_circle_bezier_deg2_cyclic.txt | ||
| rhino_curve_uniform_cyclic_deg3.txt | ||
| rhino_curve_uniform_cyclic_deg7.txt | ||
| split_options.txt | ||
| split_options_by_group.txt | ||
| split_options_by_object_and_group.txt | ||
| split_options_none.txt | ||
| suzanne_all_data.txt | ||
| vertex_colors_non_contiguous.txt | ||
| vertices.txt | ||