Revision: 46705
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46705
Author:   cyborgmuppet
Date:     2012-05-17 01:42:06 +0000 (Thu, 17 May 2012)
Log Message:
-----------
Added framework for transfer weight options.
vertex_group_transfer_weight_exec() governs all.
Functions renamed/added with _transfer_weight_
as opposed to _copy_by_ 
This is to reflect changes in parameters and usage as the internal code will 
change.

Modified Paths:
--------------
    
branches/meshdata_transfer/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    branches/meshdata_transfer/source/blender/editors/object/object_intern.h
    branches/meshdata_transfer/source/blender/editors/object/object_ops.c
    branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c

Modified: 
branches/meshdata_transfer/release/scripts/startup/bl_ui/space_view3d_toolbar.py
===================================================================
--- 
branches/meshdata_transfer/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    2012-05-16 23:37:23 UTC (rev 46704)
+++ 
branches/meshdata_transfer/release/scripts/startup/bl_ui/space_view3d_toolbar.py
    2012-05-17 01:42:06 UTC (rev 46705)
@@ -986,8 +986,7 @@
 
         col = layout.column()
         col.active = ob.vertex_groups.active is not None
-        col.operator("object.vertex_group_copy_to_selected", text="Transfer 
weight All")
-        col.operator("object.vertex_group_copy_to_selected_single", 
text="Transfer weight")
+        col.operator("object.vertex_group_transfer_weight", text="Transfer 
weight")
         col.operator("object.vertex_group_normalize_all", text="Normalize All")
         col.operator("object.vertex_group_normalize", text="Normalize")
         col.operator("object.vertex_group_mirror", text="Mirror")

Modified: 
branches/meshdata_transfer/source/blender/editors/object/object_intern.h
===================================================================
--- branches/meshdata_transfer/source/blender/editors/object/object_intern.h    
2012-05-16 23:37:23 UTC (rev 46704)
+++ branches/meshdata_transfer/source/blender/editors/object/object_intern.h    
2012-05-17 01:42:06 UTC (rev 46705)
@@ -196,6 +196,7 @@
 void OBJECT_OT_vertex_group_select(struct wmOperatorType *ot);
 void OBJECT_OT_vertex_group_deselect(struct wmOperatorType *ot);
 void OBJECT_OT_vertex_group_copy_to_linked(struct wmOperatorType *ot);
+void OBJECT_OT_vertex_group_transfer_weight(struct wmOperatorType *ot);
 void OBJECT_OT_vertex_group_copy_to_selected(struct wmOperatorType *ot);
 void OBJECT_OT_vertex_group_copy_to_selected_single(struct wmOperatorType *ot);
 void OBJECT_OT_vertex_group_copy(struct wmOperatorType *ot);

Modified: branches/meshdata_transfer/source/blender/editors/object/object_ops.c
===================================================================
--- branches/meshdata_transfer/source/blender/editors/object/object_ops.c       
2012-05-16 23:37:23 UTC (rev 46704)
+++ branches/meshdata_transfer/source/blender/editors/object/object_ops.c       
2012-05-17 01:42:06 UTC (rev 46705)
@@ -170,6 +170,7 @@
        WM_operatortype_append(OBJECT_OT_vertex_group_select);
        WM_operatortype_append(OBJECT_OT_vertex_group_deselect);
        WM_operatortype_append(OBJECT_OT_vertex_group_copy_to_linked);
+       WM_operatortype_append(OBJECT_OT_vertex_group_transfer_weight);
        WM_operatortype_append(OBJECT_OT_vertex_group_copy_to_selected);
        WM_operatortype_append(OBJECT_OT_vertex_group_copy_to_selected_single);
        WM_operatortype_append(OBJECT_OT_vertex_group_copy);

Modified: 
branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c    
2012-05-16 23:37:23 UTC (rev 46704)
+++ branches/meshdata_transfer/source/blender/editors/object/object_vgroup.c    
2012-05-17 01:42:06 UTC (rev 46705)
@@ -420,9 +420,58 @@
        return 1;
 }
 
-/*Copy a single vertex group from source to destination with weights by 
nearest weight*/
-int ED_vgroup_copy_by_nearest_vertex_single(Object *ob_dst, Object *ob_src)
+/********************** Start transfer weight functions *********************/
+
+int ED_vgroup_transfer_weight_by_index_all(Object *ob_dst, Object *ob_src, 
short mode)
 {
+       /* mode 1 == replace all weights*/
+       if(mode == 1){
+               return ED_vgroup_copy_array(ob_dst, ob_src);
+       }
+
+       /* mode 2 == apply to null/0 weights*/
+       else if(mode == 2){
+               return 0;
+       }
+
+       /* mode 3 == apply to selected weights*/
+       else if(mode == 3){
+               return 0;
+       }
+       else return 0;
+}
+
+int ED_vgroup_transfer_weight_by_index_single(Object *ob_dst, Object *ob_src, 
short mode)
+{
+       /* mode 1 == replace all weights*/
+       if(mode == 1){
+               return ED_vgroup_copy_single(ob_dst, ob_src);
+       }
+
+       /* mode 2 == apply to null/0 weights*/
+       else if(mode == 2){
+               return 0;
+       }
+
+       /* mode 3 == apply to selected weights*/
+       else if(mode == 3){
+               return 0;
+       }
+       else return 0;
+}
+
+int ED_vgroup_transfer_weight_by_nearest_vertex_all(Object *ob_dst, Object 
*ob_src, short mode)
+{
+       ob_dst= ob_dst;
+       ob_src= ob_src;
+       /* mode 1 == replace all weights*/
+       /* mode 2 == apply to null/0 weights*/
+       /* mode 3 == apply to selected weights*/
+       return mode;
+}
+
+int ED_vgroup_transfer_weight_by_nearest_vertex_single(Object *ob_dst, Object 
*ob_src, short mode)
+{
        bDeformGroup *dg_src, *dg_dst;
        MDeformVert **dv_array_src, **dv_array_dst;
        MDeformWeight *dw_dst, *dw_src;
@@ -434,6 +483,11 @@
        int dv_tot_src, dv_tot_dst, i, index_dst, index_src;
        float tmp_co[3], tmp_mat[4][4];
 
+       /* mode 1 == replace all weights*/
+       /* mode 2 == apply to null/0 weights*/
+       /* mode 3 == apply to selected weights*/
+       return mode;
+
        /*get source deform group*/
        dg_src= BLI_findlink(&ob_src->defbase, (ob_src->actdef-1));
 
@@ -491,9 +545,18 @@
        return 1;
 }
 
-/*Copy a single vertex group from source to destination with weights by 
nearest weight in face*/
-int ED_vgroup_copy_by_nearest_vertex_in_face_single(Object *ob_dst, Object 
*ob_src)
+int ED_vgroup_transfer_weight_by_nearest_vertex_in_face_all(Object *ob_dst, 
Object *ob_src, short mode)
 {
+       ob_dst= ob_dst;
+       ob_src= ob_src;
+       /* mode 1 == replace all weights*/
+       /* mode 2 == apply to null/0 weights*/
+       /* mode 3 == apply to selected weights*/
+       return mode;
+}
+
+int ED_vgroup_transfer_weight_by_nearest_vertex_in_face_single(Object *ob_dst, 
Object *ob_src, short mode)
+{
        bDeformGroup *dg_src, *dg_dst;
        Mesh *me_dst;
        DerivedMesh *dmesh_src;
@@ -506,6 +569,11 @@
        int dv_tot_src, dv_tot_dst, i, index_dst, index_src;
        float dist_v1, dist_v2, dist_v3, dist_v4, tmp_co[3], tmp_mat[4][4];
 
+       /* mode 1 == replace all weights*/
+       /* mode 2 == apply to null/0 weights*/
+       /* mode 3 == apply to selected weights*/
+       return mode;
+
        /*get source deform group*/
        dg_src= BLI_findlink(&ob_src->defbase, (ob_src->actdef-1));
 
@@ -589,9 +657,18 @@
        return 1;
 }
 
-/*Copy a single vertex group from source to destination with weights 
interpolated over nearest face*/
-int ED_vgroup_copy_by_nearest_face_single(Object *ob_dst, Object *ob_src)
+int ED_vgroup_transfer_weight_by_nearest_face_all(Object *ob_dst, Object 
*ob_src, short mode)
 {
+       ob_dst= ob_dst;
+       ob_src= ob_src;
+       /* mode 1 == replace all weights*/
+       /* mode 2 == apply to null/0 weights*/
+       /* mode 3 == apply to selected weights*/
+       return mode;
+}
+
+int ED_vgroup_transfer_weight_by_nearest_face_single(Object *ob_dst, Object 
*ob_src, short mode)
+{
        bDeformGroup *dg_src, *dg_dst;
        Mesh *me_dst;
        DerivedMesh *dmesh_src;
@@ -604,6 +681,11 @@
        int dv_tot_src, dv_tot_dst, i, index_dst, index_src;
        float weight, tmp_weight[4], tmp_co[3], normal[3], tmp_mat[4][4];
 
+       /* mode 1 == replace all weights*/
+       /* mode 2 == apply to null/0 weights*/
+       /* mode 3 == apply to selected weights*/
+       return mode;
+
        /*get source deform group*/
        dg_src= BLI_findlink(&ob_src->defbase, (ob_src->actdef-1));
 
@@ -680,6 +762,7 @@
        return 1;
 }
 
+/********************** End transfer weight functions *********************/
 
 /* for Mesh in Object mode */
 /* allows editmode for Lattice */
@@ -3048,7 +3131,6 @@
        return OPERATOR_FINISHED;
 }
 
