Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-09-10 17:02:31 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-09-10 17:12:11 +0400
commit229c2c14f796b9d446301d9b0b8091c5e8a4f2ab (patch)
tree5686402f33da816638c00d817163f9bb8a77b6bb /source/blender
parent7d9760d96212aebf8bb1fc89f89e248a81ed0d2a (diff)
Fix crash in project-from view without a brush or active object
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/sculpt_paint/paint_image.c3
-rw-r--r--source/blender/editors/sculpt_paint/paint_image_proj.c15
2 files changed, 11 insertions, 7 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index ebfb17d25ef..7c19528a049 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -591,11 +591,12 @@ static Brush *image_paint_brush(bContext *C)
static int image_paint_poll(bContext *C)
{
- Object *obact = CTX_data_active_object(C);
+ Object *obact;
if (!image_paint_brush(C))
return 0;
+ obact = CTX_data_active_object(C);
if ((obact && obact->mode & OB_MODE_TEXTURE_PAINT) && CTX_wm_region_view3d(C)) {
return 1;
}
diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c b/source/blender/editors/sculpt_paint/paint_image_proj.c
index ef4a4e9bf79..0fb3e278f40 100644
--- a/source/blender/editors/sculpt_paint/paint_image_proj.c
+++ b/source/blender/editors/sculpt_paint/paint_image_proj.c
@@ -4541,7 +4541,8 @@ static void project_state_init(bContext *C, Object *ob, ProjPaintState *ps, int
if (ps->tool == PAINT_TOOL_CLONE)
ps->do_layer_clone = (settings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_CLONE) ? 1 : 0;
- ps->do_stencil_brush = ps->brush->imagepaint_tool == PAINT_TOOL_MASK;
+
+ ps->do_stencil_brush = (ps->brush && ps->brush->imagepaint_tool == PAINT_TOOL_MASK);
/* deactivate stenciling for the stencil brush :) */
ps->do_layer_stencil = ((settings->imapaint.flag & IMAGEPAINT_PROJECT_LAYER_STENCIL) &&
!(ps->do_stencil_brush) && ps->stencil_ima);
@@ -4660,15 +4661,15 @@ static int texture_paint_camera_project_exec(bContext *C, wmOperator *op)
IDProperty *view_data = NULL;
Object *ob = OBACT;
- paint_proj_mesh_data_ensure(C, ob, op);
-
- project_state_init(C, ob, &ps, BRUSH_STROKE_NORMAL);
-
- if (ps.ob == NULL || ps.ob->type != OB_MESH) {
+ if (ob == NULL || ob->type != OB_MESH) {
BKE_report(op->reports, RPT_ERROR, "No active mesh object");
return OPERATOR_CANCELLED;
}
+ paint_proj_mesh_data_ensure(C, ob, op);
+
+ project_state_init(C, ob, &ps, BRUSH_STROKE_NORMAL);
+
if (image == NULL) {
BKE_report(op->reports, RPT_ERROR, "Image could not be found");
return OPERATOR_CANCELLED;
@@ -4869,6 +4870,8 @@ void paint_proj_mesh_data_ensure(bContext *C, Object *ob, wmOperator *op)
Main *bmain = CTX_data_main(C);
Brush *br = BKE_paint_brush(&imapaint->paint);
+ BLI_assert(ob->type == OB_MESH);
+
/* no material, add one */
if (ob->totcol == 0) {
Material *ma = BKE_material_add(CTX_data_main(C), "Material");