125 for (const int face : range) {
126 for (const int corner : faces[face]) {
127 EditLoopData &value = corners_data[corner];
129 if (const BMFace *bm_face = bm_original_face_get(mr, face)) {
130 mesh_render_data_face_flag(mr, bm_face, {-1, -1, -1, -1}, value);
132 if (const BMVert *bm_vert = bm_original_vert_get(mr, corner_verts[corner])) {
133 mesh_render_data_vert_flag(mr, bm_vert, value);
135 if (const BMEdge *bm_edge = bm_original_edge_get(mr, corner_edges[corner])) {
136 mesh_render_data_edge_flag(mr, bm_edge, value);
143 const Span<int> loose_edges = mr.loose_edges;
145 for (const int i : range) {
146 EditLoopData &value_1 = loose_edge_data[i * 2 + 0];
147 EditLoopData &value_2 = loose_edge_data[i * 2 + 1];
148 if (const BMEdge *bm_edge = bm_original_edge_get(mr, loose_edges[i])) {
150 mesh_render_data_edge_flag(mr, bm_edge, value_1);
154 value_2 = value_1 = {};
156 const int2 edge = edges[loose_edges[i]];
157 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[0])) {
158 mesh_render_data_vert_flag(mr, bm_vert, value_1);
160 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[1])) {
161 mesh_render_data_vert_flag(mr, bm_vert, value_2);
166 const Span<int> loose_verts = mr.loose_verts;
168 for (const int i : range) {
169 loose_vert_data[i] = {};
170 if (const BMVert *eve = bm_original_vert_get(mr, loose_verts[i])) {
171 mesh_render_data_vert_flag(mr, eve, loose_vert_data[i]);
186 for (const int face_index : range) {
187 const BMFace &face = *BM_face_at_index(&const_cast<BMesh &>(bm), face_index);
188 const BMLoop *loop = BM_FACE_FIRST_LOOP(&face);
189 for ([[maybe_unused]] const int i : IndexRange(face.len)) {
190 const int index = BM_elem_index_get(loop);
191 EditLoopData &value = corners_data[index];
193 mesh_render_data_face_flag(mr, &face, {-1, -1, -1, -1}, corners_data[index]);
194 mesh_render_data_edge_flag(mr, loop->e, corners_data[index]);
195 mesh_render_data_vert_flag(mr, loop->v, corners_data[index]);
201 const Span<int> loose_edges = mr.loose_edges;
203 for (const int i : range) {
204 EditLoopData &value_1 = loose_edge_data[i * 2 + 0];
205 EditLoopData &value_2 = loose_edge_data[i * 2 + 1];
206 const BMEdge &edge = *BM_edge_at_index(&const_cast<BMesh &>(bm), loose_edges[i]);
208 mesh_render_data_edge_flag(mr, &edge, value_1);
210 mesh_render_data_vert_flag(mr, edge.v1, value_1);
211 mesh_render_data_vert_flag(mr, edge.v2, value_2);
215 const Span<int> loose_verts = mr.loose_verts;
217 for (const int i : range) {
218 loose_vert_data[i] = {};
219 const BMVert &vert = *BM_vert_at_index(&const_cast<BMesh &>(bm), loose_verts[i]);
220 mesh_render_data_vert_flag(mr, &vert, loose_vert_data[i]);
253 MutableSpan loose_edge_data = vbo_data.
slice(corners_num, loose_edges_num * verts_per_edge);
257 for (const int subdiv_quad : range) {
258 const int coarse_face = subdiv_loop_face_index[subdiv_quad * 4];
259 for (const int subdiv_corner : IndexRange(subdiv_quad * 4, 4)) {
260 EditLoopData &value = corners_data[subdiv_corner];
263 if (const BMFace *bm_face = bm_original_face_get(mr, coarse_face)) {
264 mesh_render_data_face_flag(mr, bm_face, {-1, -1, -1, -1}, value);
267 const int vert_origindex = subdiv_loop_vert_index[subdiv_corner];
268 if (vert_origindex != -1) {
269 if (const BMVert *bm_vert = bm_original_vert_get(mr, vert_origindex)) {
270 mesh_render_data_vert_flag(mr, bm_vert, value);
274 const int edge_origindex = subdiv_loop_edge_index[subdiv_corner];
275 if (edge_origindex != -1) {
276 if (const BMEdge *bm_edge = BM_edge_at_index(mr.bm, edge_origindex)) {
277 mesh_render_data_edge_flag(mr, bm_edge, value);
285 const Span<int> loose_edges = mr.loose_edges;
287 for (const int i : range) {
288 MutableSpan<EditLoopData> data = loose_edge_data.slice(i * verts_per_edge, verts_per_edge);
289 if (const BMEdge *edge = bm_original_edge_get(mr, loose_edges[i])) {
290 EditLoopData value{};
291 mesh_render_data_edge_flag(mr, edge, value);
297 const int2 edge = edges[loose_edges[i]];
298 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[0])) {
299 mesh_render_data_vert_flag(mr, bm_vert, data.first());
301 if (const BMVert *bm_vert = bm_original_vert_get(mr, edge[1])) {
302 mesh_render_data_vert_flag(mr, bm_vert, data.last());
307 const Span<int> loose_verts = mr.loose_verts;
309 for (const int i : range) {
310 loose_vert_data[i] = {};
311 if (const BMVert *eve = bm_original_vert_get(mr, loose_verts[i])) {
312 mesh_render_data_vert_flag(mr, eve, loose_vert_data[i]);
330 MutableSpan loose_edge_data = vbo_data.
slice(corners_num, loose_edges_num * verts_per_edge);
335 for (const int subdiv_quad : range) {
336 const int coarse_face = subdiv_loop_face_index[subdiv_quad * 4];
337 const BMFace *bm_face = BM_face_at_index(&bm, coarse_face);
338 for (const int subdiv_corner : IndexRange(subdiv_quad * 4, 4)) {
339 EditLoopData &value = corners_data[subdiv_corner];
342 mesh_render_data_face_flag(mr, bm_face, {-1, -1, -1, -1}, value);
344 const int vert_origindex = subdiv_loop_vert_index[subdiv_corner];
345 if (vert_origindex != -1) {
346 const BMVert *bm_vert = BM_vert_at_index(mr.bm, vert_origindex);
347 mesh_render_data_vert_flag(mr, bm_vert, value);
350 const int edge_origindex = subdiv_loop_edge_index[subdiv_corner];
351 if (edge_origindex != -1) {
352 const BMEdge *bm_edge = BM_edge_at_index(mr.bm, edge_origindex);
353 mesh_render_data_edge_flag(mr, bm_edge, value);
359 const Span<int> loose_edges = mr.loose_edges;
361 for (const int i : range) {
362 MutableSpan<EditLoopData> data = loose_edge_data.slice(i * verts_per_edge, verts_per_edge);
363 const BMEdge *edge = BM_edge_at_index(&bm, loose_edges[i]);
364 EditLoopData value{};
365 mesh_render_data_edge_flag(mr, edge, value);
367 mesh_render_data_vert_flag(mr, edge->v1, data.first());
368 mesh_render_data_vert_flag(mr, edge->v2, data.last());
372 const Span<int> loose_verts = mr.loose_verts;
374 for (const int i : range) {
375 loose_vert_data[i] = {};
376 const BMVert *vert = BM_vert_at_index(&bm, loose_verts[i]);
377 mesh_render_data_vert_flag(mr, vert, loose_vert_data[i]);
static void extract_edit_data(const OffsetIndices< int > points_by_curve, const IndexMask &curve_selection, const VArray< bool > &selection_attr, const bool mark_active, const uint32_t fill_value, MutableSpan< uint32_t > data)