-
 void OBJECT_OT_vertex_group_copy_to_selected(wmOperatorType *ot)
 {
        /* identifiers */
@@ -3074,12 +3156,8 @@
        CTX_DATA_BEGIN(C, Object*, obslc, selected_editable_objects)
        {
                if(obact != obslc) {
-                       /*Try function for matching number of vertices*/
+                       /*Try function for matching indices*/
                        if(ED_vgroup_copy_single(obslc, obact)) change++;
-                       /*Try function for get weight from closest vertex*/
-                       /*TODO: try this function*/
-                       /*Try function for get weight from closest face*/
-                       else if(ED_vgroup_copy_by_nearest_face_single(obslc, 
obact)) change++;
                        /*Trigger error message*/
                        else fail++;
                        /*Event notifiers for correct display of data*/
@@ -3093,7 +3171,7 @@
        /*Report error when task can not be completed with available 
functions.*/
        if((change == 0 && fail == 0) || fail) {
                BKE_reportf(op->reports, RPT_ERROR,
-                           "Copy to VGroups to Selected warning done %d, 
failed %d, All functions failed!",
+                           "Copy to VGroups to Selected single warning done 
%d, failed %d, object data must have matching indices",
                            change, fail);
        }
 
@@ -3116,6 +3194,110 @@
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
 }
 
+static int vertex_group_transfer_weight_exec(bContext *C, wmOperator *op)
+{
+       Object *obact= CTX_data_active_object(C);
+       int change= 0;
+       int fail= 0;
+
+       /*TODO: get this parameter*/
+       short option= 2;
+       /* option 1 == single*/
+       /* option 2 == all*/
+
+       /*TODO: get this parameter*/
+       short method= 1;
+       /*method 1 == by matching indices*/
+       /*method 2 == by nearest vertex*/
+       /*method 3 == by nearest vertex in face*/
+       /*method 4 == by nearest face*/
+
+       /*TODO: get this parameter*/
+       short mode= 1;
+       /* mode is passed on to lower funtions*/
+
+       /*Macro to loop through selected objects and perform operation*/
+       CTX_DATA_BEGIN(C, Object*, obslc, selected_editable_objects)
+       {
+               /*check if object is the same*/
+               if(obact != obslc) {
+                       /*apply option*/
+                       if(option == 1){
+                               /*apply method*/
+                               if(method == 1){
+                                       /*Try function with mode*/
+                                       
if(ED_vgroup_transfer_weight_by_index_single(obslc, obact, mode)) change++; 
/*(tmp dev info remove) tested and working*/
+                                       else fail++;
+                               }
+                               else if(method == 2){
+                                       
if(ED_vgroup_transfer_weight_by_nearest_vertex_single(obslc, obact, mode)) 
change++;
+                                       else fail++;
+                               }
+                               else if(method == 3){
+                                       
if(ED_vgroup_transfer_weight_by_nearest_vertex_in_face_single(obslc, obact, 
mode)) change++;
+                                       else fail++;
+                               }
+                               else if(method == 4){
+                                       
if(ED_vgroup_transfer_weight_by_nearest_face_single(obslc, obact, mode)) 
change++;
+                                       else fail++;
+                               }
+                               else fail++;
+                       }
+                       else if(option == 2){
+                               if(method == 1){
+                                       
if(ED_vgroup_transfer_weight_by_index_all(obslc, obact, mode)) change++; /*(tmp 
dev info remove) tested and working*/
+                                       else fail++;
+                               }
+                               else if(method == 2){
+                                       
if(ED_vgroup_transfer_weight_by_nearest_vertex_all(obslc, obact, mode)) 
change++;
+                                       else fail++;
+                               }
+                               else if(method == 3){
+                                       
if(ED_vgroup_transfer_weight_by_nearest_vertex_in_face_all(obslc, obact, mode)) 
change++;
+                                       else fail++;
+                               }
+                               else if(method == 4){

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to