Merge branch 'blender-v2.83-release'
This commit is contained in:
commit
920b698746
|
@ -93,9 +93,6 @@ class IMAGE_MT_view(Menu):
|
|||
layout.separator()
|
||||
|
||||
layout.prop(sima, "use_realtime_update")
|
||||
if show_uvedit:
|
||||
layout.prop(tool_settings, "show_uv_local_view")
|
||||
|
||||
layout.prop(uv, "show_metadata")
|
||||
|
||||
if paint.brush and (context.image_paint_object or sima.mode == 'PAINT'):
|
||||
|
|
|
@ -50,20 +50,17 @@ void ED_operatortypes_uvedit(void);
|
|||
void ED_keymap_uvedit(struct wmKeyConfig *keyconf);
|
||||
|
||||
bool ED_uvedit_minmax(const struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object *obedit,
|
||||
float min[2],
|
||||
float max[2]);
|
||||
void ED_uvedit_select_all(struct BMesh *bm);
|
||||
|
||||
bool ED_uvedit_minmax_multi(const struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object **objects_edit,
|
||||
uint objects_len,
|
||||
float r_min[2],
|
||||
float r_max[2]);
|
||||
bool ED_uvedit_center_multi(const struct Scene *scene,
|
||||
Image *ima,
|
||||
struct Object **objects_edit,
|
||||
uint objects_len,
|
||||
float r_cent[2],
|
||||
|
@ -95,11 +92,7 @@ void ED_object_assign_active_image(struct Main *bmain,
|
|||
bool ED_uvedit_test(struct Object *obedit);
|
||||
|
||||
/* visibility and selection */
|
||||
bool uvedit_face_visible_nolocal_ex(const struct ToolSettings *ts, struct BMFace *efa);
|
||||
bool uvedit_face_visible_test_ex(const struct ToolSettings *ts,
|
||||
struct Object *obedit,
|
||||
struct Image *ima,
|
||||
struct BMFace *efa);
|
||||
bool uvedit_face_visible_test_ex(const struct ToolSettings *ts, struct BMFace *efa);
|
||||
bool uvedit_face_select_test_ex(const struct ToolSettings *ts,
|
||||
struct BMFace *efa,
|
||||
const int cd_loop_uv_offset);
|
||||
|
@ -110,11 +103,7 @@ bool uvedit_uv_select_test_ex(const struct ToolSettings *ts,
|
|||
struct BMLoop *l,
|
||||
const int cd_loop_uv_offset);
|
||||
|
||||
bool uvedit_face_visible_nolocal(const struct Scene *scene, struct BMFace *efa);
|
||||
bool uvedit_face_visible_test(const struct Scene *scene,
|
||||
struct Object *obedit,
|
||||
struct Image *ima,
|
||||
struct BMFace *efa);
|
||||
bool uvedit_face_visible_test(const struct Scene *scene, struct BMFace *efa);
|
||||
bool uvedit_face_select_test(const struct Scene *scene,
|
||||
struct BMFace *efa,
|
||||
const int cd_loop_uv_offset);
|
||||
|
@ -175,12 +164,10 @@ void uvedit_uv_select_disable(struct BMEditMesh *em,
|
|||
|
||||
bool ED_uvedit_nearest_uv(const struct Scene *scene,
|
||||
struct Object *obedit,
|
||||
struct Image *ima,
|
||||
const float co[2],
|
||||
float *dist_sq,
|
||||
float r_uv[2]);
|
||||
bool ED_uvedit_nearest_uv_multi(const struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object **objects,
|
||||
const uint objects_len,
|
||||
const float co[2],
|
||||
|
|
|
@ -548,8 +548,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, const wm
|
|||
if (do_island_optimization) {
|
||||
UvElement *element;
|
||||
UvNearestHit hit = UV_NEAREST_HIT_INIT;
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
uv_find_nearest_vert(scene, ima, obedit, co, 0.0f, &hit);
|
||||
uv_find_nearest_vert(scene, obedit, co, 0.0f, &hit);
|
||||
|
||||
element = BM_uv_element_get(data->elementMap, hit.efa, hit.l);
|
||||
island_index = element->island;
|
||||
|
|
|
@ -885,7 +885,6 @@ static int image_view_selected_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
Scene *scene;
|
||||
ViewLayer *view_layer;
|
||||
Object *obedit;
|
||||
Image *ima;
|
||||
|
||||
/* retrieve state */
|
||||
sima = CTX_wm_space_image(C);
|
||||
|
@ -894,15 +893,13 @@ static int image_view_selected_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
view_layer = CTX_data_view_layer(C);
|
||||
obedit = CTX_data_edit_object(C);
|
||||
|
||||
ima = ED_space_image(sima);
|
||||
|
||||
/* get bounds */
|
||||
float min[2], max[2];
|
||||
if (ED_space_image_show_uvedit(sima, obedit)) {
|
||||
uint objects_len = 0;
|
||||
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
|
||||
view_layer, ((View3D *)NULL), &objects_len);
|
||||
bool success = ED_uvedit_minmax_multi(scene, ima, objects, objects_len, min, max);
|
||||
bool success = ED_uvedit_minmax_multi(scene, objects, objects_len, min, max);
|
||||
MEM_freeN(objects);
|
||||
if (!success) {
|
||||
return OPERATOR_CANCELLED;
|
||||
|
|
|
@ -1450,7 +1450,6 @@ static void UVsToTransData(const float aspect[2],
|
|||
void createTransUVs(bContext *C, TransInfo *t)
|
||||
{
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
Scene *scene = t->scene;
|
||||
ToolSettings *ts = CTX_data_tool_settings(C);
|
||||
|
||||
|
@ -1500,7 +1499,7 @@ void createTransUVs(bContext *C, TransInfo *t)
|
|||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
BMLoop *l;
|
||||
|
||||
if (!uvedit_face_visible_test(scene, tc->obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
BM_elem_flag_disable(efa, BM_ELEM_TAG);
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -217,14 +217,12 @@ static bool gizmo2d_calc_bounds(const bContext *C, float *r_center, float *r_min
|
|||
ScrArea *area = CTX_wm_area(C);
|
||||
bool changed = false;
|
||||
if (area->spacetype == SPACE_IMAGE) {
|
||||
SpaceImage *sima = area->spacedata.first;
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Image *ima = ED_space_image(sima);
|
||||
uint objects_len = 0;
|
||||
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
|
||||
view_layer, NULL, &objects_len);
|
||||
if (ED_uvedit_minmax_multi(scene, ima, objects, objects_len, r_min, r_max)) {
|
||||
if (ED_uvedit_minmax_multi(scene, objects, objects_len, r_min, r_max)) {
|
||||
changed = true;
|
||||
}
|
||||
MEM_freeN(objects);
|
||||
|
|
|
@ -1106,7 +1106,6 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec))
|
|||
}
|
||||
else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) {
|
||||
if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) {
|
||||
Image *ima = ED_space_image(t->area->spacedata.first);
|
||||
float co[2];
|
||||
|
||||
UI_view2d_region_to_view(&t->region->v2d, t->mval[0], t->mval[1], &co[0], &co[1]);
|
||||
|
@ -1117,7 +1116,7 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec))
|
|||
|
||||
float dist_sq = FLT_MAX;
|
||||
if (ED_uvedit_nearest_uv_multi(
|
||||
t->scene, ima, objects, objects_len, co, &dist_sq, t->tsnap.snapPoint)) {
|
||||
t->scene, objects, objects_len, co, &dist_sq, t->tsnap.snapPoint)) {
|
||||
t->tsnap.snapPoint[0] *= t->aspect[0];
|
||||
t->tsnap.snapPoint[1] *= t->aspect[1];
|
||||
|
||||
|
|
|
@ -58,8 +58,7 @@
|
|||
|
||||
/* UV Utilities */
|
||||
|
||||
static int uvedit_center(
|
||||
Scene *scene, Object **objects, uint objects_len, Image *ima, float center[2])
|
||||
static int uvedit_center(Scene *scene, Object **objects, uint objects_len, float center[2])
|
||||
{
|
||||
BMFace *f;
|
||||
BMLoop *l;
|
||||
|
@ -75,7 +74,7 @@ static int uvedit_center(
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, f)) {
|
||||
if (!uvedit_face_visible_test(scene, f)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -97,8 +96,10 @@ static int uvedit_center(
|
|||
return tot;
|
||||
}
|
||||
|
||||
static void uvedit_translate(
|
||||
Scene *scene, Object **objects, uint objects_len, Image *ima, const float delta[2])
|
||||
static void uvedit_translate(Scene *scene,
|
||||
Object **objects,
|
||||
uint objects_len,
|
||||
const float delta[2])
|
||||
{
|
||||
BMFace *f;
|
||||
BMLoop *l;
|
||||
|
@ -112,7 +113,7 @@ static void uvedit_translate(
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (f, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, f)) {
|
||||
if (!uvedit_face_visible_test(scene, f)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -134,7 +135,6 @@ static void uvedit_vertex_buttons(const bContext *C, uiBlock *block)
|
|||
{
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Image *ima = sima->image;
|
||||
float center[2];
|
||||
int imx, imy, step, digits;
|
||||
float width = 8 * UI_UNIT_X;
|
||||
|
@ -144,7 +144,7 @@ static void uvedit_vertex_buttons(const bContext *C, uiBlock *block)
|
|||
|
||||
ED_space_image_get_size(sima, &imx, &imy);
|
||||
|
||||
if (uvedit_center(scene, objects, objects_len, ima, center)) {
|
||||
if (uvedit_center(scene, objects, objects_len, center)) {
|
||||
float range_xy[2][2] = {
|
||||
{-10.0f, 10.0f},
|
||||
{-10.0f, 10.0f},
|
||||
|
@ -212,7 +212,6 @@ static void do_uvedit_vertex(bContext *C, void *UNUSED(arg), int event)
|
|||
{
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Image *ima = sima->image;
|
||||
float center[2], delta[2];
|
||||
int imx, imy;
|
||||
|
||||
|
@ -225,7 +224,7 @@ static void do_uvedit_vertex(bContext *C, void *UNUSED(arg), int event)
|
|||
CTX_data_view_layer(C), CTX_wm_view3d(C), &objects_len);
|
||||
|
||||
ED_space_image_get_size(sima, &imx, &imy);
|
||||
uvedit_center(scene, objects, objects_len, ima, center);
|
||||
uvedit_center(scene, objects, objects_len, center);
|
||||
|
||||
if (sima->flag & SI_COORDFLOATS) {
|
||||
delta[0] = uvedit_old_center[0] - center[0];
|
||||
|
@ -236,7 +235,7 @@ static void do_uvedit_vertex(bContext *C, void *UNUSED(arg), int event)
|
|||
delta[1] = uvedit_old_center[1] / imy - center[1];
|
||||
}
|
||||
|
||||
uvedit_translate(scene, objects, objects_len, ima, delta);
|
||||
uvedit_translate(scene, objects, objects_len, delta);
|
||||
|
||||
WM_event_add_notifier(C, NC_IMAGE, sima->image);
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
|
|
|
@ -57,13 +57,11 @@ typedef struct UvNearestHit {
|
|||
}
|
||||
|
||||
bool uv_find_nearest_vert(struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object *obedit,
|
||||
const float co[2],
|
||||
const float penalty_dist,
|
||||
struct UvNearestHit *hit_final);
|
||||
bool uv_find_nearest_vert_multi(struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object **objects,
|
||||
const uint objects_len,
|
||||
const float co[2],
|
||||
|
@ -71,24 +69,20 @@ bool uv_find_nearest_vert_multi(struct Scene *scene,
|
|||
struct UvNearestHit *hit_final);
|
||||
|
||||
bool uv_find_nearest_edge(struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object *obedit,
|
||||
const float co[2],
|
||||
struct UvNearestHit *hit_final);
|
||||
bool uv_find_nearest_edge_multi(struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object **objects,
|
||||
const uint objects_len,
|
||||
const float co[2],
|
||||
struct UvNearestHit *hit_final);
|
||||
|
||||
bool uv_find_nearest_face(struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object *obedit,
|
||||
const float co[2],
|
||||
struct UvNearestHit *hit_final);
|
||||
bool uv_find_nearest_face_multi(struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object **objects,
|
||||
const uint objects_len,
|
||||
const float co[2],
|
||||
|
@ -116,14 +110,11 @@ void UV_OT_stitch(struct wmOperatorType *ot);
|
|||
|
||||
/* uvedit_select.c */
|
||||
|
||||
bool uvedit_select_is_any_selected(struct Scene *scene, struct Image *ima, struct Object *obedit);
|
||||
bool uvedit_select_is_any_selected(struct Scene *scene, struct Object *obedit);
|
||||
bool uvedit_select_is_any_selected_multi(struct Scene *scene,
|
||||
struct Image *ima,
|
||||
struct Object **objects,
|
||||
const uint objects_len);
|
||||
const float *uvedit_first_selected_uv_from_vertex(struct Scene *scene,
|
||||
struct Object *obedit,
|
||||
struct Image *ima,
|
||||
struct BMVert *eve,
|
||||
const int cd_loop_uv_offset);
|
||||
|
||||
|
|
|
@ -252,12 +252,8 @@ void uv_poly_copy_aspect(float uv_orig[][2], float uv[][2], float aspx, float as
|
|||
}
|
||||
}
|
||||
|
||||
bool ED_uvedit_minmax_multi(const Scene *scene,
|
||||
Image *ima,
|
||||
Object **objects_edit,
|
||||
uint objects_len,
|
||||
float r_min[2],
|
||||
float r_max[2])
|
||||
bool ED_uvedit_minmax_multi(
|
||||
const Scene *scene, Object **objects_edit, uint objects_len, float r_min[2], float r_max[2])
|
||||
{
|
||||
bool changed = false;
|
||||
INIT_MINMAX2(r_min, r_max);
|
||||
|
@ -274,7 +270,7 @@ bool ED_uvedit_minmax_multi(const Scene *scene,
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -290,10 +286,9 @@ bool ED_uvedit_minmax_multi(const Scene *scene,
|
|||
return changed;
|
||||
}
|
||||
|
||||
bool ED_uvedit_minmax(
|
||||
const Scene *scene, Image *ima, Object *obedit, float r_min[2], float r_max[2])
|
||||
bool ED_uvedit_minmax(const Scene *scene, Object *obedit, float r_min[2], float r_max[2])
|
||||
{
|
||||
return ED_uvedit_minmax_multi(scene, ima, &obedit, 1, r_min, r_max);
|
||||
return ED_uvedit_minmax_multi(scene, &obedit, 1, r_min, r_max);
|
||||
}
|
||||
|
||||
/* Be careful when using this, it bypasses all synchronization options */
|
||||
|
@ -314,8 +309,10 @@ void ED_uvedit_select_all(BMesh *bm)
|
|||
}
|
||||
}
|
||||
|
||||
static bool ED_uvedit_median_multi(
|
||||
const Scene *scene, Image *ima, Object **objects_edit, uint objects_len, float co[2])
|
||||
static bool ED_uvedit_median_multi(const Scene *scene,
|
||||
Object **objects_edit,
|
||||
uint objects_len,
|
||||
float co[2])
|
||||
{
|
||||
uint sel = 0;
|
||||
zero_v2(co);
|
||||
|
@ -332,7 +329,7 @@ static bool ED_uvedit_median_multi(
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -351,24 +348,20 @@ static bool ED_uvedit_median_multi(
|
|||
return (sel != 0);
|
||||
}
|
||||
|
||||
bool ED_uvedit_center_multi(const Scene *scene,
|
||||
Image *ima,
|
||||
Object **objects_edit,
|
||||
uint objects_len,
|
||||
float cent[2],
|
||||
char mode)
|
||||
bool ED_uvedit_center_multi(
|
||||
const Scene *scene, Object **objects_edit, uint objects_len, float cent[2], char mode)
|
||||
{
|
||||
bool changed = false;
|
||||
|
||||
if (mode == V3D_AROUND_CENTER_BOUNDS) { /* bounding box */
|
||||
float min[2], max[2];
|
||||
if (ED_uvedit_minmax_multi(scene, ima, objects_edit, objects_len, min, max)) {
|
||||
if (ED_uvedit_minmax_multi(scene, objects_edit, objects_len, min, max)) {
|
||||
mid_v2_v2v2(cent, min, max);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (ED_uvedit_median_multi(scene, ima, objects_edit, objects_len, cent)) {
|
||||
if (ED_uvedit_median_multi(scene, objects_edit, objects_len, cent)) {
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
@ -392,8 +385,7 @@ bool ED_uvedit_center_from_pivot_ex(SpaceImage *sima,
|
|||
uint objects_len = 0;
|
||||
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
|
||||
view_layer, ((View3D *)NULL), &objects_len);
|
||||
*r_has_select = uvedit_select_is_any_selected_multi(
|
||||
scene, sima->image, objects, objects_len);
|
||||
*r_has_select = uvedit_select_is_any_selected_multi(scene, objects, objects_len);
|
||||
MEM_freeN(objects);
|
||||
}
|
||||
break;
|
||||
|
@ -402,7 +394,7 @@ bool ED_uvedit_center_from_pivot_ex(SpaceImage *sima,
|
|||
uint objects_len = 0;
|
||||
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
|
||||
view_layer, ((View3D *)NULL), &objects_len);
|
||||
changed = ED_uvedit_center_multi(scene, sima->image, objects, objects_len, r_center, mode);
|
||||
changed = ED_uvedit_center_multi(scene, objects, objects_len, r_center, mode);
|
||||
MEM_freeN(objects);
|
||||
if (r_has_select != NULL) {
|
||||
*r_has_select = changed;
|
||||
|
@ -440,7 +432,6 @@ static void uv_weld_align(bContext *C, eUVWeldAlign tool)
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
const bool synced_selection = (ts->uv_flag & UV_SYNC_SELECTION) != 0;
|
||||
float cent[2], min[2], max[2];
|
||||
|
@ -467,7 +458,7 @@ static void uv_weld_align(bContext *C, eUVWeldAlign tool)
|
|||
BMLoop *l;
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -482,7 +473,7 @@ static void uv_weld_align(bContext *C, eUVWeldAlign tool)
|
|||
tool = (max[0] - min[0] >= max[1] - min[1]) ? UV_ALIGN_Y : UV_ALIGN_X;
|
||||
}
|
||||
|
||||
ED_uvedit_center_multi(scene, ima, objects, objects_len, cent, 0);
|
||||
ED_uvedit_center_multi(scene, objects, objects_len, cent, 0);
|
||||
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
Object *obedit = objects[ob_index];
|
||||
|
@ -501,7 +492,7 @@ static void uv_weld_align(bContext *C, eUVWeldAlign tool)
|
|||
BMLoop *l;
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -521,7 +512,7 @@ static void uv_weld_align(bContext *C, eUVWeldAlign tool)
|
|||
BMLoop *l;
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -548,7 +539,7 @@ static void uv_weld_align(bContext *C, eUVWeldAlign tool)
|
|||
/* tag verts with a selected UV */
|
||||
BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
|
||||
BM_ITER_ELEM (l, &liter, eve, BM_LOOPS_OF_VERT) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, l->f)) {
|
||||
if (!uvedit_face_visible_test(scene, l->f)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -619,9 +610,9 @@ static void uv_weld_align(bContext *C, eUVWeldAlign tool)
|
|||
|
||||
/* we know the returns from these must be valid */
|
||||
const float *uv_start = uvedit_first_selected_uv_from_vertex(
|
||||
scene, obedit, ima, eve_line[0], cd_loop_uv_offset);
|
||||
scene, eve_line[0], cd_loop_uv_offset);
|
||||
const float *uv_end = uvedit_first_selected_uv_from_vertex(
|
||||
scene, obedit, ima, eve_line[BLI_array_len(eve_line) - 1], cd_loop_uv_offset);
|
||||
scene, eve_line[BLI_array_len(eve_line) - 1], cd_loop_uv_offset);
|
||||
/* For UV_STRAIGHTEN_X & UV_STRAIGHTEN_Y modes */
|
||||
float a = 0.0f;
|
||||
eUVWeldAlign tool_local = tool;
|
||||
|
@ -646,7 +637,7 @@ static void uv_weld_align(bContext *C, eUVWeldAlign tool)
|
|||
/* go over all verts except for endpoints */
|
||||
for (i = 0; i < BLI_array_len(eve_line); i++) {
|
||||
BM_ITER_ELEM (l, &liter, eve_line[i], BM_LOOPS_OF_VERT) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, l->f)) {
|
||||
if (!uvedit_face_visible_test(scene, l->f)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -754,7 +745,6 @@ static int uv_remove_doubles_to_selected(bContext *C, wmOperator *op)
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
|
||||
const float threshold = RNA_float_get(op->ptr, "threshold");
|
||||
|
@ -808,7 +798,7 @@ static int uv_remove_doubles_to_selected(bContext *C, wmOperator *op)
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -899,7 +889,6 @@ static int uv_remove_doubles_to_unselected(bContext *C, wmOperator *op)
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
|
||||
const float threshold = RNA_float_get(op->ptr, "threshold");
|
||||
|
@ -939,7 +928,7 @@ static int uv_remove_doubles_to_unselected(bContext *C, wmOperator *op)
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -972,7 +961,7 @@ static int uv_remove_doubles_to_unselected(bContext *C, wmOperator *op)
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1086,10 +1075,12 @@ static void uv_snap_cursor_to_pixels(SpaceImage *sima)
|
|||
uv_snap_to_pixel(sima->cursor, width, height);
|
||||
}
|
||||
|
||||
static bool uv_snap_cursor_to_selection(
|
||||
Scene *scene, Image *ima, Object **objects_edit, uint objects_len, SpaceImage *sima)
|
||||
static bool uv_snap_cursor_to_selection(Scene *scene,
|
||||
Object **objects_edit,
|
||||
uint objects_len,
|
||||
SpaceImage *sima)
|
||||
{
|
||||
return ED_uvedit_center_multi(scene, ima, objects_edit, objects_len, sima->cursor, sima->around);
|
||||
return ED_uvedit_center_multi(scene, objects_edit, objects_len, sima->cursor, sima->around);
|
||||
}
|
||||
|
||||
static int uv_snap_cursor_exec(bContext *C, wmOperator *op)
|
||||
|
@ -1105,13 +1096,12 @@ static int uv_snap_cursor_exec(bContext *C, wmOperator *op)
|
|||
break;
|
||||
case 1: {
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
|
||||
uint objects_len = 0;
|
||||
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
|
||||
view_layer, ((View3D *)NULL), &objects_len);
|
||||
changed = uv_snap_cursor_to_selection(scene, ima, objects, objects_len, sima);
|
||||
changed = uv_snap_cursor_to_selection(scene, objects, objects_len, sima);
|
||||
MEM_freeN(objects);
|
||||
break;
|
||||
}
|
||||
|
@ -1155,7 +1145,7 @@ static void UV_OT_snap_cursor(wmOperatorType *ot)
|
|||
/** \name Snap Selection Operator
|
||||
* \{ */
|
||||
|
||||
static bool uv_snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, const float cursor[2])
|
||||
static bool uv_snap_uvs_to_cursor(Scene *scene, Object *obedit, const float cursor[2])
|
||||
{
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
BMFace *efa;
|
||||
|
@ -1167,7 +1157,7 @@ static bool uv_snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, cons
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1183,7 +1173,7 @@ static bool uv_snap_uvs_to_cursor(Scene *scene, Image *ima, Object *obedit, cons
|
|||
return changed;
|
||||
}
|
||||
|
||||
static bool uv_snap_uvs_offset(Scene *scene, Image *ima, Object *obedit, const float offset[2])
|
||||
static bool uv_snap_uvs_offset(Scene *scene, Object *obedit, const float offset[2])
|
||||
{
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
BMFace *efa;
|
||||
|
@ -1195,7 +1185,7 @@ static bool uv_snap_uvs_offset(Scene *scene, Image *ima, Object *obedit, const f
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1211,7 +1201,7 @@ static bool uv_snap_uvs_offset(Scene *scene, Image *ima, Object *obedit, const f
|
|||
return changed;
|
||||
}
|
||||
|
||||
static bool uv_snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object *obedit)
|
||||
static bool uv_snap_uvs_to_adjacent_unselected(Scene *scene, Object *obedit)
|
||||
{
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
BMesh *bm = em->bm;
|
||||
|
@ -1225,7 +1215,7 @@ static bool uv_snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object
|
|||
/* index every vert that has a selected UV using it, but only once so as to
|
||||
* get unique indices and to count how much to malloc */
|
||||
BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
|
||||
if (uvedit_face_visible_test(scene, obedit, ima, f)) {
|
||||
if (uvedit_face_visible_test(scene, f)) {
|
||||
BM_elem_flag_enable(f, BM_ELEM_TAG);
|
||||
BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
|
||||
BM_elem_flag_set(l, BM_ELEM_TAG, uvedit_uv_select_test(scene, l, cd_loop_uv_offset));
|
||||
|
@ -1269,7 +1259,6 @@ static bool uv_snap_uvs_to_adjacent_unselected(Scene *scene, Image *ima, Object
|
|||
static bool uv_snap_uvs_to_pixels(SpaceImage *sima, Scene *scene, Object *obedit)
|
||||
{
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
Image *ima = sima->image;
|
||||
BMFace *efa;
|
||||
BMLoop *l;
|
||||
BMIter iter, liter;
|
||||
|
@ -1285,7 +1274,7 @@ static bool uv_snap_uvs_to_pixels(SpaceImage *sima, Scene *scene, Object *obedit
|
|||
h = (float)height;
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1307,7 +1296,6 @@ static int uv_snap_selection_exec(bContext *C, wmOperator *op)
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
const bool synced_selection = (ts->uv_flag & UV_SYNC_SELECTION) != 0;
|
||||
const int target = RNA_enum_get(op->ptr, "target");
|
||||
|
@ -1319,7 +1307,7 @@ static int uv_snap_selection_exec(bContext *C, wmOperator *op)
|
|||
|
||||
if (target == 2) {
|
||||
float center[2];
|
||||
if (!ED_uvedit_center_multi(scene, ima, objects, objects_len, center, sima->around)) {
|
||||
if (!ED_uvedit_center_multi(scene, objects, objects_len, center, sima->around)) {
|
||||
MEM_freeN(objects);
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
@ -1341,13 +1329,13 @@ static int uv_snap_selection_exec(bContext *C, wmOperator *op)
|
|||
changed = uv_snap_uvs_to_pixels(sima, scene, obedit);
|
||||
break;
|
||||
case 1:
|
||||
changed = uv_snap_uvs_to_cursor(scene, ima, obedit, sima->cursor);
|
||||
changed = uv_snap_uvs_to_cursor(scene, obedit, sima->cursor);
|
||||
break;
|
||||
case 2:
|
||||
changed = uv_snap_uvs_offset(scene, ima, obedit, offset);
|
||||
changed = uv_snap_uvs_offset(scene, obedit, offset);
|
||||
break;
|
||||
case 3:
|
||||
changed = uv_snap_uvs_to_adjacent_unselected(scene, ima, obedit);
|
||||
changed = uv_snap_uvs_to_adjacent_unselected(scene, obedit);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1398,7 +1386,6 @@ static int uv_pin_exec(bContext *C, wmOperator *op)
|
|||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
BMFace *efa;
|
||||
BMLoop *l;
|
||||
BMIter iter, liter;
|
||||
|
@ -1423,7 +1410,7 @@ static int uv_pin_exec(bContext *C, wmOperator *op)
|
|||
}
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1501,11 +1488,9 @@ static bool bm_face_is_all_uv_sel(BMFace *f, bool select_test, const int cd_loop
|
|||
static int uv_hide_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
const bool swap = RNA_boolean_get(op->ptr, "unselected");
|
||||
Image *ima = sima ? sima->image : NULL;
|
||||
const int use_face_center = (ts->uv_selectmode == UV_SELECT_FACE);
|
||||
|
||||
uint objects_len = 0;
|
||||
|
@ -1532,7 +1517,7 @@ static int uv_hide_exec(bContext *C, wmOperator *op)
|
|||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
int hide = 0;
|
||||
|
||||
if (!uvedit_face_visible_test(scene, ob, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2006,8 +1991,6 @@ static void UV_OT_seams_from_islands(wmOperatorType *ot)
|
|||
|
||||
static int uv_mark_seam_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Image *ima = sima ? sima->image : NULL;
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
|
@ -2038,7 +2021,7 @@ static int uv_mark_seam_exec(bContext *C, wmOperator *op)
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
|
||||
if (uvedit_face_visible_test(scene, ob, ima, efa)) {
|
||||
if (uvedit_face_visible_test(scene, efa)) {
|
||||
BM_ITER_ELEM (loop, &liter, efa, BM_LOOPS_OF_FACE) {
|
||||
if (uvedit_edge_select_test(scene, loop, cd_loop_uv_offset)) {
|
||||
BM_elem_flag_set(loop->e, BM_ELEM_SEAM, flag_set);
|
||||
|
|
|
@ -70,9 +70,11 @@
|
|||
|
||||
#include "uvedit_intern.h"
|
||||
|
||||
static void uv_select_all_perform(Scene *scene, Image *ima, Object *obedit, int action);
|
||||
static void uv_select_all_perform_multi(
|
||||
Scene *scene, Image *ima, Object **objects, const uint objects_len, int action);
|
||||
static void uv_select_all_perform(Scene *scene, Object *obedit, int action);
|
||||
static void uv_select_all_perform_multi(Scene *scene,
|
||||
Object **objects,
|
||||
const uint objects_len,
|
||||
int action);
|
||||
static void uv_select_flush_from_tag_face(SpaceImage *sima,
|
||||
Scene *scene,
|
||||
Object *obedit,
|
||||
|
@ -112,7 +114,7 @@ static void uvedit_vertex_select_tagged(BMEditMesh *em,
|
|||
}
|
||||
}
|
||||
|
||||
bool uvedit_face_visible_nolocal_ex(const ToolSettings *ts, BMFace *efa)
|
||||
bool uvedit_face_visible_test_ex(const ToolSettings *ts, BMFace *efa)
|
||||
{
|
||||
if (ts->uv_flag & UV_SYNC_SELECTION) {
|
||||
return (BM_elem_flag_test(efa, BM_ELEM_HIDDEN) == 0);
|
||||
|
@ -121,25 +123,9 @@ bool uvedit_face_visible_nolocal_ex(const ToolSettings *ts, BMFace *efa)
|
|||
return (BM_elem_flag_test(efa, BM_ELEM_HIDDEN) == 0 && BM_elem_flag_test(efa, BM_ELEM_SELECT));
|
||||
}
|
||||
}
|
||||
bool uvedit_face_visible_nolocal(const Scene *scene, BMFace *efa)
|
||||
bool uvedit_face_visible_test(const Scene *scene, BMFace *efa)
|
||||
{
|
||||
return uvedit_face_visible_nolocal_ex(scene->toolsettings, efa);
|
||||
}
|
||||
|
||||
bool uvedit_face_visible_test_ex(const ToolSettings *ts, Object *obedit, Image *ima, BMFace *efa)
|
||||
{
|
||||
if (ts->uv_flag & UV_SHOW_SAME_IMAGE) {
|
||||
Image *face_image;
|
||||
ED_object_get_active_image(obedit, efa->mat_nr + 1, &face_image, NULL, NULL, NULL);
|
||||
return (face_image == ima) ? uvedit_face_visible_nolocal_ex(ts, efa) : false;
|
||||
}
|
||||
else {
|
||||
return uvedit_face_visible_nolocal_ex(ts, efa);
|
||||
}
|
||||
}
|
||||
bool uvedit_face_visible_test(const Scene *scene, Object *obedit, Image *ima, BMFace *efa)
|
||||
{
|
||||
return uvedit_face_visible_test_ex(scene->toolsettings, obedit, ima, efa);
|
||||
return uvedit_face_visible_test_ex(scene->toolsettings, efa);
|
||||
}
|
||||
|
||||
bool uvedit_face_select_test_ex(const ToolSettings *ts, BMFace *efa, const int cd_loop_uv_offset)
|
||||
|
@ -437,8 +423,7 @@ void uvedit_uv_select_disable(BMEditMesh *em,
|
|||
/** \name Find Nearest Elements
|
||||
* \{ */
|
||||
|
||||
bool uv_find_nearest_edge(
|
||||
Scene *scene, Image *ima, Object *obedit, const float co[2], UvNearestHit *hit)
|
||||
bool uv_find_nearest_edge(Scene *scene, Object *obedit, const float co[2], UvNearestHit *hit)
|
||||
{
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
BMFace *efa;
|
||||
|
@ -453,7 +438,7 @@ bool uv_find_nearest_edge(
|
|||
BM_mesh_elem_index_ensure(em->bm, BM_VERT);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) {
|
||||
|
@ -479,7 +464,6 @@ bool uv_find_nearest_edge(
|
|||
}
|
||||
|
||||
bool uv_find_nearest_edge_multi(Scene *scene,
|
||||
Image *ima,
|
||||
Object **objects,
|
||||
const uint objects_len,
|
||||
const float co[2],
|
||||
|
@ -488,7 +472,7 @@ bool uv_find_nearest_edge_multi(Scene *scene,
|
|||
bool found = false;
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
Object *obedit = objects[ob_index];
|
||||
if (uv_find_nearest_edge(scene, ima, obedit, co, hit_final)) {
|
||||
if (uv_find_nearest_edge(scene, obedit, co, hit_final)) {
|
||||
hit_final->ob = obedit;
|
||||
found = true;
|
||||
}
|
||||
|
@ -496,8 +480,7 @@ bool uv_find_nearest_edge_multi(Scene *scene,
|
|||
return found;
|
||||
}
|
||||
|
||||
bool uv_find_nearest_face(
|
||||
Scene *scene, Image *ima, Object *obedit, const float co[2], UvNearestHit *hit_final)
|
||||
bool uv_find_nearest_face(Scene *scene, Object *obedit, const float co[2], UvNearestHit *hit_final)
|
||||
{
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
bool found = false;
|
||||
|
@ -507,7 +490,7 @@ bool uv_find_nearest_face(
|
|||
/* this will fill in hit.vert1 and hit.vert2 */
|
||||
float dist_sq_init = hit_final->dist_sq;
|
||||
UvNearestHit hit = *hit_final;
|
||||
if (uv_find_nearest_edge(scene, ima, obedit, co, &hit)) {
|
||||
if (uv_find_nearest_edge(scene, obedit, co, &hit)) {
|
||||
hit.dist_sq = dist_sq_init;
|
||||
hit.l = NULL;
|
||||
hit.luv = hit.luv_next = NULL;
|
||||
|
@ -516,7 +499,7 @@ bool uv_find_nearest_face(
|
|||
BMFace *efa;
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -539,7 +522,6 @@ bool uv_find_nearest_face(
|
|||
}
|
||||
|
||||
bool uv_find_nearest_face_multi(Scene *scene,
|
||||
Image *ima,
|
||||
Object **objects,
|
||||
const uint objects_len,
|
||||
const float co[2],
|
||||
|
@ -548,7 +530,7 @@ bool uv_find_nearest_face_multi(Scene *scene,
|
|||
bool found = false;
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
Object *obedit = objects[ob_index];
|
||||
if (uv_find_nearest_face(scene, ima, obedit, co, hit_final)) {
|
||||
if (uv_find_nearest_face(scene, obedit, co, hit_final)) {
|
||||
hit_final->ob = obedit;
|
||||
found = true;
|
||||
}
|
||||
|
@ -567,7 +549,6 @@ static bool uv_nearest_between(const BMLoop *l, const float co[2], const int cd_
|
|||
}
|
||||
|
||||
bool uv_find_nearest_vert(Scene *scene,
|
||||
Image *ima,
|
||||
Object *obedit,
|
||||
float const co[2],
|
||||
const float penalty_dist,
|
||||
|
@ -578,7 +559,7 @@ bool uv_find_nearest_vert(Scene *scene,
|
|||
/* this will fill in hit.vert1 and hit.vert2 */
|
||||
float dist_sq_init = hit_final->dist_sq;
|
||||
UvNearestHit hit = *hit_final;
|
||||
if (uv_find_nearest_edge(scene, ima, obedit, co, &hit)) {
|
||||
if (uv_find_nearest_edge(scene, obedit, co, &hit)) {
|
||||
hit.dist_sq = dist_sq_init;
|
||||
|
||||
hit.l = NULL;
|
||||
|
@ -593,7 +574,7 @@ bool uv_find_nearest_vert(Scene *scene,
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -639,7 +620,6 @@ bool uv_find_nearest_vert(Scene *scene,
|
|||
}
|
||||
|
||||
bool uv_find_nearest_vert_multi(Scene *scene,
|
||||
Image *ima,
|
||||
Object **objects,
|
||||
const uint objects_len,
|
||||
float const co[2],
|
||||
|
@ -649,7 +629,7 @@ bool uv_find_nearest_vert_multi(Scene *scene,
|
|||
bool found = false;
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
Object *obedit = objects[ob_index];
|
||||
if (uv_find_nearest_vert(scene, ima, obedit, co, penalty_dist, hit_final)) {
|
||||
if (uv_find_nearest_vert(scene, obedit, co, penalty_dist, hit_final)) {
|
||||
hit_final->ob = obedit;
|
||||
found = true;
|
||||
}
|
||||
|
@ -657,12 +637,8 @@ bool uv_find_nearest_vert_multi(Scene *scene,
|
|||
return found;
|
||||
}
|
||||
|
||||
bool ED_uvedit_nearest_uv(const Scene *scene,
|
||||
Object *obedit,
|
||||
Image *ima,
|
||||
const float co[2],
|
||||
float *dist_sq,
|
||||
float r_uv[2])
|
||||
bool ED_uvedit_nearest_uv(
|
||||
const Scene *scene, Object *obedit, const float co[2], float *dist_sq, float r_uv[2])
|
||||
{
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
BMIter iter;
|
||||
|
@ -671,7 +647,7 @@ bool ED_uvedit_nearest_uv(const Scene *scene,
|
|||
float dist_best = *dist_sq;
|
||||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
BMLoop *l_iter, *l_first;
|
||||
|
@ -697,7 +673,6 @@ bool ED_uvedit_nearest_uv(const Scene *scene,
|
|||
}
|
||||
|
||||
bool ED_uvedit_nearest_uv_multi(const Scene *scene,
|
||||
Image *ima,
|
||||
Object **objects,
|
||||
const uint objects_len,
|
||||
const float co[2],
|
||||
|
@ -707,7 +682,7 @@ bool ED_uvedit_nearest_uv_multi(const Scene *scene,
|
|||
bool found = false;
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
Object *obedit = objects[ob_index];
|
||||
if (ED_uvedit_nearest_uv(scene, obedit, ima, co, dist_sq, r_uv)) {
|
||||
if (ED_uvedit_nearest_uv(scene, obedit, co, dist_sq, r_uv)) {
|
||||
found = true;
|
||||
}
|
||||
}
|
||||
|
@ -817,12 +792,8 @@ static bool uv_select_edgeloop_edge_tag_faces(BMEditMesh *em,
|
|||
return true;
|
||||
}
|
||||
|
||||
static int uv_select_edgeloop(Scene *scene,
|
||||
Image *ima,
|
||||
Object *obedit,
|
||||
UvNearestHit *hit,
|
||||
const float limit[2],
|
||||
const bool extend)
|
||||
static int uv_select_edgeloop(
|
||||
Scene *scene, Object *obedit, UvNearestHit *hit, const float limit[2], const bool extend)
|
||||
{
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
BMFace *efa;
|
||||
|
@ -843,7 +814,7 @@ static int uv_select_edgeloop(Scene *scene,
|
|||
BM_mesh_elem_index_ensure(em->bm, BM_VERT | BM_FACE);
|
||||
|
||||
if (!extend) {
|
||||
uv_select_all_perform(scene, ima, obedit, SEL_DESELECT);
|
||||
uv_select_all_perform(scene, obedit, SEL_DESELECT);
|
||||
}
|
||||
|
||||
BM_mesh_elem_hflag_disable_all(em->bm, BM_FACE, BM_ELEM_TAG, false);
|
||||
|
@ -867,8 +838,7 @@ static int uv_select_edgeloop(Scene *scene,
|
|||
/* find correct valence edges which are not tagged yet, but connect to tagged one */
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!BM_elem_flag_test(efa, BM_ELEM_TAG) &&
|
||||
uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!BM_elem_flag_test(efa, BM_ELEM_TAG) && uvedit_face_visible_test(scene, efa)) {
|
||||
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
|
||||
/* check face not hidden and not tagged */
|
||||
if (!(iterv_curr = uv_select_edgeloop_vertex_map_get(vmap, efa, l))) {
|
||||
|
@ -930,7 +900,6 @@ static int uv_select_edgeloop(Scene *scene,
|
|||
* \{ */
|
||||
|
||||
static void uv_select_linked_multi(Scene *scene,
|
||||
Image *ima,
|
||||
Object **objects,
|
||||
const uint objects_len,
|
||||
const float limit[2],
|
||||
|
@ -980,7 +949,7 @@ static void uv_select_linked_multi(Scene *scene,
|
|||
if (hit_final == NULL) {
|
||||
/* Use existing selection */
|
||||
BM_ITER_MESH_INDEX (efa, &iter, em->bm, BM_FACES_OF_MESH, a) {
|
||||
if (uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (uvedit_face_visible_test(scene, efa)) {
|
||||
if (select_faces) {
|
||||
if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
|
||||
stack[stacksize] = a;
|
||||
|
@ -1121,14 +1090,15 @@ static void uv_select_linked_multi(Scene *scene,
|
|||
* \warning This returns first selected UV,
|
||||
* not ideal in many cases since there could be multiple.
|
||||
*/
|
||||
const float *uvedit_first_selected_uv_from_vertex(
|
||||
Scene *scene, Object *obedit, Image *ima, BMVert *eve, const int cd_loop_uv_offset)
|
||||
const float *uvedit_first_selected_uv_from_vertex(Scene *scene,
|
||||
BMVert *eve,
|
||||
const int cd_loop_uv_offset)
|
||||
{
|
||||
BMIter liter;
|
||||
BMLoop *l;
|
||||
|
||||
BM_ITER_ELEM (l, &liter, eve, BM_LOOPS_OF_VERT) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, l->f)) {
|
||||
if (!uvedit_face_visible_test(scene, l->f)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1151,7 +1121,6 @@ static int uv_select_more_less(bContext *C, const bool select)
|
|||
{
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
|
||||
BMFace *efa;
|
||||
|
@ -1193,7 +1162,7 @@ static int uv_select_more_less(bContext *C, const bool select)
|
|||
|
||||
/* mark loops to be selected */
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (uvedit_face_visible_test(scene, efa)) {
|
||||
|
||||
#define IS_SEL 1
|
||||
#define IS_UNSEL 2
|
||||
|
@ -1233,7 +1202,7 @@ static int uv_select_more_less(bContext *C, const bool select)
|
|||
|
||||
/* mark loops to be selected */
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (uvedit_face_visible_test(scene, efa)) {
|
||||
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
|
||||
|
||||
MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
|
||||
|
@ -1308,7 +1277,7 @@ void UV_OT_select_less(wmOperatorType *ot)
|
|||
/** \name (De)Select All Operator
|
||||
* \{ */
|
||||
|
||||
bool uvedit_select_is_any_selected(Scene *scene, Image *ima, Object *obedit)
|
||||
bool uvedit_select_is_any_selected(Scene *scene, Object *obedit)
|
||||
{
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
|
@ -1323,7 +1292,7 @@ bool uvedit_select_is_any_selected(Scene *scene, Image *ima, Object *obedit)
|
|||
else {
|
||||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
|
||||
|
@ -1337,15 +1306,12 @@ bool uvedit_select_is_any_selected(Scene *scene, Image *ima, Object *obedit)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool uvedit_select_is_any_selected_multi(Scene *scene,
|
||||
Image *ima,
|
||||
Object **objects,
|
||||
const uint objects_len)
|
||||
bool uvedit_select_is_any_selected_multi(Scene *scene, Object **objects, const uint objects_len)
|
||||
{
|
||||
bool found = false;
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
Object *obedit = objects[ob_index];
|
||||
if (uvedit_select_is_any_selected(scene, ima, obedit)) {
|
||||
if (uvedit_select_is_any_selected(scene, obedit)) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
|
@ -1353,7 +1319,7 @@ bool uvedit_select_is_any_selected_multi(Scene *scene,
|
|||
return found;
|
||||
}
|
||||
|
||||
static void uv_select_all_perform(Scene *scene, Image *ima, Object *obedit, int action)
|
||||
static void uv_select_all_perform(Scene *scene, Object *obedit, int action)
|
||||
{
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
BMEditMesh *em = BKE_editmesh_from_object(obedit);
|
||||
|
@ -1365,7 +1331,7 @@ static void uv_select_all_perform(Scene *scene, Image *ima, Object *obedit, int
|
|||
const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
|
||||
|
||||
if (action == SEL_TOGGLE) {
|
||||
action = uvedit_select_is_any_selected(scene, ima, obedit) ? SEL_DESELECT : SEL_SELECT;
|
||||
action = uvedit_select_is_any_selected(scene, obedit) ? SEL_DESELECT : SEL_SELECT;
|
||||
}
|
||||
|
||||
if (ts->uv_flag & UV_SYNC_SELECTION) {
|
||||
|
@ -1387,7 +1353,7 @@ static void uv_select_all_perform(Scene *scene, Image *ima, Object *obedit, int
|
|||
}
|
||||
else {
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1410,17 +1376,19 @@ static void uv_select_all_perform(Scene *scene, Image *ima, Object *obedit, int
|
|||
}
|
||||
}
|
||||
|
||||
static void uv_select_all_perform_multi(
|
||||
Scene *scene, Image *ima, Object **objects, const uint objects_len, int action)
|
||||
static void uv_select_all_perform_multi(Scene *scene,
|
||||
Object **objects,
|
||||
const uint objects_len,
|
||||
int action)
|
||||
{
|
||||
if (action == SEL_TOGGLE) {
|
||||
action = uvedit_select_is_any_selected_multi(scene, ima, objects, objects_len) ? SEL_DESELECT :
|
||||
SEL_SELECT;
|
||||
action = uvedit_select_is_any_selected_multi(scene, objects, objects_len) ? SEL_DESELECT :
|
||||
SEL_SELECT;
|
||||
}
|
||||
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
Object *obedit = objects[ob_index];
|
||||
uv_select_all_perform(scene, ima, obedit, action);
|
||||
uv_select_all_perform(scene, obedit, action);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1429,7 +1397,6 @@ static int uv_select_all_exec(bContext *C, wmOperator *op)
|
|||
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
|
||||
int action = RNA_enum_get(op->ptr, "action");
|
||||
|
@ -1438,7 +1405,7 @@ static int uv_select_all_exec(bContext *C, wmOperator *op)
|
|||
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
|
||||
view_layer, ((View3D *)NULL), &objects_len);
|
||||
|
||||
uv_select_all_perform_multi(scene, ima, objects, objects_len, action);
|
||||
uv_select_all_perform_multi(scene, objects, objects_len, action);
|
||||
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
Object *obedit = objects[ob_index];
|
||||
|
@ -1510,7 +1477,6 @@ static int uv_mouse_select_multi(bContext *C,
|
|||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
BMFace *efa;
|
||||
BMLoop *l;
|
||||
BMIter iter, liter;
|
||||
|
@ -1563,12 +1529,11 @@ static int uv_mouse_select_multi(bContext *C,
|
|||
/* find nearest element */
|
||||
if (loop) {
|
||||
/* find edge */
|
||||
found_item = uv_find_nearest_edge_multi(scene, ima, objects, objects_len, co, &hit);
|
||||
found_item = uv_find_nearest_edge_multi(scene, objects, objects_len, co, &hit);
|
||||
}
|
||||
else if (selectmode == UV_SELECT_VERTEX) {
|
||||
/* find vertex */
|
||||
found_item = uv_find_nearest_vert_multi(
|
||||
scene, ima, objects, objects_len, co, penalty_dist, &hit);
|
||||
found_item = uv_find_nearest_vert_multi(scene, objects, objects_len, co, penalty_dist, &hit);
|
||||
found_item = found_item && (!deselect_all || hit.dist_sq < penalty_dist);
|
||||
|
||||
if (found_item) {
|
||||
|
@ -1585,7 +1550,7 @@ static int uv_mouse_select_multi(bContext *C,
|
|||
}
|
||||
else if (selectmode == UV_SELECT_EDGE) {
|
||||
/* find edge */
|
||||
found_item = uv_find_nearest_edge_multi(scene, ima, objects, objects_len, co, &hit);
|
||||
found_item = uv_find_nearest_edge_multi(scene, objects, objects_len, co, &hit);
|
||||
found_item = found_item && (!deselect_all || hit.dist_sq < penalty_dist);
|
||||
|
||||
if (found_item) {
|
||||
|
@ -1604,7 +1569,7 @@ static int uv_mouse_select_multi(bContext *C,
|
|||
}
|
||||
else if (selectmode == UV_SELECT_FACE) {
|
||||
/* find face */
|
||||
found_item = uv_find_nearest_face_multi(scene, ima, objects, objects_len, co, &hit);
|
||||
found_item = uv_find_nearest_face_multi(scene, objects, objects_len, co, &hit);
|
||||
found_item = found_item && (!deselect_all || hit.dist_sq < penalty_dist);
|
||||
|
||||
if (found_item) {
|
||||
|
@ -1628,13 +1593,13 @@ static int uv_mouse_select_multi(bContext *C,
|
|||
}
|
||||
}
|
||||
else if (selectmode == UV_SELECT_ISLAND) {
|
||||
found_item = uv_find_nearest_edge_multi(scene, ima, objects, objects_len, co, &hit);
|
||||
found_item = uv_find_nearest_edge_multi(scene, objects, objects_len, co, &hit);
|
||||
found_item = found_item && (!deselect_all || hit.dist_sq < penalty_dist);
|
||||
}
|
||||
|
||||
if (!found_item) {
|
||||
if (deselect_all) {
|
||||
uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT);
|
||||
uv_select_all_perform_multi(scene, objects, objects_len, SEL_DESELECT);
|
||||
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
Object *obedit = objects[ob_index];
|
||||
|
@ -1654,19 +1619,18 @@ static int uv_mouse_select_multi(bContext *C,
|
|||
if (loop) {
|
||||
if (!extend) {
|
||||
/* TODO(MULTI_EDIT): We only need to de-select non-active */
|
||||
uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT);
|
||||
uv_select_all_perform_multi(scene, objects, objects_len, SEL_DESELECT);
|
||||
}
|
||||
flush = uv_select_edgeloop(scene, ima, obedit, &hit, limit, extend);
|
||||
flush = uv_select_edgeloop(scene, obedit, &hit, limit, extend);
|
||||
}
|
||||
else if (selectmode == UV_SELECT_ISLAND) {
|
||||
if (!extend) {
|
||||
/* TODO(MULTI_EDIT): We only need to de-select non-active */
|
||||
uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT);
|
||||
uv_select_all_perform_multi(scene, objects, objects_len, SEL_DESELECT);
|
||||
}
|
||||
/* Current behavior of 'extend'
|
||||
* is actually toggling, so pass extend flag as 'toggle' here */
|
||||
uv_select_linked_multi(
|
||||
scene, ima, objects, objects_len, limit, &hit, false, false, extend, false);
|
||||
uv_select_linked_multi(scene, objects, objects_len, limit, &hit, false, false, extend, false);
|
||||
}
|
||||
else if (extend) {
|
||||
if (selectmode == UV_SELECT_VERTEX) {
|
||||
|
@ -1701,7 +1665,7 @@ static int uv_mouse_select_multi(bContext *C,
|
|||
BM_mesh_elem_index_ensure(em->bm, BM_VERT);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1719,7 +1683,7 @@ static int uv_mouse_select_multi(bContext *C,
|
|||
}
|
||||
else {
|
||||
/* deselect all */
|
||||
uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT);
|
||||
uv_select_all_perform_multi(scene, objects, objects_len, SEL_DESELECT);
|
||||
|
||||
if (selectmode == UV_SELECT_VERTEX) {
|
||||
/* select vertex */
|
||||
|
@ -1739,7 +1703,7 @@ static int uv_mouse_select_multi(bContext *C,
|
|||
/* select sticky uvs */
|
||||
if (sticky != SI_STICKY_DISABLE) {
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -1946,7 +1910,6 @@ static int uv_select_linked_internal(bContext *C, wmOperator *op, const wmEvent
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
float limit[2];
|
||||
bool extend = true;
|
||||
bool deselect = false;
|
||||
|
@ -1986,18 +1949,17 @@ static int uv_select_linked_internal(bContext *C, wmOperator *op, const wmEvent
|
|||
RNA_float_get_array(op->ptr, "location", co);
|
||||
}
|
||||
|
||||
if (!uv_find_nearest_edge_multi(scene, ima, objects, objects_len, co, &hit)) {
|
||||
if (!uv_find_nearest_edge_multi(scene, objects, objects_len, co, &hit)) {
|
||||
MEM_freeN(objects);
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
}
|
||||
|
||||
if (!extend) {
|
||||
uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT);
|
||||
uv_select_all_perform_multi(scene, objects, objects_len, SEL_DESELECT);
|
||||
}
|
||||
|
||||
uv_select_linked_multi(scene,
|
||||
ima,
|
||||
objects,
|
||||
objects_len,
|
||||
limit,
|
||||
|
@ -2117,7 +2079,6 @@ static int uv_select_split_exec(bContext *C, wmOperator *op)
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
|
||||
BMFace *efa;
|
||||
BMLoop *l;
|
||||
|
@ -2147,7 +2108,7 @@ static int uv_select_split_exec(bContext *C, wmOperator *op)
|
|||
bool is_sel = false;
|
||||
bool is_unsel = false;
|
||||
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2483,7 +2444,6 @@ static int uv_box_select_exec(bContext *C, wmOperator *op)
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
const ARegion *region = CTX_wm_region(C);
|
||||
BMFace *efa;
|
||||
BMLoop *l;
|
||||
|
@ -2518,7 +2478,7 @@ static int uv_box_select_exec(bContext *C, wmOperator *op)
|
|||
view_layer, ((View3D *)NULL), &objects_len);
|
||||
|
||||
if (use_pre_deselect) {
|
||||
uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT);
|
||||
uv_select_all_perform_multi(scene, objects, objects_len, SEL_DESELECT);
|
||||
}
|
||||
|
||||
/* don't indent to avoid diff noise! */
|
||||
|
@ -2539,7 +2499,7 @@ static int uv_box_select_exec(bContext *C, wmOperator *op)
|
|||
/* assume not touched */
|
||||
BM_elem_flag_disable(efa, BM_ELEM_TAG);
|
||||
|
||||
if (uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (uvedit_face_visible_test(scene, efa)) {
|
||||
uv_poly_center(efa, cent, cd_loop_uv_offset);
|
||||
if (BLI_rctf_isect_pt_v(&rectf, cent)) {
|
||||
BM_elem_flag_enable(efa, BM_ELEM_TAG);
|
||||
|
@ -2558,7 +2518,7 @@ static int uv_box_select_exec(bContext *C, wmOperator *op)
|
|||
BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT, BM_ELEM_TAG, false);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2594,7 +2554,7 @@ static int uv_box_select_exec(bContext *C, wmOperator *op)
|
|||
BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT, BM_ELEM_TAG, false);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
bool has_selected = false;
|
||||
|
@ -2623,7 +2583,7 @@ static int uv_box_select_exec(bContext *C, wmOperator *op)
|
|||
.efa = efa,
|
||||
};
|
||||
uv_select_linked_multi(
|
||||
scene, ima, objects, objects_len, limit, &hit, true, !select, false, false);
|
||||
scene, objects, objects_len, limit, &hit, true, !select, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2708,7 +2668,6 @@ static int uv_circle_select_exec(bContext *C, wmOperator *op)
|
|||
{
|
||||
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
|
@ -2757,7 +2716,7 @@ static int uv_circle_select_exec(bContext *C, wmOperator *op)
|
|||
const bool use_pre_deselect = SEL_OP_USE_PRE_DESELECT(sel_op);
|
||||
|
||||
if (use_pre_deselect) {
|
||||
uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT);
|
||||
uv_select_all_perform_multi(scene, objects, objects_len, SEL_DESELECT);
|
||||
}
|
||||
|
||||
for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
|
||||
|
@ -2792,7 +2751,7 @@ static int uv_circle_select_exec(bContext *C, wmOperator *op)
|
|||
BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT, BM_ELEM_TAG, false);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -2826,7 +2785,7 @@ static int uv_circle_select_exec(bContext *C, wmOperator *op)
|
|||
BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT, BM_ELEM_TAG, false);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
bool has_selected = false;
|
||||
|
@ -2847,7 +2806,7 @@ static int uv_circle_select_exec(bContext *C, wmOperator *op)
|
|||
.efa = efa,
|
||||
};
|
||||
uv_select_linked_multi(
|
||||
scene, ima, objects, objects_len, limit, &hit, true, !select, false, false);
|
||||
scene, objects, objects_len, limit, &hit, true, !select, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2920,7 +2879,6 @@ static bool do_lasso_select_mesh_uv(bContext *C,
|
|||
{
|
||||
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
|
||||
SpaceImage *sima = CTX_wm_space_image(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
const ARegion *region = CTX_wm_region(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
|
@ -2952,7 +2910,7 @@ static bool do_lasso_select_mesh_uv(bContext *C,
|
|||
view_layer, ((View3D *)NULL), &objects_len);
|
||||
|
||||
if (use_pre_deselect) {
|
||||
uv_select_all_perform_multi(scene, ima, objects, objects_len, SEL_DESELECT);
|
||||
uv_select_all_perform_multi(scene, objects, objects_len, SEL_DESELECT);
|
||||
}
|
||||
|
||||
/* don't indent to avoid diff noise! */
|
||||
|
@ -2988,7 +2946,7 @@ static bool do_lasso_select_mesh_uv(bContext *C,
|
|||
BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT, BM_ELEM_TAG, false);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -3025,7 +2983,7 @@ static bool do_lasso_select_mesh_uv(bContext *C,
|
|||
BM_mesh_elem_hflag_disable_all(em->bm, BM_VERT, BM_ELEM_TAG, false);
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
bool has_selected = false;
|
||||
|
@ -3047,7 +3005,7 @@ static bool do_lasso_select_mesh_uv(bContext *C,
|
|||
.efa = efa,
|
||||
};
|
||||
uv_select_linked_multi(
|
||||
scene, ima, objects, objects_len, limit, &hit, true, !select, false, false);
|
||||
scene, objects, objects_len, limit, &hit, true, !select, false, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3116,7 +3074,6 @@ static int uv_select_pinned_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
Scene *scene = CTX_data_scene(C);
|
||||
const ToolSettings *ts = scene->toolsettings;
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
BMFace *efa;
|
||||
BMLoop *l;
|
||||
BMIter iter, liter;
|
||||
|
@ -3134,7 +3091,7 @@ static int uv_select_pinned_exec(bContext *C, wmOperator *UNUSED(op))
|
|||
bool changed = false;
|
||||
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test(scene, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test(scene, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -3208,7 +3165,6 @@ static int uv_select_overlap(bContext *C, const bool extend)
|
|||
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
|
||||
uint objects_len = 0;
|
||||
Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
|
||||
|
@ -3224,13 +3180,13 @@ static int uv_select_overlap(bContext *C, const bool extend)
|
|||
BM_mesh_elem_index_ensure(em->bm, BM_VERT | BM_FACE);
|
||||
BM_mesh_elem_hflag_disable_all(em->bm, BM_FACE, BM_ELEM_TAG, false);
|
||||
if (!extend) {
|
||||
uv_select_all_perform(scene, ima, obedit, SEL_DESELECT);
|
||||
uv_select_all_perform(scene, obedit, SEL_DESELECT);
|
||||
}
|
||||
|
||||
BMIter iter;
|
||||
BMFace *efa;
|
||||
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
|
||||
if (!uvedit_face_visible_test_ex(scene->toolsettings, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test_ex(scene->toolsettings, efa)) {
|
||||
continue;
|
||||
}
|
||||
uv_tri_len += efa->len - 2;
|
||||
|
@ -3261,7 +3217,7 @@ static int uv_select_overlap(bContext *C, const bool extend)
|
|||
int face_index;
|
||||
BM_ITER_MESH_INDEX (efa, &iter, em->bm, BM_FACES_OF_MESH, face_index) {
|
||||
|
||||
if (!uvedit_face_visible_test_ex(scene->toolsettings, obedit, ima, efa)) {
|
||||
if (!uvedit_face_visible_test_ex(scene->toolsettings, efa)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -2550,12 +2550,11 @@ static StitchState *stitch_select(bContext *C,
|
|||
float co[2];
|
||||
UvNearestHit hit = UV_NEAREST_HIT_INIT;
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
Image *ima = CTX_data_edit_image(C);
|
||||
|
||||
UI_view2d_region_to_view(®ion->v2d, event->mval[0], event->mval[1], &co[0], &co[1]);
|
||||
|
||||
if (ssc->mode == STITCH_VERT) {
|
||||
if (uv_find_nearest_vert_multi(scene, ima, ssc->objects, ssc->objects_len, co, 0.0f, &hit)) {
|
||||
if (uv_find_nearest_vert_multi(scene, ssc->objects, ssc->objects_len, co, 0.0f, &hit)) {
|
||||
/* Add vertex to selection, deselect all common uv's of vert other than selected and
|
||||
* update the preview. This behavior was decided so that you can do stuff like deselect
|
||||
* the opposite stitchable vertex and the initial still gets deselected */
|
||||
|
@ -2576,7 +2575,7 @@ static StitchState *stitch_select(bContext *C,
|
|||
return state;
|
||||
}
|
||||
}
|
||||
else if (uv_find_nearest_edge_multi(scene, ima, ssc->objects, ssc->objects_len, co, &hit)) {
|
||||
else if (uv_find_nearest_edge_multi(scene, ssc->objects, ssc->objects_len, co, &hit)) {
|
||||
/* find StitchState from hit->ob */
|
||||
StitchState *state = NULL;
|
||||
for (uint ob_index = 0; ob_index < ssc->objects_len; ob_index++) {
|
||||
|
|
Loading…
Reference in New Issue