[Bf-blender-cvs] [bd239c7] custom-manipulators: Rebase wiggly-widgets branch onto blender2.8 branch

Julian Eisel noreply at git.blender.org
Fri Sep 23 02:51:31 CEST 2016


Commit: bd239c7661395f2043cf4a5c1225470ee3c8352d
Author: Julian Eisel
Date:   Fri Sep 23 02:31:23 2016 +0200
Branches: custom-manipulators
https://developer.blender.org/rBbd239c7661395f2043cf4a5c1225470ee3c8352d

Rebase wiggly-widgets branch onto blender2.8 branch

This commit adds a new 'custom-manipulators' branch in which changes of the wiggly-widgets branch are applied onto the blender2.8 branch. I've done it so I can start porting manipulator drawing code to use the new abstractions for OpenGL 3.2 core profile.
At some point I had to do it anyway - better earlier than later to reduce loss of git history.
>From now on this is the main branch for the custom manipulators project, I'll delete the wiggly-widgets branch in a bit (but keep it available at https://github.com/julianeisel/blender/tree/wiggly-widgets). It's still possible to merge some manipulators for pre-2.8 by rewriting the drawing of those to use OpenGL <= 2.1 (or copy & pasting from earlier state).

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

A	release/datafiles/widget_export.py
M	release/scripts/modules/bpy_extras/keyconfig_utils.py
M	release/scripts/modules/rna_keymap_ui.py
M	release/scripts/startup/bl_ui/properties_data_bone.py
M	release/scripts/startup/bl_ui/properties_data_mesh.py
M	release/scripts/startup/bl_ui/properties_data_modifier.py
M	release/scripts/startup/bl_ui/properties_object.py
M	release/scripts/startup/bl_ui/space_node.py
M	release/scripts/startup/bl_ui/space_sequencer.py
M	release/scripts/startup/bl_ui/space_userpref.py
M	source/blender/CMakeLists.txt
M	source/blender/blenkernel/BKE_DerivedMesh.h
M	source/blender/blenkernel/BKE_blender_version.h
A	source/blender/blenkernel/BKE_facemap.h
M	source/blender/blenkernel/BKE_screen.h
M	source/blender/blenkernel/CMakeLists.txt
M	source/blender/blenkernel/intern/action.c
M	source/blender/blenkernel/intern/armature.c
M	source/blender/blenkernel/intern/camera.c
M	source/blender/blenkernel/intern/cdderivedmesh.c
M	source/blender/blenkernel/intern/customdata.c
A	source/blender/blenkernel/intern/facemap.c
M	source/blender/blenkernel/intern/library_query.c
M	source/blender/blenkernel/intern/object.c
M	source/blender/blenkernel/intern/screen.c
M	source/blender/blenkernel/intern/subsurf_ccg.c
M	source/blender/blenlib/BLI_math_vector.h
M	source/blender/blenlib/intern/math_vector.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/versioning_260.c
M	source/blender/blenloader/intern/versioning_270.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/editors/armature/pose_select.c
M	source/blender/editors/armature/pose_utils.c
M	source/blender/editors/include/BIF_glutil.h
M	source/blender/editors/include/ED_armature.h
M	source/blender/editors/include/ED_mesh.h
M	source/blender/editors/include/ED_screen.h
M	source/blender/editors/include/ED_transform.h
M	source/blender/editors/include/ED_uvedit.h
M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface_draw.c
M	source/blender/editors/interface/interface_intern.h
M	source/blender/editors/interface/resources.c
M	source/blender/editors/object/CMakeLists.txt
M	source/blender/editors/object/object_edit.c
A	source/blender/editors/object/object_fmap.c
M	source/blender/editors/object/object_intern.h
M	source/blender/editors/object/object_ops.c
M	source/blender/editors/object/object_shapekey.c
M	source/blender/editors/render/render_internal.c
M	source/blender/editors/screen/area.c
M	source/blender/editors/screen/glutil.c
M	source/blender/editors/screen/screen_edit.c
M	source/blender/editors/space_api/spacetypes.c
M	source/blender/editors/space_clip/clip_draw.c
M	source/blender/editors/space_graph/graph_buttons.c
M	source/blender/editors/space_graph/graph_edit.c
M	source/blender/editors/space_graph/graph_intern.h
M	source/blender/editors/space_graph/graph_ops.c
M	source/blender/editors/space_graph/space_graph.c
M	source/blender/editors/space_image/image_draw.c
M	source/blender/editors/space_image/space_image.c
M	source/blender/editors/space_node/CMakeLists.txt
M	source/blender/editors/space_node/drawnode.c
M	source/blender/editors/space_node/node_draw.c
M	source/blender/editors/space_node/node_edit.c
M	source/blender/editors/space_node/node_intern.h
M	source/blender/editors/space_node/node_view.c
A	source/blender/editors/space_node/node_widgets.c
M	source/blender/editors/space_node/space_node.c
M	source/blender/editors/space_sequencer/sequencer_draw.c
M	source/blender/editors/space_sequencer/sequencer_intern.h
M	source/blender/editors/space_sequencer/sequencer_ops.c
M	source/blender/editors/space_sequencer/sequencer_view.c
M	source/blender/editors/space_sequencer/space_sequencer.c
M	source/blender/editors/space_view3d/CMakeLists.txt
M	source/blender/editors/space_view3d/drawarmature.c
M	source/blender/editors/space_view3d/drawobject.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/editors/space_view3d/view3d_edit.c
M	source/blender/editors/space_view3d/view3d_intern.h
M	source/blender/editors/space_view3d/view3d_ops.c
A	source/blender/editors/space_view3d/view3d_widgets.c
M	source/blender/editors/transform/CMakeLists.txt
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_constraints.c
M	source/blender/editors/transform/transform_generics.c
M	source/blender/editors/transform/transform_manipulator.c
A	source/blender/editors/transform/transform_manipulator2d.c
M	source/blender/editors/transform/transform_orientations.c
M	source/blender/editors/uvedit/uvedit_ops.c
M	source/blender/gpu/GPU_buffers.h
M	source/blender/gpu/intern/gpu_buffers.c
M	source/blender/makesdna/DNA_action_types.h
M	source/blender/makesdna/DNA_armature_types.h
M	source/blender/makesdna/DNA_customdata_types.h
M	source/blender/makesdna/DNA_key_types.h
A	source/blender/makesdna/DNA_manipulator_types.h
M	source/blender/makesdna/DNA_object_types.h
M	source/blender/makesdna/DNA_screen_types.h
M	source/blender/makesdna/DNA_space_types.h
M	source/blender/makesdna/DNA_userdef_types.h
M	source/blender/makesdna/DNA_view3d_types.h
M	source/blender/makesdna/DNA_windowmanager_types.h
M	source/blender/makesdna/intern/makesdna.c
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/RNA_enum_types.h
M	source/blender/makesrna/intern/rna_armature.c
M	source/blender/makesrna/intern/rna_internal.h
M	source/blender/makesrna/intern/rna_key.c
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/makesrna/intern/rna_object.c
M	source/blender/makesrna/intern/rna_pose.c
M	source/blender/makesrna/intern/rna_space.c
M	source/blender/makesrna/intern/rna_userdef.c
M	source/blender/makesrna/intern/rna_wm.c
M	source/blender/makesrna/intern/rna_wm_api.c
M	source/blender/windowmanager/CMakeLists.txt
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/WM_types.h
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_init_exit.c
M	source/blender/windowmanager/intern/wm_operators.c
A	source/blender/windowmanager/manipulators/WM_manipulator_api.h
A	source/blender/windowmanager/manipulators/WM_manipulator_library.h
A	source/blender/windowmanager/manipulators/WM_manipulator_types.h
A	source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c
A	source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c
A	source/blender/windowmanager/manipulators/intern/manipulator_library/cage_manipulator.c
A	source/blender/windowmanager/manipulators/intern/manipulator_library/dial_manipulator.c
A	source/blender/windowmanager/manipulators/intern/manipulator_library/facemap_manipulator.c
A	source/blender/windowmanager/manipulators/intern/manipulator_library/geom_arrow_manipulator.c
A	source/blender/windowmanager/manipulators/intern/manipulator_library/geom_cube_manipulator.c
A	source/blender/windowmanager/manipulators/intern/manipulator_library/geom_dial_manipulator.c
A	source/blender/windowmanager/manipulators/intern/manipulator_library/manipulator_geometry.h
A	source/blender/windowmanager/manipulators/intern/manipulator_library/manipulator_library_intern.h
A	source/blender/windowmanager/manipulators/intern/manipulator_library/manipulator_library_utils.c
A	source/blender/windowmanager/manipulators/intern/manipulator_library/primitive_manipulator.c
A	source/blender/windowmanager/manipulators/intern/wm_manipulator.c
A	source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h
A	source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
A	source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c
A	source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h
M	source/blender/windowmanager/wm.h
M	source/blender/windowmanager/wm_event_system.h
M	source/blender/windowmanager/wm_event_types.h
M	source/blenderplayer/bad_level_call_stubs/stubs.c
M	source/gameengine/Converter/BL_ArmatureObject.cpp

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

