Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/datafiles/widget_export.py89
-rw-r--r--release/scripts/modules/bpy_extras/keyconfig_utils.py35
-rw-r--r--release/scripts/modules/rna_keymap_ui.py16
3 files changed, 133 insertions, 7 deletions
diff --git a/release/datafiles/widget_export.py b/release/datafiles/widget_export.py
new file mode 100644
index 00000000000..fd5dd7b89ff
--- /dev/null
+++ b/release/datafiles/widget_export.py
@@ -0,0 +1,89 @@
+# Apache License, Version 2.0
+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)
+
+ f = open(self.filepath, 'w')
+
+ f.write("static const float verts[][3] = {\n")
+ for v in me.vertices:
+ f.write("\t{%.6f, %.6f, %.6f},\n" % v.co[:])
+ f.write("};\n\n")
+ f.write("static const float normals[][3] = {\n")
+ for v in me.vertices:
+ f.write("\t{%.6f, %.6f, %.6f},\n" % v.normal[:])
+ f.write("};\n\n")
+ f.write("static const unsigned short indices[] = {\n")
+ for p in me.polygons:
+ f.write("\t%d, %d, %d,\n" % p.vertices[:])
+ f.write("};\n")
+
+ f.write("\n")
+
+ f.write("ManipulatorGeomInfo wm_manipulator_geom_data_%s = {\n" % ob.name)
+ f.write("\t.nverts = %d,\n" % len(me.vertices))
+ f.write("\t.ntris = %d,\n" % len(me.polygons))
+ f.write("\t.verts = verts,\n")
+ f.write("\t.normals = normals,\n")
+ f.write("\t.indices = indices,\n")
+ 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 3203bc41b76..a67d22076e0 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 aa1aa4925a3..46a93b6a43e 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: