Revision: 19047 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19047 Author: blendix Date: 2009-02-20 00:53:40 +0100 (Fri, 20 Feb 2009)
Log Message: ----------- 2.5: * Image painting back. 2d paint, 3d paint and projection, undo, pressure, repeating paint operations, etc should all work. Drawing cursor needs a bit of work, only gets shown when enabling texture paint mode now. * Move sculpt, image paint, and vertex/weight paint into a single sculpt_paint module. Doesn't make much difference now, but nice to have it together for better integration and consistency in the future. Modified Paths: -------------- branches/blender2.5/blender/source/blender/editors/Makefile branches/blender2.5/blender/source/blender/editors/SConscript branches/blender2.5/blender/source/blender/editors/include/ED_screen.h branches/blender2.5/blender/source/blender/editors/include/ED_sculpt.h branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h branches/blender2.5/blender/source/blender/editors/mesh/editface.c branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c branches/blender2.5/blender/source/blender/editors/sculpt_paint/Makefile branches/blender2.5/blender/source/blender/editors/sculpt_paint/SConscript branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c branches/blender2.5/blender/source/blender/editors/space_image/space_image.c branches/blender2.5/blender/source/blender/editors/space_view3d/drawmesh.c branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_draw.c branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_header.c branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_intern.h branches/blender2.5/blender/source/blender/editors/space_view3d/view3d_ops.c branches/blender2.5/blender/source/blender/editors/util/ed_util.c branches/blender2.5/blender/source/blender/editors/util/undo.c branches/blender2.5/blender/source/blender/editors/uvedit/Makefile branches/blender2.5/blender/source/blender/editors/uvedit/SConscript branches/blender2.5/blender/source/blender/makesdna/DNA_brush_types.h branches/blender2.5/blender/source/blender/makesdna/DNA_scene_types.h branches/blender2.5/blender/source/blender/makesrna/intern/makesrna.c branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c branches/blender2.5/blender/source/blender/windowmanager/WM_types.h branches/blender2.5/blender/source/blender/windowmanager/wm_event_types.h Added Paths: ----------- branches/blender2.5/blender/source/blender/editors/sculpt_paint/ branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_image.c branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_intern.h branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_ops.c branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_utils.c branches/blender2.5/blender/source/blender/editors/sculpt_paint/paint_vertex.c branches/blender2.5/blender/source/blender/editors/sculpt_paint/sculpt_stroke.c Removed Paths: ------------- branches/blender2.5/blender/source/blender/editors/sculpt/ branches/blender2.5/blender/source/blender/editors/sculpt_paint/stroke.c branches/blender2.5/blender/source/blender/editors/space_view3d/vpaint.c Modified: branches/blender2.5/blender/source/blender/editors/Makefile =================================================================== --- branches/blender2.5/blender/source/blender/editors/Makefile 2009-02-19 23:15:27 UTC (rev 19046) +++ branches/blender2.5/blender/source/blender/editors/Makefile 2009-02-19 23:53:40 UTC (rev 19047) @@ -29,6 +29,6 @@ # Bounces make to subdirectories. SOURCEDIR = source/blender/editors -DIRS = armature mesh animation object sculpt datafiles transform screen curve gpencil physics preview uvedit space_outliner space_time space_view3d interface util space_api space_graph space_image space_node space_buttons space_info space_file space_sound space_action space_nla space_script space_text space_sequencer +DIRS = armature mesh animation object sculpt_paint datafiles transform screen curve gpencil physics preview uvedit space_outliner space_time space_view3d interface util space_api space_graph space_image space_node space_buttons space_info space_file space_sound space_action space_nla space_script space_text space_sequencer include nan_subdirs.mk Modified: branches/blender2.5/blender/source/blender/editors/SConscript =================================================================== --- branches/blender2.5/blender/source/blender/editors/SConscript 2009-02-19 23:15:27 UTC (rev 19046) +++ branches/blender2.5/blender/source/blender/editors/SConscript 2009-02-19 23:53:40 UTC (rev 19047) @@ -31,5 +31,5 @@ 'space_sequencer/SConscript', 'transform/SConscript', 'screen/SConscript', - 'sculpt/SConscript', + 'sculpt_paint/SConscript', 'uvedit/SConscript']) Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen.h =================================================================== --- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h 2009-02-19 23:15:27 UTC (rev 19046) +++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h 2009-02-19 23:53:40 UTC (rev 19047) @@ -99,6 +99,7 @@ int ED_operator_screenactive(struct bContext *C); int ED_operator_screen_mainwinactive(struct bContext *C); int ED_operator_areaactive(struct bContext *C); +int ED_operator_regionactive(struct bContext *C); int ED_operator_scene_editable(struct bContext *C); Modified: branches/blender2.5/blender/source/blender/editors/include/ED_sculpt.h =================================================================== --- branches/blender2.5/blender/source/blender/editors/include/ED_sculpt.h 2009-02-19 23:15:27 UTC (rev 19046) +++ branches/blender2.5/blender/source/blender/editors/include/ED_sculpt.h 2009-02-19 23:53:40 UTC (rev 19047) @@ -31,7 +31,15 @@ struct bContext; struct wmWindowManager; +/* sculpt.c */ void ED_operatortypes_sculpt(void); -void ED_keymap_sculpt(wmWindowManager *wm); +void ED_keymap_sculpt(struct wmWindowManager *wm); +/* paint_ops.c */ +void ED_operatortypes_paint(void); + +/* paint_image.c */ +void undo_imagepaint_step(int step); +void undo_imagepaint_clear(void); + #endif Modified: branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h =================================================================== --- branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h 2009-02-19 23:15:27 UTC (rev 19046) +++ branches/blender2.5/blender/source/blender/editors/include/ED_view3d.h 2009-02-19 23:53:40 UTC (rev 19047) @@ -112,6 +112,8 @@ void *handle, unsigned int (*indextest)(void *handle, unsigned int index)); unsigned int view3d_sample_backbuf(struct ViewContext *vc, int x, int y); +int view_autodist(struct Scene *scene, struct ARegion *ar, struct View3D *v3d, short *mval, float mouse_worldloc[3]); + /* select */ #define MAXPICKBUF 10000 short view3d_opengl_select(struct ViewContext *vc, unsigned int *buffer, unsigned int bufsize, rcti *input); @@ -119,6 +121,7 @@ void view3d_set_viewcontext(struct bContext *C, struct ViewContext *vc); void view3d_operator_needs_opengl(const struct bContext *C); void view3d_get_view_aligned_coordinate(struct ViewContext *vc, float *fp, short mval[2]); +void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4], float vmat[4][4]);; /* XXX should move to arithb.c */ int edge_inside_circle(short centx, short centy, short rad, short x1, short y1, short x2, short y2); @@ -126,6 +129,5 @@ /* modes */ void ED_view3d_exit_paint_modes(struct bContext *C); - #endif /* ED_VIEW3D_H */ Modified: branches/blender2.5/blender/source/blender/editors/mesh/editface.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/mesh/editface.c 2009-02-19 23:15:27 UTC (rev 19046) +++ branches/blender2.5/blender/source/blender/editors/mesh/editface.c 2009-02-19 23:53:40 UTC (rev 19047) @@ -144,16 +144,6 @@ return NULL; } -static void make_tfaces(Object *ob) -{ - Mesh *me= ob->data; - - if(!me->mtface) { - me->mtface= CustomData_add_layer(&me->fdata, CD_MTFACE, CD_DEFAULT, - NULL, me->totface); - } -} - void reveal_tface(Scene *scene) { Mesh *me; @@ -734,155 +724,4 @@ #endif } -/* Texture Paint */ -void set_texturepaint(Scene *scene) /* toggle */ -{ - Object *ob = OBACT; - Mesh *me = 0; - - if(ob==NULL) return; - - if (object_data_is_libdata(ob)) { -// XXX error_libdata(); - return; - } - - me= get_mesh(ob); - - if(me) - DAG_object_flush_update(scene, ob, OB_RECALC_DATA); - - if(G.f & G_TEXTUREPAINT) { - G.f &= ~G_TEXTUREPAINT; - GPU_paint_set_mipmap(1); - } - else if (me) { - G.f |= G_TEXTUREPAINT; - - if(me->mtface==NULL) - make_tfaces(ob); - - brush_check_exists(&scene->toolsettings->imapaint.brush); - GPU_paint_set_mipmap(0); - } - -} - -static void texpaint_project(Object *ob, float *model, float *proj, float *co, float *pco) -{ - VECCOPY(pco, co); - pco[3]= 1.0f; - - Mat4MulVecfl(ob->obmat, pco); - Mat4MulVecfl((float(*)[4])model, pco); - Mat4MulVec4fl((float(*)[4])proj, pco); -} - -static void texpaint_tri_weights(Object *ob, float *v1, float *v2, float *v3, float *co, float *w) -{ - float pv1[4], pv2[4], pv3[4], h[3], divw; - float model[16], proj[16], wmat[3][3], invwmat[3][3]; - GLint view[4]; - - /* compute barycentric coordinates */ - - /* get the needed opengl matrices */ - glGetIntegerv(GL_VIEWPORT, view); - glGetFloatv(GL_MODELVIEW_MATRIX, model); - glGetFloatv(GL_PROJECTION_MATRIX, proj); - view[0] = view[1] = 0; - - /* project the verts */ - texpaint_project(ob, model, proj, v1, pv1); - texpaint_project(ob, model, proj, v2, pv2); - texpaint_project(ob, model, proj, v3, pv3); - - /* do inverse view mapping, see gluProject man page */ - h[0]= (co[0] - view[0])*2.0f/view[2] - 1; - h[1]= (co[1] - view[1])*2.0f/view[3] - 1; - h[2]= 1.0f; - - /* solve for (w1,w2,w3)/perspdiv in: - h*perspdiv = Project*Model*(w1*v1 + w2*v2 + w3*v3) */ - - wmat[0][0]= pv1[0]; wmat[1][0]= pv2[0]; wmat[2][0]= pv3[0]; - wmat[0][1]= pv1[1]; wmat[1][1]= pv2[1]; wmat[2][1]= pv3[1]; - wmat[0][2]= pv1[3]; wmat[1][2]= pv2[3]; wmat[2][2]= pv3[3]; - - Mat3Inv(invwmat, wmat); - Mat3MulVecfl(invwmat, h); - - VECCOPY(w, h); - - /* w is still divided by perspdiv, make it sum to one */ - divw= w[0] + w[1] + w[2]; - if(divw != 0.0f) - VecMulf(w, 1.0f/divw); -} - -/* compute uv coordinates of mouse in face */ -void texpaint_pick_uv(Scene *scene, Object *ob, Mesh *mesh, unsigned int faceindex, short *xy, float *uv) -{ - DerivedMesh *dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH); - int *index = dm->getFaceDataArray(dm, CD_ORIGINDEX); - MTFace *tface = dm->getFaceDataArray(dm, CD_MTFACE), *tf; - int numfaces = dm->getNumFaces(dm), a; - float p[2], w[3], absw, minabsw; - MFace mf; - MVert mv[4]; - - minabsw = 1e10; - uv[0] = uv[1] = 0.0; - -// XXX persp(PERSP_VIEW); - - /* test all faces in the derivedmesh with the original index of the picked face */ - for (a = 0; a < numfaces; a++) { - if (index[a] == faceindex) { - dm->getFace(dm, a, &mf); - - dm->getVert(dm, mf.v1, &mv[0]); - dm->getVert(dm, mf.v2, &mv[1]); - dm->getVert(dm, mf.v3, &mv[2]); - if (mf.v4) - dm->getVert(dm, mf.v4, &mv[3]); - - tf= &tface[a]; - - p[0]= xy[0]; - p[1]= xy[1]; - - if (mf.v4) { - /* the triangle with the largest absolute values is the one - with the most negative weights */ - texpaint_tri_weights(ob, mv[0].co, mv[1].co, mv[3].co, p, w); - absw= fabs(w[0]) + fabs(w[1]) + fabs(w[2]); - if(absw < minabsw) { - uv[0]= tf->uv[0][0]*w[0] + tf->uv[1][0]*w[1] + tf->uv[3][0]*w[2]; - uv[1]= tf->uv[0][1]*w[0] + tf->uv[1][1]*w[1] + tf->uv[3][1]*w[2]; - minabsw = absw; - } - - texpaint_tri_weights(ob, mv[1].co, mv[2].co, mv[3].co, p, w); - absw= fabs(w[0]) + fabs(w[1]) + fabs(w[2]); - if (absw < minabsw) { - uv[0]= tf->uv[1][0]*w[0] + tf->uv[2][0]*w[1] + tf->uv[3][0]*w[2]; - uv[1]= tf->uv[1][1]*w[0] + tf->uv[2][1]*w[1] + tf->uv[3][1]*w[2]; - minabsw = absw; - } - } - else { - texpaint_tri_weights(ob, mv[0].co, mv[1].co, mv[2].co, p, w); - absw= fabs(w[0]) + fabs(w[1]) + fabs(w[2]); - if (absw < minabsw) { - uv[0]= tf->uv[0][0]*w[0] + tf->uv[1][0]*w[1] + tf->uv[2][0]*w[2]; - uv[1]= tf->uv[0][1]*w[0] + tf->uv[1][1]*w[1] + tf->uv[2][1]*w[2]; - minabsw = absw; - } - } - } - } - - dm->release(dm); -} Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c 2009-02-19 23:15:27 UTC (rev 19046) +++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c 2009-02-19 23:53:40 UTC (rev 19047) @@ -73,6 +73,14 @@ /* ************** Exported Poll tests ********************** */ +int ED_operator_regionactive(bContext *C) +{ + if(CTX_wm_window(C)==NULL) return 0; + if(CTX_wm_screen(C)==NULL) return 0; + if(CTX_wm_region(C)==NULL) return 0; + return 1; +} + int ED_operator_areaactive(bContext *C) { if(CTX_wm_window(C)==NULL) return 0; Copied: branches/blender2.5/blender/source/blender/editors/sculpt_paint (from rev 19034, branches/blender2.5/blender/source/blender/editors/sculpt) Property changes on: branches/blender2.5/blender/source/blender/editors/sculpt_paint ___________________________________________________________________ Name: svn:mergeinfo + Modified: branches/blender2.5/blender/source/blender/editors/sculpt_paint/Makefile @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs