Commit: 98e50c0881e4b9452e152c751b5e72521cedf7ec
Author: Campbell Barton
Date:   Fri Jun 9 16:26:33 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rB98e50c0881e4b9452e152c751b5e72521cedf7ec

RNA: Expose face-map manipulator to Python

===================================================================

M       source/blender/editors/include/ED_manipulator_library.h
M       source/blender/editors/manipulator_library/manipulator_library_presets.c
M       source/blender/editors/space_view3d/drawobject.c
M       source/blender/makesrna/intern/rna_wm_manipulator_api.c

===================================================================

diff --git a/source/blender/editors/include/ED_manipulator_library.h 
b/source/blender/editors/include/ED_manipulator_library.h
index 284f476e62e..7ca7c36e4bc 100644
--- a/source/blender/editors/include/ED_manipulator_library.h
+++ b/source/blender/editors/include/ED_manipulator_library.h
@@ -49,7 +49,10 @@ struct wmManipulatorGroup;
  */
 
 /* manipulator_library_presets.c */
-void ED_manipulator_draw_preset_box(const struct wmManipulator *manipulator, 
float mat[4][4], int select_id);
+void ED_manipulator_draw_preset_box(
+        const struct wmManipulator *manipulator, float mat[4][4], int 
select_id);
+void ED_manipulator_draw_preset_facemap(
+        const struct wmManipulator *mpr, struct Scene *scene, struct Object 
*ob,  const int facemap, int select_id);
 
 
 /* -------------------------------------------------------------------- */
diff --git 
a/source/blender/editors/manipulator_library/manipulator_library_presets.c 
b/source/blender/editors/manipulator_library/manipulator_library_presets.c
index 069b9e54c23..eb26927fd4e 100644
--- a/source/blender/editors/manipulator_library/manipulator_library_presets.c
+++ b/source/blender/editors/manipulator_library/manipulator_library_presets.c
@@ -34,6 +34,7 @@
 
 #include "DNA_manipulator_types.h"
 #include "DNA_view3d_types.h"
+#include "DNA_object_types.h"
 
 #include "ED_view3d.h"
 #include "ED_screen.h"
@@ -81,3 +82,27 @@ void ED_manipulator_draw_preset_box(
                GPU_select_load_id(-1);
        }
 }
+
+void ED_manipulator_draw_preset_facemap(
+        const struct wmManipulator *mpr, struct Scene *scene, Object *ob,  
const int facemap, int select_id)
+{
+       const bool is_select = (select_id != -1);
+       const bool is_highlight = is_select && (mpr->state & 
WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+
+       float color[4];
+       manipulator_color_get(mpr, is_highlight, color);
+
+       if (is_select) {
+               GPU_select_load_id(select_id);
+       }
+
+       gpuPushMatrix();
+       gpuMultMatrix(ob->obmat);
+       ED_draw_object_facemap(scene, ob, color, facemap);
+       gpuPopMatrix();
+
+       if (is_select) {
+               GPU_select_load_id(-1);
+       }
+}
+
diff --git a/source/blender/editors/space_view3d/drawobject.c 
b/source/blender/editors/space_view3d/drawobject.c
index 1bb8937c338..126217057e5 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -9812,9 +9812,6 @@ void ED_draw_object_facemap(Scene *scene, Object *ob, 
const float col[4], const
 
 #else
 
-       (void)facemap;
-       (void)col;
-
        /* Just to create the data to pass to immediate mode, grr! */
        Mesh *me = ob->data;
        const int *facemap_data = CustomData_get_layer(&me->pdata, CD_FACEMAP);
diff --git a/source/blender/makesrna/intern/rna_wm_manipulator_api.c 
b/source/blender/makesrna/intern/rna_wm_manipulator_api.c
index 646d0ebc902..2e1155c616b 100644
--- a/source/blender/makesrna/intern/rna_wm_manipulator_api.c
+++ b/source/blender/makesrna/intern/rna_wm_manipulator_api.c
@@ -44,11 +44,19 @@
 
 #include "ED_manipulator_library.h"
 
-static void rna_manipulator_draw_preset_box(wmManipulator *mpr, float 
matrix[16], int select_id)
+static void rna_manipulator_draw_preset_box(
+        wmManipulator *mpr, float matrix[16], int select_id)
 {
        ED_manipulator_draw_preset_box(mpr, (float (*)[4])matrix, select_id);
 }
 
+static void rna_manipulator_draw_preset_facemap(
+        wmManipulator *mpr, struct bContext *C, struct Object *ob, int 
facemap, int select_id)
+{
+       struct Scene *scene = CTX_data_scene(C);
+       ED_manipulator_draw_preset_facemap(mpr, scene, ob, facemap, select_id);
+}
+
 #else
 
 void RNA_api_manipulator(StructRNA *srna)
@@ -62,14 +70,23 @@ void RNA_api_manipulator(StructRNA *srna)
        FunctionRNA *func;
        PropertyRNA *parm;
 
-       /* draw */
+       /* draw_preset_box */
        func = RNA_def_function(srna, "draw_preset_box", 
"rna_manipulator_draw_preset_box");
        RNA_def_function_ui_description(func, "Draw a box");
        parm = RNA_def_property(func, "matrix", PROP_FLOAT, PROP_MATRIX);
        RNA_def_property_flag(parm, PARM_REQUIRED);
        RNA_def_property_multi_array(parm, 2, rna_matrix_dimsize_4x4);
        RNA_def_property_ui_text(parm, "", "The matrix to transform");
-       RNA_def_int(func, "select_id", 0, 0, INT_MAX, "Zero when not 
selecting", "", 0, INT_MAX);
+       RNA_def_int(func, "select_id", -1, -1, INT_MAX, "Zero when not 
selecting", "", -1, INT_MAX);
+
+       /* draw_preset_facemap */
+       func = RNA_def_function(srna, "draw_preset_facemap", 
"rna_manipulator_draw_preset_facemap");
+       RNA_def_function_ui_description(func, "Draw the face-map of a mesh 
object");
+       RNA_def_function_flag(func, FUNC_USE_CONTEXT);
+       parm = RNA_def_pointer(func, "object", "Object", "", "Object");
+       RNA_def_parameter_flags(parm, PROP_NEVER_NULL, PARM_REQUIRED);
+       RNA_def_int(func, "facemap", 0, 0, INT_MAX, "Face map index", "", 0, 
INT_MAX);
+       RNA_def_int(func, "select_id", -1, -1, INT_MAX, "Zero when not 
selecting", "", -1, INT_MAX);
 }

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

Reply via email to