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]:
|
||
|---|---|---|
| .. | ||
| reference | ||
| all_curves.obj | ||
| all_curves_as_nurbs.obj | ||
| all_objects.mtl | ||
| all_objects.obj | ||
| all_objects_mat_groups.mtl | ||
| all_objects_mat_groups.obj | ||
| all_quads.obj | ||
| all_tris.mtl | ||
| all_tris.obj | ||
| cube.mtl | ||
| cube.obj | ||
| cube4m_clamp_2.json | ||
| cube4m_clamp_2.obj | ||
| cube4m_clamp_05.json | ||
| cube4m_clamp_05.obj | ||
| cube_all_data_triangulated.obj | ||
| cube_loose_edges_verts.obj | ||
| cube_normal_edit.obj | ||
| cube_o_after_verts.obj | ||
| cube_vertex_groups.obj | ||
| cubes_clamp_15.json | ||
| cubes_clamp_15.obj | ||
| cubes_positioned.obj | ||
| cubes_vertex_colors.obj | ||
| cubes_vertex_colors_mrgb.obj | ||
| cubes_with_textures.mtl | ||
| cubes_with_textures.obj | ||
| cubes_with_textures_rel.mtl | ||
| cubes_with_textures_rel.obj | ||
| edges.obj | ||
| faces_invalid_or_with_holes.obj | ||
| fgons.obj | ||
| invalid_faces.obj | ||
| invalid_indices.obj | ||
| invalid_syntax.obj | ||
| invalid_vertex_group_index.obj | ||
| makehuman.obj | ||
| materials.mtl | ||
| materials.obj | ||
| materials_pbr.mtl | ||
| materials_pbr.obj | ||
| materials_without_pbr.mtl | ||
| materials_without_pbr.obj | ||
| non_uniform_scale.obj | ||
| nurbs.obj | ||
| nurbs_curves.obj | ||
| nurbs_cyclic.obj | ||
| nurbs_endpoint.obj | ||
| nurbs_invalid_indices.obj | ||
| nurbs_manual.obj | ||
| nurbs_mesh.obj | ||
| polylines.obj | ||
| rhino_curve_arc_bezier_deg2.obj | ||
| rhino_curve_bezier_deg3_cyclic.obj | ||
| rhino_curve_bezier_deg4_rat.obj | ||
| rhino_curve_circle_bezier_deg2_cyclic.obj | ||
| rhino_curve_uniform_cyclic_deg3.obj | ||
| rhino_curve_uniform_cyclic_deg7.obj | ||
| split_options.obj | ||
| split_options_by_group.json | ||
| split_options_by_group.obj | ||
| split_options_by_object_and_group.json | ||
| split_options_by_object_and_group.obj | ||
| split_options_none.json | ||
| split_options_none.obj | ||
| suzanne_all_data.obj | ||
| texture.png | ||
| vertex_colors_non_contiguous.obj | ||
| vertices.obj | ||