diff --git a/release/datafiles/widget_export.py b/release/datafiles/widget_export.py
new file mode 100644
index 0000000..c700f25
--- /dev/null
+++ b/release/datafiles/widget_export.py
@@ -0,0 +1,79 @@
+import bpy
+from bpy.types import Operator
+from bpy.props import StringProperty
+from bpy_extras.io_utils import ExportHelper
+
+def mesh_triangulate(me):
+    import bmesh
+    bm = bmesh.new()
+    bm.from_mesh(me)
+    bmesh.ops.triangulate(bm, faces=bm.faces)
+    bm.to_mesh(me)
+    bm.free()
+    
+
+class ExportWidget(Operator, ExportHelper):
+    """Export a widget mesh as a C file"""
+    bl_idname = "export_scene.widget"
+    bl_label = "Export Widget"
+    bl_options = {'PRESET', 'UNDO'}
+
+    filename_ext = ".c"
+    filter_glob = StringProperty(
+            default="*.c;",
+            options={'HIDDEN'},
+            )
+    @classmethod
+    def poll(cls, context):
+        obj = context.active_object
+        return (obj and obj.type == 'MESH')
+
+    def execute(self, context):
+        ob = context.active_object
+        scene = context.scene
+
+        try:
+            me = ob.to_mesh(scene, True, 'PREVIEW', calc_tessface=False)
+        except RuntimeError:
+            me = None
+
+        if me is None:
+            return {'CANCELLED'}
+
+        mesh_triangulate(me)
+
+        name = ob.name
+        f = open(self.filepath, 'w')
+        f.write("int _WIDGET_nverts_%s = %d;\n" % (name, len(me.vertices)))
+        f.write("int _WIDGET_ntris_%s = %d;\n\n" % (name, len(me.polygons)))
+        f.write("float _WIDGET_verts_%s[][3] = {\n" % name)
+        for v in me.vertices:
+            f.write("    {%.6f, %.6f, %.6f},\n" % v.co[:])            
+        f.write("};\n\n")
+        f.write("float _WIDGET_normals_%s[][3] = {\n" % name)
+        for v in me.vertices:
+            f.write("    {%.6f, %.6f, %.6f},\n" % v.normal[:])            
+        f.write("};\n\n")
+        f.write("unsigned short _WIDGET_indices_%s[] = {\n" % name)
+        for p in me.polygons:
+            f.write("    %d, %d, %d,\n" % p.vertices[:])            
+        f.write("};\n")
+        f.close()
+        
+        return {'FINISHED'}
+
+def menu_func_export(self, context):
+    self.layout.operator(ExportWidget.bl_idname, text="Widget (.c)")
+
+        
+def register():
+   bpy.utils.register_module(__name__)
+   bpy.types.INFO_MT_file_export.append(menu_func_export)
+
+
+def unregister():
+    bpy.utils.unregister_module(__name__)
+    bpy.types.INFO_MT_file_export.remove(menu_func_export)
+
+if __name__ == "__main__":
+    register()
diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py
index a80b9df..fae335f 100644
--- a/release/scripts/modules/bpy_extras/keyconfig_utils.py
+++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py
@@ -19,10 +19,40 @@
 # <pep8 compliant>
 
 # bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...])
