Revision: 37297
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37297
Author:   jwilkins
Date:     2011-06-07 15:45:54 +0000 (Tue, 07 Jun 2011)
Log Message:
-----------
== Pivot Last ==
Pivot last now works in vertex paint mode.

Generalized so that it works for any mode that uses paint stroke with a 
'get_location' function, which is sculpt and vertex paint.  Other paint modes 
should follow as things are generalized, but I'll make it work with the other 
modes if I can for now.

Modified Paths:
--------------
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_stroke.c
    branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt.c
    branches/soc-2011-onion/source/blender/editors/space_view3d/view3d_edit.c

Modified: 
branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_stroke.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_stroke.c  
2011-06-07 15:33:01 UTC (rev 37296)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/paint_stroke.c  
2011-06-07 15:45:54 UTC (rev 37297)
@@ -1590,6 +1590,21 @@
        stroke->last_mouse_position[1] = mouse[1];
 
        stroke->update_step(C, stroke, &itemptr);
+
+       /* update last stroke location */
+       {
+               Object *ob= CTX_data_active_object(C);
+
+               if (ob && ob->paint) {
+                       if (stroke->get_location) {
+                               ob->paint->last_stroke_valid= 1;
+                               copy_v3_v3(ob->paint->last_stroke, location);
+                       }
+                       else {
+                               ob->paint->last_stroke_valid= 0;
+                       }
+               }
+       }
 }
 
 /* Returns zero if no sculpt changes should be made, non-zero otherwise */

Modified: branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt.c        
2011-06-07 15:33:01 UTC (rev 37296)
+++ branches/soc-2011-onion/source/blender/editors/sculpt_paint/sculpt.c        
2011-06-07 15:45:54 UTC (rev 37297)
@@ -4111,11 +4111,6 @@
                                paint_brush_set(p, brush);
                }
 
-               /* update last stroke position */
-               ob->paint->last_stroke_valid= 1;
-               copy_v3_v3(ob->paint->last_stroke, ss->cache->true_location);
-               mul_m4_v3(ob->obmat, ob->paint->last_stroke);
-
                sculpt_cache_free(ss->cache);
                ss->cache = NULL;
 

Modified: 
branches/soc-2011-onion/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/space_view3d/view3d_edit.c   
2011-06-07 15:33:01 UTC (rev 37296)
+++ branches/soc-2011-onion/source/blender/editors/space_view3d/view3d_edit.c   
2011-06-07 15:45:54 UTC (rev 37297)
@@ -393,6 +393,7 @@
        static float lastofs[3] = {0,0,0};
        RegionView3D *rv3d;
        ViewOpsData *vod= MEM_callocN(sizeof(ViewOpsData), "viewops data");
+       Object *ob= CTX_data_active_object(C);
        float* last_stroke;
 
        /* store data */
@@ -417,7 +418,7 @@
 
        vod->use_dyn_ofs= 0;
 
-       last_stroke= ED_paint_get_last_stroke(CTX_data_active_object(C));
+       last_stroke= ED_paint_get_last_stroke(ob);
 
        if ((U.uiflag & USER_ORBIT_LAST_STROKE && last_stroke != NULL) ||
            (U.uiflag & USER_ORBIT_SELECTION))
@@ -425,14 +426,15 @@
                vod->use_dyn_ofs= 1;
        }
 
-       /* setup offset */
 
        copy_v3_v3(vod->ofs, rv3d->ofs);
 
        if (vod->use_dyn_ofs) {
+               /* last stroke takes priority over active object center */
                if (last_stroke) {
-                       /* last stroke takes priority over active object center 
*/
-                       negate_v3_v3(vod->dyn_ofs, last_stroke);
+                       /* last_stroke is in object local space, dyn_ofs is in 
world space */
+                       mul_v3_m4v3(vod->dyn_ofs, ob->obmat, last_stroke);
+                       negate_v3(vod->dyn_ofs);
                }
                else {
                        /* If there's no selection, lastofs is unmodified and 
last value since static */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to