Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/sculpt_paint/paint_image_proj.c
| Show First 20 Lines • Show All 221 Lines • ▼ Show 20 Lines | typedef struct ProjStrokeHandle { | ||||
| Brush *brush; | Brush *brush; | ||||
| } ProjStrokeHandle; | } ProjStrokeHandle; | ||||
| /* Main projection painting struct passed to all projection painting functions */ | /* Main projection painting struct passed to all projection painting functions */ | ||||
| typedef struct ProjPaintState { | typedef struct ProjPaintState { | ||||
| View3D *v3d; | View3D *v3d; | ||||
| RegionView3D *rv3d; | RegionView3D *rv3d; | ||||
| ARegion *ar; | ARegion *ar; | ||||
| const Depsgraph *depsgraph; | |||||
| Scene *scene; | Scene *scene; | ||||
| int source; /* PROJ_SRC_**** */ | int source; /* PROJ_SRC_**** */ | ||||
| /* the paint color. It can change depending of inverted mode or not */ | /* the paint color. It can change depending of inverted mode or not */ | ||||
| float paint_color[3]; | float paint_color[3]; | ||||
| float paint_color_linear[3]; | float paint_color_linear[3]; | ||||
| float dither; | float dither; | ||||
| ▲ Show 20 Lines • Show All 2,890 Lines • ▼ Show 20 Lines | if (ELEM(ps->source, PROJ_SRC_VIEW, PROJ_SRC_VIEW_FILL)) { | ||||
| ps->winx = ps->ar->winx; | ps->winx = ps->ar->winx; | ||||
| ps->winy = ps->ar->winy; | ps->winy = ps->ar->winy; | ||||
| copy_m4_m4(viewmat, ps->rv3d->viewmat); | copy_m4_m4(viewmat, ps->rv3d->viewmat); | ||||
| copy_m4_m4(viewinv, ps->rv3d->viewinv); | copy_m4_m4(viewinv, ps->rv3d->viewinv); | ||||
| ED_view3d_ob_project_mat_get_from_obmat(ps->rv3d, ps->obmat, ps->projectMat); | ED_view3d_ob_project_mat_get_from_obmat(ps->rv3d, ps->obmat, ps->projectMat); | ||||
| ps->is_ortho = ED_view3d_clip_range_get(ps->v3d, ps->rv3d, &ps->clipsta, &ps->clipend, true); | ps->is_ortho = ED_view3d_clip_range_get(ps->depsgraph, ps->v3d, ps->rv3d, &ps->clipsta, &ps->clipend, true); | ||||
| } | } | ||||
| else { | else { | ||||
| /* re-projection */ | /* re-projection */ | ||||
| float winmat[4][4]; | float winmat[4][4]; | ||||
| float vmat[4][4]; | float vmat[4][4]; | ||||
| ps->winx = ps->reproject_ibuf->x; | ps->winx = ps->reproject_ibuf->x; | ||||
| ps->winy = ps->reproject_ibuf->y; | ps->winy = ps->reproject_ibuf->y; | ||||
| ▲ Show 20 Lines • Show All 1,948 Lines • ▼ Show 20 Lines | static void project_state_init(bContext *C, Object *ob, ProjPaintState *ps, int mode) | ||||
| ps->pixel_sizeof = project_paint_pixel_sizeof(ps->tool); | ps->pixel_sizeof = project_paint_pixel_sizeof(ps->tool); | ||||
| BLI_assert(ps->pixel_sizeof >= sizeof(ProjPixel)); | BLI_assert(ps->pixel_sizeof >= sizeof(ProjPixel)); | ||||
| /* these can be NULL */ | /* these can be NULL */ | ||||
| ps->v3d = CTX_wm_view3d(C); | ps->v3d = CTX_wm_view3d(C); | ||||
| ps->rv3d = CTX_wm_region_view3d(C); | ps->rv3d = CTX_wm_region_view3d(C); | ||||
| ps->ar = CTX_wm_region(C); | ps->ar = CTX_wm_region(C); | ||||
| ps->depsgraph = CTX_data_depsgraph(C); | |||||
| ps->scene = scene; | ps->scene = scene; | ||||
| ps->ob = ob; /* allow override of active object */ | ps->ob = ob; /* allow override of active object */ | ||||
| ps->do_material_slots = (settings->imapaint.mode == IMAGEPAINT_MODE_MATERIAL); | ps->do_material_slots = (settings->imapaint.mode == IMAGEPAINT_MODE_MATERIAL); | ||||
| ps->stencil_ima = settings->imapaint.stencil; | ps->stencil_ima = settings->imapaint.stencil; | ||||
| ps->canvas_ima = (!ps->do_material_slots) ? | ps->canvas_ima = (!ps->do_material_slots) ? | ||||
| settings->imapaint.canvas : NULL; | settings->imapaint.canvas : NULL; | ||||
| ps->clone_ima = (!ps->do_material_slots) ? | ps->clone_ima = (!ps->do_material_slots) ? | ||||
| ▲ Show 20 Lines • Show All 394 Lines • ▼ Show 20 Lines | if (image) { | ||||
| val.array.len = PROJ_VIEW_DATA_SIZE; | val.array.len = PROJ_VIEW_DATA_SIZE; | ||||
| val.array.type = IDP_FLOAT; | val.array.type = IDP_FLOAT; | ||||
| view_data = IDP_New(IDP_ARRAY, &val, PROJ_VIEW_DATA_ID); | view_data = IDP_New(IDP_ARRAY, &val, PROJ_VIEW_DATA_ID); | ||||
| array = (float *)IDP_Array(view_data); | array = (float *)IDP_Array(view_data); | ||||
| memcpy(array, rv3d->winmat, sizeof(rv3d->winmat)); array += sizeof(rv3d->winmat) / sizeof(float); | memcpy(array, rv3d->winmat, sizeof(rv3d->winmat)); array += sizeof(rv3d->winmat) / sizeof(float); | ||||
| memcpy(array, rv3d->viewmat, sizeof(rv3d->viewmat)); array += sizeof(rv3d->viewmat) / sizeof(float); | memcpy(array, rv3d->viewmat, sizeof(rv3d->viewmat)); array += sizeof(rv3d->viewmat) / sizeof(float); | ||||
| is_ortho = ED_view3d_clip_range_get(v3d, rv3d, &array[0], &array[1], true); | is_ortho = ED_view3d_clip_range_get(CTX_data_depsgraph(C), v3d, rv3d, &array[0], &array[1], true); | ||||
| /* using float for a bool is dodgy but since its an extra member in the array... | /* using float for a bool is dodgy but since its an extra member in the array... | ||||
| * easier then adding a single bool prop */ | * easier then adding a single bool prop */ | ||||
| array[2] = is_ortho ? 1.0f : 0.0f; | array[2] = is_ortho ? 1.0f : 0.0f; | ||||
| IDP_AddToGroup(idgroup, view_data); | IDP_AddToGroup(idgroup, view_data); | ||||
| } | } | ||||
| return OPERATOR_FINISHED; | return OPERATOR_FINISHED; | ||||
| ▲ Show 20 Lines • Show All 445 Lines • Show Last 20 Lines | |||||