+# Add (0, 0, 0, 0) as first element to skip adding "Foo (Global)" entry
 
 #    ('Script', 'EMPTY', 'WINDOW', []),
 
 
+# would be good to have a more generic way of doing this...
+KM_WIDGETS_HIERARCHY = [
+    # VIEW_3D
+    ('Widgets', 'EMPTY', 'WINDOW', [
+        (0, 0, 0, 0), # avoid adding 'Widgets (Global)" entry
+        ('Face Map Widgets', 'VIEW_3D', 'WINDOW', []),
+        ('Lamp Widgets', 'VIEW_3D', 'WINDOW', []),
+        ('Force Field Widgets', 'VIEW_3D', 'WINDOW', []),
+        ('Camera Widgets', 'VIEW_3D', 'WINDOW', []),
+        ('Manipulator Widgets', 'VIEW_3D', 'WINDOW', []),
+    ]),
+    # GRAPH_EDITOR
+    ('Widgets', 'EMPTY', 'WINDOW', [
+        (0, 0, 0, 0),
+        ('Backdrop Transform Widgets', 'GRAPH_EDITOR', 'WINDOW', []),
+    ]),
+    # NODE_EDITOR
+    ('Widgets', 'EMPTY', 'WINDOW', [
+        (0, 0, 0, 0),
+        ('Backdrop Transform Widgets', 'NODE_EDITOR', 'WINDOW', []),
+    ]),
+    # SEQUENCE_EDITOR
+    ('Widgets', 'EMPTY', 'WINDOW', [
+        (0, 0, 0, 0),
+        ('Backdrop Transform Widgets', 'SEQUENCE_EDITOR', 'WINDOW', []),
+        # ('Image Transform Widgets', 'SEQUENCE_EDITOR', 'WINDOW', []),
+    ]),
+]
+
 KM_HIERARCHY = [
     ('Window', 'EMPTY', 'WINDOW', []),  # file save, window change, exit
     ('Screen', 'EMPTY', 'WINDOW', [     # full screen, undo, screenshot
@@ -55,6 +85,8 @@ KM_HIERARCHY = [
 
         ('Particle', 'EMPTY', 'WINDOW', []),
 
+        KM_WIDGETS_HIERARCHY[0],
+
         ('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []),
         ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []),
         ('Paint Curve', 'EMPTY', 'WINDOW', []),
@@ -73,6 +105,7 @@ KM_HIERARCHY = [
 
     ('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [
         ('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []),
+        KM_WIDGETS_HIERARCHY[1]
     ]),
     ('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', [
         ('Dopesheet Generic', 'DOPESHEET_EDITOR', 'WINDOW', []),
@@ -94,10 +127,12 @@ KM_HIERARCHY = [
 
     ('Node Editor', 'NODE_EDITOR', 'WINDOW', [
         ('Node Generic', 'NODE_EDITOR', 'WINDOW', []),
+        KM_WIDGETS_HIERARCHY[2],
     ]),
     ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [
         ('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []),
         ('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []),
+        KM_WIDGETS_HIERARCHY[3],
     ]),
     ('Logic Editor', 'LOGIC_EDITOR', 'WINDOW', []),
 
diff --git a/release/scripts/modules/rna_keymap_ui.py b/release/scripts/modules/rna_keymap_ui.py
index 2ca7a79..93fbc59 100644
--- a/release/scripts/modules/rna_keymap_ui.py
+++ b/release/scripts/modules/rna_keymap_ui.py
@@ -64,6 +64,7 @@ def draw_entry(display_keymaps, entry, col, level=0):
 
 
 def draw_km(display_keymaps, kc, km, children, layout, level):
+    draw_global = children and children[0][0]; # first entry (0, 0, 0, 0) means we don't add "Global" entry
     km = km.active()
 
     layout.context_pointer_set("keymap", km)
@@ -85,7 +86,7 @@ def draw_km(display_keymaps, kc, km, children, layout, level):
         del subrow
 
     if km.show_expanded_children:
-        if children:
+        if draw_global:
             # Put the Parent key map's entries in a 'global' sub-category
             # equal in hierarchy to the other children categories
             subcol = _indented_layout(col, level + 1)
@@ -101,13 +102,14 @@ def draw_km(display_keymaps, kc, km, children, layout, level):
             for kmi in km.keymap_items:
                 draw_kmi(display_keymaps, kc, km, kmi, col, kmi_level)
 
-            # "Add New" at end of keymap item list
-            subcol = _indented_layout(col, kmi_level)
-            subcol = subcol.split(percentage=0.2).column()
-            subcol.operator("wm.keyitem_add", text="Add New", text_ctxt=i18n_contexts.id_windowmanager,
-                            icon='ZOOMIN')
+            if draw_global:
+                # "Add New" at end of keymap item list
+                subcol = _indented_layout(col, kmi_level)
+                subcol = subcol.split(percentage=0.2).column()
+                subcol.operator("wm.keyitem_add", text="Add New", text_ctxt=i18n_contexts.id_windowmanager,
+                                icon='ZOOMIN')
 
-            col.separator()
+                col.separator()
 
         # Child key maps
         if children:
diff --git a/release/scripts/startup/bl_ui/properties_data_bone.py b/release/scripts/startup/bl_ui/properties_data_bone.py
index 3a54755..edcae34 100644
--- a/release/scripts/startup/bl_ui/properties_data_bone.py
+++ b/release/scripts/startup/bl_ui/properties_data_bone.py
@@ -268,6 +268,33 @@ class BONE_PT_relations(BoneButtonsPanel, Panel):
         sub.prop(bone, "use_local_location")
 
 
+class BONE_PT_facemaps(BoneButtonsPanel, Panel):
+    bl_label = "Face Maps"
+
+    @classmethod
+    def poll(cls, context):
+        return context.object and context.bone
+
+    def draw(self, context):
+        layout = self.layout
+
+        ob = context.object
+        bone = context.bone
+        pchan = ob.pose.bones[bone.name]
+
+        col = layout.column()
+        col.prop(pchan, "facemap_object", text="Object")
+
+        col = layout.column()
+        if pchan.facemap_object:
+            col.prop_search(pchan, "facemap", pchan.facemap_object, "face_maps")
+        else:
+            # ugly, used to add inactive search field since prop_search
+            # doesn't support passing pchan.facemap_object if it's unset
+            col.enabled = False
+            col.prop(pchan, "facemap")
+
+
 class BONE_PT_display(BoneButtonsPanel, Panel):
     bl_label = "Display"
 
@@ -295,6 +322,9 @@ class BONE_PT_display(BoneButtonsPanel, Panel):
             col = split.column()
             col.prop(bone, "hide", text="Hide")
             sub = col.column()
+            sub.active = bool(pchan and pchan.facemap)
+            sub.prop(bone, "fmap_only")
+            sub = col.column()
             sub.active = bool(pchan and pchan.custom_shape)
             sub.prop(bone, "show_wire", text="Wireframe")
 
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py
index 5416735..d573582 100644
--- a/release/scripts/startup/bl_ui/properties_data_mesh.py
+++ b/release/scripts/startup/bl_ui/properties_data_mesh.py
@@ -75,6 +75,17 @@ class MESH_UL_vgroups(UIList):
             layout.label(text="", icon_value=icon)
 
 
+class MESH_UL_fmaps(UIList):
+    def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
+        # assert(isinstance(item, bpy.types.VertexGroup))
+        fmap = item
+        if self.layout_type in {'DEFAULT', 'COMPACT'}:
+            layout.prop(fmap, "name", text="", emboss=False, icon_value=icon)
+        elif self.layout_type in {'GRID'}:
+            layout.alignment = 'CENTER'
+            layout.label(text="", icon_value=icon)
+
+
 class MESH_UL_shape_keys(UIList):
     def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
         # assert(isinstance(item, bpy.types.ShapeKey))
@@ -226,6 +237,47 @@ class DATA_PT_vertex_groups(MeshButtonsPanel, Panel):
             layout.prop(context.tool_settings, "vertex_group_weight", text="Weight")
 
 
+class DATA_PT_fac

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list