UV: skip adding UV data layers when sync-select is used

When sync select is enabled, the data layers aren't accessed
so there is no need to add them.

Also skip adding a "pin" layer when clearing pinned UV's.
This commit is contained in:
Campbell Barton
2025-03-13 14:40:56 +11:00
parent 4a8e50e5de
commit 571bab615c
4 changed files with 213 additions and 69 deletions

View File

@@ -924,6 +924,20 @@ void BM_uv_map_ensure_pin_attr(BMesh *bm, const StringRef uv_map_name)
bm, &bm->ldata, CD_PROP_BOOL, BKE_uv_map_pin_name_get(uv_map_name, name));
}
bool BM_uv_map_has_vert_select_attr(const BMesh *bm, const StringRef uv_map_name)
{
char name[MAX_CUSTOMDATA_LAYER_NAME];
return (CustomData_get_named_layer_index(
&bm->ldata, CD_PROP_BOOL, BKE_uv_map_vert_select_name_get(uv_map_name, name)) != -1);
}
bool BM_uv_map_has_pin_attr(const BMesh *bm, const StringRef uv_map_name)
{
char name[MAX_CUSTOMDATA_LAYER_NAME];
return (CustomData_get_named_layer_index(
&bm->ldata, CD_PROP_BOOL, BKE_uv_map_pin_name_get(uv_map_name, name)) != -1);
}
void BM_data_layer_free(BMesh *bm, CustomData *data, int type)
{
CustomData olddata = *data;

View File

@@ -65,6 +65,10 @@ void BM_data_interp_face_vert_edge(
void BM_data_layer_add(BMesh *bm, CustomData *data, int type);
void BM_data_layer_add_named(BMesh *bm, CustomData *data, int type, blender::StringRef name);
void BM_data_layer_ensure_named(BMesh *bm, CustomData *data, int type, blender::StringRef name);
bool BM_data_layer_has_named(const BMesh *bm,
const CustomData *data,
int type,
blender::StringRef name);
void BM_data_layer_free(BMesh *bm, CustomData *data, int type);
/** Ensure the dependent boolean layers exist for all face corner #CD_PROP_FLOAT2 layers. */
@@ -74,6 +78,9 @@ void BM_uv_map_ensure_vert_select_attr(BMesh *bm, blender::StringRef uv_map_name
void BM_uv_map_ensure_edge_select_attr(BMesh *bm, blender::StringRef uv_map_name);
void BM_uv_map_ensure_pin_attr(BMesh *bm, blender::StringRef uv_map_name);
bool BM_uv_map_has_vert_select_attr(const BMesh *bm, blender::StringRef uv_map_name);
bool BM_uv_map_has_pin_attr(const BMesh *bm, blender::StringRef uv_map_name);
/**
* Remove a named custom data layer, if it existed. Return true if the layer was removed.
*/

View File

@@ -1299,14 +1299,26 @@ static int uv_pin_exec(bContext *C, wmOperator *op)
BMEditMesh *em = BKE_editmesh_from_object(obedit);
bool changed = false;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_pin_attr(em->bm, active_uv_name);
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if (synced_selection && (em->bm->totvertsel == 0)) {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
if (synced_selection) {
if (em->bm->totvertsel == 0) {
continue;
}
}
else {
if (!BM_uv_map_has_vert_select_attr(em->bm, active_uv_name)) {
continue;
}
}
if (clear && !BM_uv_map_has_pin_attr(em->bm, active_uv_name)) {
continue;
}
BM_uv_map_ensure_pin_attr(em->bm, active_uv_name);
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
if (!uvedit_face_visible_test(scene, efa)) {
continue;
@@ -1407,9 +1419,15 @@ static int uv_hide_exec(bContext *C, wmOperator *op)
BMLoop *l;
BMIter iter, liter;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata,
CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if (ts->uv_flag & UV_SYNC_SELECTION) {
@@ -1574,9 +1592,15 @@ static int uv_reveal_exec(bContext *C, wmOperator *op)
BMLoop *l;
BMIter iter, liter;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata,
CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
/* NOTE: Selecting faces is delayed so that it doesn't select verts/edges and confuse certain

View File

@@ -1277,14 +1277,14 @@ static void bm_clear_uv_vert_selection(const Scene *scene, BMesh *bm, const BMUV
void ED_uvedit_selectmode_flush(const Scene *scene, BMEditMesh *em)
{
const ToolSettings *ts = scene->toolsettings;
BLI_assert((ts->uv_flag & UV_SYNC_SELECTION) == 0);
UNUSED_VARS_NDEBUG(ts);
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
BLI_assert((ts->uv_flag & UV_SYNC_SELECTION) == 0);
UNUSED_VARS_NDEBUG(ts);
/* Vertex Mode only. */
if (ts->uv_selectmode & UV_SELECT_VERTEX) {
BMFace *efa;
@@ -1314,14 +1314,14 @@ void uvedit_select_flush(const Scene *scene, BMEditMesh *em)
/* Careful when using this in face select mode.
* For face selections with sticky mode enabled, this can create invalid selection states. */
const ToolSettings *ts = scene->toolsettings;
BLI_assert((ts->uv_flag & UV_SYNC_SELECTION) == 0);
UNUSED_VARS_NDEBUG(ts);
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
BLI_assert((ts->uv_flag & UV_SYNC_SELECTION) == 0);
UNUSED_VARS_NDEBUG(ts);
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
@@ -1342,14 +1342,14 @@ void uvedit_select_flush(const Scene *scene, BMEditMesh *em)
void uvedit_deselect_flush(const Scene *scene, BMEditMesh *em)
{
const ToolSettings *ts = scene->toolsettings;
BLI_assert((ts->uv_flag & UV_SYNC_SELECTION) == 0);
UNUSED_VARS_NDEBUG(ts);
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
BLI_assert((ts->uv_flag & UV_SYNC_SELECTION) == 0);
UNUSED_VARS_NDEBUG(ts);
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
@@ -1540,6 +1540,9 @@ static int uv_select_edgeloop(Scene *scene, Object *obedit, UvNearestHit *hit, c
BMEditMesh *em = BKE_editmesh_from_object(obedit);
bool select;
/* NOTE: this is a special case, even when sync select is enabled,
* the flags are used then flushed to the vertices.
* So these need to be ensured even though the layers aren't used afterwards. */
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
@@ -1623,12 +1626,18 @@ static int uv_select_edgeloop(Scene *scene, Object *obedit, UvNearestHit *hit, c
static int uv_select_faceloop(Scene *scene, Object *obedit, UvNearestHit *hit, const bool extend)
{
const ToolSettings *ts = scene->toolsettings;
BMEditMesh *em = BKE_editmesh_from_object(obedit);
bool select;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if (!extend) {
@@ -1698,9 +1707,15 @@ static int uv_select_edgering(Scene *scene, Object *obedit, UvNearestHit *hit, c
(ts->uv_selectmode & UV_SELECT_VERTEX);
bool select;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if (!extend) {
@@ -1811,10 +1826,18 @@ static void uv_select_linked_multi(Scene *scene,
char *flag;
BMEditMesh *em = BKE_editmesh_from_object(obedit);
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BLI_assert(active_uv_name != nullptr);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (uv_sync_select) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata,
CD_PROP_FLOAT2);
BLI_assert(active_uv_name != nullptr);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
BM_mesh_elem_table_ensure(em->bm, BM_FACE); /* we can use this too */
@@ -2056,9 +2079,15 @@ static int uv_select_more_less(bContext *C, const bool select)
bool changed = false;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata,
CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if (ts->uv_flag & UV_SYNC_SELECTION) {
@@ -2260,6 +2289,10 @@ bool uvedit_select_is_any_selected_multi(const Scene *scene, const Span<Object *
static void uv_select_all(const Scene *scene, BMEditMesh *em, bool select_all)
{
const ToolSettings *ts = scene->toolsettings;
BLI_assert((ts->uv_flag & UV_SYNC_SELECTION) == 0);
UNUSED_VARS_NDEBUG(ts);
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
@@ -2521,10 +2554,17 @@ static bool uv_mouse_select_multi(bContext *C,
if (found) {
Object *obedit = hit.ob;
BMEditMesh *em = BKE_editmesh_from_object(obedit);
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata,
CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if (selectmode == UV_SELECT_FACE) {
is_selected = uvedit_face_select_test(scene, hit.efa, offsets);
}
@@ -2560,9 +2600,16 @@ static bool uv_mouse_select_multi(bContext *C,
if (found) {
Object *obedit = hit.ob;
BMEditMesh *em = BKE_editmesh_from_object(obedit);
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata,
CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if (selectmode == UV_SELECT_ISLAND) {
@@ -3288,9 +3335,16 @@ static void uv_select_flush_from_tag_face(const Scene *scene, Object *obedit, co
BMFace *efa;
BMLoop *l;
BMIter iter, liter;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if ((ts->uv_flag & UV_SYNC_SELECTION) == 0 &&
@@ -3358,9 +3412,14 @@ static void uv_select_flush_from_tag_loop(const Scene *scene, Object *obedit, co
BMLoop *l;
BMIter iter, liter;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if ((ts->uv_flag & UV_SYNC_SELECTION) == 0 && ts->uv_sticky == SI_STICKY_VERTEX) {
@@ -3432,9 +3491,14 @@ static void uv_select_flush_from_loop_edge_flag(const Scene *scene, BMEditMesh *
BMLoop *l;
BMIter iter, liter;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if ((ts->uv_flag & UV_SYNC_SELECTION) == 0 &&
@@ -3502,7 +3566,6 @@ static int uv_box_select_exec(bContext *C, wmOperator *op)
BMIter iter, liter;
float *luv;
rctf rectf;
bool pinned;
const bool use_face_center = ((ts->uv_flag & UV_SYNC_SELECTION) ?
(ts->selectmode == SCE_SELECT_FACE) :
(ts->uv_selectmode == UV_SELECT_FACE));
@@ -3520,7 +3583,7 @@ static int uv_box_select_exec(bContext *C, wmOperator *op)
const bool select = (sel_op != SEL_OP_SUB);
const bool use_pre_deselect = SEL_OP_USE_PRE_DESELECT(sel_op);
pinned = RNA_boolean_get(op->ptr, "pinned");
const bool pinned = RNA_boolean_get(op->ptr, "pinned");
bool changed_multi = false;
@@ -3537,10 +3600,20 @@ static int uv_box_select_exec(bContext *C, wmOperator *op)
bool changed = false;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_pin_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
/* NOTE: sync selection can't do pinned. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata,
CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (pinned) {
BM_uv_map_ensure_pin_attr(em->bm, active_uv_name);
}
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
/* do actual selection */
@@ -3787,9 +3860,15 @@ static int uv_circle_select_exec(bContext *C, wmOperator *op)
bool changed = false;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata,
CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
/* do selection */
@@ -3983,9 +4062,15 @@ static bool do_lasso_select_mesh_uv(bContext *C, const Span<int2> mcoords, const
BMEditMesh *em = BKE_editmesh_from_object(obedit);
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata,
CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
if (use_face_center) { /* Face Center Select. */
@@ -4165,11 +4250,19 @@ static int uv_select_pinned_exec(bContext *C, wmOperator *op)
for (Object *obedit : objects) {
BMEditMesh *em = BKE_editmesh_from_object(obedit);
bool changed = false;
const char *active_uv_name = CustomData_get_active_layer_name(&em->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_pin_attr(em->bm, active_uv_name);
if (!BM_uv_map_has_pin_attr(em->bm, active_uv_name)) {
continue;
}
bool changed = false;
if (ts->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
BM_uv_map_ensure_vert_select_attr(em->bm, active_uv_name);
BM_uv_map_ensure_edge_select_attr(em->bm, active_uv_name);
}
const BMUVOffsets offsets = BM_uv_map_get_offsets(em->bm);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
@@ -4438,12 +4531,18 @@ static int uv_select_overlap(bContext *C, const bool extend)
BMEditMesh *em_b = BKE_editmesh_from_object(obedit_b);
BMFace *face_a = em_a->bm->ftable[o_a->face_index];
BMFace *face_b = em_b->bm->ftable[o_b->face_index];
const char *uv_a_name = CustomData_get_active_layer_name(&em_a->bm->ldata, CD_PROP_FLOAT2);
const char *uv_b_name = CustomData_get_active_layer_name(&em_b->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em_a->bm, uv_a_name);
BM_uv_map_ensure_vert_select_attr(em_b->bm, uv_b_name);
BM_uv_map_ensure_edge_select_attr(em_a->bm, uv_a_name);
BM_uv_map_ensure_edge_select_attr(em_b->bm, uv_b_name);
if (scene->toolsettings->uv_flag & UV_SYNC_SELECTION) {
/* Pass. */
}
else {
const char *uv_a_name = CustomData_get_active_layer_name(&em_a->bm->ldata, CD_PROP_FLOAT2);
const char *uv_b_name = CustomData_get_active_layer_name(&em_b->bm->ldata, CD_PROP_FLOAT2);
BM_uv_map_ensure_vert_select_attr(em_a->bm, uv_a_name);
BM_uv_map_ensure_vert_select_attr(em_b->bm, uv_b_name);
BM_uv_map_ensure_edge_select_attr(em_a->bm, uv_a_name);
BM_uv_map_ensure_edge_select_attr(em_b->bm, uv_b_name);
}
const BMUVOffsets offsets_a = BM_uv_map_get_offsets(em_a->bm);
const BMUVOffsets offsets_b = BM_uv_map_get_offsets(em_b->bm);