/* called to assign images to UV faces */ void ED_space_image_set(SpaceImage *sima, Scene *scene, Object *obedit, Image *ima) { /* context may be NULL, so use global */ ED_uvedit_assign_image(G.main, scene, obedit, ima, sima->image); /* change the space ima after because uvedit_face_visible_test uses the space ima * to check if the face is displayed in UV-localview */ sima->image = ima; if (ima == NULL || ima->type == IMA_TYPE_R_RESULT || ima->type == IMA_TYPE_COMPOSITE) { if (sima->mode == SI_MODE_PAINT) { sima->mode = SI_MODE_VIEW; } } if (sima->image) BKE_image_signal(sima->image, &sima->iuser, IMA_SIGNAL_USER_NEW_IMAGE); id_us_ensure_real((ID *)sima->image); if (obedit) WM_main_add_notifier(NC_GEOM | ND_DATA, obedit->data); WM_main_add_notifier(NC_SPACE | ND_SPACE_IMAGE, NULL); }
static int drop_named_image_invoke(bContext *C, wmOperator *op, wmEvent *event) { Scene *scene= CTX_data_scene(C); View3D *v3d= CTX_wm_view3d(C); Base *base= ED_view3d_give_base_under_cursor(C, event->mval); Image *ima= NULL; Mesh *me; Object *obedit; int exitmode= 0; char name[32]; /* Check context */ if(base==NULL || base->object->type!=OB_MESH) { BKE_report(op->reports, RPT_ERROR, "Not an Object or Mesh"); return OPERATOR_CANCELLED; } /* check input variables */ if(RNA_property_is_set(op->ptr, "filepath")) { char path[FILE_MAX]; RNA_string_get(op->ptr, "filepath", path); ima= BKE_add_image_file(path); } else { RNA_string_get(op->ptr, "name", name); ima= (Image *)find_id("IM", name); } if(!ima) { BKE_report(op->reports, RPT_ERROR, "Not an Image."); return OPERATOR_CANCELLED; } /* turn mesh in editmode */ /* BKE_mesh_get/end_editmesh: ED_uvedit_assign_image also calls this */ obedit= base->object; me= obedit->data; if(me->edit_mesh==NULL) { make_editMesh(scene, obedit); exitmode= 1; } if(me->edit_mesh==NULL) return OPERATOR_CANCELLED; ED_uvedit_assign_image(scene, obedit, ima, NULL); if(exitmode) { load_editMesh(scene, obedit); free_editMesh(me->edit_mesh); MEM_freeN(me->edit_mesh); me->edit_mesh= NULL; } /* dummie drop support; ensure view shows a result :) */ if(v3d) v3d->flag2 |= V3D_SOLID_TEX; WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data); return OPERATOR_FINISHED; }