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:
authorArystanbek Dyussenov <arystan.d@gmail.com>2009-09-11 22:09:58 +0400
committerArystanbek Dyussenov <arystan.d@gmail.com>2009-09-11 22:09:58 +0400
commit3b2ad838e8c628a468ee19ac77fb1336dd6072cf (patch)
treebc1e229f3055e4114086775122c7a47facb42679 /release/ui
parent7220792f187f91a2ef3eb0c930a13674b2a8a80a (diff)
parent15d77f17a40398a63f95e16607deb81257c02698 (diff)
Merge with -r 22620:23107.
Next: update scripts and merge in 2.5.
Diffstat (limited to 'release/ui')
-rw-r--r--release/ui/bpy_ops.py28
-rw-r--r--release/ui/buttons_data_armature.py31
-rw-r--r--release/ui/buttons_data_bone.py36
-rw-r--r--release/ui/buttons_data_camera.py8
-rw-r--r--release/ui/buttons_data_curve.py208
-rw-r--r--release/ui/buttons_data_empty.py8
-rw-r--r--release/ui/buttons_data_lamp.py21
-rw-r--r--release/ui/buttons_data_lattice.py6
-rw-r--r--release/ui/buttons_data_mesh.py67
-rw-r--r--release/ui/buttons_data_metaball.py4
-rw-r--r--release/ui/buttons_data_modifier.py114
-rw-r--r--release/ui/buttons_data_text.py119
-rw-r--r--release/ui/buttons_game.py42
-rw-r--r--release/ui/buttons_material.py371
-rw-r--r--release/ui/buttons_object.py8
-rw-r--r--release/ui/buttons_object_constraint.py22
-rw-r--r--release/ui/buttons_physics_cloth.py93
-rw-r--r--release/ui/buttons_physics_field.py16
-rw-r--r--release/ui/buttons_physics_fluid.py30
-rw-r--r--release/ui/buttons_physics_smoke.py115
-rw-r--r--release/ui/buttons_physics_softbody.py219
-rw-r--r--release/ui/buttons_scene.py63
-rw-r--r--release/ui/buttons_texture.py204
-rw-r--r--release/ui/buttons_world.py47
-rw-r--r--release/ui/space_buttons.py4
-rw-r--r--release/ui/space_console.py12
-rw-r--r--release/ui/space_filebrowser.py7
-rw-r--r--release/ui/space_image.py121
-rw-r--r--release/ui/space_info.py43
-rw-r--r--release/ui/space_logic.py24
-rw-r--r--release/ui/space_node.py21
-rw-r--r--release/ui/space_outliner.py4
-rw-r--r--release/ui/space_sequencer.py72
-rw-r--r--release/ui/space_text.py40
-rw-r--r--release/ui/space_time.py57
-rw-r--r--release/ui/space_userpref.py58
-rw-r--r--release/ui/space_view3d.py664
-rw-r--r--release/ui/space_view3d_toolbar.py172
38 files changed, 1961 insertions, 1218 deletions
diff --git a/release/ui/bpy_ops.py b/release/ui/bpy_ops.py
index aa9bfb460f0..dff8125fca1 100644
--- a/release/ui/bpy_ops.py
+++ b/release/ui/bpy_ops.py
@@ -5,6 +5,18 @@ from bpy.__ops__ import dir as op_dir
from bpy.__ops__ import call as op_call
from bpy.__ops__ import get_rna as op_get_rna
+# Keep in sync with WM_types.h
+context_dict = {
+ 'INVOKE_DEFAULT':0,
+ 'INVOKE_REGION_WIN':1,
+ 'INVOKE_AREA':2,
+ 'INVOKE_SCREEN':3,
+ 'EXEC_DEFAULT':4,
+ 'EXEC_REGION_WIN':5,
+ 'EXEC_AREA':6,
+ 'EXEC_SCREEN':7,
+}
+
class bpy_ops(object):
'''
Fake module like class.
@@ -94,10 +106,22 @@ class bpy_ops_submodule_op(object):
# submod.foo -> SUBMOD_OT_foo
return self.module.upper() + '_OT_' + self.func
- def __call__(self, **kw):
+ def __call__(self, *args, **kw):
# Get the operator from blender
- return op_call(self.idname(), kw)
+ if len(args) > 1:
+ raise ValueError("only one argument for the execution context is supported ")
+
+ if args:
+ try:
+ context = context_dict[args[0]]
+ except:
+ raise ValueError("Expected a single context argument in: " + str(list(context_dict.keys())))
+
+ return op_call(self.idname(), kw, context)
+
+ else:
+ return op_call(self.idname(), kw)
def get_rna(self):
'''
diff --git a/release/ui/buttons_data_armature.py b/release/ui/buttons_data_armature.py
index 9b640776a9e..5924a2eb4ea 100644
--- a/release/ui/buttons_data_armature.py
+++ b/release/ui/buttons_data_armature.py
@@ -2,8 +2,8 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "data"
def poll(self, context):
@@ -41,21 +41,22 @@ class DATA_PT_skeleton(DataButtonsPanel):
split = layout.split()
col = split.column()
+ col.itemL(text="Layers:")
+ col.itemR(arm, "layer", text="")
+ col.itemL(text="Protected Layers:")
+ col.itemR(arm, "layer_protection", text="")
+ col.itemL(text="Edit Options:")
+ col.itemR(arm, "x_axis_mirror")
+ col.itemR(arm, "auto_ik")
+
+ col = split.column()
col.itemR(arm, "rest_position")
col.itemL(text="Deform:")
col.itemR(arm, "deform_vertexgroups", text="Vertex Groups")
col.itemR(arm, "deform_envelope", text="Envelopes")
col.itemR(arm, "deform_quaternion", text="Quaternion")
col.itemR(arm, "deform_bbone_rest", text="B-Bones Rest")
- #col.itemR(arm, "x_axis_mirror")
- #col.itemR(arm, "auto_ik")
-
- col = split.column()
- col.itemL(text="Layers:")
- col.template_layers(arm, "layer")
- col.itemL(text="Protected Layers:")
- col.template_layers(arm, "layer_protection")
-
+
class DATA_PT_display(DataButtonsPanel):
__label__ = "Display"
@@ -83,15 +84,15 @@ class DATA_PT_bone_groups(DataButtonsPanel):
layout = self.layout
ob = context.object
- pose= ob.pose
+ pose = ob.pose
row = layout.row()
row.template_list(pose, "bone_groups", pose, "active_bone_group_index")
col = row.column(align=True)
col.active = (ob.proxy == None)
- col.itemO("pose.group_add", icon="ICON_ZOOMIN", text="")
- col.itemO("pose.group_remove", icon="ICON_ZOOMOUT", text="")
+ col.itemO("pose.group_add", icon='ICON_ZOOMIN', text="")
+ col.itemO("pose.group_remove", icon='ICON_ZOOMOUT', text="")
group = pose.active_bone_group
if group:
@@ -154,7 +155,7 @@ class DATA_PT_ghost(DataButtonsPanel):
split = layout.split()
col = split.column()
- col.itemR(arm, "ghost_type", text="Scope")
+ col.itemR(arm, "ghost_type", text="")
sub = col.column(align=True)
if arm.ghost_type == 'RANGE':
diff --git a/release/ui/buttons_data_bone.py b/release/ui/buttons_data_bone.py
index 1eb09377892..0d379a4788f 100644
--- a/release/ui/buttons_data_bone.py
+++ b/release/ui/buttons_data_bone.py
@@ -2,8 +2,8 @@
import bpy
class BoneButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "bone"
def poll(self, context):
@@ -20,7 +20,7 @@ class BONE_PT_context_bone(BoneButtonsPanel):
bone = context.edit_bone
row = layout.row()
- row.itemL(text="", icon="ICON_BONE_DATA")
+ row.itemL(text="", icon='ICON_BONE_DATA')
row.itemR(bone, "name", text="")
class BONE_PT_transform(BoneButtonsPanel):
@@ -74,10 +74,15 @@ class BONE_PT_bone(BoneButtonsPanel):
def draw(self, context):
layout = self.layout
+ ob = context.object
bone = context.bone
arm = context.armature
+
if not bone:
bone = context.edit_bone
+ pchan = None
+ else:
+ pchan = ob.pose.pose_channels[context.bone.name]
split = layout.split()
@@ -87,14 +92,14 @@ class BONE_PT_bone(BoneButtonsPanel):
col.itemR(bone, "parent", text="")
else:
col.item_pointerR(bone, "parent", arm, "edit_bones", text="")
-
+
row = col.row()
row.active = bone.parent != None
row.itemR(bone, "connected")
-
+
col.itemL(text="Layers:")
- col.template_layers(bone, "layer")
-
+ col.itemR(bone, "layer", text="")
+
col = split.column()
col.itemL(text="Inherit:")
col.itemR(bone, "hinge", text="Rotation")
@@ -102,6 +107,17 @@ class BONE_PT_bone(BoneButtonsPanel):
col.itemL(text="Display:")
col.itemR(bone, "draw_wire", text="Wireframe")
col.itemR(bone, "hidden", text="Hide")
+
+ if ob and pchan:
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Bone Group:")
+ col.item_pointerR(pchan, "bone_group", ob.pose, "bone_groups", text="")
+
+ col = split.column()
+ col.itemL(text="Custom Shape:")
+ col.itemR(pchan, "custom_shape", text="")
class BONE_PT_inverse_kinematics(BoneButtonsPanel):
__label__ = "Inverse Kinematics"
@@ -178,18 +194,18 @@ class BONE_PT_deform(BoneButtonsPanel):
__default_closed__ = True
def draw_header(self, context):
- layout = self.layout
-
bone = context.bone
+
if not bone:
bone = context.edit_bone
- layout.itemR(bone, "deform", text="")
+ self.layout.itemR(bone, "deform", text="")
def draw(self, context):
layout = self.layout
bone = context.bone
+
if not bone:
bone = context.edit_bone
diff --git a/release/ui/buttons_data_camera.py b/release/ui/buttons_data_camera.py
index f2fa4207ec8..aa107d8dbdd 100644
--- a/release/ui/buttons_data_camera.py
+++ b/release/ui/buttons_data_camera.py
@@ -2,12 +2,12 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "data"
def poll(self, context):
- return (context.camera != None)
+ return (context.camera)
class DATA_PT_context_camera(DataButtonsPanel):
__show_header__ = False
@@ -49,7 +49,7 @@ class DATA_PT_camera(DataButtonsPanel):
elif cam.type == 'ORTHO':
row.itemR(cam, "ortho_scale")
- layout.itemR(cam, "panorama");
+ layout.itemR(cam, "panorama")
split = layout.split()
diff --git a/release/ui/buttons_data_curve.py b/release/ui/buttons_data_curve.py
index 35d557afe32..1124dfd1ae8 100644
--- a/release/ui/buttons_data_curve.py
+++ b/release/ui/buttons_data_curve.py
@@ -2,13 +2,28 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "data"
def poll(self, context):
+ return (context.object and context.object.type in ('CURVE', 'SURFACE') and context.curve)
+
+class DataButtonsPanelCurve(DataButtonsPanel):
+ '''
+ Same as above but for curves only
+ '''
+ def poll(self, context):
return (context.object and context.object.type == 'CURVE' and context.curve)
+class DataButtonsPanelActive(DataButtonsPanel):
+ '''
+ Same as above but for curves only
+ '''
+ def poll(self, context):
+ curve = context.curve
+ return (curve and curve.active_spline)
+
class DATA_PT_context_curve(DataButtonsPanel):
__show_header__ = False
@@ -37,119 +52,170 @@ class DATA_PT_shape_curve(DataButtonsPanel):
ob = context.object
curve = context.curve
space = context.space_data
+ is_surf = (ob.type == 'SURFACE')
- if curve:
- layout.itemR(curve, "curve_2d")
-
- split = layout.split()
+ if not is_surf:
+ row = layout.row()
+ row.itemR(curve, "curve_2d")
+ row.itemR(curve, "use_twist_correction")
- col = split.column()
- colsub = col.column()
- colsub.active = curve.curve_2d
- colsub.itemL(text="Caps:")
- colsub.itemR(curve, "front")
- colsub.itemR(curve, "back")
+ split = layout.split()
+
+ col = split.column()
+
+ if not is_surf:
+ sub = col.column()
+ sub.active = curve.curve_2d
+ sub.itemL(text="Caps:")
+ row = sub.row()
+ row.itemR(curve, "front")
+ row.itemR(curve, "back")
- col.itemL(text="Textures:")
-# col.itemR(curve, "uv_orco")
- col.itemR(curve, "auto_texspace")
+ col.itemL(text="Textures:")
+# col.itemR(curve, "uv_orco")
+ col.itemR(curve, "auto_texspace")
- sub = split.column()
- sub.itemL(text="Resolution:")
- sub.itemR(curve, "resolution_u", text="Preview U")
+ col = split.column()
+ col.itemL(text="Resolution:")
+ sub = col.column(align=True)
+ sub.itemR(curve, "resolution_u", text="Preview U")
+ sub.itemR(curve, "render_resolution_u", text="Render U")
+
+ if is_surf:
+ sub = col.column(align=True)
sub.itemR(curve, "resolution_v", text="Preview V")
- sub.itemR(curve, "render_resolution_u", text="Render U")
sub.itemR(curve, "render_resolution_v", text="Render V")
+
-# sub.itemL(text="Display:")
-# sub.itemL(text="HANDLES")
-# sub.itemL(text="NORMALS")
-# sub.itemR(curve, "vertex_normal_flip")
+# col.itemL(text="Display:")
+# col.itemL(text="HANDLES")
+# col.itemL(text="NORMALS")
+# col.itemR(curve, "vertex_normal_flip")
-class DATA_PT_geometry_curve(DataButtonsPanel):
+class DATA_PT_geometry_curve(DataButtonsPanelCurve):
__label__ = "Geometry "
def draw(self, context):
layout = self.layout
curve = context.curve
-
+
split = layout.split()
- sub = split.column()
- sub.itemL(text="Modification:")
- sub.itemR(curve, "width")
- sub.itemR(curve, "extrude")
- sub.itemR(curve, "taper_object", icon="ICON_OUTLINER_OB_CURVE")
-
- sub = split.column()
- sub.itemL(text="Bevel:")
- sub.itemR(curve, "bevel_depth", text="Depth")
- sub.itemR(curve, "bevel_resolution", text="Resolution")
- sub.itemR(curve, "bevel_object", icon="ICON_OUTLINER_OB_CURVE")
+ col = split.column()
+ col.itemL(text="Modification:")
+ col.itemR(curve, "width")
+ col.itemR(curve, "extrude")
+ col.itemR(curve, "taper_object", icon='ICON_OUTLINER_OB_CURVE')
+
+ col = split.column()
+ col.itemL(text="Bevel:")
+ col.itemR(curve, "bevel_depth", text="Depth")
+ col.itemR(curve, "bevel_resolution", text="Resolution")
+ col.itemR(curve, "bevel_object", icon='ICON_OUTLINER_OB_CURVE')
+
-class DATA_PT_pathanim(DataButtonsPanel):
+class DATA_PT_pathanim(DataButtonsPanelCurve):
__label__ = "Path Animation"
def draw_header(self, context):
- layout = self.layout
-
curve = context.curve
- layout.itemR(curve, "path", text="")
+ self.layout.itemR(curve, "use_path", text="")
def draw(self, context):
layout = self.layout
curve = context.curve
- layout.active = curve.path
+ layout.active = curve.use_path
split = layout.split()
col = split.column()
col.itemR(curve, "path_length", text="Frames")
- col.itemR(curve, "follow")
+ col.itemR(curve, "use_path_follow")
col = split.column()
- col.itemR(curve, "stretch")
- col.itemR(curve, "offset_path_distance", text="Offset Children")
+ col.itemR(curve, "use_stretch")
+ col.itemR(curve, "use_time_offset", text="Offset Children")
-class DATA_PT_current_curve(DataButtonsPanel):
- __label__ = "Current Curve"
+class DATA_PT_active_spline(DataButtonsPanelActive):
+ __label__ = "Active Spline"
def draw(self, context):
layout = self.layout
- currentcurve = context.curve.curves[0] # XXX
-
+ ob = context.object
+ curve = context.curve
+ act_spline = curve.active_spline
+ is_surf = (ob.type == 'SURFACE')
+ is_poly = (act_spline.type == 'POLY')
+
split = layout.split()
-
- col = split.column()
- col.itemL(text="Cyclic:")
- col.itemR(currentcurve, "cyclic_u", text="U")
- col.itemR(currentcurve, "cyclic_v", text="V")
- col.itemL(text="Order:")
- col.itemR(currentcurve, "order_u", text="U")
- col.itemR(currentcurve, "order_v", text="V")
- col.itemL(text="Endpoints:")
- col.itemR(currentcurve, "endpoint_u", text="U")
- col.itemR(currentcurve, "endpoint_v", text="V")
- col = split.column()
- col.itemL(text="Bezier:")
- col.itemR(currentcurve, "bezier_u", text="U")
- col.itemR(currentcurve, "bezier_v", text="V")
- col.itemL(text="Resolution:")
- col.itemR(currentcurve, "resolution_u", text="U")
- col.itemR(currentcurve, "resolution_v", text="V")
- col.itemL(text="Interpolation:")
- col.itemR(currentcurve, "tilt_interpolation", text="Tilt")
- col.itemR(currentcurve, "radius_interpolation", text="Tilt")
- col.itemR(currentcurve, "smooth")
+ if is_poly:
+ # These settings are below but its easier to have
+ # poly's set aside since they use so few settings
+ col = split.column()
+ col.itemL(text="Cyclic:")
+ col.itemR(act_spline, "smooth")
+ col = split.column()
+ col.itemR(act_spline, "cyclic_u", text="U")
+ else:
+ col = split.column()
+ col.itemL(text="Cyclic:")
+ if act_spline.type == 'NURBS':
+ col.itemL(text="Bezier:")
+ col.itemL(text="Endpoint:")
+ col.itemL(text="Order:")
+
+ col.itemL(text="Resolution:")
+
+ col = split.column()
+ col.itemR(act_spline, "cyclic_u", text="U")
+
+ if act_spline.type == 'NURBS':
+ sub = col.column()
+ # sub.active = (not act_spline.cyclic_u)
+ sub.itemR(act_spline, "bezier_u", text="U")
+ sub.itemR(act_spline, "endpoint_u", text="U")
+
+ sub = col.column()
+ sub.itemR(act_spline, "order_u", text="U")
+ col.itemR(act_spline, "resolution_u", text="U")
+
+ if is_surf:
+ col = split.column()
+ col.itemR(act_spline, "cyclic_v", text="V")
+
+ # its a surface, assume its a nurb.
+ sub = col.column()
+ sub.active = (not act_spline.cyclic_v)
+ sub.itemR(act_spline, "bezier_v", text="V")
+ sub.itemR(act_spline, "endpoint_v", text="V")
+ sub = col.column()
+ sub.itemR(act_spline, "order_v", text="V")
+ sub.itemR(act_spline, "resolution_v", text="V")
+
+
+ if not is_surf:
+ split = layout.split()
+ col = split.column()
+ col.active = (not curve.curve_2d)
+
+ col.itemL(text="Interpolation:")
+ col.itemR(act_spline, "tilt_interpolation", text="Tilt")
+ col.itemR(act_spline, "radius_interpolation", text="Radius")
+
+ split = layout.split()
+ col = split.column()
+ col.itemR(act_spline, "smooth")
+
+
bpy.types.register(DATA_PT_context_curve)
bpy.types.register(DATA_PT_shape_curve)
bpy.types.register(DATA_PT_geometry_curve)
bpy.types.register(DATA_PT_pathanim)
-bpy.types.register(DATA_PT_current_curve)
+bpy.types.register(DATA_PT_active_spline)
diff --git a/release/ui/buttons_data_empty.py b/release/ui/buttons_data_empty.py
index 02fea15dc2a..402699f82a4 100644
--- a/release/ui/buttons_data_empty.py
+++ b/release/ui/buttons_data_empty.py
@@ -2,8 +2,8 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "data"
def poll(self, context):
@@ -17,7 +17,7 @@ class DATA_PT_empty(DataButtonsPanel):
ob = context.object
- layout.itemR(ob, "empty_draw_type")
- layout.itemR(ob, "empty_draw_size")
+ layout.itemR(ob, "empty_draw_type", text="Draw Type")
+ layout.itemR(ob, "empty_draw_size", text="Draw Size")
bpy.types.register(DATA_PT_empty) \ No newline at end of file
diff --git a/release/ui/buttons_data_lamp.py b/release/ui/buttons_data_lamp.py
index a00bb23d5b5..808a205b1b8 100644
--- a/release/ui/buttons_data_lamp.py
+++ b/release/ui/buttons_data_lamp.py
@@ -2,8 +2,8 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "data"
def poll(self, context):
@@ -13,9 +13,7 @@ class DATA_PT_preview(DataButtonsPanel):
__label__ = "Preview"
def draw(self, context):
- layout = self.layout
-
- layout.template_preview(context.lamp)
+ self.layout.template_preview(context.lamp)
class DATA_PT_context_lamp(DataButtonsPanel):
__show_header__ = False
@@ -69,8 +67,7 @@ class DATA_PT_lamp(DataButtonsPanel):
if lamp.type == 'AREA':
col.itemR(lamp, "distance")
col.itemR(lamp, "gamma")
-
-
+
col = split.column()
col.itemR(lamp, "negative")
col.itemR(lamp, "layer", text="This Layer Only")
@@ -299,18 +296,12 @@ class DATA_PT_falloff_curve(DataButtonsPanel):
def poll(self, context):
lamp = context.lamp
- if lamp and lamp.type in ('POINT', 'SPOT'):
- if lamp.falloff_type == 'CUSTOM_CURVE':
- return True
-
- return False
+ return (lamp and lamp.type in ('POINT', 'SPOT') and lamp.falloff_type == 'CUSTOM_CURVE')
def draw(self, context):
- layout = self.layout
-
lamp = context.lamp
- layout.template_curve_mapping(lamp.falloff_curve)
+ self.layout.template_curve_mapping(lamp.falloff_curve)
bpy.types.register(DATA_PT_context_lamp)
bpy.types.register(DATA_PT_preview)
diff --git a/release/ui/buttons_data_lattice.py b/release/ui/buttons_data_lattice.py
index 5d8a07c7d44..895c1a65bea 100644
--- a/release/ui/buttons_data_lattice.py
+++ b/release/ui/buttons_data_lattice.py
@@ -2,12 +2,12 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "data"
def poll(self, context):
- return (context.lattice != None)
+ return (context.lattice)
class DATA_PT_context_lattice(DataButtonsPanel):
__show_header__ = False
diff --git a/release/ui/buttons_data_mesh.py b/release/ui/buttons_data_mesh.py
index b681218a8fe..33b3960b381 100644
--- a/release/ui/buttons_data_mesh.py
+++ b/release/ui/buttons_data_mesh.py
@@ -2,12 +2,12 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "data"
def poll(self, context):
- return (context.mesh != None)
+ return (context.mesh)
class DATA_PT_context_mesh(DataButtonsPanel):
__show_header__ = False
@@ -48,36 +48,6 @@ class DATA_PT_normals(DataButtonsPanel):
col.itemR(mesh, "vertex_normal_flip")
col.itemR(mesh, "double_sided")
-class DATA_PT_meshdraw(DataButtonsPanel):
- __label__ = "Draw"
-
- def draw(self, context):
- layout = self.layout
-
- mesh = context.mesh
-
- layout.itemL(text="Edit Mode only, WIP")
-
- split = layout.split()
-
- col = split.column()
- col.itemR(mesh, "draw_edges", text="Edges")
- col.itemR(mesh, "draw_faces", text="Faces")
- col.itemR(mesh, "draw_creases", text="Creases")
- col.itemR(mesh, "draw_bevel_weights", text="Bevel Weights")
- col.itemR(mesh, "draw_seams", text="Seams")
- col.itemR(mesh, "draw_sharp", text="Sharp")
-
- col = split.column()
- col.itemR(mesh, "draw_normals", text="Face Normals")
- col.itemR(mesh, "draw_vertex_normals", text="Vertex Normals")
-
- col.itemS()
-
- col.itemR(mesh, "draw_edge_lenght")
- col.itemR(mesh, "draw_edge_angle")
- col.itemR(mesh, "draw_face_area")
-
class DATA_PT_vertex_groups(DataButtonsPanel):
__label__ = "Vertex Groups"
@@ -93,19 +63,19 @@ class DATA_PT_vertex_groups(DataButtonsPanel):
row.template_list(ob, "vertex_groups", ob, "active_vertex_group_index")
col = row.column(align=True)
- col.itemO("object.vertex_group_add", icon="ICON_ZOOMIN", text="")
- col.itemO("object.vertex_group_remove", icon="ICON_ZOOMOUT", text="")
+ col.itemO("object.vertex_group_add", icon='ICON_ZOOMIN', text="")
+ col.itemO("object.vertex_group_remove", icon='ICON_ZOOMOUT', text="")
- col.itemO("object.vertex_group_copy", icon="ICON_BLANK1", text="")
+ col.itemO("object.vertex_group_copy", icon='ICON_BLANK1', text="")
if ob.data.users > 1:
- col.itemO("object.vertex_group_copy_to_linked", icon="ICON_BLANK1", text="")
+ col.itemO("object.vertex_group_copy_to_linked", icon='ICON_BLANK1', text="")
group = ob.active_vertex_group
if group:
row = layout.row()
row.itemR(group, "name")
- if context.edit_object:
+ if ob.mode == 'EDIT':
row = layout.row()
sub = row.row(align=True)
@@ -132,20 +102,20 @@ class DATA_PT_shape_keys(DataButtonsPanel):
kb = ob.active_shape_key
row = layout.row()
- row.template_list(key, "keys", ob, "active_shape_key_index")
+ row.template_list(key, "keys", ob, "active_shape_key_index", rows=2)
col = row.column()
subcol = col.column(align=True)
- subcol.itemO("object.shape_key_add", icon="ICON_ZOOMIN", text="")
- subcol.itemO("object.shape_key_remove", icon="ICON_ZOOMOUT", text="")
+ subcol.itemO("object.shape_key_add", icon='ICON_ZOOMIN', text="")
+ subcol.itemO("object.shape_key_remove", icon='ICON_ZOOMOUT', text="")
if kb:
col.itemS()
subcol = col.column(align=True)
- subcol.itemR(ob, "shape_key_lock", icon="ICON_UNPINNED", text="")
- subcol.itemR(kb, "mute", icon="ICON_MUTE_IPO_ON", text="")
+ subcol.itemR(ob, "shape_key_lock", icon='ICON_UNPINNED', text="")
+ subcol.itemR(kb, "mute", icon='ICON_MUTE_IPO_ON', text="")
if key.relative:
row = layout.row()
@@ -180,7 +150,7 @@ class DATA_PT_shape_keys(DataButtonsPanel):
layout.itemR(kb, "name")
- if context.edit_object:
+ if ob.mode == 'EDIT':
layout.enabled = False
class DATA_PT_uv_texture(DataButtonsPanel):
@@ -197,8 +167,8 @@ class DATA_PT_uv_texture(DataButtonsPanel):
col.template_list(me, "uv_textures", me, "active_uv_texture_index", rows=2)
col = row.column(align=True)
- col.itemO("mesh.uv_texture_add", icon="ICON_ZOOMIN", text="")
- col.itemO("mesh.uv_texture_remove", icon="ICON_ZOOMOUT", text="")
+ col.itemO("mesh.uv_texture_add", icon='ICON_ZOOMIN', text="")
+ col.itemO("mesh.uv_texture_remove", icon='ICON_ZOOMOUT', text="")
lay = me.active_uv_texture
if lay:
@@ -218,8 +188,8 @@ class DATA_PT_vertex_colors(DataButtonsPanel):
col.template_list(me, "vertex_colors", me, "active_vertex_color_index", rows=2)
col = row.column(align=True)
- col.itemO("mesh.vertex_color_add", icon="ICON_ZOOMIN", text="")
- col.itemO("mesh.vertex_color_remove", icon="ICON_ZOOMOUT", text="")
+ col.itemO("mesh.vertex_color_add", icon='ICON_ZOOMIN', text="")
+ col.itemO("mesh.vertex_color_remove", icon='ICON_ZOOMOUT', text="")
lay = me.active_vertex_color
if lay:
@@ -227,7 +197,6 @@ class DATA_PT_vertex_colors(DataButtonsPanel):
bpy.types.register(DATA_PT_context_mesh)
bpy.types.register(DATA_PT_normals)
-bpy.types.register(DATA_PT_meshdraw)
bpy.types.register(DATA_PT_vertex_groups)
bpy.types.register(DATA_PT_shape_keys)
bpy.types.register(DATA_PT_uv_texture)
diff --git a/release/ui/buttons_data_metaball.py b/release/ui/buttons_data_metaball.py
index e31c3d7fcd0..88c0066c67f 100644
--- a/release/ui/buttons_data_metaball.py
+++ b/release/ui/buttons_data_metaball.py
@@ -1,8 +1,8 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "data"
def poll(self, context):
diff --git a/release/ui/buttons_data_modifier.py b/release/ui/buttons_data_modifier.py
index 436baa540d4..2835f55f71a 100644
--- a/release/ui/buttons_data_modifier.py
+++ b/release/ui/buttons_data_modifier.py
@@ -2,8 +2,8 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "modifier"
class DATA_PT_modifiers(DataButtonsPanel):
@@ -27,6 +27,7 @@ class DATA_PT_modifiers(DataButtonsPanel):
# the mt.type enum is (ab)used for a lookup on function names
# ...to avoid lengthy if statements
# so each type must have a function here.
+
def ARMATURE(self, layout, ob, md):
layout.itemR(md, "object")
@@ -170,7 +171,7 @@ class DATA_PT_modifiers(DataButtonsPanel):
if md.texture_coordinates == 'OBJECT':
layout.itemR(md, "texture_coordinate_object", text="Object")
elif md.texture_coordinates == 'UV' and ob.type == 'MESH':
- layout.item_pointerR(md, "uv_layer", ob.data, "uv_layers")
+ layout.item_pointerR(md, "uv_layer", ob.data, "uv_textures")
def EDGE_SPLIT(self, layout, ob, md):
split = layout.split()
@@ -187,21 +188,40 @@ class DATA_PT_modifiers(DataButtonsPanel):
def EXPLODE(self, layout, ob, md):
layout.item_pointerR(md, "vertex_group", ob, "vertex_groups")
layout.itemR(md, "protect")
- layout.itemR(md, "split_edges")
- layout.itemR(md, "unborn")
- layout.itemR(md, "alive")
- layout.itemR(md, "dead")
- # Missing: "Refresh" and "Clear Vertex Group" Operator
+
+ flow = layout.column_flow(2)
+ flow.itemR(md, "split_edges")
+ flow.itemR(md, "unborn")
+ flow.itemR(md, "alive")
+ flow.itemR(md, "dead")
+
+ layout.itemO("object.explode_refresh", text="Refresh");
def FLUID_SIMULATION(self, layout, ob, md):
layout.itemL(text="See Fluid panel.")
def HOOK(self, layout, ob, md):
- layout.itemR(md, "falloff")
- layout.itemR(md, "force", slider=True)
- layout.itemR(md, "object")
+ col = layout.column()
+ col.itemR(md, "object")
+ if md.object and md.object.type == 'ARMATURE':
+ layout.item_pointerR(md, "subtarget", md.object.data, "bones", text="Bone")
+
layout.item_pointerR(md, "vertex_group", ob, "vertex_groups")
- # Missing: "Reset" and "Recenter" Operator
+
+ split = layout.split()
+ split.itemR(md, "falloff")
+ split.itemR(md, "force", slider=True)
+
+ layout.itemS()
+
+ row = layout.row()
+ row.itemO("object.hook_reset", text="Reset")
+ row.itemO("object.hook_recenter", text="Recenter")
+
+ if ob.mode == 'EDIT':
+ row = layout.row()
+ row.itemO("object.hook_select", text="Select")
+ row.itemO("object.hook_assign", text="Assign")
def LATTICE(self, layout, ob, md):
layout.itemR(md, "object")
@@ -222,7 +242,7 @@ class DATA_PT_modifiers(DataButtonsPanel):
layout.itemS()
- layout.itemO("object.modifier_mdef_bind", text="Bind")
+ layout.itemO("object.meshdeform_bind", text="Bind")
row = layout.row()
row.itemR(md, "precision")
row.itemR(md, "dynamic")
@@ -249,7 +269,11 @@ class DATA_PT_modifiers(DataButtonsPanel):
def MULTIRES(self, layout, ob, md):
layout.itemR(md, "subdivision_type")
- layout.itemO("object.multires_subdivide", text="Subdivide")
+
+ row = layout.row()
+ row.itemO("object.multires_subdivide", text="Subdivide")
+ row.itemO("object.multires_higher_levels_delete", text="Delete Higher")
+
layout.itemR(md, "level")
def PARTICLE_INSTANCE(self, layout, ob, md):
@@ -346,16 +370,26 @@ class DATA_PT_modifiers(DataButtonsPanel):
def UV_PROJECT(self, layout, ob, md):
if ob.type == 'MESH':
- layout.item_pointerR(md, "uv_layer", ob.data, "uv_layers")
- #layout.itemR(md, "projectors")
+ layout.item_pointerR(md, "uv_layer", ob.data, "uv_textures")
layout.itemR(md, "image")
layout.itemR(md, "override_image")
- layout.itemL(text="Aspect Ratio:")
- col = layout.column(align=True)
- col.itemR(md, "horizontal_aspect_ratio", text="Horizontal")
- col.itemR(md, "vertical_aspect_ratio", text="Vertical")
-
- #"Projectors" don't work.
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Aspect Ratio:")
+
+ sub = col.column(align=True)
+ sub.itemR(md, "horizontal_aspect_ratio", text="Horizontal")
+ sub.itemR(md, "vertical_aspect_ratio", text="Vertical")
+
+ col = split.column()
+ col.itemL(text="Projectors:")
+
+ sub = col.column(align=True)
+ sub.itemR(md, "num_projectors", text="Number")
+ for proj in md.projectors:
+ sub.itemR(proj, "object", text="")
def WAVE(self, layout, ob, md):
split = layout.split()
@@ -368,29 +402,41 @@ class DATA_PT_modifiers(DataButtonsPanel):
col = split.column()
col.itemR(md, "normals")
- sub = col.row(align=True)
+ sub = col.column()
sub.active = md.normals
- sub.itemR(md, "x_normal", text="X", toggle=True)
- sub.itemR(md, "y_normal", text="Y", toggle=True)
- sub.itemR(md, "z_normal", text="Z", toggle=True)
+ sub.itemR(md, "x_normal", text="X")
+ sub.itemR(md, "y_normal", text="Y")
+ sub.itemR(md, "z_normal", text="Z")
- flow = layout.column_flow()
- flow.itemR(md, "time_offset")
- flow.itemR(md, "lifetime")
- flow.itemR(md, "damping_time")
- flow.itemR(md, "falloff_radius")
- flow.itemR(md, "start_position_x")
- flow.itemR(md, "start_position_y")
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Time:")
+ sub = col.column(align=True)
+ sub.itemR(md, "time_offset", text="Offset")
+ sub.itemR(md, "lifetime", text="Life")
+ col.itemR(md, "damping_time", text="Damping")
+
+ col = split.column()
+ col.itemL(text="Position:")
+ sub = col.column(align=True)
+ sub.itemR(md, "start_position_x", text="X")
+ sub.itemR(md, "start_position_y", text="Y")
+ col.itemR(md, "falloff_radius", text="Falloff")
+
+ layout.itemS()
layout.itemR(md, "start_position_object")
layout.item_pointerR(md, "vertex_group", ob, "vertex_groups")
layout.itemR(md, "texture")
layout.itemR(md, "texture_coordinates")
if md.texture_coordinates == 'MAP_UV' and ob.type == 'MESH':
- layout.item_pointerR(md, "uv_layer", ob.data, "uv_layers")
+ layout.item_pointerR(md, "uv_layer", ob.data, "uv_textures")
elif md.texture_coordinates == 'OBJECT':
layout.itemR(md, "texture_coordinates_object")
+ layout.itemS()
+
flow = layout.column_flow()
flow.itemR(md, "speed", slider=True)
flow.itemR(md, "height", slider=True)
diff --git a/release/ui/buttons_data_text.py b/release/ui/buttons_data_text.py
index 754d6fcda39..d0e7ea09a92 100644
--- a/release/ui/buttons_data_text.py
+++ b/release/ui/buttons_data_text.py
@@ -2,8 +2,8 @@
import bpy
class DataButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "data"
def poll(self, context):
@@ -38,29 +38,31 @@ class DATA_PT_shape_text(DataButtonsPanel):
curve = context.curve
space = context.space_data
- if curve:
- layout.itemR(curve, "curve_2d")
+ layout.itemR(curve, "curve_2d")
- split = layout.split()
-
- col = split.column()
- col.itemL(text="Caps:")
- col.itemR(curve, "front")
- col.itemR(curve, "back")
- col.itemL(text="Textures:")
- col.itemR(curve, "uv_orco")
- col.itemR(curve, "auto_texspace")
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Caps:")
+ row = col.row()
+ row .itemR(curve, "front")
+ row .itemR(curve, "back")
+ # col = split.column()
+ col.itemL(text="Textures:")
+ col.itemR(curve, "uv_orco")
+ col.itemR(curve, "auto_texspace")
- col = split.column()
- col.itemL(text="Resolution:")
- sub = col.column(align=True)
- sub.itemR(curve, "resolution_u", text="Preview U")
- sub.itemR(curve, "render_resolution_u", text="Render U")
- sub = col.column(align=True)
- sub.itemR(curve, "resolution_v", text="Preview V")
- sub.itemR(curve, "render_resolution_v", text="Render V")
- col.itemL(text="Display:")
- col.itemR(curve, "fast")
+ col = split.column()
+ col.itemL(text="Resolution:")
+ sub = col.column(align=True)
+ sub.itemR(curve, "resolution_u", text="Preview U")
+ sub.itemR(curve, "render_resolution_u", text="Render U")
+
+ # resolution_v is not used for text
+
+ sub = col.column(align=True)
+ col.itemL(text="Display:")
+ col.itemR(curve, "fast", text="Fast Editing")
class DATA_PT_geometry_text(DataButtonsPanel):
__label__ = "Geometry"
@@ -76,13 +78,15 @@ class DATA_PT_geometry_text(DataButtonsPanel):
col.itemL(text="Modification:")
col.itemR(curve, "width")
col.itemR(curve, "extrude")
- col.itemR(curve, "taper_object")
+ col.itemL(text="Taper Object:")
+ col.itemR(curve, "taper_object", text="")
col = split.column()
col.itemL(text="Bevel:")
col.itemR(curve, "bevel_depth", text="Depth")
col.itemR(curve, "bevel_resolution", text="Resolution")
- col.itemR(curve, "bevel_object")
+ col.itemL(text="Bevel Object:")
+ col.itemR(curve, "bevel_object", text="")
class DATA_PT_font(DataButtonsPanel):
__label__ = "Font"
@@ -91,27 +95,39 @@ class DATA_PT_font(DataButtonsPanel):
layout = self.layout
text = context.curve
+ char = context.curve.edit_format
layout.itemR(text, "font")
+ row = layout.row()
+ row.itemR(text, "text_size", text="Size")
+ row.itemR(text, "shear")
+
split = layout.split()
col = split.column()
- # col.itemR(text, "style")
- # col.itemR(text, "bold")
- # col.itemR(text, "italic")
- # col.itemR(text, "underline")
- # ToDo: These settings are in a sub struct (Edit Format).
- col.itemR(text, "text_size")
- col.itemR(text, "shear")
+ col.itemL(text="Object Font:")
+ col.itemR(text, "family", text="")
col = split.column()
- col.itemR(text, "text_on_curve")
- col.itemR(text, "family")
+ col.itemL(text="Text on Curve:")
+ col.itemR(text, "text_on_curve", text="")
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Character:")
+ col.itemR(char, "bold")
+ col.itemR(char, "italic")
+ col.itemR(char, "underline")
+# col.itemR(char, "style")
+# col.itemR(char, "wrap")
+
+ col = split.column(align=True)
col.itemL(text="Underline:")
col.itemR(text, "ul_position", text="Position")
- col.itemR(text, "ul_height", text="Height")
- # col.itemR(text, "edit_format")
+ col.itemR(text, "ul_height", text="Thickness")
+
class DATA_PT_paragraph(DataButtonsPanel):
__label__ = "Paragraph"
@@ -134,23 +150,34 @@ class DATA_PT_paragraph(DataButtonsPanel):
col = split.column(align=True)
col.itemL(text="Offset:")
- col.itemR(text, "x_offset", text="X")
- col.itemR(text, "y_offset", text="Y")
- #col.itemR(text, "wrap")
+ col.itemR(text, "offset_x", text="X")
+ col.itemR(text, "offset_y", text="Y")
+
-"""
class DATA_PT_textboxes(DataButtonsPanel):
- __label__ = "Text Boxes"
+ __label__ = "Text Boxes"
- def draw(self, context):
- layout = self.layout
+ def draw(self, context):
+ layout = self.layout
- text = context.curve
-"""
+ text = context.curve
+
+ for box in text.textboxes:
+ split = layout.box().split()
+
+ col = split.column(align=True)
+ col.itemL(text="Dimensions:")
+ col.itemR(box, "width", text="Width")
+ col.itemR(box, "height", text="Height")
+
+ col = split.column(align=True)
+ col.itemL(text="Offset:")
+ col.itemR(box, "x", text="X")
+ col.itemR(box, "y", text="Y")
bpy.types.register(DATA_PT_context_text)
bpy.types.register(DATA_PT_shape_text)
bpy.types.register(DATA_PT_geometry_text)
bpy.types.register(DATA_PT_font)
bpy.types.register(DATA_PT_paragraph)
-#bpy.types.register(DATA_PT_textboxes)
+bpy.types.register(DATA_PT_textboxes)
diff --git a/release/ui/buttons_game.py b/release/ui/buttons_game.py
index 7334b453e91..73ba566e23f 100644
--- a/release/ui/buttons_game.py
+++ b/release/ui/buttons_game.py
@@ -2,8 +2,8 @@
import bpy
class PhysicsButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "physics"
def poll(self, context):
@@ -45,10 +45,9 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel):
col = split.column()
col.itemL(text="Attributes:")
- sub = col.column()
- sub.itemR(game, "mass")
- sub.itemR(game, "radius")
- sub.itemR(game, "form_factor")
+ col.itemR(game, "mass")
+ col.itemR(game, "radius")
+ col.itemR(game, "form_factor")
col = split.column()
sub = col.column()
@@ -108,8 +107,7 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel):
col.itemR(soft, "dynamic_friction", slider=True)
col.itemR(soft, "margin", slider=True)
col.itemR(soft, "bending_const", text="Bending Constraints")
-
-
+
col = split.column()
col.itemR(soft, "shape_match")
sub = col.column()
@@ -134,32 +132,26 @@ class PHYSICS_PT_game_physics(PhysicsButtonsPanel):
elif game.physics_type in ('SENSOR', 'INVISIBLE', 'NO_COLLISION', 'OCCLUDE'):
- col = layout.column()
- col.itemR(ob, "restrict_render", text="Invisible")
+ layout.itemR(ob, "restrict_render", text="Invisible")
class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel):
__label__ = "Collision Bounds"
def poll(self, context):
- ob = context.active_object
- game = ob.game
+ game = context.object.game
rd = context.scene.render_data
return (game.physics_type in ('DYNAMIC', 'RIGID_BODY', 'SENSOR', 'SOFT_BODY', 'STATIC')) and (rd.engine == 'BLENDER_GAME')
def draw_header(self, context):
- layout = self.layout
-
- ob = context.active_object
- game = ob.game
+ game = context.active_object.game
- layout.itemR(game, "use_collision_bounds", text="")
+ self.layout.itemR(game, "use_collision_bounds", text="")
def draw(self, context):
layout = self.layout
- ob = context.scene.objects[0]
- game = ob.game
-
+ game = context.active_object.game
+
layout.active = game.use_collision_bounds
layout.itemR(game, "collision_bounds", text="Bounds")
@@ -171,8 +163,8 @@ bpy.types.register(PHYSICS_PT_game_physics)
bpy.types.register(PHYSICS_PT_game_collision_bounds)
class SceneButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "scene"
def poll(self, context):
@@ -184,8 +176,6 @@ class SCENE_PT_game(SceneButtonsPanel):
def draw(self, context):
layout = self.layout
-
- rd = context.scene.render_data
row = layout.row()
row.itemO("view3d.game_start", text="Start")
@@ -322,8 +312,8 @@ bpy.types.register(SCENE_PT_game_shading)
bpy.types.register(SCENE_PT_game_performance)
class WorldButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "world"
def poll(self, context):
diff --git a/release/ui/buttons_material.py b/release/ui/buttons_material.py
index b971a678926..dc11731d7a9 100644
--- a/release/ui/buttons_material.py
+++ b/release/ui/buttons_material.py
@@ -2,24 +2,22 @@
import bpy
class MaterialButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "material"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
def poll(self, context):
- return (context.material) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+ mat = context.material
+ engine = context.scene.render_data.engine
+ return mat and (engine in self.COMPAT_ENGINES)
class MATERIAL_PT_preview(MaterialButtonsPanel):
__label__ = "Preview"
COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
def draw(self, context):
- layout = self.layout
-
- mat = context.material
-
- layout.template_preview(mat)
+ self.layout.template_preview(context.material)
class MATERIAL_PT_context_material(MaterialButtonsPanel):
__show_header__ = False
@@ -29,7 +27,8 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel):
# An exception, dont call the parent poll func because
# this manages materials for all engine types
- return (context.object) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+ engine = context.scene.render_data.engine
+ return (context.object) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -45,10 +44,10 @@ class MATERIAL_PT_context_material(MaterialButtonsPanel):
row.template_list(ob, "materials", ob, "active_material_index", rows=2)
col = row.column(align=True)
- col.itemO("object.material_slot_add", icon="ICON_ZOOMIN", text="")
- col.itemO("object.material_slot_remove", icon="ICON_ZOOMOUT", text="")
+ col.itemO("object.material_slot_add", icon='ICON_ZOOMIN', text="")
+ col.itemO("object.material_slot_remove", icon='ICON_ZOOMOUT', text="")
- if context.edit_object:
+ if ob.mode == 'EDIT':
row = layout.row(align=True)
row.itemO("object.material_slot_assign", text="Assign")
row.itemO("object.material_slot_select", text="Select")
@@ -73,34 +72,36 @@ class MATERIAL_PT_shading(MaterialButtonsPanel):
__label__ = "Shading"
COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
+ def poll(self, context):
+ mat = context.material
+ engine = context.scene.render_data.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in self.COMPAT_ENGINES)
+
def draw(self, context):
layout = self.layout
mat = context.material
- ob = context.object
- slot = context.material_slot
- space = context.space_data
-
- if mat:
- if mat.type in ('SURFACE', 'WIRE', 'VOLUME'):
- split = layout.split()
+ if mat.type in ('SURFACE', 'WIRE'):
+ split = layout.split()
- col = split.column()
- col.active = not mat.shadeless
- col.itemR(mat, "ambient")
- col.itemR(mat, "emit")
- col.itemR(mat, "translucency")
+ col = split.column()
+ sub = col.column()
+ sub.active = not mat.shadeless
+ sub.itemR(mat, "emit")
+ sub.itemR(mat, "ambient")
+ sub = col.column()
+ sub.itemR(mat, "translucency")
- col = split.column()
- col.itemR(mat, "shadeless")
- sub = col.column()
- sub.active = not mat.shadeless
- sub.itemR(mat, "tangent_shading")
- sub.itemR(mat, "cubic")
+ col = split.column()
+ col.itemR(mat, "shadeless")
+ sub = col.column()
+ sub.active = not mat.shadeless
+ sub.itemR(mat, "tangent_shading")
+ sub.itemR(mat, "cubic")
- elif mat.type == 'HALO':
- layout.itemR(mat, "alpha")
+ elif mat.type == 'HALO':
+ layout.itemR(mat, "alpha")
class MATERIAL_PT_strand(MaterialButtonsPanel):
__label__ = "Strand"
@@ -109,7 +110,8 @@ class MATERIAL_PT_strand(MaterialButtonsPanel):
def poll(self, context):
mat = context.material
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+ engine = context.scene.render_data.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -119,20 +121,22 @@ class MATERIAL_PT_strand(MaterialButtonsPanel):
split = layout.split()
- col = split.column()
+ col = split.column(align=True)
col.itemL(text="Size:")
- col.itemR(tan, "start_size", text="Root")
- col.itemR(tan, "end_size", text="Tip")
+ col.itemR(tan, "root_size", text="Root")
+ col.itemR(tan, "tip_size", text="Tip")
col.itemR(tan, "min_size", text="Minimum")
col.itemR(tan, "blender_units")
sub = col.column()
sub.active = (not mat.shadeless)
sub.itemR(tan, "tangent_shading")
+ col.itemR(tan, "shape")
col = split.column()
- col.itemR(tan, "shape")
+ col.itemL(text="Shading:")
col.itemR(tan, "width_fade")
col.itemR(tan, "uv_layer")
+ col.itemS()
sub = col.column()
sub.active = (not mat.shadeless)
sub.itemR(tan, "surface_diffuse")
@@ -147,8 +151,7 @@ class MATERIAL_PT_physics(MaterialButtonsPanel):
def draw(self, context):
layout = self.layout
- mat = context.material
- phys = mat.physics
+ phys = context.material.physics
split = layout.split()
@@ -166,6 +169,11 @@ class MATERIAL_PT_options(MaterialButtonsPanel):
__label__ = "Options"
COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
+ def poll(self, context):
+ mat = context.material
+ engine = context.scene.render_data.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE', 'HALO')) and (engine in self.COMPAT_ENGINES)
+
def draw(self, context):
layout = self.layout
@@ -200,6 +208,11 @@ class MATERIAL_PT_shadow(MaterialButtonsPanel):
__label__ = "Shadow"
__default_closed__ = True
COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
+
+ def poll(self, context):
+ mat = context.material
+ engine = context.scene.render_data.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -210,7 +223,7 @@ class MATERIAL_PT_shadow(MaterialButtonsPanel):
col = split.column()
col.itemR(mat, "shadows", text="Receive")
- col.itemR(mat, "transparent_shadows", text="Receive Transparent")
+ col.itemR(mat, "receive_transparent_shadows", text="Receive Transparent")
col.itemR(mat, "only_shadow", text="Shadows Only")
col.itemR(mat, "cast_shadows_only", text="Cast Only")
col.itemR(mat, "shadow_casting_alpha", text="Casting Alpha")
@@ -224,7 +237,6 @@ class MATERIAL_PT_shadow(MaterialButtonsPanel):
sub = col.column()
sub.active = (not mat.ray_shadow_bias)
sub.itemR(mat, "shadow_ray_bias", text="Ray Bias")
-
class MATERIAL_PT_diffuse(MaterialButtonsPanel):
__label__ = "Diffuse"
@@ -232,7 +244,8 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel):
def poll(self, context):
mat = context.material
- return mat and (mat.type != 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+ engine = context.scene.render_data.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -245,7 +258,7 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel):
col.itemR(mat, "diffuse_color", text="")
sub = col.column()
sub.active = (not mat.shadeless)
- sub.itemR(mat, "diffuse_reflection", text="Intensity")
+ sub.itemR(mat, "diffuse_intensity", text="Intensity")
col = split.column()
col.active = (not mat.shadeless)
@@ -278,15 +291,15 @@ class MATERIAL_PT_diffuse(MaterialButtonsPanel):
split = row.split(percentage=0.3)
split.itemL(text="Blend:")
split.itemR(mat, "diffuse_ramp_blend", text="")
-
-
+
class MATERIAL_PT_specular(MaterialButtonsPanel):
__label__ = "Specular"
COMPAT_ENGINES = set(['BLENDER_RENDER', 'BLENDER_GAME'])
def poll(self, context):
mat = context.material
- return mat and (mat.type != 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+ engine = context.scene.render_data.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -299,7 +312,7 @@ class MATERIAL_PT_specular(MaterialButtonsPanel):
col = split.column()
col.itemR(mat, "specular_color", text="")
- col.itemR(mat, "specular_reflection", text="Intensity")
+ col.itemR(mat, "specular_intensity", text="Intensity")
col = split.column()
col.itemR(mat, "specular_shader", text="")
@@ -338,13 +351,15 @@ class MATERIAL_PT_sss(MaterialButtonsPanel):
def poll(self, context):
mat = context.material
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+ engine = context.scene.render_data.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
def draw_header(self, context):
- layout = self.layout
sss = context.material.subsurface_scattering
-
- layout.itemR(sss, "enabled", text="")
+ mat = context.material
+
+ self.layout.active = (not mat.shadeless)
+ self.layout.itemR(sss, "enabled", text="")
def draw(self, context):
layout = self.layout
@@ -357,21 +372,22 @@ class MATERIAL_PT_sss(MaterialButtonsPanel):
split = layout.split()
split.active = (not mat.shadeless)
- col = split.column(align=True)
+ col = split.column()
+ col.itemR(sss, "ior")
+ col.itemR(sss, "scale")
col.itemR(sss, "color", text="")
- col.itemL(text="Blend:")
- col.itemR(sss, "color_factor", text="Color")
- col.itemR(sss, "texture_factor", text="Texture")
- col.itemL(text="Scattering Weight:")
- col.itemR(sss, "front")
- col.itemR(sss, "back")
+ col.itemR(sss, "radius", text="RGB Radius")
col = split.column()
sub = col.column(align=True)
- sub.itemR(sss, "ior")
- sub.itemR(sss, "scale")
- col.itemR(sss, "radius", text="RGB Radius")
- col.itemR(sss, "error_tolerance")
+ sub.itemL(text="Blend:")
+ sub.itemR(sss, "color_factor", text="Color")
+ sub.itemR(sss, "texture_factor", text="Texture")
+ sub.itemL(text="Scattering Weight:")
+ sub.itemR(sss, "front")
+ sub.itemR(sss, "back")
+ col.itemS()
+ col.itemR(sss, "error_tolerance", text="Error")
class MATERIAL_PT_mirror(MaterialButtonsPanel):
__label__ = "Mirror"
@@ -380,14 +396,13 @@ class MATERIAL_PT_mirror(MaterialButtonsPanel):
def poll(self, context):
mat = context.material
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+ engine = context.scene.render_data.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
- def draw_header(self, context):
- layout = self.layout
-
+ def draw_header(self, context):
raym = context.material.raytrace_mirror
- layout.itemR(raym, "enabled", text="")
+ self.layout.itemR(raym, "enabled", text="")
def draw(self, context):
layout = self.layout
@@ -400,31 +415,35 @@ class MATERIAL_PT_mirror(MaterialButtonsPanel):
split = layout.split()
col = split.column()
- col.itemR(raym, "reflect", text="Reflectivity")
+ col.itemR(raym, "reflect_factor")
col.itemR(mat, "mirror_color", text="")
- col.itemL(text="Fresnel:")
- col.itemR(raym, "fresnel", text="Amount")
+
+ col = split.column()
+ col.itemR(raym, "fresnel")
sub = col.column()
sub.active = raym.fresnel > 0
sub.itemR(raym, "fresnel_factor", text="Blend")
+
+ split = layout.split()
+
+ col = split.column()
col.itemS()
+ col.itemR(raym, "distance", text="Max Dist")
+ col.itemR(raym, "depth")
col.itemS()
sub = col.split(percentage=0.4)
sub.itemL(text="Fade To:")
sub.itemR(raym, "fade_to", text="")
col = split.column()
- col.itemR(raym, "depth")
- col.itemR(raym, "distance", text="Max Dist")
col.itemL(text="Gloss:")
- col.itemR(raym, "gloss", text="Amount")
+ col.itemR(raym, "gloss_factor", text="Amount")
sub = col.column()
- sub.active = raym.gloss < 1
+ sub.active = raym.gloss_factor < 1.0
sub.itemR(raym, "gloss_threshold", text="Threshold")
sub.itemR(raym, "gloss_samples", text="Samples")
sub.itemR(raym, "gloss_anisotropic", text="Anisotropic")
-
-
+
class MATERIAL_PT_transp(MaterialButtonsPanel):
__label__= "Transparency"
__default_closed__ = True
@@ -432,13 +451,12 @@ class MATERIAL_PT_transp(MaterialButtonsPanel):
def poll(self, context):
mat = context.material
- return mat and (mat.type in ('SURFACE', 'WIRE')) and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+ engine = context.scene.render_data.engine
+ return mat and (mat.type in ('SURFACE', 'WIRE')) and (engine in self.COMPAT_ENGINES)
- def draw_header(self, context):
- layout = self.layout
-
+ def draw_header(self, context):
mat = context.material
- layout.itemR(mat, "transparency", text="")
+ self.layout.itemR(mat, "transparency", text="")
def draw(self, context):
layout = self.layout
@@ -446,32 +464,29 @@ class MATERIAL_PT_transp(MaterialButtonsPanel):
mat = context.material
rayt = context.material.raytrace_transparency
- row= layout.row()
- row.itemR(mat, "transparency_method", expand=True)
+ row = layout.row()
row.active = mat.transparency and (not mat.shadeless)
+ row.itemR(mat, "transparency_method", expand=True)
split = layout.split()
col = split.column()
- col.itemL(text="Transparency:")
+ col.itemR(mat, "alpha")
row = col.row()
- row.itemR(mat, "alpha")
- row.active = mat.transparency
- row = col.row()
- row.itemR(mat, "specular_alpha", text="Specular")
row.active = mat.transparency and (not mat.shadeless)
-
+ row.itemR(mat, "specular_alpha", text="Specular")
+
col = split.column()
- col.active = mat.transparency and (not mat.shadeless)
- col.itemL(text="Fresnel:")
- col.itemR(rayt, "fresnel", text="Amount")
+ col.active = (not mat.shadeless)
+ col.itemR(rayt, "fresnel")
sub = col.column()
sub.active = rayt.fresnel > 0
sub.itemR(rayt, "fresnel_factor", text="Blend")
if mat.transparency_method == 'RAYTRACE':
+ layout.itemS()
split = layout.split()
- split.active = mat.transparency and (not mat.shadeless)
+ split.active = mat.transparency
col = split.column()
col.itemR(rayt, "ior")
@@ -482,19 +497,20 @@ class MATERIAL_PT_transp(MaterialButtonsPanel):
col = split.column()
col.itemL(text="Gloss:")
- col.itemR(rayt, "gloss", text="Amount")
+ col.itemR(rayt, "gloss_factor", text="Amount")
sub = col.column()
- sub.active = rayt.gloss < 1
+ sub.active = rayt.gloss_factor < 1.0
sub.itemR(rayt, "gloss_threshold", text="Threshold")
sub.itemR(rayt, "gloss_samples", text="Samples")
-
+
class MATERIAL_PT_halo(MaterialButtonsPanel):
__label__= "Halo"
COMPAT_ENGINES = set(['BLENDER_RENDER'])
def poll(self, context):
mat = context.material
- return mat and (mat.type == 'HALO') and (context.scene.render_data.engine in self.COMPAT_ENGINES)
+ engine = context.scene.render_data.engine
+ return mat and (mat.type == 'HALO') and (engine in self.COMPAT_ENGINES)
def draw(self, context):
layout = self.layout
@@ -510,8 +526,8 @@ class MATERIAL_PT_halo(MaterialButtonsPanel):
col.itemR(halo, "hardness")
col.itemR(halo, "add")
col.itemL(text="Options:")
- col.itemR(halo, "use_texture", text="Texture")
- col.itemR(halo, "use_vertex_normal", text="Vertex Normal")
+ col.itemR(halo, "texture")
+ col.itemR(halo, "vertex_normal")
col.itemR(halo, "xalpha")
col.itemR(halo, "shaded")
col.itemR(halo, "soft")
@@ -522,24 +538,52 @@ class MATERIAL_PT_halo(MaterialButtonsPanel):
sub.active = halo.ring
sub.itemR(halo, "rings")
sub.itemR(mat, "mirror_color", text="")
+ col.itemS()
col.itemR(halo, "lines")
sub = col.column()
sub.active = halo.lines
sub.itemR(halo, "line_number", text="Lines")
sub.itemR(mat, "specular_color", text="")
+ col.itemS()
col.itemR(halo, "star")
sub = col.column()
sub.active = halo.star
sub.itemR(halo, "star_tips")
- col.itemR(halo, "flare_mode")
- sub = col.column()
- sub.active = halo.flare_mode
- sub.itemR(halo, "flare_size", text="Size")
- sub.itemR(halo, "flare_subsize", text="Subsize")
- sub.itemR(halo, "flare_boost", text="Boost")
- sub.itemR(halo, "flare_seed", text="Seed")
- sub.itemR(halo, "flares_sub", text="Sub")
+
+class MATERIAL_PT_flare(MaterialButtonsPanel):
+ __label__= "Flare"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
+
+ def poll(self, context):
+ mat = context.material
+ engine = context.scene.render_data.engine
+ return mat and (mat.type == 'HALO') and (engine in self.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ layout = self.layout
+
+ mat = context.material
+ halo = mat.halo
+ layout.itemR(halo, "flare_mode", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = context.material
+ halo = mat.halo
+ layout.active = halo.flare_mode
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemR(halo, "flare_size", text="Size")
+ col.itemR(halo, "flare_boost", text="Boost")
+ col.itemR(halo, "flare_seed", text="Seed")
+ col = split.column()
+ col.itemR(halo, "flares_sub", text="Subflares")
+ col.itemR(halo, "flare_subsize", text="Subsize")
+
bpy.types.register(MATERIAL_PT_context_material)
bpy.types.register(MATERIAL_PT_preview)
bpy.types.register(MATERIAL_PT_diffuse)
@@ -549,8 +593,121 @@ bpy.types.register(MATERIAL_PT_transp)
bpy.types.register(MATERIAL_PT_mirror)
bpy.types.register(MATERIAL_PT_sss)
bpy.types.register(MATERIAL_PT_halo)
+bpy.types.register(MATERIAL_PT_flare)
bpy.types.register(MATERIAL_PT_physics)
bpy.types.register(MATERIAL_PT_strand)
bpy.types.register(MATERIAL_PT_options)
bpy.types.register(MATERIAL_PT_shadow)
+# Volumetrics
+class VolumeButtonsPanel(bpy.types.Panel):
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
+ __context__ = "material"
+
+ def poll(self, context):
+ mat = context.material
+ engine = context.scene.render_data.engine
+ return mat and (mat.type == 'VOLUME') and (engine in self.COMPAT_ENGINES)
+
+class MATERIAL_PT_volume_shading(VolumeButtonsPanel):
+ __label__ = "Shading"
+ __default_closed__ = False
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = context.material
+ vol = context.material.volume
+
+ row = layout.row()
+ row.itemR(vol, "density")
+ row.itemR(vol, "scattering")
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemR(vol, "absorption")
+ col.itemR(vol, "absorption_color", text="")
+
+ col = split.column()
+ col.itemR(vol, "emission")
+ col.itemR(vol, "emission_color", text="")
+
+class MATERIAL_PT_volume_scattering(VolumeButtonsPanel):
+ __label__ = "Scattering"
+ __default_closed__ = False
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
+
+ def draw(self, context):
+ layout = self.layout
+
+ vol = context.material.volume
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemR(vol, "scattering_mode", text="")
+ if vol.scattering_mode == 'SINGLE_SCATTERING':
+ col.itemR(vol, "light_cache")
+ sub = col.column()
+ sub.active = vol.light_cache
+ sub.itemR(vol, "cache_resolution")
+ elif vol.scattering_mode in ('MULTIPLE_SCATTERING', 'SINGLE_PLUS_MULTIPLE_SCATTERING'):
+ col.itemR(vol, "cache_resolution")
+
+ col = col.column(align=True)
+ col.itemR(vol, "ms_diffusion")
+ col.itemR(vol, "ms_spread")
+ col.itemR(vol, "ms_intensity")
+
+ col = split.column()
+ # col.itemL(text="Anisotropic Scattering:")
+ col.itemR(vol, "phase_function", text="")
+ if vol.phase_function in ('SCHLICK', 'HENYEY-GREENSTEIN'):
+ col.itemR(vol, "asymmetry")
+
+class MATERIAL_PT_volume_transp(VolumeButtonsPanel):
+ __label__= "Transparency"
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = context.material
+ rayt = context.material.raytrace_transparency
+
+ row= layout.row()
+ row.itemR(mat, "transparency_method", expand=True)
+ row.active = mat.transparency and (not mat.shadeless)
+
+class MATERIAL_PT_volume_integration(VolumeButtonsPanel):
+ __label__ = "Integration"
+ __default_closed__ = False
+ COMPAT_ENGINES = set(['BLENDER_RENDER'])
+
+ def draw(self, context):
+ layout = self.layout
+
+ mat = context.material
+ vol = context.material.volume
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Step Calculation:")
+ col.itemR(vol, "step_calculation", text="")
+ col = col.column(align=True)
+ col.itemR(vol, "step_size")
+ col.itemR(vol, "shading_step_size")
+
+ col = split.column()
+ col.itemL()
+ col.itemR(vol, "depth_cutoff")
+ col.itemR(vol, "density_scale")
+
+bpy.types.register(MATERIAL_PT_volume_shading)
+bpy.types.register(MATERIAL_PT_volume_scattering)
+bpy.types.register(MATERIAL_PT_volume_transp)
+bpy.types.register(MATERIAL_PT_volume_integration)
diff --git a/release/ui/buttons_object.py b/release/ui/buttons_object.py
index 6b6d583e2ca..af2c7cfb58a 100644
--- a/release/ui/buttons_object.py
+++ b/release/ui/buttons_object.py
@@ -2,8 +2,8 @@
import bpy
class ObjectButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "object"
class OBJECT_PT_context_object(ObjectButtonsPanel):
@@ -15,7 +15,7 @@ class OBJECT_PT_context_object(ObjectButtonsPanel):
ob = context.object
row = layout.row()
- row.itemL(text="", icon="ICON_OBJECT_DATA")
+ row.itemL(text="", icon='ICON_OBJECT_DATA')
row.itemR(ob, "name", text="")
class OBJECT_PT_transform(ObjectButtonsPanel):
@@ -79,7 +79,7 @@ class OBJECT_PT_groups(ObjectButtonsPanel):
row = col.box().row()
row.itemR(group, "name", text="")
- row.itemO("object.group_remove", text="", icon="VICON_X")
+ row.itemO("object.group_remove", text="", icon='VICON_X')
split = col.box().split()
split.column().itemR(group, "layer", text="Dupli")
diff --git a/release/ui/buttons_object_constraint.py b/release/ui/buttons_object_constraint.py
index c67d6e40cfb..ff3231a9d61 100644
--- a/release/ui/buttons_object_constraint.py
+++ b/release/ui/buttons_object_constraint.py
@@ -2,8 +2,8 @@
import bpy
class ConstraintButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "constraint"
def draw_constraint(self, con):
@@ -39,7 +39,7 @@ class ConstraintButtonsPanel(bpy.types.Panel):
layout.itemR(con, "target") # XXX limiting settings for only 'curves' or some type of object
if con.target and subtargets:
- if con.target.type == "ARMATURE":
+ if con.target.type == 'ARMATURE':
layout.item_pointerR(con, "subtarget", con.target.data, "bones", text="Bone")
if con.type == 'COPY_LOCATION':
@@ -121,9 +121,17 @@ class ConstraintButtonsPanel(bpy.types.Panel):
def FOLLOW_PATH(self, layout, con):
self.target_template(layout, con)
- row = layout.row()
- row.itemR(con, "curve_follow")
- row.itemR(con, "offset")
+ split = layout.split()
+
+ col = split.column()
+ col.itemR(con, "curve_follow")
+
+ col = split.column()
+ col.itemR(con, "fixed_position")
+ if con.fixed_position:
+ col.itemR(con, "offset_percentage", text="Offset")
+ else:
+ col.itemR(con, "offset")
row = layout.row()
row.itemL(text="Forward:")
@@ -478,7 +486,7 @@ class ConstraintButtonsPanel(bpy.types.Panel):
layout.itemR(con, "distance")
layout.itemR(con, "shrinkwrap_type")
- if con.shrinkwrap_type == "PROJECT":
+ if con.shrinkwrap_type == 'PROJECT':
row = layout.row(align=True)
row.itemR(con, "axis_x")
row.itemR(con, "axis_y")
diff --git a/release/ui/buttons_physics_cloth.py b/release/ui/buttons_physics_cloth.py
index f34077c758a..5cdca3c2c74 100644
--- a/release/ui/buttons_physics_cloth.py
+++ b/release/ui/buttons_physics_cloth.py
@@ -1,9 +1,14 @@
import bpy
+from buttons_particle import point_cache_ui
+
+def cloth_panel_enabled(md):
+ return md.point_cache.baked==False
+
class PhysicButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "physics"
def poll(self, context):
@@ -38,6 +43,8 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel):
if md:
cloth = md.settings
+
+ layout.active = cloth_panel_enabled(md)
split = layout.split()
@@ -82,76 +89,34 @@ class PHYSICS_PT_cloth_cache(PhysicButtonsPanel):
__default_closed__ = True
def poll(self, context):
- return (context.cloth != None)
+ return (context.cloth)
def draw(self, context):
- layout = self.layout
-
- cache = context.cloth.point_cache
- layout.set_context_pointer("PointCache", cache)
-
- row = layout.row()
- row.template_list(cache, "point_cache_list", cache, "active_point_cache_index")
- col = row.column(align=True)
- col.itemO("ptcache.add_new", icon="ICON_ZOOMIN", text="")
- col.itemO("ptcache.remove", icon="ICON_ZOOMOUT", text="")
-
- row = layout.row()
- row.itemR(cache, "name")
-
- row = layout.row()
- row.itemR(cache, "start_frame")
- row.itemR(cache, "end_frame")
-
- row = layout.row()
-
- if cache.baked == True:
- row.itemO("ptcache.free_bake", text="Free Bake")
- else:
- row.item_booleanO("ptcache.bake", "bake", True, text="Bake")
-
- subrow = row.row()
- subrow.enabled = cache.frames_skipped or cache.outdated
- subrow.itemO("ptcache.bake", "bake", False, text="Calculate to Current Frame")
-
- row = layout.row()
- #row.enabled = particle_panel_enabled(psys)
- row.itemO("ptcache.bake_from_cache", text="Current Cache to Bake")
- row.itemR(cache, "step");
-
- row = layout.row()
- #row.enabled = particle_panel_enabled(psys)
- row.itemR(cache, "quick_cache")
- row.itemR(cache, "disk_cache")
-
- layout.itemL(text=cache.info)
-
- layout.itemS()
-
- row = layout.row()
- row.itemO("ptcache.bake_all", "bake", True, text="Bake All Dynamics")
- row.itemO("ptcache.free_bake_all", text="Free All Bakes")
- layout.itemO("ptcache.bake_all", "bake", False, text="Update All Dynamics to current frame")
+ md = context.cloth
+ point_cache_ui(self, md.point_cache, cloth_panel_enabled(md), 0, 0)
class PHYSICS_PT_cloth_collision(PhysicButtonsPanel):
__label__ = "Cloth Collision"
__default_closed__ = True
def poll(self, context):
- return (context.cloth != None)
+ return (context.cloth)
def draw_header(self, context):
- layout = self.layout
cloth = context.cloth.collision_settings
-
- layout.itemR(cloth, "enable_collision", text="")
+
+ self.layout.active = cloth_panel_enabled(context.cloth)
+ self.layout.itemR(cloth, "enable_collision", text="")
def draw(self, context):
layout = self.layout
+
cloth = context.cloth.collision_settings
- split = layout.split()
+ md = context.cloth
- layout.active = cloth.enable_collision
+ layout.active = cloth.enable_collision and cloth_panel_enabled(md)
+
+ split = layout.split()
col = split.column()
col.itemR(cloth, "collision_quality", slider=True, text="Quality")
@@ -160,10 +125,10 @@ class PHYSICS_PT_cloth_collision(PhysicButtonsPanel):
col = split.column()
col.itemR(cloth, "enable_self_collision", text="Self Collision")
- col = col.column()
- col.active = cloth.enable_self_collision
- col.itemR(cloth, "self_collision_quality", slider=True, text="Quality")
- col.itemR(cloth, "self_min_distance", slider=True, text="Distance")
+ sub = col.column()
+ sub.active = cloth.enable_self_collision
+ sub.itemR(cloth, "self_collision_quality", slider=True, text="Quality")
+ sub.itemR(cloth, "self_min_distance", slider=True, text="Distance")
class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel):
__label__ = "Cloth Stiffness Scaling"
@@ -173,17 +138,19 @@ class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel):
return (context.cloth != None)
def draw_header(self, context):
- layout = self.layout
cloth = context.cloth.settings
- layout.itemR(cloth, "stiffness_scaling", text="")
+ self.layout.active = cloth_panel_enabled(context.cloth)
+ self.layout.itemR(cloth, "stiffness_scaling", text="")
def draw(self, context):
layout = self.layout
+
+ md = context.cloth
ob = context.object
cloth = context.cloth.settings
- layout.active = cloth.stiffness_scaling
+ layout.active = cloth.stiffness_scaling and cloth_panel_enabled(md)
split = layout.split()
diff --git a/release/ui/buttons_physics_field.py b/release/ui/buttons_physics_field.py
index fb29dd92833..58033d2c431 100644
--- a/release/ui/buttons_physics_field.py
+++ b/release/ui/buttons_physics_field.py
@@ -2,13 +2,13 @@
import bpy
class PhysicButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "physics"
def poll(self, context):
rd = context.scene.render_data
- return (context.object != None) and (not rd.use_game_engine)
+ return (context.object) and (not rd.use_game_engine)
class PHYSICS_PT_field(PhysicButtonsPanel):
__label__ = "Force Fields"
@@ -146,15 +146,15 @@ class PHYSICS_PT_field(PhysicButtonsPanel):
sub.active = field.use_radial_max
sub.itemR(field, "radial_maximum", text="Distance")
- #if ob.type in "CURVE":
- #if field.type == "GUIDE":
+ #if ob.type in 'CURVE':
+ #if field.type == 'GUIDE':
#colsub = col.column(align=True)
- #if field.type != "NONE":
+ #if field.type != 'NONE':
#layout.itemR(field, "strength")
- #if field.type in ("HARMONIC", "SPHERICAL", "CHARGE", "LENNARDj"):
- #if ob.type in ("MESH", "SURFACE", "FONT", "CURVE"):
+ #if field.type in ('HARMONIC', 'SPHERICAL', 'CHARGE', "LENNARDj"):
+ #if ob.type in ('MESH', 'SURFACE', 'FONT', 'CURVE'):
#layout.itemR(field, "surface")
class PHYSICS_PT_collision(PhysicButtonsPanel):
diff --git a/release/ui/buttons_physics_fluid.py b/release/ui/buttons_physics_fluid.py
index 304d419b388..6f7a97ff793 100644
--- a/release/ui/buttons_physics_fluid.py
+++ b/release/ui/buttons_physics_fluid.py
@@ -2,8 +2,8 @@
import bpy
class PhysicButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "physics"
def poll(self, context):
@@ -46,7 +46,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
layout.itemR(fluid, "type")
if fluid.type == 'DOMAIN':
- layout.itemO("fluid.bake", text="BAKE")
+ layout.itemO("fluid.bake", text="Bake Fluid Simulation", icon='ICON_MOD_FLUIDSIM')
split = layout.split()
col = split.column()
@@ -94,7 +94,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel):
col.itemL(text="Slip Type:")
col.itemR(fluid, "slip_type", text="")
if fluid.slip_type == 'PARTIALSLIP':
- col.itemR(fluid, "partial_slip_amount", slider=True, text="Amount")
+ col.itemR(fluid, "partial_slip_factor", slider=True, text="Amount")
col.itemL(text="Impact:")
col.itemR(fluid, "impact_factor", text="Factor")
@@ -175,11 +175,7 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel):
def poll(self, context):
md = context.fluid
if md:
- settings = md.settings
- if settings:
- return (settings.type == 'DOMAIN')
-
- return False
+ return (md.settings.type == 'DOMAIN')
def draw(self, context):
layout = self.layout
@@ -218,11 +214,7 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel):
def poll(self, context):
md = context.fluid
if md:
- settings = md.settings
- if settings:
- return (settings.type == 'DOMAIN')
-
- return False
+ return (md.settings.type == 'DOMAIN')
def draw(self, context):
layout = self.layout
@@ -236,7 +228,7 @@ class PHYSICS_PT_domain_boundary(PhysicButtonsPanel):
sub = col.column(align=True)
sub.itemR(fluid, "slip_type", text="")
if fluid.slip_type == 'PARTIALSLIP':
- sub.itemR(fluid, "partial_slip_amount", slider=True, text="Amount")
+ sub.itemR(fluid, "partial_slip_factor", slider=True, text="Amount")
col = split.column()
col.itemL(text="Surface:")
@@ -251,12 +243,8 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel):
def poll(self, context):
md = context.fluid
if md:
- settings = md.settings
- if settings:
- return (settings.type == 'DOMAIN')
-
- return False
-
+ return (md.settings.type == 'DOMAIN')
+
def draw(self, context):
layout = self.layout
diff --git a/release/ui/buttons_physics_smoke.py b/release/ui/buttons_physics_smoke.py
index 7e2395216c0..6aee152e92a 100644
--- a/release/ui/buttons_physics_smoke.py
+++ b/release/ui/buttons_physics_smoke.py
@@ -1,9 +1,11 @@
import bpy
+from buttons_particle import point_cache_ui
+
class PhysicButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "physics"
def poll(self, context):
@@ -49,13 +51,6 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel):
col = split.column()
col.itemL(text="Resolution:")
col.itemR(domain, "maxres", text="Divisions")
-
- col.itemL(text="Display:")
- col.itemR(domain, "visibility", text="Resolution")
- col.itemR(domain, "color", slider=True)
- sub = col.column()
- sub.active = domain.highres
- sub.itemR(domain, "viewhighres")
col = split.column()
col.itemL(text="Behavior:")
@@ -64,7 +59,7 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel):
col.itemR(domain, "dissolve_smoke", text="Dissolve")
sub = col.column()
sub.active = domain.dissolve_smoke
- sub.itemR(domain, "dissolve_speed", text="Speed")
+ sub.itemR(domain, "dissolve_speed", text="Time")
sub.itemR(domain, "dissolve_smoke_log", text="Slow")
elif md.smoke_type == 'TYPE_FLOW':
@@ -88,43 +83,7 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel):
#elif md.smoke_type == 'TYPE_COLL':
# layout.itemS()
-
-class PHYSICS_PT_smoke_highres(PhysicButtonsPanel):
- __label__ = "Smoke High Resolution"
- __default_closed__ = True
-
- def poll(self, context):
- md = context.smoke
- if md:
- return (md.smoke_type == 'TYPE_DOMAIN')
-
- return False
- def draw_header(self, context):
- layout = self.layout
-
- high = context.smoke.domain_settings
-
- layout.itemR(high, "highres", text="")
-
- def draw(self, context):
- layout = self.layout
-
- high = context.smoke.domain_settings
-
- layout.active = high.highres
-
- split = layout.split()
-
- col = split.column()
- col.itemL(text="Resolution:")
- col.itemR(high, "amplify", text="Divisions")
-
- sub = split.column()
- sub.itemL(text="Noise Method:")
- sub.row().itemR(high, "noise_type", text="")
- sub.itemR(high, "strength")
-
class PHYSICS_PT_smoke_groups(PhysicButtonsPanel):
__label__ = "Smoke Groups"
__default_closed__ = True
@@ -154,6 +113,70 @@ class PHYSICS_PT_smoke_groups(PhysicButtonsPanel):
col.itemL(text="Collision Group:")
col.itemR(group, "coll_group", text="")
+class PHYSICS_PT_smoke_cache(PhysicButtonsPanel):
+ __label__ = "Smoke Cache"
+ __default_closed__ = True
+
+ def poll(self, context):
+ md = context.smoke
+ return md and (md.smoke_type == 'TYPE_DOMAIN')
+
+ def draw(self, context):
+ layout = self.layout
+
+ md = context.smoke.domain_settings
+ cache = md.point_cache_low
+
+ point_cache_ui(self, cache, cache.baked==False, 0, 1)
+
+class PHYSICS_PT_smoke_highres(PhysicButtonsPanel):
+ __label__ = "Smoke High Resolution"
+ __default_closed__ = True
+
+ def poll(self, context):
+ md = context.smoke
+ return md and (md.smoke_type == 'TYPE_DOMAIN')
+
+ def draw_header(self, context):
+ high = context.smoke.domain_settings
+
+ self.layout.itemR(high, "highres", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ md = context.smoke.domain_settings
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Resolution:")
+ col.itemR(md, "amplify", text="Divisions")
+
+ col = split.column()
+ col.itemL(text="Noise Method:")
+ col.row().itemR(md, "noise_type", text="")
+ col.itemR(md, "strength")
+ col.itemR(md, "viewhighres")
+
+class PHYSICS_PT_smoke_cache_highres(PhysicButtonsPanel):
+ __label__ = "Smoke High Resolution Cache"
+ __default_closed__ = True
+
+ def poll(self, context):
+ md = context.smoke
+ return md and (md.smoke_type == 'TYPE_DOMAIN') and md.domain_settings.highres
+
+ def draw(self, context):
+ layout = self.layout
+
+ md = context.smoke.domain_settings
+ cache = md.point_cache_high
+
+ point_cache_ui(self, cache, cache.baked==False, 0, 1)
+
bpy.types.register(PHYSICS_PT_smoke)
+bpy.types.register(PHYSICS_PT_smoke_cache)
bpy.types.register(PHYSICS_PT_smoke_highres)
bpy.types.register(PHYSICS_PT_smoke_groups)
+bpy.types.register(PHYSICS_PT_smoke_cache_highres)
diff --git a/release/ui/buttons_physics_softbody.py b/release/ui/buttons_physics_softbody.py
index 2613f9e8032..703977a056f 100644
--- a/release/ui/buttons_physics_softbody.py
+++ b/release/ui/buttons_physics_softbody.py
@@ -1,9 +1,14 @@
import bpy
+from buttons_particle import point_cache_ui
+
+def softbody_panel_enabled(md):
+ return md.point_cache.baked==False
+
class PhysicButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "physics"
def poll(self, context):
@@ -41,6 +46,7 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel):
# General
split = layout.split()
+ split.enabled = softbody_panel_enabled(md)
col = split.column()
col.itemL(text="Object:")
@@ -60,179 +66,132 @@ class PHYSICS_PT_softbody_cache(PhysicButtonsPanel):
return (context.soft_body)
def draw(self, context):
- layout = self.layout
-
- cache = context.soft_body.point_cache
- layout.set_context_pointer("PointCache", cache)
-
- row = layout.row()
- row.template_list(cache, "point_cache_list", cache, "active_point_cache_index")
- col = row.column(align=True)
- col.itemO("ptcache.add_new", icon="ICON_ZOOMIN", text="")
- col.itemO("ptcache.remove", icon="ICON_ZOOMOUT", text="")
-
- row = layout.row()
- row.itemR(cache, "name")
-
- row = layout.row()
- row.itemR(cache, "start_frame")
- row.itemR(cache, "end_frame")
-
- row = layout.row()
-
- if cache.baked == True:
- row.itemO("ptcache.free_bake", text="Free Bake")
- else:
- row.item_booleanO("ptcache.bake", "bake", True, text="Bake")
-
- sub = row.row()
- sub.enabled = cache.frames_skipped or cache.outdated
- sub.itemO("ptcache.bake", "bake", False, text="Calculate to Current Frame")
+ md = context.soft_body
+ point_cache_ui(self, md.point_cache, softbody_panel_enabled(md), 0, 0)
- row = layout.row()
- row.itemO("ptcache.bake_from_cache", text="Current Cache to Bake")
- row.itemR(cache, "step");
-
- row = layout.row()
- row.itemR(cache, "quick_cache")
- row.itemR(cache, "disk_cache")
-
- layout.itemL(text=cache.info)
-
- layout.itemS()
-
- row = layout.row()
- row.itemO("ptcache.bake_all", "bake", True, text="Bake All Dynamics")
- row.itemO("ptcache.free_bake_all", text="Free All Bakes")
- layout.itemO("ptcache.bake_all", "bake", False, text="Update All Dynamics to current frame")
-
class PHYSICS_PT_softbody_goal(PhysicButtonsPanel):
__label__ = "Soft Body Goal"
+ __default_closed__ = True
def poll(self, context):
return (context.soft_body)
def draw_header(self, context):
- layout = self.layout
-
softbody = context.soft_body.settings
- layout.itemR(softbody, "use_goal", text="")
+ self.layout.active = softbody_panel_enabled(context.soft_body)
+ self.layout.itemR(softbody, "use_goal", text="")
def draw(self, context):
layout = self.layout
md = context.soft_body
+ softbody = md.settings
ob = context.object
+
+ layout.active = softbody.use_goal and softbody_panel_enabled(md)
split = layout.split()
-
- if md:
- softbody = md.settings
- layout.active = softbody.use_goal
- # Goal
- split = layout.split()
+ # Goal
+ split = layout.split()
- col = split.column()
- col.itemL(text="Goal Strengths:")
- col.itemR(softbody, "goal_default", text="Default")
- sub = col.column(align=True)
- sub.itemR(softbody, "goal_min", text="Minimum")
- sub.itemR(softbody, "goal_max", text="Maximum")
+ col = split.column()
+ col.itemL(text="Goal Strengths:")
+ col.itemR(softbody, "goal_default", text="Default")
+ sub = col.column(align=True)
+ sub.itemR(softbody, "goal_min", text="Minimum")
+ sub.itemR(softbody, "goal_max", text="Maximum")
- col = split.column()
- col.itemL(text="Goal Settings:")
- col.itemR(softbody, "goal_spring", text="Stiffness")
- col.itemR(softbody, "goal_friction", text="Damping")
+ col = split.column()
+ col.itemL(text="Goal Settings:")
+ col.itemR(softbody, "goal_spring", text="Stiffness")
+ col.itemR(softbody, "goal_friction", text="Damping")
- layout.item_pointerR(softbody, "goal_vertex_group", ob, "vertex_groups", text="Vertex Group")
+ layout.item_pointerR(softbody, "goal_vertex_group", ob, "vertex_groups", text="Vertex Group")
class PHYSICS_PT_softbody_edge(PhysicButtonsPanel):
__label__ = "Soft Body Edges"
+ __default_closed__ = True
def poll(self, context):
return (context.soft_body)
def draw_header(self, context):
- layout = self.layout
-
softbody = context.soft_body.settings
- layout.itemR(softbody, "use_edges", text="")
+ self.layout.active = softbody_panel_enabled(context.soft_body)
+ self.layout.itemR(softbody, "use_edges", text="")
def draw(self, context):
layout = self.layout
md = context.soft_body
+ softbody = md.settings
ob = context.object
+
+ layout.active = softbody.use_edges and softbody_panel_enabled(md)
- if md:
- softbody = md.settings
-
- layout.active = softbody.use_edges
-
- split = layout.split()
-
- col = split.column()
- col.itemL(text="Springs:")
- col.itemR(softbody, "pull")
- col.itemR(softbody, "push")
- col.itemR(softbody, "damp")
- col.itemR(softbody, "plastic")
- col.itemR(softbody, "bending")
- col.itemR(softbody, "spring_length", text="Length")
-
- col = split.column()
- col.itemR(softbody, "stiff_quads")
- sub = col.column()
- sub.active = softbody.stiff_quads
- sub.itemR(softbody, "shear")
+ split = layout.split()
- col.itemR(softbody, "new_aero", text="Aero")
- sub = col.column()
- sub.enabled = softbody.new_aero
- sub.itemR(softbody, "aero", text="Factor")
-
- col.itemL(text="Collision:")
- col.itemR(softbody, "edge_collision", text="Edge")
- col.itemR(softbody, "face_collision", text="Face")
+ col = split.column()
+ col.itemL(text="Springs:")
+ col.itemR(softbody, "pull")
+ col.itemR(softbody, "push")
+ col.itemR(softbody, "damp")
+ col.itemR(softbody, "plastic")
+ col.itemR(softbody, "bending")
+ col.itemR(softbody, "spring_length", text="Length")
+
+ col = split.column()
+ col.itemR(softbody, "stiff_quads")
+ sub = col.column()
+ sub.active = softbody.stiff_quads
+ sub.itemR(softbody, "shear")
+
+ col.itemR(softbody, "new_aero", text="Aero")
+ sub = col.column()
+ sub.enabled = softbody.new_aero
+ sub.itemR(softbody, "aero", text="Factor")
+
+ col.itemL(text="Collision:")
+ col.itemR(softbody, "edge_collision", text="Edge")
+ col.itemR(softbody, "face_collision", text="Face")
class PHYSICS_PT_softbody_collision(PhysicButtonsPanel):
__label__ = "Soft Body Collision"
+ __default_closed__ = True
def poll(self, context):
return (context.soft_body)
def draw_header(self, context):
- layout = self.layout
-
softbody = context.soft_body.settings
- layout.itemR(softbody, "self_collision", text="")
+ self.layout.active = softbody_panel_enabled(context.soft_body)
+ self.layout.itemR(softbody, "self_collision", text="")
def draw(self, context):
layout = self.layout
md = context.soft_body
+ softbody = md.settings
ob = context.object
-
- if md:
- softbody = md.settings
- layout.active = softbody.self_collision
+ layout.active = softbody.self_collision and softbody_panel_enabled(md)
- layout.itemL(text="Collision Type:")
- layout.itemR(softbody, "collision_type", expand=True)
+ layout.itemL(text="Collision Type:")
+ layout.itemR(softbody, "collision_type", expand=True)
- col = layout.column(align=True)
- col.itemL(text="Ball:")
- col.itemR(softbody, "ball_size", text="Size")
- col.itemR(softbody, "ball_stiff", text="Stiffness")
- col.itemR(softbody, "ball_damp", text="Dampening")
+ col = layout.column(align=True)
+ col.itemL(text="Ball:")
+ col.itemR(softbody, "ball_size", text="Size")
+ col.itemR(softbody, "ball_stiff", text="Stiffness")
+ col.itemR(softbody, "ball_damp", text="Dampening")
class PHYSICS_PT_softbody_solver(PhysicButtonsPanel):
__label__ = "Soft Body Solver"
+ __default_closed__ = True
def poll(self, context):
return (context.soft_body)
@@ -241,28 +200,28 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel):
layout = self.layout
md = context.soft_body
+ softbody = md.settings
ob = context.object
-
- if md:
- softbody = md.settings
- # Solver
- split = layout.split()
+ layout.active = softbody_panel_enabled(md)
+
+ # Solver
+ split = layout.split()
- col = split.column(align=True)
- col.itemL(text="Step Size:")
- col.itemR(softbody, "minstep")
- col.itemR(softbody, "maxstep")
- col.itemR(softbody, "auto_step", text="Auto-Step")
+ col = split.column(align=True)
+ col.itemL(text="Step Size:")
+ col.itemR(softbody, "minstep")
+ col.itemR(softbody, "maxstep")
+ col.itemR(softbody, "auto_step", text="Auto-Step")
- col = split.column()
- col.itemR(softbody, "error_limit")
- col.itemL(text="Helpers:")
- col.itemR(softbody, "choke")
- col.itemR(softbody, "fuzzy")
+ col = split.column()
+ col.itemR(softbody, "error_limit")
+ col.itemL(text="Helpers:")
+ col.itemR(softbody, "choke")
+ col.itemR(softbody, "fuzzy")
- layout.itemL(text="Diagnostics:")
- layout.itemR(softbody, "diagnose")
+ layout.itemL(text="Diagnostics:")
+ layout.itemR(softbody, "diagnose")
bpy.types.register(PHYSICS_PT_softbody)
bpy.types.register(PHYSICS_PT_softbody_cache)
diff --git a/release/ui/buttons_scene.py b/release/ui/buttons_scene.py
index e9ee97468e8..3c321f11f6e 100644
--- a/release/ui/buttons_scene.py
+++ b/release/ui/buttons_scene.py
@@ -2,8 +2,8 @@
import bpy
class RenderButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "scene"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
@@ -41,8 +41,8 @@ class SCENE_PT_layers(RenderButtonsPanel):
row.template_list(rd, "layers", rd, "active_layer_index", rows=2)
col = row.column(align=True)
- col.itemO("scene.render_layer_add", icon="ICON_ZOOMIN", text="")
- col.itemO("scene.render_layer_remove", icon="ICON_ZOOMOUT", text="")
+ col.itemO("scene.render_layer_add", icon='ICON_ZOOMIN', text="")
+ col.itemO("scene.render_layer_remove", icon='ICON_ZOOMOUT', text="")
rl = rd.layers[rd.active_layer_index]
@@ -103,19 +103,19 @@ class SCENE_PT_layers(RenderButtonsPanel):
col.itemR(rl, "pass_diffuse")
row = col.row()
row.itemR(rl, "pass_specular")
- row.itemR(rl, "pass_specular_exclude", text="", icon="ICON_X")
+ row.itemR(rl, "pass_specular_exclude", text="", icon='ICON_X')
row = col.row()
row.itemR(rl, "pass_shadow")
- row.itemR(rl, "pass_shadow_exclude", text="", icon="ICON_X")
+ row.itemR(rl, "pass_shadow_exclude", text="", icon='ICON_X')
row = col.row()
row.itemR(rl, "pass_ao")
- row.itemR(rl, "pass_ao_exclude", text="", icon="ICON_X")
+ row.itemR(rl, "pass_ao_exclude", text="", icon='ICON_X')
row = col.row()
row.itemR(rl, "pass_reflection")
- row.itemR(rl, "pass_reflection_exclude", text="", icon="ICON_X")
+ row.itemR(rl, "pass_reflection_exclude", text="", icon='ICON_X')
row = col.row()
row.itemR(rl, "pass_refraction")
- row.itemR(rl, "pass_refraction_exclude", text="", icon="ICON_X")
+ row.itemR(rl, "pass_refraction_exclude", text="", icon='ICON_X')
class SCENE_PT_shading(RenderButtonsPanel):
__label__ = "Shading"
@@ -189,20 +189,27 @@ class SCENE_PT_post_processing(RenderButtonsPanel):
col = split.column()
col.itemR(rd, "use_compositing")
col.itemR(rd, "use_sequencer")
-
+
col = split.column()
- row = col.row()
- row.itemR(rd, "fields", text="Fields")
- sub = row.row()
+ col.itemR(rd, "dither_intensity", text="Dither", slider=True)
+
+ layout.itemS()
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemR(rd, "fields", text="Fields")
+ sub = col.column()
sub.active = rd.fields
+ sub.row().itemR(rd, "field_order", expand=True)
sub.itemR(rd, "fields_still", text="Still")
- sub = col.row()
- sub.active = rd.fields
- sub.itemR(rd, "field_order", expand=True)
-
- split = layout.split()
- split.itemL()
- split.itemR(rd, "dither_intensity", text="Dither", slider=True)
+
+ col = split.column()
+ col.itemR(rd, "edge")
+ sub = col.column()
+ sub.active = rd.edge
+ sub.itemR(rd, "edge_threshold", text="Threshold", slider=True)
+ sub.itemR(rd, "edge_color", text="")
class SCENE_PT_output(RenderButtonsPanel):
__label__ = "Output"
@@ -222,8 +229,8 @@ class SCENE_PT_output(RenderButtonsPanel):
col = split.column()
col.itemR(rd, "file_extensions")
- col.itemR(rd, "placeholders")
- col.itemR(rd, "no_overwrite")
+ col.itemR(rd, "use_overwrite")
+ col.itemR(rd, "use_placeholder")
if rd.file_format in ('AVIJPEG', 'JPEG'):
split = layout.split()
@@ -323,11 +330,9 @@ class SCENE_PT_antialiasing(RenderButtonsPanel):
COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
- layout = self.layout
-
rd = context.scene.render_data
- layout.itemR(rd, "antialiasing", text="")
+ self.layout.itemR(rd, "antialiasing", text="")
def draw(self, context):
layout = self.layout
@@ -370,9 +375,9 @@ class SCENE_PT_dimensions(RenderButtonsPanel):
sub.itemR(rd, "pixel_aspect_y", text="Y")
row = col.row()
- row.itemR(rd, "border", text="Border")
+ row.itemR(rd, "use_border", text="Border")
rowsub = row.row()
- rowsub.active = rd.border
+ rowsub.active = rd.use_border
rowsub.itemR(rd, "crop_to_border", text="Crop")
col = split.column(align=True)
@@ -391,11 +396,9 @@ class SCENE_PT_stamp(RenderButtonsPanel):
COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
- layout = self.layout
-
rd = context.scene.render_data
- layout.itemR(rd, "render_stamp", text="")
+ self.layout.itemR(rd, "render_stamp", text="")
def draw(self, context):
layout = self.layout
diff --git a/release/ui/buttons_texture.py b/release/ui/buttons_texture.py
index 29e43981fd2..90ce40b4832 100644
--- a/release/ui/buttons_texture.py
+++ b/release/ui/buttons_texture.py
@@ -2,8 +2,8 @@
import bpy
class TextureButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "texture"
def poll(self, context):
@@ -210,35 +210,51 @@ class TEXTURE_PT_influence(TextureSlotPanel):
sub.itemR(tex, factor, text=name, slider=True)
if ma:
- split = layout.split()
-
- col = split.column()
- col.itemL(text="Diffuse:")
- factor_but(col, tex.map_diffuse, "map_diffuse", "diffuse_factor", "Intensity")
- factor_but(col, tex.map_colordiff, "map_colordiff", "colordiff_factor", "Color")
- factor_but(col, tex.map_alpha, "map_alpha", "alpha_factor", "Alpha")
- factor_but(col, tex.map_translucency, "map_translucency", "translucency_factor", "Translucency")
-
- col.itemL(text="Specular:")
- factor_but(col, tex.map_specular, "map_specular", "specular_factor", "Intensity")
- factor_but(col, tex.map_colorspec, "map_colorspec", "colorspec_factor", "Color")
- factor_but(col, tex.map_hardness, "map_hardness", "hardness_factor", "Hardness")
+ if ma.type in ['SURFACE', 'HALO', 'WIRE']:
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Diffuse:")
+ factor_but(col, tex.map_diffuse, "map_diffuse", "diffuse_factor", "Intensity")
+ factor_but(col, tex.map_colordiff, "map_colordiff", "colordiff_factor", "Color")
+ factor_but(col, tex.map_alpha, "map_alpha", "alpha_factor", "Alpha")
+ factor_but(col, tex.map_translucency, "map_translucency", "translucency_factor", "Translucency")
+
+ col.itemL(text="Specular:")
+ factor_but(col, tex.map_specular, "map_specular", "specular_factor", "Intensity")
+ factor_but(col, tex.map_colorspec, "map_colorspec", "colorspec_factor", "Color")
+ factor_but(col, tex.map_hardness, "map_hardness", "hardness_factor", "Hardness")
+
+ col = split.column()
+ col.itemL(text="Shading:")
+ factor_but(col, tex.map_ambient, "map_ambient", "ambient_factor", "Ambient")
+ factor_but(col, tex.map_emit, "map_emit", "emit_factor", "Emit")
+ factor_but(col, tex.map_mirror, "map_mirror", "mirror_factor", "Mirror")
+ factor_but(col, tex.map_raymir, "map_raymir", "raymir_factor", "Ray Mirror")
+
+ col.itemL(text="Geometry:")
+ factor_but(col, tex.map_normal, "map_normal", "normal_factor", "Normal")
+ factor_but(col, tex.map_warp, "map_warp", "warp_factor", "Warp")
+ factor_but(col, tex.map_displacement, "map_displacement", "displacement_factor", "Displace")
+
+ #sub = col.column()
+ #sub.active = tex.map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror
+ #sub.itemR(tex, "default_value", text="Amount", slider=True)
+ elif ma.type == 'VOLUME':
+ split = layout.split()
+
+ col = split.column()
+ factor_but(col, tex.map_density, "map_density", "density_factor", "Density")
+ factor_but(col, tex.map_emission, "map_emission", "emission_factor", "Emission")
+ factor_but(col, tex.map_absorption, "map_absorption", "absorption_factor", "Absorption")
+ factor_but(col, tex.map_scattering, "map_scattering", "scattering_factor", "Scattering")
+
+ col = split.column()
+ col.itemL(text=" ")
+ factor_but(col, tex.map_alpha, "map_coloremission", "coloremission_factor", "Emission Color")
+ factor_but(col, tex.map_colorabsorption, "map_colorabsorption", "colorabsorption_factor", "Absorption Color")
+
- col = split.column()
- col.itemL(text="Shading:")
- factor_but(col, tex.map_ambient, "map_ambient", "ambient_factor", "Ambient")
- factor_but(col, tex.map_emit, "map_emit", "emit_factor", "Emit")
- factor_but(col, tex.map_mirror, "map_mirror", "mirror_factor", "Mirror")
- factor_but(col, tex.map_raymir, "map_raymir", "raymir_factor", "Ray Mirror")
-
- col.itemL(text="Geometry:")
- factor_but(col, tex.map_normal, "map_normal", "normal_factor", "Normal")
- factor_but(col, tex.map_warp, "map_warp", "warp_factor", "Warp")
- factor_but(col, tex.map_displacement, "map_displacement", "displacement_factor", "Displace")
-
- #sub = col.column()
- #sub.active = tex.map_translucency or tex.map_emit or tex.map_alpha or tex.map_raymir or tex.map_hardness or tex.map_ambient or tex.map_specularity or tex.map_reflection or tex.map_mirror
- #sub.itemR(tex, "default_value", text="Amount", slider=True)
elif la:
row = layout.row()
factor_but(row, tex.map_color, "map_color", "color_factor", "Color")
@@ -593,13 +609,133 @@ class TEXTURE_PT_distortednoise(TextureTypePanel):
layout.itemR(tex, "noise_basis", text="Basis")
flow = layout.column_flow()
- flow.itemR(tex, "distortion_amount", text="Distortion")
+ flow.itemR(tex, "distortion", text="Distortion")
flow.itemR(tex, "noise_size", text="Size")
flow.itemR(tex, "nabla")
+
+class TEXTURE_PT_voxeldata(TextureButtonsPanel):
+ __idname__= "TEXTURE_PT_voxeldata"
+ __label__ = "Voxel Data"
+
+ def poll(self, context):
+ tex = context.texture
+ return (tex and tex.type == 'VOXEL_DATA')
+
+ def draw(self, context):
+ layout = self.layout
+
+ tex = context.texture
+ vd = tex.voxeldata
+
+ layout.itemR(vd, "file_format")
+ if vd.file_format in ['BLENDER_VOXEL', 'RAW_8BIT']:
+ layout.itemR(vd, "source_path")
+ if vd.file_format == 'RAW_8BIT':
+ layout.itemR(vd, "resolution")
+ elif vd.file_format == 'SMOKE':
+ layout.itemR(vd, "domain_object")
+
+ layout.itemR(vd, "still")
+ row = layout.row()
+ row.active = vd.still
+ row.itemR(vd, "still_frame_number")
+
+ layout.itemR(vd, "interpolation")
+ layout.itemR(vd, "intensity")
+
+class TEXTURE_PT_pointdensity(TextureButtonsPanel):
+ __idname__= "TEXTURE_PT_pointdensity"
+ __label__ = "Point Density"
+
+ def poll(self, context):
+ tex = context.texture
+ return (tex and tex.type == 'POINT_DENSITY')
+
+ def draw(self, context):
+ layout = self.layout
+
+ tex = context.texture
+ pd = tex.pointdensity
+
+ layout.itemR(pd, "point_source", expand=True)
+
+ split = layout.split()
+
+ col = split.column()
+ if pd.point_source == 'PARTICLE_SYSTEM':
+ col.itemL(text="Object:")
+ col.itemR(pd, "object", text="")
+
+ sub = col.column()
+ sub.enabled = pd.object
+ if pd.object:
+ sub.itemL(text="System:")
+ sub.item_pointerR(pd, "particle_system", pd.object, "particle_systems", text="")
+ sub.itemL(text="Cache:")
+ sub.itemR(pd, "particle_cache", text="")
+ else:
+ col.itemL(text="Object:")
+ col.itemR(pd, "object", text="")
+ col.itemL(text="Cache:")
+ col.itemR(pd, "vertices_cache", text="")
+
+ col.itemS()
+
+ col.itemL(text="Color Source:")
+ col.itemR(pd, "color_source", text="")
+ if pd.color_source in ('PARTICLE_SPEED', 'PARTICLE_VELOCITY'):
+ col.itemR(pd, "speed_scale")
+ if pd.color_source in ('PARTICLE_SPEED', 'PARTICLE_AGE'):
+ layout.template_color_ramp(pd.color_ramp, expand=True)
+
+ col = split.column()
+ col.itemL()
+ col.itemR(pd, "radius")
+ col.itemL(text="Falloff:")
+ col.itemR(pd, "falloff", text="")
+ if pd.falloff == 'SOFT':
+ col.itemR(pd, "falloff_softness")
+
+class TEXTURE_PT_pointdensity_turbulence(TextureButtonsPanel):
+ __label__ = "Turbulence"
+
+ def poll(self, context):
+ tex = context.texture
+ return (tex and tex.type == 'POINT_DENSITY')
+
+ def draw_header(self, context):
+ layout = self.layout
+
+ tex = context.texture
+ pd = tex.pointdensity
+
+ layout.itemR(pd, "turbulence", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ tex = context.texture
+ pd = tex.pointdensity
+ layout.active = pd.turbulence
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Influence:")
+ col.itemR(pd, "turbulence_influence", text="")
+ col.itemL(text="Noise Basis:")
+ col.itemR(pd, "noise_basis", text="")
+
+ col = split.column()
+ col.itemL()
+ col.itemR(pd, "turbulence_size")
+ col.itemR(pd, "turbulence_depth")
+ col.itemR(pd, "turbulence_strength")
bpy.types.register(TEXTURE_PT_context_texture)
bpy.types.register(TEXTURE_PT_preview)
-bpy.types.register(TEXTURE_PT_clouds)
+
+bpy.types.register(TEXTURE_PT_clouds) # Texture Type Panels
bpy.types.register(TEXTURE_PT_wood)
bpy.types.register(TEXTURE_PT_marble)
bpy.types.register(TEXTURE_PT_magic)
@@ -613,6 +749,10 @@ bpy.types.register(TEXTURE_PT_envmap)
bpy.types.register(TEXTURE_PT_musgrave)
bpy.types.register(TEXTURE_PT_voronoi)
bpy.types.register(TEXTURE_PT_distortednoise)
+bpy.types.register(TEXTURE_PT_voxeldata)
+bpy.types.register(TEXTURE_PT_pointdensity)
+bpy.types.register(TEXTURE_PT_pointdensity_turbulence)
+
bpy.types.register(TEXTURE_PT_colors)
bpy.types.register(TEXTURE_PT_mapping)
bpy.types.register(TEXTURE_PT_influence)
diff --git a/release/ui/buttons_world.py b/release/ui/buttons_world.py
index 599f45d160b..b02673d126f 100644
--- a/release/ui/buttons_world.py
+++ b/release/ui/buttons_world.py
@@ -2,24 +2,21 @@
import bpy
class WorldButtonsPanel(bpy.types.Panel):
- __space_type__ = "PROPERTIES"
- __region_type__ = "WINDOW"
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
__context__ = "world"
# COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
def poll(self, context):
rd = context.scene.render_data
- return (context.world != None) and (not rd.use_game_engine) and (rd.engine in self.COMPAT_ENGINES)
+ return (context.world) and (not rd.use_game_engine) and (rd.engine in self.COMPAT_ENGINES)
class WORLD_PT_preview(WorldButtonsPanel):
__label__ = "Preview"
COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw(self, context):
- layout = self.layout
- world = context.world
-
- layout.template_preview(world)
+ self.layout.template_preview(context.world)
class WORLD_PT_context_world(WorldButtonsPanel):
__show_header__ = False
@@ -52,32 +49,30 @@ class WORLD_PT_world(WorldButtonsPanel):
world = context.world
- if world:
-
- row = layout.row()
- row.itemR(world, "paper_sky")
- row.itemR(world, "blend_sky")
- row.itemR(world, "real_sky")
+ row = layout.row()
+ row.itemR(world, "paper_sky")
+ row.itemR(world, "blend_sky")
+ row.itemR(world, "real_sky")
- row = layout.row()
- row.column().itemR(world, "horizon_color")
- col = row.column()
- col.itemR(world, "zenith_color")
- col.active = world.blend_sky
- row.column().itemR(world, "ambient_color")
+ row = layout.row()
+ row.column().itemR(world, "horizon_color")
+ col = row.column()
+ col.itemR(world, "zenith_color")
+ col.active = world.blend_sky
+ row.column().itemR(world, "ambient_color")
class WORLD_PT_mist(WorldButtonsPanel):
__label__ = "Mist"
COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
- layout = self.layout
world = context.world
- layout.itemR(world.mist, "enabled", text="")
+ self.layout.itemR(world.mist, "enabled", text="")
def draw(self, context):
layout = self.layout
+
world = context.world
layout.active = world.mist.enabled
@@ -87,7 +82,6 @@ class WORLD_PT_mist(WorldButtonsPanel):
flow.itemR(world.mist, "start")
flow.itemR(world.mist, "depth")
flow.itemR(world.mist, "height")
-
layout.itemR(world.mist, "falloff")
@@ -96,13 +90,13 @@ class WORLD_PT_stars(WorldButtonsPanel):
COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
- layout = self.layout
world = context.world
- layout.itemR(world.stars, "enabled", text="")
+ self.layout.itemR(world.stars, "enabled", text="")
def draw(self, context):
layout = self.layout
+
world = context.world
layout.active = world.stars.enabled
@@ -118,13 +112,13 @@ class WORLD_PT_ambient_occlusion(WorldButtonsPanel):
COMPAT_ENGINES = set(['BLENDER_RENDER'])
def draw_header(self, context):
- layout = self.layout
world = context.world
- layout.itemR(world.ambient_occlusion, "enabled", text="")
+ self.layout.itemR(world.ambient_occlusion, "enabled", text="")
def draw(self, context):
layout = self.layout
+
ao = context.world.ambient_occlusion
layout.active = ao.enabled
@@ -186,4 +180,3 @@ bpy.types.register(WORLD_PT_world)
bpy.types.register(WORLD_PT_ambient_occlusion)
bpy.types.register(WORLD_PT_mist)
bpy.types.register(WORLD_PT_stars)
-
diff --git a/release/ui/space_buttons.py b/release/ui/space_buttons.py
index 3cf782e615f..aa89c06ea08 100644
--- a/release/ui/space_buttons.py
+++ b/release/ui/space_buttons.py
@@ -2,7 +2,7 @@
import bpy
class Buttons_HT_header(bpy.types.Header):
- __space_type__ = "PROPERTIES"
+ __space_type__ = 'PROPERTIES'
def draw(self, context):
layout = self.layout
@@ -22,7 +22,7 @@ class Buttons_HT_header(bpy.types.Header):
row.itemR(scene, "current_frame")
class Buttons_MT_view(bpy.types.Menu):
- __space_type__ = "PROPERTIES"
+ __space_type__ = 'PROPERTIES'
__label__ = "View"
def draw(self, context):
diff --git a/release/ui/space_console.py b/release/ui/space_console.py
index 45cb2a856e1..136082a285a 100644
--- a/release/ui/space_console.py
+++ b/release/ui/space_console.py
@@ -5,7 +5,7 @@ import bpy_ops # XXX - should not need to do this
del bpy_ops
class CONSOLE_HT_header(bpy.types.Header):
- __space_type__ = "CONSOLE"
+ __space_type__ = 'CONSOLE'
def draw(self, context):
sc = context.space_data
@@ -39,7 +39,7 @@ class CONSOLE_HT_header(bpy.types.Header):
row.itemO("console.report_replay")
class CONSOLE_MT_console(bpy.types.Menu):
- __space_type__ = "CONSOLE"
+ __space_type__ = 'CONSOLE'
__label__ = "Console"
def draw(self, context):
@@ -52,7 +52,7 @@ class CONSOLE_MT_console(bpy.types.Menu):
layout.itemO("console.paste")
class CONSOLE_MT_report(bpy.types.Menu):
- __space_type__ = "CONSOLE"
+ __space_type__ = 'CONSOLE'
__label__ = "Report"
def draw(self, context):
@@ -108,9 +108,9 @@ def get_console(console_id):
class CONSOLE_OT_exec(bpy.types.Operator):
'''
- Operator documentatuon text, will be used for the operator tooltip and python docs.
+ Execute the current console line as a python expression.
'''
- __idname__ = "console.exec"
+ __idname__ = "console.execute"
__label__ = "Console Execute"
__register__ = False
@@ -385,7 +385,7 @@ def autocomp(bcon):
class CONSOLE_OT_autocomplete(bpy.types.Operator):
'''
- Operator documentatuon text, will be used for the operator tooltip and python docs.
+ Evaluate the namespace up until the cursor and give a list of options or complete the name if there is only one.
'''
__idname__ = "console.autocomplete"
__label__ = "Console Autocomplete"
diff --git a/release/ui/space_filebrowser.py b/release/ui/space_filebrowser.py
index 51a8f3f78e8..f1ea5555787 100644
--- a/release/ui/space_filebrowser.py
+++ b/release/ui/space_filebrowser.py
@@ -1,15 +1,15 @@
import bpy
-
class FILEBROWSER_HT_header(bpy.types.Header):
- __space_type__ = "FILE_BROWSER"
+ __space_type__ = 'FILE_BROWSER'
def draw(self, context):
- st = context.space_data
layout = self.layout
+ st = context.space_data
params = st.params
+
layout.template_header(menus=False)
row = layout.row(align=True)
@@ -39,5 +39,4 @@ class FILEBROWSER_HT_header(bpy.types.Header):
row.active = params.do_filter
-
bpy.types.register(FILEBROWSER_HT_header)
diff --git a/release/ui/space_image.py b/release/ui/space_image.py
index 090067120b1..3f82727da47 100644
--- a/release/ui/space_image.py
+++ b/release/ui/space_image.py
@@ -2,18 +2,19 @@
import bpy
class IMAGE_MT_view(bpy.types.Menu):
- __space_type__ = "IMAGE_EDITOR"
+ __space_type__ = 'IMAGE_EDITOR'
__label__ = "View"
def draw(self, context):
layout = self.layout
+
sima = context.space_data
uv = sima.uv_editor
settings = context.tool_settings
show_uvedit = sima.show_uvedit
- layout.itemO("image.properties", icon="ICON_MENU_PANEL")
+ layout.itemO("image.properties", icon='ICON_MENU_PANEL')
layout.itemS()
@@ -43,7 +44,7 @@ class IMAGE_MT_view(bpy.types.Menu):
layout.itemO("screen.screen_full_area")
class IMAGE_MT_select(bpy.types.Menu):
- __space_type__ = "IMAGE_EDITOR"
+ __space_type__ = 'IMAGE_EDITOR'
__label__ = "Select"
def draw(self, context):
@@ -64,11 +65,12 @@ class IMAGE_MT_select(bpy.types.Menu):
layout.itemO("uv.select_linked")
class IMAGE_MT_image(bpy.types.Menu):
- __space_type__ = "IMAGE_EDITOR"
+ __space_type__ = 'IMAGE_EDITOR'
__label__ = "Image"
def draw(self, context):
layout = self.layout
+
sima = context.space_data
ima = sima.image
@@ -85,7 +87,7 @@ class IMAGE_MT_image(bpy.types.Menu):
layout.itemO("image.save")
layout.itemO("image.save_as")
- if ima.source == "SEQUENCE":
+ if ima.source == 'SEQUENCE':
layout.itemO("image.save_sequence")
if not show_render:
@@ -99,7 +101,7 @@ class IMAGE_MT_image(bpy.types.Menu):
# only for dirty && specific image types, perhaps
# this could be done in operator poll too
if ima.dirty:
- if ima.source in ("FILE", "GENERATED") and ima.type != "MULTILAYER":
+ if ima.source in ('FILE', 'GENERATED') and ima.type != 'MULTILAYER':
layout.item_booleanO("image.pack", "as_png", True, text="Pack As PNG")
layout.itemS()
@@ -107,7 +109,7 @@ class IMAGE_MT_image(bpy.types.Menu):
layout.itemR(sima, "image_painting")
class IMAGE_MT_uvs_showhide(bpy.types.Menu):
- __space_type__ = "IMAGE_EDITOR"
+ __space_type__ = 'IMAGE_EDITOR'
__label__ = "Show/Hide Faces"
def draw(self, context):
@@ -118,7 +120,7 @@ class IMAGE_MT_uvs_showhide(bpy.types.Menu):
layout.item_booleanO("uv.hide", "unselected", True)
class IMAGE_MT_uvs_transform(bpy.types.Menu):
- __space_type__ = "IMAGE_EDITOR"
+ __space_type__ = 'IMAGE_EDITOR'
__label__ = "Transform"
def draw(self, context):
@@ -129,7 +131,7 @@ class IMAGE_MT_uvs_transform(bpy.types.Menu):
layout.item_enumO("tfm.transform", "mode", 'RESIZE')
class IMAGE_MT_uvs_mirror(bpy.types.Menu):
- __space_type__ = "IMAGE_EDITOR"
+ __space_type__ = 'IMAGE_EDITOR'
__label__ = "Mirror"
def draw(self, context):
@@ -139,7 +141,7 @@ class IMAGE_MT_uvs_mirror(bpy.types.Menu):
layout.item_enumO("uv.mirror", "axis", 'MIRROR_Y') # "Y Axis", M,
class IMAGE_MT_uvs_weldalign(bpy.types.Menu):
- __space_type__ = "IMAGE_EDITOR"
+ __space_type__ = 'IMAGE_EDITOR'
__label__ = "Weld/Align"
def draw(self, context):
@@ -148,13 +150,13 @@ class IMAGE_MT_uvs_weldalign(bpy.types.Menu):
layout.itemO("uv.weld") # W, 1
layout.items_enumO("uv.align", "axis") # W, 2/3/4
-
class IMAGE_MT_uvs(bpy.types.Menu):
- __space_type__ = "IMAGE_EDITOR"
+ __space_type__ = 'IMAGE_EDITOR'
__label__ = "UVs"
def draw(self, context):
layout = self.layout
+
sima = context.space_data
uv = sima.uv_editor
settings = context.tool_settings
@@ -192,13 +194,14 @@ class IMAGE_MT_uvs(bpy.types.Menu):
layout.itemM("IMAGE_MT_uvs_showhide")
class IMAGE_HT_header(bpy.types.Header):
- __space_type__ = "IMAGE_EDITOR"
+ __space_type__ = 'IMAGE_EDITOR'
def draw(self, context):
+ layout = self.layout
+
sima = context.space_data
ima = sima.image
iuser = sima.image_user
- layout = self.layout
settings = context.tool_settings
show_render = sima.show_render
@@ -247,7 +250,7 @@ class IMAGE_HT_header(bpy.types.Header):
"""
mesh = context.edit_object.data
- row.item_pointerR(mesh, "active_uv_layer", mesh, "uv_layers")
+ row.item_pointerR(mesh, "active_uv_layer", mesh, "uv_textures")
"""
if ima:
@@ -262,17 +265,17 @@ class IMAGE_HT_header(bpy.types.Header):
row.itemR(sima, "draw_channels", text="", expand=True)
row = layout.row(align=True)
- if ima.type == "COMPOSITE":
- row.itemO("image.record_composite", icon="ICON_REC")
- if ima.type == "COMPOSITE" and ima.source in ("MOVIE", "SEQUENCE"):
- row.itemO("image.play_composite", icon="ICON_PLAY")
+ if ima.type == 'COMPOSITE':
+ row.itemO("image.record_composite", icon='ICON_REC')
+ if ima.type == 'COMPOSITE' and ima.source in ('MOVIE', 'SEQUENCE'):
+ row.itemO("image.play_composite", icon='ICON_PLAY')
if show_uvedit or sima.image_painting:
layout.itemR(sima, "update_automatically", text="")
class IMAGE_PT_game_properties(bpy.types.Panel):
- __space_type__ = "IMAGE_EDITOR"
- __region_type__ = "UI"
+ __space_type__ = 'IMAGE_EDITOR'
+ __region_type__ = 'UI'
__label__ = "Game Properties"
def poll(self, context):
@@ -281,52 +284,48 @@ class IMAGE_PT_game_properties(bpy.types.Panel):
return (sima and sima.image) and (rd.engine == 'BLENDER_GAME')
def draw(self, context):
- sima = context.space_data
layout = self.layout
-
+
+ sima = context.space_data
ima = sima.image
- if ima:
- split = layout.split()
-
- col = split.column()
-
- subcol = col.column(align=True)
- subcol.itemR(ima, "clamp_x")
- subcol.itemR(ima, "clamp_y")
+ split = layout.split()
- col.itemR(ima, "mapping", expand=True)
- col.itemR(ima, "tiles")
+ col = split.column()
+ col.itemR(ima, "clamp_x")
+ col.itemR(ima, "clamp_y")
+ col.itemR(ima, "mapping", expand=True)
+ col.itemR(ima, "tiles")
- col = split.column()
+ col = split.column()
- subcol = col.column(align=True)
- subcol.itemR(ima, "animated")
+ sub = col.column(align=True)
+ sub.itemR(ima, "animated")
- subcol = subcol.column()
- subcol.itemR(ima, "animation_start", text="Start")
- subcol.itemR(ima, "animation_end", text="End")
- subcol.itemR(ima, "animation_speed", text="Speed")
- subcol.active = ima.animated
+ subsub = sub.column()
+ subsub.active = ima.animated
+ subsub.itemR(ima, "animation_start", text="Start")
+ subsub.itemR(ima, "animation_end", text="End")
+ subsub.itemR(ima, "animation_speed", text="Speed")
- subrow = col.row(align=True)
- subrow.itemR(ima, "tiles_x", text="X")
- subrow.itemR(ima, "tiles_y", text="Y")
- subrow.active = ima.tiles or ima.animated
+ sub = col.row(align=True)
+ sub.active = ima.tiles or ima.animated
+ sub.itemR(ima, "tiles_x", text="X")
+ sub.itemR(ima, "tiles_y", text="Y")
class IMAGE_PT_view_properties(bpy.types.Panel):
- __space_type__ = "IMAGE_EDITOR"
- __region_type__ = "UI"
- __label__ = "View Properties"
+ __space_type__ = 'IMAGE_EDITOR'
+ __region_type__ = 'UI'
+ __label__ = "Display"
def poll(self, context):
sima = context.space_data
return (sima and (sima.image or sima.show_uvedit))
def draw(self, context):
- sima = context.space_data
layout = self.layout
-
+
+ sima = context.space_data
ima = sima.image
show_uvedit = sima.show_uvedit
uvedit = sima.uv_editor
@@ -335,26 +334,33 @@ class IMAGE_PT_view_properties(bpy.types.Panel):
col = split.column()
if ima:
- col.itemR(ima, "display_aspect")
+ col.itemR(ima, "display_aspect", text="Aspect Ratio")
col = split.column()
+ col.itemL(text="Coordinates:")
col.itemR(sima, "draw_repeated", text="Repeat")
if show_uvedit:
col.itemR(uvedit, "normalized_coordinates", text="Normalized")
elif show_uvedit:
+ col.itemL(text="Coordinates:")
col.itemR(uvedit, "normalized_coordinates", text="Normalized")
if show_uvedit:
col = layout.column()
row = col.row()
row.itemR(uvedit, "edge_draw_type", expand=True)
- row = col.row()
- row.itemR(uvedit, "draw_smooth_edges", text="Smooth")
- row.itemR(uvedit, "draw_modified_edges", text="Modified")
+
+ split = layout.split()
- row = col.row()
- row.itemR(uvedit, "draw_stretch", text="Stretch")
- row.itemR(uvedit, "draw_stretch_type", text="")
+ col = split.column()
+ col.itemR(uvedit, "draw_stretch", text="Stretch")
+ sub = col.column()
+ sub.active = uvedit.draw_stretch
+ sub.row().itemR(uvedit, "draw_stretch_type", expand=True)
+
+ col = split.column()
+ col.itemR(uvedit, "draw_smooth_edges", text="Smooth")
+ col.itemR(uvedit, "draw_modified_edges", text="Modified")
#col.itemR(uvedit, "draw_edges")
#col.itemR(uvedit, "draw_faces")
@@ -369,4 +375,3 @@ bpy.types.register(IMAGE_MT_uvs)
bpy.types.register(IMAGE_HT_header)
bpy.types.register(IMAGE_PT_game_properties)
bpy.types.register(IMAGE_PT_view_properties)
-
diff --git a/release/ui/space_info.py b/release/ui/space_info.py
index bfe051b8df2..e6cc4af2a06 100644
--- a/release/ui/space_info.py
+++ b/release/ui/space_info.py
@@ -2,13 +2,14 @@
import bpy
class INFO_HT_header(bpy.types.Header):
- __space_type__ = "INFO"
+ __space_type__ = 'INFO'
def draw(self, context):
layout = self.layout
st = context.space_data
- rd = context.scene.render_data
+ scene = context.scene
+ rd = scene.render_data
row = layout.row(align=True)
row.template_header()
@@ -33,9 +34,11 @@ class INFO_HT_header(bpy.types.Header):
layout.template_operator_search()
layout.template_running_jobs()
+
+ layout.itemL(text=scene.statistics())
class INFO_MT_file(bpy.types.Menu):
- __space_type__ = "INFO"
+ __space_type__ = 'INFO'
__label__ = "File"
def draw(self, context):
@@ -71,7 +74,7 @@ class INFO_MT_file(bpy.types.Menu):
layout.itemO("wm.exit_blender", text="Quit")
class INFO_MT_file_import(bpy.types.Menu):
- __space_type__ = "INFO"
+ __space_type__ = 'INFO'
__label__ = "Import"
def draw(self, context):
@@ -80,7 +83,7 @@ class INFO_MT_file_import(bpy.types.Menu):
layout.itemO("import.obj", text="OBJ")
class INFO_MT_file_export(bpy.types.Menu):
- __space_type__ = "INFO"
+ __space_type__ = 'INFO'
__label__ = "Export"
def draw(self, context):
@@ -93,7 +96,7 @@ class INFO_MT_file_export(bpy.types.Menu):
layout.itemO("export.x3d", text="X3D")
class INFO_MT_file_external_data(bpy.types.Menu):
- __space_type__ = "INFO"
+ __space_type__ = 'INFO'
__label__ = "External Data"
def draw(self, context):
@@ -110,7 +113,7 @@ class INFO_MT_file_external_data(bpy.types.Menu):
layout.itemO("file.find_missing_files")
class INFO_MT_add(bpy.types.Menu):
- __space_type__ = "INFO"
+ __space_type__ = 'INFO'
__label__ = "Add"
def draw(self, context):
@@ -118,25 +121,25 @@ class INFO_MT_add(bpy.types.Menu):
layout.operator_context = "EXEC_SCREEN"
- layout.item_menu_enumO( "OBJECT_OT_mesh_add", "type", text="Mesh", icon='ICON_OUTLINER_OB_MESH')
- layout.item_menu_enumO( "OBJECT_OT_curve_add", "type", text="Curve", icon='ICON_OUTLINER_OB_CURVE')
- layout.item_menu_enumO( "OBJECT_OT_surface_add", "type", text="Surface", icon='ICON_OUTLINER_OB_SURFACE')
- layout.item_menu_enumO( "OBJECT_OT_metaball_add", "type", 'META', icon='ICON_OUTLINER_OB_META')
- layout.itemO("OBJECT_OT_text_add", text="Text", icon='ICON_OUTLINER_OB_FONT')
+ layout.item_menu_enumO("object.mesh_add", "type", text="Mesh", icon='ICON_OUTLINER_OB_MESH')
+ layout.item_menu_enumO("object.curve_add", "type", text="Curve", icon='ICON_OUTLINER_OB_CURVE')
+ layout.item_menu_enumO("object.surface_add", "type", text="Surface", icon='ICON_OUTLINER_OB_SURFACE')
+ layout.item_menu_enumO("object.metaball_add", "type", 'META', icon='ICON_OUTLINER_OB_META')
+ layout.itemO("object.text_add", text="Text", icon='ICON_OUTLINER_OB_FONT')
layout.itemS()
- layout.itemO("OBJECT_OT_armature_add", text="Armature", icon='ICON_OUTLINER_OB_ARMATURE')
- layout.item_enumO("OBJECT_OT_object_add", "type", 'LATTICE', icon='ICON_OUTLINER_OB_LATTICE')
- layout.item_enumO("OBJECT_OT_object_add", "type", 'EMPTY', icon='ICON_OUTLINER_OB_EMPTY')
+ layout.itemO("object.armature_add", text="Armature", icon='ICON_OUTLINER_OB_ARMATURE')
+ layout.item_enumO("object.add", "type", 'LATTICE', icon='ICON_OUTLINER_OB_LATTICE')
+ layout.item_enumO("object.add", "type", 'EMPTY', icon='ICON_OUTLINER_OB_EMPTY')
layout.itemS()
- layout.item_enumO("OBJECT_OT_object_add", "type", 'CAMERA', icon='ICON_OUTLINER_OB_CAMERA')
- layout.item_enumO("OBJECT_OT_object_add", "type", 'LAMP', icon='ICON_OUTLINER_OB_LAMP')
+ layout.item_enumO("object.add", "type", 'CAMERA', icon='ICON_OUTLINER_OB_CAMERA')
+ layout.item_enumO("object.add", "type", 'LAMP', icon='ICON_OUTLINER_OB_LAMP')
class INFO_MT_game(bpy.types.Menu):
- __space_type__ = "INFO"
+ __space_type__ = 'INFO'
__label__ = "Game"
def draw(self, context):
@@ -154,7 +157,7 @@ class INFO_MT_game(bpy.types.Menu):
layout.itemR(gs, "deprecation_warnings")
class INFO_MT_render(bpy.types.Menu):
- __space_type__ = "INFO"
+ __space_type__ = 'INFO'
__label__ = "Render"
def draw(self, context):
@@ -170,7 +173,7 @@ class INFO_MT_render(bpy.types.Menu):
layout.itemO("screen.render_view_show")
class INFO_MT_help(bpy.types.Menu):
- __space_type__ = "INFO"
+ __space_type__ = 'INFO'
__label__ = "Help"
def draw(self, context):
diff --git a/release/ui/space_logic.py b/release/ui/space_logic.py
index 728e5e6307b..5748d15a53a 100644
--- a/release/ui/space_logic.py
+++ b/release/ui/space_logic.py
@@ -1,8 +1,8 @@
import bpy
class LOGIC_PT_properties(bpy.types.Panel):
- __space_type__ = "LOGIC_EDITOR"
- __region_type__ = "UI"
+ __space_type__ = 'LOGIC_EDITOR'
+ __region_type__ = 'UI'
__label__ = "Properties"
def poll(self, context):
@@ -11,15 +11,19 @@ class LOGIC_PT_properties(bpy.types.Panel):
def draw(self, context):
layout = self.layout
+
ob = context.active_object
game = ob.game
- for prop in game.properties:
- flow = layout.row()
- flow.itemR(prop, "name", text="")
- flow.itemR(prop, "type", text="")
- flow.itemR(prop, "value", text="") # we dont care about the type. rna will display correctly
- flow.itemR(prop, "debug")
-
+ layout.itemO("object.game_property_new", text="Add Game Property")
+
+ for i, prop in enumerate(game.properties):
+
+ row = layout.row(align=True)
+ row.itemR(prop, "name", text="")
+ row.itemR(prop, "type", text="")
+ row.itemR(prop, "value", text="", toggle=True) # we dont care about the type. rna will display correctly
+ row.itemR(prop, "debug", text="", toggle=True, icon='ICON_INFO')
+ row.item_intO("object.game_property_remove", "index", i, text="", icon='ICON_X')
+
bpy.types.register(LOGIC_PT_properties)
-
diff --git a/release/ui/space_node.py b/release/ui/space_node.py
index 2e28cfc2eed..6ac1ac84f35 100644
--- a/release/ui/space_node.py
+++ b/release/ui/space_node.py
@@ -2,10 +2,11 @@
import bpy
class NODE_HT_header(bpy.types.Header):
- __space_type__ = "NODE_EDITOR"
+ __space_type__ = 'NODE_EDITOR'
def draw(self, context):
layout = self.layout
+
snode = context.space_data
row = layout.row(align=True)
@@ -27,7 +28,7 @@ class NODE_HT_header(bpy.types.Header):
if ob:
layout.template_ID(ob, "active_material", new="material.new")
if id:
- layout.itemR(id, "use_nodes", toggle=True)
+ layout.itemR(id, "use_nodes")
elif snode.tree_type == 'TEXTURE':
row.itemR(snode, "texture_type", text="", expand=True)
@@ -37,17 +38,17 @@ class NODE_HT_header(bpy.types.Header):
if id_from:
layout.template_ID(id_from, "active_texture", new="texture.new")
if id:
- layout.itemR(id, "use_nodes", toggle=True)
+ layout.itemR(id, "use_nodes")
elif snode.tree_type == 'COMPOSITING':
id = snode.id
- layout.itemR(id, "use_nodes", toggle=True)
- layout.itemR(id.render_data, "free_unused_nodes", text="Free Unused", toggle=True)
- layout.itemR(snode, "backdrop", toggle=True)
+ layout.itemR(id, "use_nodes")
+ layout.itemR(id.render_data, "free_unused_nodes", text="Free Unused")
+ layout.itemR(snode, "backdrop")
class NODE_MT_view(bpy.types.Menu):
- __space_type__ = "NODE_EDITOR"
+ __space_type__ = 'NODE_EDITOR'
__label__ = "View"
def draw(self, context):
@@ -65,7 +66,7 @@ class NODE_MT_view(bpy.types.Menu):
layout.itemO("screen.screen_full_area")
class NODE_MT_select(bpy.types.Menu):
- __space_type__ = "NODE_EDITOR"
+ __space_type__ = 'NODE_EDITOR'
__label__ = "Select"
def draw(self, context):
@@ -80,7 +81,7 @@ class NODE_MT_select(bpy.types.Menu):
# layout.itemO("node.select_linked_to")
class NODE_MT_node(bpy.types.Menu):
- __space_type__ = "NODE_EDITOR"
+ __space_type__ = 'NODE_EDITOR'
__label__ = "Node"
def draw(self, context):
@@ -113,9 +114,7 @@ class NODE_MT_node(bpy.types.Menu):
# layout.itemS()
# layout.itemO("node.show_cyclic_dependencies")
-
bpy.types.register(NODE_HT_header)
bpy.types.register(NODE_MT_view)
bpy.types.register(NODE_MT_select)
bpy.types.register(NODE_MT_node)
-
diff --git a/release/ui/space_outliner.py b/release/ui/space_outliner.py
index f55f4633a7b..522b620e29d 100644
--- a/release/ui/space_outliner.py
+++ b/release/ui/space_outliner.py
@@ -2,7 +2,7 @@
import bpy
class OUTLINER_HT_header(bpy.types.Header):
- __space_type__ = "OUTLINER"
+ __space_type__ = 'OUTLINER'
def draw(self, context):
so = context.space_data
@@ -36,7 +36,7 @@ class OUTLINER_HT_header(bpy.types.Header):
class OUTLINER_MT_view(bpy.types.Menu):
- __space_type__ = "OUTLINER"
+ __space_type__ = 'OUTLINER'
__label__ = "View"
def draw(self, context):
diff --git a/release/ui/space_sequencer.py b/release/ui/space_sequencer.py
index 1edcf32d3b5..daae4a83ec4 100644
--- a/release/ui/space_sequencer.py
+++ b/release/ui/space_sequencer.py
@@ -7,7 +7,7 @@ def act_strip(context):
# Header
class SEQUENCER_HT_header(bpy.types.Header):
- __space_type__ = "SEQUENCE_EDITOR"
+ __space_type__ = 'SEQUENCE_EDITOR'
def draw(self, context):
layout = self.layout
@@ -38,7 +38,7 @@ class SEQUENCER_HT_header(bpy.types.Header):
layout.itemR(st, "display_channel", text="Channel")
class SEQUENCER_MT_view(bpy.types.Menu):
- __space_type__ = "SEQUENCE_EDITOR"
+ __space_type__ = 'SEQUENCE_EDITOR'
__label__ = "View"
def draw(self, context):
@@ -106,7 +106,7 @@ class SEQUENCER_MT_view(bpy.types.Menu):
"""
class SEQUENCER_MT_select(bpy.types.Menu):
- __space_type__ = "SEQUENCE_EDITOR"
+ __space_type__ = 'SEQUENCE_EDITOR'
__label__ = "Select"
def draw(self, context):
@@ -127,7 +127,7 @@ class SEQUENCER_MT_select(bpy.types.Menu):
layout.itemO("sequencer.select_inverse")
class SEQUENCER_MT_marker(bpy.types.Menu):
- __space_type__ = "SEQUENCE_EDITOR"
+ __space_type__ = 'SEQUENCE_EDITOR'
__label__ = "Marker (TODO)"
def draw(self, context):
@@ -146,7 +146,7 @@ class SEQUENCER_MT_marker(bpy.types.Menu):
#layout.itemO("sequencer.sound_strip_add", text="Transform Markers") # toggle, will be rna - (sseq->flag & SEQ_MARKER_TRANS)
class SEQUENCER_MT_add(bpy.types.Menu):
- __space_type__ = "SEQUENCE_EDITOR"
+ __space_type__ = 'SEQUENCE_EDITOR'
__label__ = "Add"
def draw(self, context):
@@ -163,7 +163,7 @@ class SEQUENCER_MT_add(bpy.types.Menu):
layout.itemM("SEQUENCER_MT_add_effect")
class SEQUENCER_MT_add_effect(bpy.types.Menu):
- __space_type__ = "SEQUENCE_EDITOR"
+ __space_type__ = 'SEQUENCE_EDITOR'
__label__ = "Effect Strip..."
def draw(self, context):
@@ -187,7 +187,7 @@ class SEQUENCER_MT_add_effect(bpy.types.Menu):
layout.item_enumO("sequencer.effect_strip_add", 'type', 'SPEED')
class SEQUENCER_MT_strip(bpy.types.Menu):
- __space_type__ = "SEQUENCE_EDITOR"
+ __space_type__ = 'SEQUENCE_EDITOR'
__label__ = "Strip"
def draw(self, context):
@@ -254,15 +254,15 @@ class SEQUENCER_MT_strip(bpy.types.Menu):
# Panels
class SequencerButtonsPanel(bpy.types.Panel):
- __space_type__ = "SEQUENCE_EDITOR"
- __region_type__ = "UI"
+ __space_type__ = 'SEQUENCE_EDITOR'
+ __region_type__ = 'UI'
def poll(self, context):
return context.space_data.display_mode == 'SEQUENCER' and act_strip(context) != None
class SequencerButtonsPanel_Output(bpy.types.Panel):
- __space_type__ = "SEQUENCE_EDITOR"
- __region_type__ = "UI"
+ __space_type__ = 'SEQUENCE_EDITOR'
+ __region_type__ = 'UI'
def poll(self, context):
return context.space_data.display_mode != 'SEQUENCER'
@@ -303,6 +303,7 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel):
row.itemR(strip, "frame_locked", text="Frame Lock")
col = layout.column()
+ col.enabled = not strip.lock
col.itemR(strip, "channel")
col.itemR(strip, "start_frame")
col.itemR(strip, "length")
@@ -415,23 +416,28 @@ class SEQUENCER_PT_input(SequencerButtonsPanel):
if not strip:
return False
- return strip.type in ('MOVIE', 'IMAGE', 'SOUND')
+ return strip.type in ('MOVIE', 'IMAGE')
def draw(self, context):
layout = self.layout
strip = act_strip(context)
- layout.itemR(strip, "directory", text="")
-
- # Current element for the filename
- split = layout.split(percentage=0.3)
+ split = layout.split(percentage=0.2)
col = split.column()
- col.itemL(text="File Name:")
+ col.itemL(text="Path:")
col = split.column()
+ col.itemR(strip, "directory", text="")
+
+ # Current element for the filename
+
elem = strip.getStripElem(context.scene.current_frame)
if elem:
+ split = layout.split(percentage=0.2)
+ col = split.column()
+ col.itemL(text="File:")
+ col = split.column()
col.itemR(elem, "filename", text="") # strip.elements[0] could be a fallback
layout.itemR(strip, "use_translation", text="Image Offset:")
@@ -455,6 +461,37 @@ class SEQUENCER_PT_input(SequencerButtonsPanel):
col.itemR(strip, "animation_start_offset", text="Start")
col.itemR(strip, "animation_end_offset", text="End")
+class SEQUENCER_PT_sound(SequencerButtonsPanel):
+ __label__ = "Sound"
+
+ def poll(self, context):
+ if context.space_data.display_mode != 'SEQUENCER':
+ return False
+
+ strip = act_strip(context)
+ if not strip:
+ return False
+
+ return strip.type in ('SOUND', )
+
+ def draw(self, context):
+ layout = self.layout
+
+ strip = act_strip(context)
+
+ layout.template_ID(strip, "sound", new="sound.open")
+
+ layout.itemS()
+ layout.itemR(strip.sound, "filename", text="")
+
+ row = layout.row()
+ if strip.sound.packed_file:
+ row.itemO("sound.unpack", icon='ICON_PACKAGE', text="Unpack")
+ else:
+ row.itemO("sound.pack", icon='ICON_UGLYPACKAGE', text="Pack")
+
+ row.itemR(strip.sound, "caching")
+
class SEQUENCER_PT_filter(SequencerButtonsPanel):
__label__ = "Filter"
@@ -558,6 +595,7 @@ bpy.types.register(SEQUENCER_MT_strip)
bpy.types.register(SEQUENCER_PT_edit) # sequencer panels
bpy.types.register(SEQUENCER_PT_effect)
bpy.types.register(SEQUENCER_PT_input)
+bpy.types.register(SEQUENCER_PT_sound)
bpy.types.register(SEQUENCER_PT_filter)
bpy.types.register(SEQUENCER_PT_proxy)
diff --git a/release/ui/space_text.py b/release/ui/space_text.py
index 61e8d3489a5..117033c50a1 100644
--- a/release/ui/space_text.py
+++ b/release/ui/space_text.py
@@ -2,12 +2,13 @@
import bpy
class TEXT_HT_header(bpy.types.Header):
- __space_type__ = "TEXT_EDITOR"
+ __space_type__ = 'TEXT_EDITOR'
def draw(self, context):
+ layout = self.layout
+
st = context.space_data
text = st.text
- layout = self.layout
row = layout.row(align=True)
row.template_header()
@@ -45,13 +46,14 @@ class TEXT_HT_header(bpy.types.Header):
row.itemL(text="Text: Internal")
class TEXT_PT_properties(bpy.types.Panel):
- __space_type__ = "TEXT_EDITOR"
- __region_type__ = "UI"
+ __space_type__ = 'TEXT_EDITOR'
+ __region_type__ = 'UI'
__label__ = "Properties"
def draw(self, context):
- st = context.space_data
layout = self.layout
+
+ st = context.space_data
flow = layout.column_flow()
flow.itemR(st, "line_numbers")
@@ -64,13 +66,14 @@ class TEXT_PT_properties(bpy.types.Panel):
flow.itemR(st, "tab_width")
class TEXT_PT_find(bpy.types.Panel):
- __space_type__ = "TEXT_EDITOR"
- __region_type__ = "UI"
+ __space_type__ = 'TEXT_EDITOR'
+ __region_type__ = 'UI'
__label__ = "Find"
def draw(self, context):
- st = context.space_data
layout = self.layout
+
+ st = context.space_data
# find
col = layout.column(align=True)
@@ -95,11 +98,12 @@ class TEXT_PT_find(bpy.types.Panel):
row.itemR(st, "find_all", text="All")
class TEXT_MT_text(bpy.types.Menu):
- __space_type__ = "TEXT_EDITOR"
+ __space_type__ = 'TEXT_EDITOR'
__label__ = "Text"
def draw(self, context):
layout = self.layout
+
st = context.space_data
text = st.text
@@ -127,7 +131,7 @@ class TEXT_MT_text(bpy.types.Menu):
layout.itemS()
- layout.itemO("text.properties", icon="ICON_MENU_PANEL")
+ layout.itemO("text.properties", icon='ICON_MENU_PANEL')
#ifndef DISABLE_PYTHON
# XXX layout.column()
@@ -136,7 +140,7 @@ class TEXT_MT_text(bpy.types.Menu):
#endif
class TEXT_MT_edit_view(bpy.types.Menu):
- __space_type__ = "TEXT_EDITOR"
+ __space_type__ = 'TEXT_EDITOR'
__label__ = "View"
def draw(self, context):
@@ -146,7 +150,7 @@ class TEXT_MT_edit_view(bpy.types.Menu):
layout.item_enumO("text.move", "type", 'FILE_BOTTOM', text="Bottom of File")
class TEXT_MT_edit_select(bpy.types.Menu):
- __space_type__ = "TEXT_EDITOR"
+ __space_type__ = 'TEXT_EDITOR'
__label__ = "Select"
def draw(self, context):
@@ -156,7 +160,7 @@ class TEXT_MT_edit_select(bpy.types.Menu):
layout.itemO("text.select_line")
class TEXT_MT_edit_markers(bpy.types.Menu):
- __space_type__ = "TEXT_EDITOR"
+ __space_type__ = 'TEXT_EDITOR'
__label__ = "Markers"
def draw(self, context):
@@ -167,7 +171,7 @@ class TEXT_MT_edit_markers(bpy.types.Menu):
layout.itemO("text.previous_marker")
class TEXT_MT_format(bpy.types.Menu):
- __space_type__ = "TEXT_EDITOR"
+ __space_type__ = 'TEXT_EDITOR'
__label__ = "Format"
def draw(self, context):
@@ -186,7 +190,7 @@ class TEXT_MT_format(bpy.types.Menu):
layout.item_menu_enumO("text.convert_whitespace", "type")
class TEXT_MT_edit_to3d(bpy.types.Menu):
- __space_type__ = "TEXT_EDITOR"
+ __space_type__ = 'TEXT_EDITOR'
__label__ = "Text To 3D Object"
def draw(self, context):
@@ -196,12 +200,11 @@ class TEXT_MT_edit_to3d(bpy.types.Menu):
layout.item_booleanO("text.to_3d_object", "split_lines", True, text="One Object Per Line");
class TEXT_MT_edit(bpy.types.Menu):
- __space_type__ = "TEXT_EDITOR"
+ __space_type__ = 'TEXT_EDITOR'
__label__ = "Edit"
def poll(self, context):
- st = context.space_data
- return st.text != None
+ return (context.space_data.text)
def draw(self, context):
layout = self.layout
@@ -240,4 +243,3 @@ bpy.types.register(TEXT_MT_edit_view)
bpy.types.register(TEXT_MT_edit_select)
bpy.types.register(TEXT_MT_edit_markers)
bpy.types.register(TEXT_MT_edit_to3d)
-
diff --git a/release/ui/space_time.py b/release/ui/space_time.py
index d1c9f9806f3..bb82eea3272 100644
--- a/release/ui/space_time.py
+++ b/release/ui/space_time.py
@@ -2,7 +2,7 @@
import bpy
class TIME_HT_header(bpy.types.Header):
- __space_type__ = "TIMELINE"
+ __space_type__ = 'TIMELINE'
def draw(self, context):
layout = self.layout
@@ -22,7 +22,7 @@ class TIME_HT_header(bpy.types.Header):
sub.itemM("TIME_MT_frame")
sub.itemM("TIME_MT_playback")
- layout.itemR(scene, "use_preview_range", text="PR", toggle=True)
+ layout.itemR(scene, "use_preview_range", text="PR")
row = layout.row(align=True)
if not scene.use_preview_range:
@@ -33,6 +33,8 @@ class TIME_HT_header(bpy.types.Header):
row.itemR(scene, "preview_range_end_frame", text="End")
layout.itemR(scene, "current_frame", text="")
+
+ layout.itemS()
row = layout.row(align=True)
row.item_booleanO("screen.frame_jump", "end", False, text="", icon='ICON_REW')
@@ -47,28 +49,23 @@ class TIME_HT_header(bpy.types.Header):
row.item_booleanO("screen.keyframe_jump", "next", True, text="", icon='ICON_NEXT_KEYFRAME')
row.item_booleanO("screen.frame_jump", "end", True, text="", icon='ICON_FF')
- layout.itemR(rd, "sync_audio", text="", toggle=True, icon='ICON_SPEAKER')
-
- layout.itemS()
-
row = layout.row(align=True)
row.itemR(tools, "enable_auto_key", text="", toggle=True, icon='ICON_REC')
- sub = row.row()
- sub.active = tools.enable_auto_key
- sub.itemR(tools, "autokey_mode", text="")
if screen.animation_playing and tools.enable_auto_key:
subsub = row.row()
subsub.itemR(tools, "record_with_nla", toggle=True)
+
+ layout.itemR(rd, "sync_audio", text="", toggle=True, icon='ICON_SPEAKER')
layout.itemS()
row = layout.row(align=True)
- row.itemR(scene, "active_keying_set", text="")
- row.itemO("anim.insert_keyframe", text="", icon="ICON_KEY_HLT")
- row.itemO("anim.delete_keyframe", text="", icon="ICON_KEY_DEHLT")
+ row.item_pointerR(scene, "active_keying_set", scene, "keying_sets", text="")
+ row.itemO("anim.insert_keyframe", text="", icon='ICON_KEY_HLT')
+ row.itemO("anim.delete_keyframe", text="", icon='ICON_KEY_DEHLT')
class TIME_MT_view(bpy.types.Menu):
- __space_type__ = "TIMELINE"
+ __space_type__ = 'TIMELINE'
__label__ = "View"
def draw(self, context):
@@ -83,11 +80,12 @@ class TIME_MT_view(bpy.types.Menu):
layout.itemR(st, "only_selected")
class TIME_MT_frame(bpy.types.Menu):
- __space_type__ = "TIMELINE"
+ __space_type__ = 'TIMELINE'
__label__ = "Frame"
def draw(self, context):
layout = self.layout
+ tools = context.tool_settings
layout.itemO("marker.add", text="Add Marker")
layout.itemO("marker.duplicate", text="Duplicate Marker")
@@ -99,15 +97,22 @@ class TIME_MT_frame(bpy.types.Menu):
layout.itemO("time.start_frame_set")
layout.itemO("time.end_frame_set")
+
+ layout.itemS()
+
+ sub = layout.row()
+ sub.active = tools.enable_auto_key
+ sub.itemM("TIME_MT_autokey")
class TIME_MT_playback(bpy.types.Menu):
- __space_type__ = "TIMELINE"
+ __space_type__ = 'TIMELINE'
__label__ = "Playback"
def draw(self, context):
layout = self.layout
st = context.space_data
+ rd = context.scene.render_data
layout.itemR(st, "play_top_left")
layout.itemR(st, "play_all_3d")
@@ -115,10 +120,32 @@ class TIME_MT_playback(bpy.types.Menu):
layout.itemR(st, "play_buttons")
layout.itemR(st, "play_image")
layout.itemR(st, "play_sequencer")
+
layout.itemS()
+
layout.itemR(st, "continue_physics")
+
+ layout.itemS()
+
+ layout.itemR(rd, "sync_audio", icon='ICON_SPEAKER')
+
+
+
+class TIME_MT_autokey(bpy.types.Menu):
+ __space_type__ = 'TIMELINE'
+ __label__ = "Auto-Keyframing Mode"
+
+ def draw(self, context):
+ layout = self.layout
+ tools = context.tool_settings
+
+ layout.active = tools.enable_auto_key
+
+ layout.item_enumR(tools, "autokey_mode", 'ADD_REPLACE_KEYS')
+ layout.item_enumR(tools, "autokey_mode", 'REPLACE_KEYS')
bpy.types.register(TIME_HT_header)
bpy.types.register(TIME_MT_view)
bpy.types.register(TIME_MT_frame)
+bpy.types.register(TIME_MT_autokey)
bpy.types.register(TIME_MT_playback)
diff --git a/release/ui/space_userpref.py b/release/ui/space_userpref.py
index 95054efcb25..1e7a9b581d4 100644
--- a/release/ui/space_userpref.py
+++ b/release/ui/space_userpref.py
@@ -2,21 +2,26 @@
import bpy
class USERPREF_HT_header(bpy.types.Header):
- __space_type__ = "USER_PREFERENCES"
+ __space_type__ = 'USER_PREFERENCES'
def draw(self, context):
layout = self.layout
layout.template_header(menus=False)
+
+ userpref = context.user_preferences
+
+ layout.operator_context = "EXEC_AREA"
+ layout.itemO("wm.save_homefile", text="Save As Default")
class USERPREF_MT_view(bpy.types.Menu):
- __space_type__ = "USER_PREFERENCES"
+ __space_type__ = 'USER_PREFERENCES'
__label__ = "View"
def draw(self, context):
layout = self.layout
class USERPREF_PT_tabs(bpy.types.Panel):
- __space_type__ = "USER_PREFERENCES"
+ __space_type__ = 'USER_PREFERENCES'
__show_header__ = False
def draw(self, context):
@@ -27,7 +32,7 @@ class USERPREF_PT_tabs(bpy.types.Panel):
layout.itemR(userpref, "active_section", expand=True)
class USERPREF_PT_view(bpy.types.Panel):
- __space_type__ = "USER_PREFERENCES"
+ __space_type__ = 'USER_PREFERENCES'
__label__ = "View"
__show_header__ = False
@@ -59,11 +64,11 @@ class USERPREF_PT_view(bpy.types.Panel):
sub1.itemS()
sub1.itemS()
sub1.itemS()
- sub1.itemR(view, "show_mini_axis")
+ sub1.itemR(view, "show_mini_axis", text="Display Mini Axis")
sub2 = sub1.column()
sub2.enabled = view.show_mini_axis
- sub2.itemR(view, "mini_axis_size")
- sub2.itemR(view, "mini_axis_brightness")
+ sub2.itemR(view, "mini_axis_size", text="Size")
+ sub2.itemR(view, "mini_axis_brightness", text="Brightness")
col = split.column()
sub = col.split(percentage=0.85)
@@ -130,7 +135,7 @@ class USERPREF_PT_view(bpy.types.Panel):
sub1.itemR(view, "open_right_mouse_delay", text="Hold RMB")
class USERPREF_PT_edit(bpy.types.Panel):
- __space_type__ = "USER_PREFERENCES"
+ __space_type__ = 'USER_PREFERENCES'
__label__ = "Edit"
__show_header__ = False
@@ -225,9 +230,10 @@ class USERPREF_PT_edit(bpy.types.Panel):
sub1.itemR(edit, "duplicate_texture", text="Texture")
sub1.itemR(edit, "duplicate_ipo", text="F-Curve")
sub1.itemR(edit, "duplicate_action", text="Action")
+ sub1.itemR(edit, "duplicate_particle", text="Particle")
class USERPREF_PT_system(bpy.types.Panel):
- __space_type__ = "USER_PREFERENCES"
+ __space_type__ = 'USER_PREFERENCES'
__label__ = "System"
__show_header__ = False
@@ -308,7 +314,7 @@ class USERPREF_PT_system(bpy.types.Panel):
sub1.itemR(system, "texture_collection_rate", text="Collection Rate")
class USERPREF_PT_filepaths(bpy.types.Panel):
- __space_type__ = "USER_PREFERENCES"
+ __space_type__ = 'USER_PREFERENCES'
__label__ = "File Paths"
__show_header__ = False
@@ -359,6 +365,9 @@ class USERPREF_PT_filepaths(bpy.types.Panel):
sub2.itemL(text="Save & Load:")
sub2.itemR(paths, "use_relative_paths")
sub2.itemR(paths, "compress_file")
+ sub2.itemR(paths, "load_ui")
+ sub2.itemS()
+ sub2.itemS()
sub2.itemL(text="Auto Save:")
sub2.itemR(paths, "save_version")
sub2.itemR(paths, "recent_files")
@@ -366,10 +375,10 @@ class USERPREF_PT_filepaths(bpy.types.Panel):
sub2.itemR(paths, "auto_save_temporary_files")
sub3 = sub2.column()
sub3.enabled = paths.auto_save_temporary_files
- sub3.itemR(paths, "auto_save_time")
+ sub3.itemR(paths, "auto_save_time", text="Timer (mins)")
class USERPREF_PT_language(bpy.types.Panel):
- __space_type__ = "USER_PREFERENCES"
+ __space_type__ = 'USER_PREFERENCES'
__label__ = "Language"
__show_header__ = False
@@ -387,24 +396,16 @@ class USERPREF_PT_language(bpy.types.Panel):
col = split.column()
col.itemR(lan, "language")
- col.itemR(lan, "translate_tooltips")
- col.itemR(lan, "translate_buttons")
- col.itemR(lan, "translate_toolbox")
+ col.itemL(text="Translate:")
+ col.itemR(lan, "translate_tooltips", text="Tooltips")
+ col.itemR(lan, "translate_buttons", text="Labels")
+ col.itemR(lan, "translate_toolbox", text="Toolbox")
+ col.itemS()
+ col.itemS()
col.itemR(lan, "use_textured_fonts")
-class USERPREF_PT_bottombar(bpy.types.Panel):
- __space_type__ = "USER_PREFERENCES"
- __label__ = " "
- __show_header__ = False
-
- def draw(self, context):
- layout = self.layout
- userpref = context.user_preferences
-
- split = layout.split(percentage=0.8)
- split.itemL(text="")
- layout.operator_context = "EXEC_AREA"
- split.itemO("wm.save_homefile", text="Save As Default")
+ col = split.column()
+
bpy.types.register(USERPREF_HT_header)
bpy.types.register(USERPREF_MT_view)
@@ -414,5 +415,4 @@ bpy.types.register(USERPREF_PT_edit)
bpy.types.register(USERPREF_PT_system)
bpy.types.register(USERPREF_PT_filepaths)
bpy.types.register(USERPREF_PT_language)
-bpy.types.register(USERPREF_PT_bottombar)
diff --git a/release/ui/space_view3d.py b/release/ui/space_view3d.py
index 44b1c82ff46..bc133cbff48 100644
--- a/release/ui/space_view3d.py
+++ b/release/ui/space_view3d.py
@@ -4,7 +4,7 @@ import bpy
# ********** Header **********
class VIEW3D_HT_header(bpy.types.Header):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
def draw(self, context):
layout = self.layout
@@ -12,6 +12,7 @@ class VIEW3D_HT_header(bpy.types.Header):
view = context.space_data
mode_string = context.mode
edit_object = context.edit_object
+ object = context.active_object
row = layout.row(align=True)
row.template_header()
@@ -23,32 +24,63 @@ class VIEW3D_HT_header(bpy.types.Header):
sub.itemM("VIEW3D_MT_view")
# Select Menu
- if mode_string not in ('EDIT_TEXT', 'SCULPT', 'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE', 'PARTICLE'):
- # XXX: Particle Mode has Select Menu.
+ if mode_string not in ('EDIT_TEXT', 'SCULPT', 'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'):
sub.itemM("VIEW3D_MT_select_%s" % mode_string)
- if mode_string == 'OBJECT':
- sub.itemM("VIEW3D_MT_object")
- elif mode_string == 'SCULPT':
- sub.itemM("VIEW3D_MT_sculpt")
- elif edit_object:
+ if edit_object:
sub.itemM("VIEW3D_MT_edit_%s" % edit_object.type)
+ elif object:
+ ob_mode_string = object.mode
+
+ if mode_string not in ['PAINT_WEIGHT', 'PAINT_TEXTURE']:
+ sub.itemM("VIEW3D_MT_%s" % mode_string)
layout.template_header_3D()
# ********** Menu **********
+# ********** Utilities **********
+
+class VIEW3D_MT_showhide(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Show/Hide"
+ _operator_name = ""
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.itemO("%s.reveal" % self._operator_name, text="Show Hidden")
+ layout.itemO("%s.hide" % self._operator_name, text="Hide Selected")
+ layout.item_booleanO("%s.hide" % self._operator_name, "unselected", True, text="Hide Unselected")
+
+class VIEW3D_MT_snap(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Snap"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.itemO("view3d.snap_selected_to_grid", text="Selection to Grid")
+ layout.itemO("view3d.snap_selected_to_cursor", text="Selection to Cursor")
+ layout.itemO("view3d.snap_selected_to_center", text="Selection to Center")
+
+ layout.itemS()
+
+ layout.itemO("view3d.snap_cursor_to_selected", text="Cursor to Selected")
+ layout.itemO("view3d.snap_cursor_to_grid", text="Cursor to Grid")
+ layout.itemO("view3d.snap_cursor_to_active", text="Cursor to Active")
+
# ********** View menus **********
class VIEW3D_MT_view(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "View"
def draw(self, context):
layout = self.layout
- layout.itemO("view3d.properties", icon="ICON_MENU_PANEL")
- layout.itemO("view3d.toolbar", icon="ICON_MENU_PANEL")
+ layout.itemO("view3d.properties", icon='ICON_MENU_PANEL')
+ layout.itemO("view3d.toolbar", icon='ICON_MENU_PANEL')
layout.itemS()
@@ -57,32 +89,23 @@ class VIEW3D_MT_view(bpy.types.Menu):
layout.item_enumO("view3d.viewnumpad", "type", 'FRONT')
layout.item_enumO("view3d.viewnumpad", "type", 'RIGHT')
- # layout.itemM("VIEW3D_MT_view_cameras", text="Cameras")
+ layout.itemM("VIEW3D_MT_view_cameras", text="Cameras")
layout.itemS()
-
+
layout.itemO("view3d.view_persportho")
layout.itemS()
- # layout.itemO("view3d.view_show_all_layers")
-
- # layout.itemS()
-
- # layout.itemO("view3d.view_local_view")
- # layout.itemO("view3d.view_global_view")
-
- # layout.itemS()
-
layout.itemM("VIEW3D_MT_view_navigation")
- # layout.itemM("VIEW3D_MT_view_align", text="Align View")
+ layout.itemM("VIEW3D_MT_view_align")
layout.itemS()
layout.operator_context = "INVOKE_REGION_WIN"
-
- layout.itemO("view3d.clip_border")
- layout.itemO("view3d.zoom_border")
+
+ layout.itemO("view3d.clip_border", text="Clipping Border...")
+ layout.itemO("view3d.zoom_border", text="Zoom Border...")
layout.itemS()
@@ -93,17 +116,14 @@ class VIEW3D_MT_view(bpy.types.Menu):
layout.itemO("screen.region_foursplit", text="Toggle Quad View")
layout.itemO("screen.screen_full_area", text="Toggle Full Screen")
-
+
class VIEW3D_MT_view_navigation(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Navigation"
def draw(self, context):
layout = self.layout
- # layout.itemO("view3d.view_fly_mode")
- # layout.itemS()
-
layout.items_enumO("view3d.view_orbit", "type")
layout.itemS()
@@ -115,10 +135,26 @@ class VIEW3D_MT_view_navigation(bpy.types.Menu):
layout.item_floatO("view3d.zoom", "delta", 1.0, text="Zoom In")
layout.item_floatO("view3d.zoom", "delta", -1.0, text="Zoom Out")
+class VIEW3D_MT_view_align(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Align View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.itemO("view3d.view_center")
+
+class VIEW3D_MT_view_cameras(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Cameras"
+
+ def draw(self, context):
+ layout = self.layout
+
# ********** Select menus, suffix from context.mode **********
class VIEW3D_MT_select_OBJECT(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
@@ -131,24 +167,26 @@ class VIEW3D_MT_select_OBJECT(bpy.types.Menu):
layout.itemO("object.select_all_toggle", text="Select/Deselect All")
layout.itemO("object.select_inverse", text="Inverse")
layout.itemO("object.select_random", text="Random")
+ layout.itemO("object.select_mirror", text="Mirror")
layout.itemO("object.select_by_layer", text="Select All by Layer")
- layout.item_enumO("object.select_by_type", "type", "", text="Select All by Type")
- layout.itemO("object.select_grouped", text="Select Grouped")
+ layout.item_enumO("object.select_by_type", "type", "", text="Select All by Type...")
+ layout.itemO("object.select_grouped", text="Select Grouped...")
class VIEW3D_MT_select_POSE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
layout = self.layout
- layout.itemO("view3d.select_border")
+ layout.itemO("view3d.select_border", text="Border Select...")
layout.itemS()
layout.itemO("pose.select_all_toggle", text="Select/Deselect All")
layout.itemO("pose.select_inverse", text="Inverse")
layout.itemO("pose.select_constraint_target", text="Constraint Target")
+ layout.itemO("pose.select_linked", text="Linked")
layout.itemS()
@@ -157,10 +195,16 @@ class VIEW3D_MT_select_POSE(bpy.types.Menu):
layout.itemS()
- layout.view3d_select_posemenu()
+ props = layout.itemO("pose.select_hierarchy", properties=True, text="Extend Parent")
+ props.extend = True
+ props.direction = 'PARENT'
+
+ props = layout.itemO("pose.select_hierarchy", properties=True, text="Extend Child")
+ props.extend = True
+ props.direction = 'CHILD'
class VIEW3D_MT_select_PARTICLE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
@@ -175,20 +219,17 @@ class VIEW3D_MT_select_PARTICLE(bpy.types.Menu):
layout.itemS()
- #layout.itemO("particle.select_last")
- #layout.itemO("particle.select_first")
-
layout.itemO("particle.select_more")
layout.itemO("particle.select_less")
class VIEW3D_MT_select_EDIT_MESH(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
layout = self.layout
- layout.itemO("view3d.select_border")
+ layout.itemO("view3d.select_border", text="Border Select...")
layout.itemS()
@@ -226,14 +267,14 @@ class VIEW3D_MT_select_EDIT_MESH(bpy.types.Menu):
layout.itemO("mesh.region_to_loop")
class VIEW3D_MT_select_EDIT_CURVE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
layout = self.layout
- layout.itemO("view3d.select_border")
- layout.itemO("view3d.select_circle")
+ layout.itemO("view3d.select_border", text="Border Select...")
+ layout.itemO("view3d.select_circle", text="Circle Select...")
layout.itemS()
@@ -255,14 +296,14 @@ class VIEW3D_MT_select_EDIT_CURVE(bpy.types.Menu):
layout.itemO("curve.select_less")
class VIEW3D_MT_select_EDIT_SURFACE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
layout = self.layout
- layout.itemO("view3d.select_border")
- layout.itemO("view3d.select_circle")
+ layout.itemO("view3d.select_border", text="Border Select...")
+ layout.itemO("view3d.select_circle", text="Circle Select...")
layout.itemS()
@@ -281,7 +322,7 @@ class VIEW3D_MT_select_EDIT_SURFACE(bpy.types.Menu):
layout.itemO("curve.select_less")
class VIEW3D_MT_select_EDIT_METABALL(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
@@ -291,15 +332,15 @@ class VIEW3D_MT_select_EDIT_METABALL(bpy.types.Menu):
layout.itemS()
- layout.itemL(text="Select/Deselect All")
- layout.itemL(text="Inverse")
+ layout.itemO("mball.select_deselect_all_metaelems")
+ layout.itemO("mball.select_inverse_metaelems")
layout.itemS()
- layout.itemL(text="Random")
+ layout.itemO("mball.select_random_metaelems")
class VIEW3D_MT_select_EDIT_LATTICE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
@@ -312,13 +353,13 @@ class VIEW3D_MT_select_EDIT_LATTICE(bpy.types.Menu):
layout.itemO("lattice.select_all_toggle", text="Select/Deselect All")
class VIEW3D_MT_select_EDIT_ARMATURE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
layout = self.layout
- layout.itemO("view3d.select_border")
+ layout.itemO("view3d.select_border", text="Border Select...")
layout.itemS()
@@ -327,15 +368,21 @@ class VIEW3D_MT_select_EDIT_ARMATURE(bpy.types.Menu):
layout.itemS()
- layout.item_enumO("armature.select_hierarchy", "direction", 'PARENT')
- layout.item_enumO("armature.select_hierarchy", "direction", 'CHILD')
+ layout.item_enumO("armature.select_hierarchy", "direction", 'PARENT', text="Parent")
+ layout.item_enumO("armature.select_hierarchy", "direction", 'CHILD', text="Child")
layout.itemS()
- layout.view3d_select_armaturemenu()
+ props = layout.itemO("armature.select_hierarchy", properties=True, text="Extend Parent")
+ props.extend = True
+ props.direction = 'PARENT'
+
+ props = layout.itemO("armature.select_hierarchy", properties=True, text="Extend Child")
+ props.extend = True
+ props.direction = 'CHILD'
class VIEW3D_MT_select_FACE(bpy.types.Menu):# XXX no matching enum
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Select"
def draw(self, context):
@@ -345,35 +392,35 @@ class VIEW3D_MT_select_FACE(bpy.types.Menu):# XXX no matching enum
# ********** Object menu **********
-class VIEW3D_MT_object(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+class VIEW3D_MT_OBJECT(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
__context__ = "objectmode"
__label__ = "Object"
def draw(self, context):
layout = self.layout
- layout.itemM("VIEW3D_MT_object_clear")
- layout.itemM("VIEW3D_MT_object_snap")
+ layout.itemM("VIEW3D_MT_OBJECT_clear")
+ layout.itemM("VIEW3D_MT_snap")
layout.itemS()
- layout.itemO("anim.insert_keyframe_menu")
- layout.itemO("anim.delete_keyframe_v3d")
+ layout.itemO("anim.insert_keyframe_menu", text="Insert Keyframe...")
+ layout.itemO("anim.delete_keyframe_v3d", text="Delete Keyframe...")
layout.itemS()
layout.itemO("object.duplicate")
layout.item_booleanO("object.duplicate", "linked", True, text="Duplicate Linked")
- layout.itemO("object.delete")
- layout.itemO("object.proxy_make")
+ layout.itemO("object.delete", text="Delete...")
+ layout.itemO("object.proxy_make", text="Make Proxy...")
layout.itemS()
- layout.itemM("VIEW3D_MT_object_parent")
- layout.itemM("VIEW3D_MT_object_track")
- layout.itemM("VIEW3D_MT_object_group")
- layout.itemM("VIEW3D_MT_object_constraints")
+ layout.itemM("VIEW3D_MT_OBJECT_parent")
+ layout.itemM("VIEW3D_MT_OBJECT_track")
+ layout.itemM("VIEW3D_MT_OBJECT_group")
+ layout.itemM("VIEW3D_MT_OBJECT_constraints")
layout.itemS()
@@ -381,59 +428,42 @@ class VIEW3D_MT_object(bpy.types.Menu):
layout.itemS()
- layout.itemM("VIEW3D_MT_object_show")
+ layout.itemM("VIEW3D_MT_OBJECT_showhide")
-class VIEW3D_MT_object_clear(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+class VIEW3D_MT_OBJECT_clear(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
__label__ = "Clear"
def draw(self, context):
layout = self.layout
- layout.itemO("object.location_clear")
- layout.itemO("object.rotation_clear")
- layout.itemO("object.scale_clear")
- layout.itemO("object.origin_clear")
-
-class VIEW3D_MT_object_snap(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
- __label__ = "Snap"
-
- def draw(self, context):
- layout = self.layout
-
- layout.itemO("view3d.snap_selected_to_grid")
- layout.itemO("view3d.snap_selected_to_cursor")
- layout.itemO("view3d.snap_selected_to_center")
-
- layout.itemS()
-
- layout.itemO("view3d.snap_cursor_to_selected")
- layout.itemO("view3d.snap_cursor_to_grid")
- layout.itemO("view3d.snap_cursor_to_active")
+ layout.itemO("object.location_clear", text="Location")
+ layout.itemO("object.rotation_clear", text="Rotation")
+ layout.itemO("object.scale_clear", text="Scale")
+ layout.itemO("object.origin_clear", text="Origin")
-class VIEW3D_MT_object_parent(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+class VIEW3D_MT_OBJECT_parent(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
__label__ = "Parent"
def draw(self, context):
layout = self.layout
- layout.itemO("object.parent_set")
- layout.itemO("object.parent_clear")
+ layout.itemO("object.parent_set", text="Set")
+ layout.itemO("object.parent_clear", text="Clear")
-class VIEW3D_MT_object_track(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+class VIEW3D_MT_OBJECT_track(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
__label__ = "Track"
def draw(self, context):
layout = self.layout
- layout.itemO("object.track_set")
- layout.itemO("object.track_clear")
+ layout.itemO("object.track_set", text="Set")
+ layout.itemO("object.track_clear", text="Clear")
-class VIEW3D_MT_object_group(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+class VIEW3D_MT_OBJECT_group(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
__label__ = "Group"
def draw(self, context):
@@ -447,8 +477,8 @@ class VIEW3D_MT_object_group(bpy.types.Menu):
layout.itemO("group.objects_add_active")
layout.itemO("group.objects_remove_active")
-class VIEW3D_MT_object_constraints(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+class VIEW3D_MT_OBJECT_constraints(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
__label__ = "Constraints"
def draw(self, context):
@@ -457,21 +487,36 @@ class VIEW3D_MT_object_constraints(bpy.types.Menu):
layout.itemO("object.constraint_add_with_targets")
layout.itemO("object.constraints_clear")
-class VIEW3D_MT_object_show(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+class VIEW3D_MT_OBJECT_showhide(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
__label__ = "Show/Hide"
def draw(self, context):
layout = self.layout
- layout.itemO("object.restrictview_clear")
- layout.itemO("object.restrictview_set")
+ layout.itemO("object.restrictview_clear", text="Show Hidden")
+ layout.itemO("object.restrictview_set", text="Hide Selected")
layout.item_booleanO("object.restrictview_set", "unselected", True, text="Hide Unselected")
+# ********** Vertex paint menu **********
+
+class VIEW3D_MT_PAINT_VERTEX(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Paint"
+
+ def draw(self, context):
+ layout = self.layout
+
+ sculpt = context.tool_settings.sculpt
+
+ layout.itemO("paint.vertex_color_set")
+ props = layout.itemO("paint.vertex_color_set", text="Set Selected Vertex Colors", properties=True)
+ props.selected = True
+
# ********** Sculpt menu **********
-class VIEW3D_MT_sculpt(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+class VIEW3D_MT_SCULPT(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
__label__ = "Sculpt"
def draw(self, context):
@@ -504,28 +549,181 @@ class VIEW3D_MT_sculpt(bpy.types.Menu):
layout.itemR(brush, "persistent")
layout.itemO("sculpt.set_persistent_base")
-# ********** Edit Menus, suffix from ob.type **********
+# ********** Particle menu **********
+
+class VIEW3D_MT_PARTICLE(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Particle"
-class VIEW3D_MT_edit_snap(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
- __label__ = "Snap"
+ def draw(self, context):
+ layout = self.layout
+
+ particle_edit = context.tool_settings.particle_edit
+
+ layout.itemO("particle.mirror")
+
+ layout.itemS()
+
+ layout.itemO("particle.remove_doubles")
+ layout.itemO("particle.delete")
+
+ if particle_edit.selection_mode == 'POINT':
+ layout.itemO("particle.subdivide")
+
+ layout.itemO("particle.rekey")
+
+ layout.itemS()
+
+ layout.itemM("VIEW3D_MT_PARTICLE_showhide")
+
+class VIEW3D_MT_PARTICLE_showhide(VIEW3D_MT_showhide):
+ _operator_name = "particle"
+
+# ********** Pose Menu **********
+
+class VIEW3D_MT_POSE(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Pose"
def draw(self, context):
layout = self.layout
- layout.itemO("view3d.snap_selected_to_grid")
- layout.itemO("view3d.snap_selected_to_cursor")
- layout.itemO("view3d.snap_selected_to_center")
+ arm = context.active_object.data
+
+ if arm.drawtype in ('BBONE', 'ENVELOPE'):
+ layout.item_enumO("tfm.transform", "mode", 'BONESIZE', text="Scale Envelope Distance")
+
+ layout.itemM("VIEW3D_MT_POSE_transform")
+
+ layout.itemS()
+
+ layout.itemO("anim.insert_keyframe_menu", text="Insert Keyframe...")
+ layout.itemO("anim.delete_keyframe_v3d", text="Delete Keyframe...")
+
+ layout.itemS()
+
+ layout.itemO("pose.apply")
+
+ layout.itemS()
+
+ layout.itemO("pose.copy")
+ layout.itemO("pose.paste")
+ layout.item_booleanO("pose.paste", "flipped", True, text="Paste X-Flipped Pose")
+
+ layout.itemS()
+
+ layout.itemM("VIEW3D_MT_POSE_pose")
+ layout.itemM("VIEW3D_MT_POSE_motion")
+ layout.itemM("VIEW3D_MT_POSE_group")
layout.itemS()
- layout.itemO("view3d.snap_cursor_to_selected")
- layout.itemO("view3d.snap_cursor_to_grid")
- layout.itemO("view3d.snap_cursor_to_active")
+ layout.itemM("VIEW3D_MT_POSE_ik")
+ layout.itemM("VIEW3D_MT_POSE_constraints")
+
+ layout.itemS()
+
+ layout.operator_context = "EXEC_AREA"
+ layout.item_enumO("pose.autoside_names", "axis", 'XAXIS', text="AutoName Left/Right")
+ layout.item_enumO("pose.autoside_names", "axis", 'YAXIS', text="AutoName Front/Back")
+ layout.item_enumO("pose.autoside_names", "axis", 'ZAXIS', text="AutoName Top/Bottom")
+
+ layout.itemO("pose.flip_names")
+
+ layout.itemS()
+
+ layout.operator_context = "INVOKE_AREA"
+ layout.itemO("pose.armature_layers", text="Change Armature Layers...")
+ layout.itemO("pose.bone_layers", text="Change Bone Layers...")
+
+ layout.itemS()
+
+ layout.itemM("VIEW3D_MT_POSE_showhide")
+ layout.item_menu_enumO("pose.flags_set", 'mode', text="Bone Settings")
+
+class VIEW3D_MT_POSE_transform(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Clear Transform"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.itemL(text="User Transform")
+
+ layout.itemO("pose.loc_clear", text="Location")
+ layout.itemO("pose.rot_clear", text="Rotation")
+ layout.itemO("pose.scale_clear", text="Scale")
+
+ layout.itemL(text="Origin")
+
+class VIEW3D_MT_POSE_pose(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Pose Library"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.itemO("poselib.browse_interactive", text="Browse Poses...")
+
+ layout.itemS()
+
+ layout.itemO("poselib.pose_add", text="Add Pose...")
+ layout.itemO("poselib.pose_rename", text="Rename Pose...")
+ layout.itemO("poselib.pose_remove", text="Remove Pose...")
+
+class VIEW3D_MT_POSE_motion(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Motion Paths"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.itemO("pose.paths_calculate", text="Calculate")
+ layout.itemO("pose.paths_clear", text="Clear")
+
+class VIEW3D_MT_POSE_group(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Bone Groups"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.itemO("pose.group_add")
+ layout.itemO("pose.group_remove")
+
+ layout.itemS()
+
+ layout.itemO("pose.group_assign")
+ layout.itemO("pose.group_unassign")
+
+
+class VIEW3D_MT_POSE_ik(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Inverse Kinematics"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.itemO("pose.ik_add")
+ layout.itemO("pose.ik_clear")
+
+class VIEW3D_MT_POSE_constraints(bpy.types.Menu):
+ __space_type__ = 'VIEW_3D'
+ __label__ = "Constraints"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.itemO("pose.constraint_add_with_targets", text="Add (With Targets)...")
+ layout.itemO("pose.constraints_clear")
+
+class VIEW3D_MT_POSE_showhide(VIEW3D_MT_showhide):
+ _operator_name = "pose"
+
+# ********** Edit Menus, suffix from ob.type **********
# Edit MESH
class VIEW3D_MT_edit_MESH(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Mesh"
def draw(self, context):
@@ -538,17 +736,17 @@ class VIEW3D_MT_edit_MESH(bpy.types.Menu):
layout.itemS()
- layout.itemM("VIEW3D_MT_edit_snap")
+ layout.itemM("VIEW3D_MT_snap")
layout.itemS()
- layout.itemO("uv.mapping_menu")
+ layout.itemO("uv.mapping_menu", text="UV Unwrap...")
layout.itemS()
layout.itemO("mesh.extrude")
layout.itemO("mesh.duplicate")
- layout.itemO("mesh.delete")
+ layout.itemO("mesh.delete", text="Delete...")
layout.itemS()
@@ -568,7 +766,7 @@ class VIEW3D_MT_edit_MESH(bpy.types.Menu):
layout.itemM("VIEW3D_MT_edit_MESH_showhide")
class VIEW3D_MT_edit_MESH_vertices(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Vertices"
def draw(self, context):
@@ -583,9 +781,9 @@ class VIEW3D_MT_edit_MESH_vertices(bpy.types.Menu):
layout.itemO("mesh.vertices_smooth")
layout.itemO("mesh.remove_doubles")
-
+
class VIEW3D_MT_edit_MESH_edges(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Edges"
def draw(self, context):
@@ -593,7 +791,6 @@ class VIEW3D_MT_edit_MESH_edges(bpy.types.Menu):
layout.itemO("mesh.edge_face_add")
layout.itemO("mesh.subdivide")
- layout.item_floatO("mesh.subdivide", "smoothness", 1.0, text="Subdivide Smooth")
layout.itemS()
@@ -609,9 +806,9 @@ class VIEW3D_MT_edit_MESH_edges(bpy.types.Menu):
layout.item_enumO("mesh.edge_rotate", "direction", 'CW', text="Rotate Edge CW")
layout.item_enumO("mesh.edge_rotate", "direction", 'CCW', text="Rotate Edge CCW")
-
+
class VIEW3D_MT_edit_MESH_faces(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Faces"
def draw(self, context):
@@ -633,7 +830,7 @@ class VIEW3D_MT_edit_MESH_faces(bpy.types.Menu):
layout.itemO("mesh.faces_shade_flat")
class VIEW3D_MT_edit_MESH_normals(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Normals"
def draw(self, context):
@@ -646,16 +843,8 @@ class VIEW3D_MT_edit_MESH_normals(bpy.types.Menu):
layout.itemO("mesh.flip_normals")
-class VIEW3D_MT_edit_MESH_showhide(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
- __label__ = "Show/Hide"
-
- def draw(self, context):
- layout = self.layout
-
- layout.itemO("mesh.reveal")
- layout.itemO("mesh.hide")
- layout.item_booleanO("mesh.hide", "unselected", True, text="Hide Unselected")
+class VIEW3D_MT_edit_MESH_showhide(VIEW3D_MT_showhide):
+ _operator_name = "mesh"
# Edit CURVE
@@ -664,8 +853,8 @@ def draw_CURVE(self, context):
layout = self.layout
settings = context.tool_settings
-
- layout.itemM("VIEW3D_MT_edit_snap")
+
+ layout.itemM("VIEW3D_MT_snap")
layout.itemS()
@@ -674,7 +863,7 @@ def draw_CURVE(self, context):
layout.itemO("curve.separate")
layout.itemO("curve.make_segment")
layout.itemO("curve.cyclic_toggle")
- layout.itemO("curve.delete")
+ layout.itemO("curve.delete", text="Delete...")
layout.itemS()
@@ -691,13 +880,13 @@ def draw_CURVE(self, context):
layout.itemM("VIEW3D_MT_edit_CURVE_showhide")
class VIEW3D_MT_edit_CURVE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Curve"
draw = draw_CURVE
class VIEW3D_MT_edit_CURVE_ctrlpoints(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Control Points"
def draw(self, context):
@@ -715,7 +904,7 @@ class VIEW3D_MT_edit_CURVE_ctrlpoints(bpy.types.Menu):
layout.item_menu_enumO("curve.handle_type_set", "type")
class VIEW3D_MT_edit_CURVE_segments(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Segments"
def draw(self, context):
@@ -724,27 +913,19 @@ class VIEW3D_MT_edit_CURVE_segments(bpy.types.Menu):
layout.itemO("curve.subdivide")
layout.itemO("curve.switch_direction")
-class VIEW3D_MT_edit_CURVE_showhide(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
- __label__ = "Show/Hide"
-
- def draw(self, context):
- layout = self.layout
-
- layout.itemO("curve.reveal")
- layout.itemO("curve.hide")
- layout.item_booleanO("curve.hide", "unselected", True, text="Hide Unselected")
+class VIEW3D_MT_edit_CURVE_showhide(VIEW3D_MT_showhide):
+ _operator_name = "curve"
# Edit SURFACE
class VIEW3D_MT_edit_SURFACE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Surface"
draw = draw_CURVE
# Edit TEXT
class VIEW3D_MT_edit_TEXT(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Text"
def draw(self, context):
@@ -757,7 +938,7 @@ class VIEW3D_MT_edit_TEXT(bpy.types.Menu):
layout.itemM("VIEW3D_MT_edit_TEXT_chars")
class VIEW3D_MT_edit_TEXT_chars(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Special Characters"
def draw(self, context):
@@ -792,7 +973,7 @@ class VIEW3D_MT_edit_TEXT_chars(bpy.types.Menu):
# Edit META
class VIEW3D_MT_edit_META(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Metaball"
def draw(self, context):
@@ -805,11 +986,11 @@ class VIEW3D_MT_edit_META(bpy.types.Menu):
layout.itemS()
- layout.itemM("VIEW3D_MT_edit_snap")
+ layout.itemM("VIEW3D_MT_snap")
layout.itemS()
- layout.itemO("mball.delete_metaelems")
+ layout.itemO("mball.delete_metaelems", text="Delete...")
layout.itemO("mball.duplicate_metaelems")
layout.itemS()
@@ -822,19 +1003,19 @@ class VIEW3D_MT_edit_META(bpy.types.Menu):
layout.itemM("VIEW3D_MT_edit_META_showhide")
class VIEW3D_MT_edit_META_showhide(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Show/Hide"
def draw(self, context):
layout = self.layout
- layout.itemO("mball.reveal_metaelems")
- layout.itemO("mball.hide_metaelems")
+ layout.itemO("mball.reveal_metaelems", text="Show Hidden")
+ layout.itemO("mball.hide_metaelems", text="Hide Selected")
layout.item_booleanO("mball.hide_metaelems", "unselected", True, text="Hide Unselected")
# Edit LATTICE
class VIEW3D_MT_edit_LATTICE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Lattice"
def draw(self, context):
@@ -842,7 +1023,7 @@ class VIEW3D_MT_edit_LATTICE(bpy.types.Menu):
settings = context.tool_settings
- layout.itemM("VIEW3D_MT_edit_snap")
+ layout.itemM("VIEW3D_MT_snap")
layout.itemS()
@@ -855,7 +1036,7 @@ class VIEW3D_MT_edit_LATTICE(bpy.types.Menu):
# Edit ARMATURE
class VIEW3D_MT_edit_ARMATURE(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Armature"
def draw(self, context):
@@ -864,7 +1045,7 @@ class VIEW3D_MT_edit_ARMATURE(bpy.types.Menu):
edit_object = context.edit_object
arm = edit_object.data
- layout.itemM("VIEW3D_MT_edit_snap")
+ layout.itemM("VIEW3D_MT_snap")
layout.itemM("VIEW3D_MT_edit_ARMATURE_roll")
if arm.drawtype == 'ENVELOPE':
@@ -887,18 +1068,19 @@ class VIEW3D_MT_edit_ARMATURE(bpy.types.Menu):
layout.itemS()
- layout.itemO("armature.subdivide_simple")
- layout.itemO("armature.subdivide_multi")
+ layout.itemO("armature.subdivide_multi", text="Subdivide")
layout.itemS()
-
- layout.item_enumO("armature.autoside_names", "axis", 'XAXIS', text="AutoName Left/Right")
- layout.item_enumO("armature.autoside_names", "axis", 'YAXIS', text="AutoName Front/Back")
- layout.item_enumO("armature.autoside_names", "axis", 'ZAXIS', text="AutoName Top/Bottom")
+
+ layout.operator_context = "EXEC_AREA"
+ layout.item_enumO("armature.autoside_names", "type", 'XAXIS', text="AutoName Left/Right")
+ layout.item_enumO("armature.autoside_names", "type", 'YAXIS', text="AutoName Front/Back")
+ layout.item_enumO("armature.autoside_names", "type", 'ZAXIS', text="AutoName Top/Bottom")
layout.itemO("armature.flip_names")
layout.itemS()
-
+
+ layout.operator_context = "INVOKE_DEFAULT"
layout.itemO("armature.armature_layers")
layout.itemO("armature.bone_layers")
@@ -907,21 +1089,21 @@ class VIEW3D_MT_edit_ARMATURE(bpy.types.Menu):
layout.itemM("VIEW3D_MT_edit_ARMATURE_parent")
layout.itemS()
-
+
layout.item_menu_enumO("armature.flags_set", "mode", text="Bone Settings")
class VIEW3D_MT_edit_ARMATURE_parent(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Parent"
def draw(self, context):
layout = self.layout
- layout.itemO("armature.parent_set")
- layout.itemO("armature.parent_clear")
+ layout.itemO("armature.parent_set", text="Make")
+ layout.itemO("armature.parent_clear", text="Clear")
class VIEW3D_MT_edit_ARMATURE_roll(bpy.types.Menu):
- __space_type__ = "VIEW_3D"
+ __space_type__ = 'VIEW_3D'
__label__ = "Bone Roll"
def draw(self, context):
@@ -937,8 +1119,8 @@ class VIEW3D_MT_edit_ARMATURE_roll(bpy.types.Menu):
# ********** Panel **********
class VIEW3D_PT_3dview_properties(bpy.types.Panel):
- __space_type__ = "VIEW_3D"
- __region_type__ = "UI"
+ __space_type__ = 'VIEW_3D'
+ __region_type__ = 'UI'
__label__ = "View"
def poll(self, context):
@@ -969,8 +1151,8 @@ class VIEW3D_PT_3dview_properties(bpy.types.Panel):
layout.column().itemR(scene, "cursor_location", text="3D Cursor:")
class VIEW3D_PT_3dview_display(bpy.types.Panel):
- __space_type__ = "VIEW_3D"
- __region_type__ = "UI"
+ __space_type__ = 'VIEW_3D'
+ __region_type__ = 'UI'
__label__ = "Display"
def poll(self, context):
@@ -999,10 +1181,67 @@ class VIEW3D_PT_3dview_display(bpy.types.Panel):
col.itemR(view, "lock_rotation")
col.itemR(view, "box_preview")
col.itemR(view, "box_clip")
+
+class VIEW3D_PT_3dview_meshdisplay(bpy.types.Panel):
+ __space_type__ = 'VIEW_3D'
+ __region_type__ = 'UI'
+ __label__ = "Mesh Display"
+
+ def poll(self, context):
+ editmesh = context.mode == 'EDIT_MESH'
+ return (editmesh)
+
+ def draw(self, context):
+ layout = self.layout
+
+ mesh = context.active_object.data
+
+ col = layout.column()
+ col.itemL(text="Overlays:")
+ col.itemR(mesh, "draw_edges", text="Edges")
+ col.itemR(mesh, "draw_faces", text="Faces")
+ col.itemR(mesh, "draw_creases", text="Creases")
+ col.itemR(mesh, "draw_bevel_weights", text="Bevel Weights")
+ col.itemR(mesh, "draw_seams", text="Seams")
+ col.itemR(mesh, "draw_sharp", text="Sharp")
+
+ col.itemS()
+ col.itemL(text="Normals:")
+ col.itemR(mesh, "draw_normals", text="Face")
+ col.itemR(mesh, "draw_vertex_normals", text="Vertex")
+ col.itemR(context.scene.tool_settings, "normal_size", text="Normal Size")
+
+ col.itemS()
+ col.itemL(text="Numerics:")
+ col.itemR(mesh, "draw_edge_lenght")
+ col.itemR(mesh, "draw_edge_angle")
+ col.itemR(mesh, "draw_face_area")
+
+
+class VIEW3D_PT_3dview_curvedisplay(bpy.types.Panel):
+ __space_type__ = 'VIEW_3D'
+ __region_type__ = 'UI'
+ __label__ = "Curve Display"
+
+ def poll(self, context):
+ editmesh = context.mode == 'EDIT_CURVE'
+ return (editmesh)
+
+ def draw(self, context):
+ layout = self.layout
+
+ curve = context.active_object.data
+
+ col = layout.column()
+ col.itemL(text="Overlays:")
+ col.itemR(curve, "draw_handles", text="Handles")
+ col.itemR(curve, "draw_normals", text="Normals")
+ col.itemR(context.scene.tool_settings, "normal_size", text="Normal Size")
+
class VIEW3D_PT_background_image(bpy.types.Panel):
- __space_type__ = "VIEW_3D"
- __region_type__ = "UI"
+ __space_type__ = 'VIEW_3D'
+ __region_type__ = 'UI'
__label__ = "Background Image"
__default_closed__ = True
@@ -1034,13 +1273,15 @@ class VIEW3D_PT_background_image(bpy.types.Panel):
col.itemL(text="Offset:")
col = layout.column(align=True)
- col.itemR(bg, "x_offset", text="X")
- col.itemR(bg, "y_offset", text="Y")
+ col.itemR(bg, "offset_x", text="X")
+ col.itemR(bg, "offset_y", text="Y")
bpy.types.register(VIEW3D_HT_header) # Header
bpy.types.register(VIEW3D_MT_view) #View Menus
bpy.types.register(VIEW3D_MT_view_navigation)
+bpy.types.register(VIEW3D_MT_view_align)
+bpy.types.register(VIEW3D_MT_view_cameras)
bpy.types.register(VIEW3D_MT_select_OBJECT) # Select Menus
bpy.types.register(VIEW3D_MT_select_POSE)
@@ -1053,18 +1294,31 @@ bpy.types.register(VIEW3D_MT_select_EDIT_LATTICE)
bpy.types.register(VIEW3D_MT_select_EDIT_ARMATURE)
bpy.types.register(VIEW3D_MT_select_FACE) # XXX todo
-bpy.types.register(VIEW3D_MT_object) # Object Menu
-bpy.types.register(VIEW3D_MT_object_clear)
-bpy.types.register(VIEW3D_MT_object_snap)
-bpy.types.register(VIEW3D_MT_object_parent)
-bpy.types.register(VIEW3D_MT_object_track)
-bpy.types.register(VIEW3D_MT_object_group)
-bpy.types.register(VIEW3D_MT_object_constraints)
-bpy.types.register(VIEW3D_MT_object_show)
+bpy.types.register(VIEW3D_MT_OBJECT) # Object Menu
+bpy.types.register(VIEW3D_MT_OBJECT_clear)
+bpy.types.register(VIEW3D_MT_OBJECT_parent)
+bpy.types.register(VIEW3D_MT_OBJECT_track)
+bpy.types.register(VIEW3D_MT_OBJECT_group)
+bpy.types.register(VIEW3D_MT_OBJECT_constraints)
+bpy.types.register(VIEW3D_MT_OBJECT_showhide)
+
+bpy.types.register(VIEW3D_MT_SCULPT) # Sculpt Menu
+
+bpy.types.register(VIEW3D_MT_PAINT_VERTEX)
+
+bpy.types.register(VIEW3D_MT_PARTICLE) # Particle Menu
+bpy.types.register(VIEW3D_MT_PARTICLE_showhide)
-bpy.types.register(VIEW3D_MT_sculpt) # Sculpt Menu
+bpy.types.register(VIEW3D_MT_POSE) # POSE Menu
+bpy.types.register(VIEW3D_MT_POSE_transform)
+bpy.types.register(VIEW3D_MT_POSE_pose)
+bpy.types.register(VIEW3D_MT_POSE_motion)
+bpy.types.register(VIEW3D_MT_POSE_group)
+bpy.types.register(VIEW3D_MT_POSE_ik)
+bpy.types.register(VIEW3D_MT_POSE_constraints)
+bpy.types.register(VIEW3D_MT_POSE_showhide)
-bpy.types.register(VIEW3D_MT_edit_snap) # Edit Menus
+bpy.types.register(VIEW3D_MT_snap) # Edit Menus
bpy.types.register(VIEW3D_MT_edit_MESH)
bpy.types.register(VIEW3D_MT_edit_MESH_vertices)
@@ -1094,4 +1348,6 @@ bpy.types.register(VIEW3D_MT_edit_ARMATURE_roll)
bpy.types.register(VIEW3D_PT_3dview_properties) # Panels
bpy.types.register(VIEW3D_PT_3dview_display)
+bpy.types.register(VIEW3D_PT_3dview_meshdisplay)
+bpy.types.register(VIEW3D_PT_3dview_curvedisplay)
bpy.types.register(VIEW3D_PT_background_image)
diff --git a/release/ui/space_view3d_toolbar.py b/release/ui/space_view3d_toolbar.py
index 1b4c1e25c34..73f97dec750 100644
--- a/release/ui/space_view3d_toolbar.py
+++ b/release/ui/space_view3d_toolbar.py
@@ -2,8 +2,8 @@
import bpy
class View3DPanel(bpy.types.Panel):
- __space_type__ = "VIEW_3D"
- __region_type__ = "TOOLS"
+ __space_type__ = 'VIEW_3D'
+ __region_type__ = 'TOOLS'
# ********** default tools for objectmode ****************
@@ -107,6 +107,7 @@ class VIEW3D_PT_tools_curveedit(View3DPanel):
col.itemO("curve.delete")
col.itemO("curve.cyclic_toggle")
col.itemO("curve.switch_direction")
+ col.itemO("curve.spline_type_set")
layout.itemL(text="Modeling:")
@@ -262,8 +263,8 @@ class VIEW3D_PT_tools_posemode(View3DPanel):
# ********** default tools for paint modes ****************
class PaintPanel(bpy.types.Panel):
- __space_type__ = "VIEW_3D"
- __region_type__ = "TOOLS"
+ __space_type__ = 'VIEW_3D'
+ __region_type__ = 'TOOLS'
def paint_settings(self, context):
ts = context.tool_settings
@@ -333,18 +334,15 @@ class VIEW3D_PT_tools_brush(PaintPanel):
row = col.row(align=True)
row.itemR(brush, "size", slider=True)
- row.itemR(brush, "size_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
+ row.itemR(brush, "size_pressure", toggle=True, text="")
if brush.sculpt_tool != 'GRAB':
row = col.row(align=True)
row.itemR(brush, "strength", slider=True)
- row.itemR(brush, "strength_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
+ row.itemR(brush, "strength_pressure", text="")
col = layout.column()
- if brush.sculpt_tool != 'LAYER':
- col.itemR(brush, "anchored")
-
if brush.sculpt_tool in ('DRAW', 'PINCH', 'INFLATE', 'LAYER', 'CLAY'):
col.itemR(brush, "flip_direction")
@@ -352,8 +350,6 @@ class VIEW3D_PT_tools_brush(PaintPanel):
col.itemR(brush, "persistent")
col.itemO("sculpt.set_persistent_base")
- col.itemR(brush, "rake")
-
col.itemR(brush, "sculpt_tool")
# Texture Paint Mode #
@@ -362,38 +358,21 @@ class VIEW3D_PT_tools_brush(PaintPanel):
col = layout.column(align=True)
col.item_enumR(settings, "tool", 'DRAW')
col.item_enumR(settings, "tool", 'SOFTEN')
- if settings.use_projection:
- col.item_enumR(settings, "tool", 'CLONE')
- else:
- col.item_enumR(settings, "tool", 'SMEAR')
+ col.item_enumR(settings, "tool", 'CLONE')
+ col.item_enumR(settings, "tool", 'SMEAR')
col = layout.column()
col.itemR(brush, "color", text="")
-
+
row = col.row(align=True)
row.itemR(brush, "size", slider=True)
- row.itemR(brush, "size_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
+ row.itemR(brush, "size_pressure", toggle=True, text="")
row = col.row(align=True)
row.itemR(brush, "strength", slider=True)
- row.itemR(brush, "strength_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
-
- row = col.row(align=True)
- row.itemR(brush, "falloff", slider=True)
- row.itemR(brush, "falloff_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
+ row.itemR(brush, "strength_pressure", toggle=True, text="")
- row = col.row(align=True)
- row.itemR(brush, "space", text="")
- rowsub = row.row(align=True)
- rowsub.active = brush.space
- rowsub.itemR(brush, "spacing", text="Spacing", slider=True)
- rowsub.itemR(brush, "spacing_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
-
- col = layout.column()
- col.itemR(brush, "airbrush")
- sub = col.column()
- sub.active = brush.airbrush
- sub.itemR(brush, "rate")
+ col.itemR(brush, "blend")
# Weight Paint Mode #
@@ -403,11 +382,11 @@ class VIEW3D_PT_tools_brush(PaintPanel):
col = layout.column()
row = col.row(align=True)
row.itemR(brush, "size", slider=True)
- row.itemR(brush, "size_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
+ row.itemR(brush, "size_pressure", toggle=True, text="")
row = col.row(align=True)
row.itemR(brush, "strength", slider=True)
- row.itemR(brush, "strength_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
+ row.itemR(brush, "strength_pressure", toggle=True, text="")
# Vertex Paint Mode #
@@ -417,11 +396,11 @@ class VIEW3D_PT_tools_brush(PaintPanel):
row = col.row(align=True)
row.itemR(brush, "size", slider=True)
- row.itemR(brush, "size_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
+ row.itemR(brush, "size_pressure", toggle=True, text="")
row = col.row(align=True)
row.itemR(brush, "strength", slider=True)
- row.itemR(brush, "strength_pressure", toggle=True, icon='ICON_BRUSH_DATA', text="")
+ row.itemR(brush, "strength_pressure", toggle=True, text="")
class VIEW3D_PT_tools_brush_stroke(PaintPanel):
__label__ = "Stroke"
@@ -429,24 +408,41 @@ class VIEW3D_PT_tools_brush_stroke(PaintPanel):
def poll(self, context):
settings = self.paint_settings(context)
- return (settings and settings.brush and context.sculpt_object)
+ return (settings and settings.brush and (context.sculpt_object or
+ context.vertex_paint_object or
+ context.weight_paint_object or
+ context.texture_paint_object))
def draw(self, context):
+ layout = self.layout
+
settings = self.paint_settings(context)
brush = settings.brush
- layout = self.layout
+ texture_paint = context.texture_paint_object
- layout.itemR(brush, "smooth_stroke")
- col = layout.column()
- col.active = brush.smooth_stroke
- col.itemR(brush, "smooth_stroke_radius", text="Radius", slider=True)
- col.itemR(brush, "smooth_stroke_factor", text="Factor", slider=True)
+ if context.sculpt_object:
+ if brush.sculpt_tool != 'LAYER':
+ layout.itemR(brush, "anchored")
+ layout.itemR(brush, "rake")
- layout.itemR(brush, "space")
+ layout.itemR(brush, "airbrush")
col = layout.column()
- col.active = brush.space
- col.itemR(brush, "spacing", text="Distance", slider=True)
+ col.active = brush.airbrush
+ col.itemR(brush, "rate", slider=True)
+
+ if not texture_paint:
+ layout.itemR(brush, "smooth_stroke")
+ col = layout.column()
+ col.active = brush.smooth_stroke
+ col.itemR(brush, "smooth_stroke_radius", text="Radius", slider=True)
+ col.itemR(brush, "smooth_stroke_factor", text="Factor", slider=True)
+ layout.itemR(brush, "space")
+ row = layout.row(align=True)
+ row.active = brush.space
+ row.itemR(brush, "spacing", text="Distance", slider=True)
+ if texture_paint:
+ row.itemR(brush, "spacing_pressure", toggle=True, text="")
class VIEW3D_PT_tools_brush_curve(PaintPanel):
__label__ = "Curve"
@@ -457,9 +453,10 @@ class VIEW3D_PT_tools_brush_curve(PaintPanel):
return (settings and settings.brush and settings.brush.curve)
def draw(self, context):
+ layout = self.layout
+
settings = self.paint_settings(context)
brush = settings.brush
- layout = self.layout
layout.template_curve_mapping(brush.curve)
layout.item_menu_enumO("brush.curve_preset", property="shape")
@@ -472,6 +469,7 @@ class VIEW3D_PT_sculpt_options(PaintPanel):
def draw(self, context):
layout = self.layout
+
sculpt = context.tool_settings.sculpt
col = layout.column()
@@ -500,6 +498,7 @@ class VIEW3D_PT_tools_weightpaint(View3DPanel):
def draw(self, context):
layout = self.layout
+
wpaint = context.tool_settings.weight_paint
col = layout.column()
@@ -527,6 +526,7 @@ class VIEW3D_PT_tools_vertexpaint(View3DPanel):
def draw(self, context):
layout = self.layout
+
vpaint = context.tool_settings.vertex_paint
col = layout.column()
@@ -545,9 +545,17 @@ class VIEW3D_PT_tools_vertexpaint(View3DPanel):
# ********** default tools for texturepaint ****************
-class VIEW3D_PT_tools_texturepaint(View3DPanel):
- __context__ = "texturepaint"
- __label__ = "Options"
+class VIEW3D_PT_tools_projectpaint(View3DPanel):
+ __context__ = "projectpaint"
+ __label__ = "Project Paint"
+
+ def poll(self, context):
+ return context.tool_settings.image_paint.tool != 'SMEAR'
+
+ def draw_header(self, context):
+ layout = self.layout
+ ipaint = context.tool_settings.image_paint
+ layout.itemR(ipaint, "use_projection", text="")
def draw(self, context):
layout = self.layout
@@ -557,7 +565,6 @@ class VIEW3D_PT_tools_texturepaint(View3DPanel):
use_projection= ipaint.use_projection
col = layout.column()
- col.itemR(ipaint, "use_projection")
sub = col.column()
sub.active = use_projection
sub.itemR(ipaint, "use_occlude")
@@ -572,8 +579,7 @@ class VIEW3D_PT_tools_texturepaint(View3DPanel):
col = split.column()
col.active = (ipaint.use_normal_falloff and use_projection)
col.itemR(ipaint, "normal_angle", text="")
-
-
+
split = layout.split(percentage=0.7)
col = split.column(align=False)
@@ -583,8 +589,7 @@ class VIEW3D_PT_tools_texturepaint(View3DPanel):
col = split.column(align=False)
col.active = (use_projection and ipaint.use_stencil_layer)
col.itemR(ipaint, "invert_stencil", text="Inv")
-
-
+
col = layout.column()
sub = col.column()
sub.active = (settings.tool == 'CLONE')
@@ -601,23 +606,60 @@ class VIEW3D_PT_tools_particlemode(View3DPanel):
def draw(self, context):
layout = self.layout
+
pe = context.tool_settings.particle_edit
+ ob = pe.object
+ row = layout.row()
+ row.itemL(text="Edit:")
+ row.itemR(pe, "type", text="")
+
+ if pe.type == 'PARTICLES':
+ if ob.particle_systems:
+ if len(ob.particle_systems) > 1:
+ layout.template_list(ob, "particle_systems", ob, "active_particle_system_index", type='ICONS')
+
+ ptcache = ob.particle_systems[ob.active_particle_system_index].point_cache
+ else:
+ for md in ob.modifiers:
+ if md.type==pe.type:
+ ptcache = md.point_cache
+
+ if ptcache and len(ptcache.point_cache_list) > 1:
+ layout.template_list(ptcache, "point_cache_list", ptcache, "active_point_cache_index", type='ICONS')
+
+
+ if not pe.editable:
+ layout.itemL(text="Point cache must be baked")
+ layout.itemL(text="to enable editing!")
+
col = layout.column(align=True)
- col.itemR(pe, "emitter_deflect", text="Deflect")
- sub = col.row()
- sub.active = pe.emitter_deflect
- sub.itemR(pe, "emitter_distance", text="Distance")
+ if pe.hair:
+ col.active = pe.editable
+ col.itemR(pe, "emitter_deflect", text="Deflect emitter")
+ sub = col.row()
+ sub.active = pe.emitter_deflect
+ sub.itemR(pe, "emitter_distance", text="Distance")
col = layout.column(align=True)
+ col.active = pe.editable
col.itemL(text="Keep:")
col.itemR(pe, "keep_lengths", text="Lenghts")
col.itemR(pe, "keep_root", text="Root")
+ if not pe.hair:
+ col.itemL(text="Correct:")
+ col.itemR(pe, "auto_velocity", text="Velocity")
col = layout.column(align=True)
- col.itemL(text="Display:")
- col.itemR(pe, "show_time", text="Time")
- col.itemR(pe, "show_children", text="Children")
+ col.active = pe.editable
+ col.itemL(text="Draw:")
+ col.itemR(pe, "draw_step", text="Path Steps")
+ if pe.type == 'PARTICLES':
+ col.itemR(pe, "draw_particles", text="Particles")
+ col.itemR(pe, "fade_time")
+ sub = col.row()
+ sub.active = pe.fade_time
+ sub.itemR(pe, "fade_frames", slider=True)
bpy.types.register(VIEW3D_PT_tools_objectmode)
bpy.types.register(VIEW3D_PT_tools_meshedit)
@@ -634,5 +676,5 @@ bpy.types.register(VIEW3D_PT_tools_brush_curve)
bpy.types.register(VIEW3D_PT_sculpt_options)
bpy.types.register(VIEW3D_PT_tools_vertexpaint)
bpy.types.register(VIEW3D_PT_tools_weightpaint)
-bpy.types.register(VIEW3D_PT_tools_texturepaint)
+bpy.types.register(VIEW3D_PT_tools_projectpaint)
bpy.types.register(VIEW3D_PT_tools_particlemode)