forked from bartvdbraak/blender
py api:
- added menu templates - move template menu into the header of the text editor (so users will find more easily) - updated mathutils examples, switching the order of multiplication.
This commit is contained in:
parent
5b3906728f
commit
71692e802f
@ -1,15 +1,15 @@
|
||||
import mathutils
|
||||
|
||||
# zero length vector
|
||||
vec = mathutils.Vector((0, 0, 1))
|
||||
vec = mathutils.Vector((0.0, 0.0, 1.0))
|
||||
|
||||
# unit length vector
|
||||
vec_a = vec.copy().normalize()
|
||||
|
||||
vec_b = mathutils.Vector((0, 1, 2))
|
||||
vec_b = mathutils.Vector((0.0, 1.0, 2.0))
|
||||
|
||||
vec2d = mathutils.Vector((1, 2))
|
||||
vec3d = mathutils.Vector((1, 0, 0))
|
||||
vec2d = mathutils.Vector((1.0, 2.0))
|
||||
vec3d = mathutils.Vector((1.0, 0.0, 0.0))
|
||||
vec4d = vec_a.to_4d()
|
||||
|
||||
# other mathutuls types
|
||||
@ -34,9 +34,9 @@ vec_a + vec_b
|
||||
vec_a - vec_b
|
||||
vec_a * vec_b
|
||||
vec_a * 10.0
|
||||
vec_a * matrix
|
||||
matrix * vec_a
|
||||
quat * vec_a
|
||||
vec_a * vec_b
|
||||
vec_a * quat
|
||||
-vec_a
|
||||
|
||||
|
||||
@ -44,6 +44,7 @@ vec_a * quat
|
||||
x = vec_a[0]
|
||||
len(vec)
|
||||
vec_a[:] = vec_b
|
||||
vec_a[:] = 1.0, 2.0, 3.0
|
||||
vec2d[:] = vec3d[:2]
|
||||
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
#
|
||||
# ##### END GPL LICENSE BLOCK #####
|
||||
|
||||
# <pep8 compliant>
|
||||
# <pep8-80 compliant>
|
||||
import bpy
|
||||
|
||||
|
||||
@ -36,10 +36,13 @@ class TEXT_HT_header(bpy.types.Header):
|
||||
sub = row.row(align=True)
|
||||
sub.menu("TEXT_MT_view")
|
||||
sub.menu("TEXT_MT_text")
|
||||
|
||||
if text:
|
||||
sub.menu("TEXT_MT_edit")
|
||||
sub.menu("TEXT_MT_format")
|
||||
|
||||
sub.menu("TEXT_MT_templates")
|
||||
|
||||
if text and text.is_modified:
|
||||
row = layout.row()
|
||||
row.alert = True
|
||||
@ -63,11 +66,13 @@ class TEXT_HT_header(bpy.types.Header):
|
||||
row = layout.row()
|
||||
if text.filepath:
|
||||
if text.is_dirty:
|
||||
row.label(text="File: *%s (unsaved)" % text.filepath)
|
||||
row.label(text="File: *%r (unsaved)" % text.filepath)
|
||||
else:
|
||||
row.label(text="File: %s" % text.filepath)
|
||||
row.label(text="File: %r" % text.filepath)
|
||||
else:
|
||||
row.label(text="Text: External" if text.library else "Text: Internal")
|
||||
row.label(text="Text: External"
|
||||
if text.library
|
||||
else "Text: Internal")
|
||||
|
||||
|
||||
class TEXT_PT_properties(bpy.types.Panel):
|
||||
@ -150,8 +155,12 @@ class TEXT_MT_view(bpy.types.Menu):
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("text.move", text="Top of File").type = 'FILE_TOP'
|
||||
layout.operator("text.move", text="Bottom of File").type = 'FILE_BOTTOM'
|
||||
layout.operator("text.move",
|
||||
text="Top of File",
|
||||
).type = 'FILE_TOP'
|
||||
layout.operator("text.move",
|
||||
text="Bottom of File",
|
||||
).type = 'FILE_BOTTOM'
|
||||
|
||||
|
||||
class TEXT_MT_text(bpy.types.Menu):
|
||||
@ -185,19 +194,15 @@ class TEXT_MT_text(bpy.types.Menu):
|
||||
# XXX uiMenuItemO(head, 0, "text.refresh_pyconstraints");
|
||||
#endif
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("TEXT_MT_templates")
|
||||
|
||||
|
||||
class TEXT_MT_templates(bpy.types.Menu):
|
||||
'''
|
||||
Creates the menu items by scanning scripts/templates
|
||||
'''
|
||||
bl_label = "Script Templates"
|
||||
bl_label = "Templates"
|
||||
|
||||
def draw(self, context):
|
||||
self.path_menu(bpy.utils.script_paths("templates"), "text.open", {"internal": True})
|
||||
self.path_menu(bpy.utils.script_paths("templates"),
|
||||
"text.open",
|
||||
{"internal": True},
|
||||
)
|
||||
|
||||
|
||||
class TEXT_MT_edit_select(bpy.types.Menu):
|
||||
@ -246,8 +251,12 @@ class TEXT_MT_edit_to3d(bpy.types.Menu):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("text.to_3d_object", text="One Object").split_lines = False
|
||||
layout.operator("text.to_3d_object", text="One Object Per Line").split_lines = True
|
||||
layout.operator("text.to_3d_object",
|
||||
text="One Object",
|
||||
).split_lines = False
|
||||
layout.operator("text.to_3d_object",
|
||||
text="One Object Per Line",
|
||||
).split_lines = True
|
||||
|
||||
|
||||
class TEXT_MT_edit(bpy.types.Menu):
|
||||
|
49
release/scripts/templates/ui_menu.py
Normal file
49
release/scripts/templates/ui_menu.py
Normal file
@ -0,0 +1,49 @@
|
||||
import bpy
|
||||
|
||||
|
||||
class CustomMenu(bpy.types.Menu):
|
||||
bl_label = "Custom Menu"
|
||||
bl_idname = "OBJECT_MT_custom_menu"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("wm.open_mainfile")
|
||||
layout.operator("wm.save_as_mainfile").copy = True
|
||||
|
||||
layout.operator("object.shade_smooth")
|
||||
|
||||
layout.label(text="Hello world!", icon='WORLD_DATA')
|
||||
|
||||
# use an operator enum property to populate a submenu
|
||||
layout.operator_menu_enum("object.select_by_type",
|
||||
property="type",
|
||||
text="Select All by Type...",
|
||||
)
|
||||
|
||||
# call another menu
|
||||
layout.operator("wm.call_menu", text="Unwrap").name = "VIEW3D_MT_uv_map"
|
||||
|
||||
|
||||
def draw_item(self, context):
|
||||
layout = self.layout
|
||||
layout.menu(CustomMenu.bl_idname)
|
||||
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(CustomMenu)
|
||||
|
||||
# lets add ourselves to the file menu
|
||||
bpy.types.INFO_HT_header.append(draw_item)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(CustomMenu)
|
||||
|
||||
bpy.types.INFO_HT_header.remove(draw_item)
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
||||
|
||||
# The menu can also be called from scripts
|
||||
bpy.ops.wm.call_menu(name=CustomMenu.bl_idname)
|
26
release/scripts/templates/ui_menu_simple.py
Normal file
26
release/scripts/templates/ui_menu_simple.py
Normal file
@ -0,0 +1,26 @@
|
||||
import bpy
|
||||
|
||||
|
||||
class SimpleCustomMenu(bpy.types.Menu):
|
||||
bl_label = "Simple Custom Menu"
|
||||
bl_idname = "OBJECT_MT_simple_custom_menu"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("wm.open_mainfile")
|
||||
layout.operator("wm.save_as_mainfile")
|
||||
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(SimpleCustomMenu)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(SimpleCustomMenu)
|
||||
|
||||
if __name__ == "__main__":
|
||||
register()
|
||||
|
||||
# The menu can also be called from scripts
|
||||
bpy.ops.wm.call_menu(name=SimpleCustomMenu.bl_idname)
|
@ -1,8 +1,9 @@
|
||||
import bpy
|
||||
|
||||
|
||||
class OBJECT_PT_hello(bpy.types.Panel):
|
||||
class HelloWorldPanel(bpy.types.Panel):
|
||||
bl_label = "Hello World Panel"
|
||||
bl_idname = "OBJECT_PT_hello"
|
||||
bl_space_type = "PROPERTIES"
|
||||
bl_region_type = "WINDOW"
|
||||
bl_context = "object"
|
||||
@ -22,11 +23,11 @@ class OBJECT_PT_hello(bpy.types.Panel):
|
||||
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(OBJECT_PT_hello)
|
||||
bpy.utils.register_class(HelloWorldPanel)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(OBJECT_PT_hello)
|
||||
bpy.utils.unregister_class(HelloWorldPanel)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
@ -136,7 +136,6 @@ int RE_RenderInProgress(struct Render *re){return 0;}
|
||||
struct Scene *RE_GetScene(struct Render *re){return (struct Scene *) NULL;}
|
||||
void RE_Database_Free(struct Render *re){}
|
||||
void RE_FreeRender(struct Render *re){}
|
||||
void RE_shade_external(struct Render *re, struct ShadeInput *shi, struct ShadeResult *shr){}
|
||||
void RE_DataBase_GetView(struct Render *re, float mat[][4]){}
|
||||
int externtex(struct MTex *mtex, float *vec, float *tin, float *tr, float *tg, float *tb, float *ta){return 0;}
|
||||
float texture_value_blend(float tex, float out, float fact, float facg, int blendtype, int flip){return 0.0f;}
|
||||
|
Loading…
Reference in New Issue
Block a user