23 [&](
const int i) {
data.slice(
faces[
i].drop_front(1)).reverse(); });
34 T *
data =
static_cast<T *
>(
53 const int a = face[j + 1];
54 const int b = face.
last(j);
55 std::swap(corner_verts[a], corner_verts[
b]);
56 std::swap(corner_edges[a - 1], corner_edges[
b]);
68 for (
const int corner :
faces[
i]) {
82 if (
ELEM(iter.
name,
".corner_vert",
".corner_edge")) {
87 using T = decltype(dummy);
88 flip_corner_data(faces, selection, attribute.span.typed<T>());
93 mesh.tag_face_winding_changed();
CustomData interface, see also DNA_customdata_types.h.
int CustomData_sizeof(eCustomDataType type)
void * CustomData_get_layer_for_write(CustomData *data, eCustomDataType type, int totelem)
int CustomData_number_of_layers(const CustomData *data, eCustomDataType type)
void * CustomData_get_layer_n_for_write(CustomData *data, eCustomDataType type, int n, int totelem)
void BKE_mesh_mdisp_flip(MDisps *md, bool use_loop_mdisp_flip)
BMesh const char void * data
constexpr int64_t last(const int64_t n=0) const
constexpr int64_t size() const
void foreach_attribute(const FunctionRef< void(const AttributeIter &)> fn) const
GSpanAttributeWriter lookup_for_write_span(StringRef attribute_id)
void foreach_index(Fn &&fn) const
void convert_to_static_type(const CPPType &cpp_type, const Func &func)
static void flip_corner_data(const OffsetIndices< int > faces, const IndexMask &face_selection, MutableSpan< T > data)
static void flip_custom_data_type(const OffsetIndices< int > faces, CustomData &corner_data, const IndexMask &face_selection, const eCustomDataType data_type)
void mesh_flip_faces(Mesh &mesh, const IndexMask &selection)