forked from bartvdbraak/blender
7459133648
Reviewed by Tom Musgrove and myself. From the patch description: ValterVB on #blendercoders submitted a long list of missing tooltips in Blender, and I went through the list and added all I knew. After that I crowdsourced the rest by putting a spreadsheet on Google docs and having people fill in the missing ones that I didn't know. So if there's some weird tooltip in there that doesn't make sense, that's why. Thanks to Wolter, spacetug and others on BlenderArtists for contributing tooltips.
742 lines
23 KiB
Python
742 lines
23 KiB
Python
# ##### BEGIN GPL LICENSE BLOCK #####
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#
|
|
# ##### END GPL LICENSE BLOCK #####
|
|
|
|
# <pep8 compliant>
|
|
import bpy
|
|
|
|
|
|
class ModifierButtonsPanel():
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "modifier"
|
|
|
|
|
|
class DATA_PT_modifiers(ModifierButtonsPanel, bpy.types.Panel):
|
|
bl_label = "Modifiers"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
ob = context.object
|
|
|
|
layout.operator_menu_enum("object.modifier_add", "type")
|
|
|
|
for md in ob.modifiers:
|
|
box = layout.template_modifier(md)
|
|
if box:
|
|
# match enum type to our functions, avoids a lookup table.
|
|
getattr(self, md.type)(box, ob, md)
|
|
|
|
# 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):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Object:")
|
|
col.prop(md, "object", text="")
|
|
col.prop(md, "use_deform_preserve_volume")
|
|
|
|
col = split.column()
|
|
col.label(text="Bind To:")
|
|
col.prop(md, "use_vertex_groups", text="Vertex Groups")
|
|
col.prop(md, "use_bone_envelopes", text="Bone Envelopes")
|
|
|
|
layout.separator()
|
|
|
|
row = layout.row()
|
|
row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
sub = row.row()
|
|
sub.active = bool(md.vertex_group)
|
|
sub.prop(md, "invert_vertex_group")
|
|
|
|
layout.prop(md, "use_multi_modifier")
|
|
|
|
def ARRAY(self, layout, ob, md):
|
|
layout.prop(md, "fit_type")
|
|
|
|
if md.fit_type == 'FIXED_COUNT':
|
|
layout.prop(md, "count")
|
|
elif md.fit_type == 'FIT_LENGTH':
|
|
layout.prop(md, "fit_length")
|
|
elif md.fit_type == 'FIT_CURVE':
|
|
layout.prop(md, "curve")
|
|
|
|
layout.separator()
|
|
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.prop(md, "use_constant_offset")
|
|
sub = col.column()
|
|
sub.active = md.use_constant_offset
|
|
sub.prop(md, "constant_offset_displace", text="")
|
|
|
|
col.separator()
|
|
|
|
col.prop(md, "use_merge_vertices", text="Merge")
|
|
sub = col.column()
|
|
sub.active = md.use_merge_vertices
|
|
sub.prop(md, "use_merge_vertices_cap", text="First Last")
|
|
sub.prop(md, "merge_threshold", text="Distance")
|
|
|
|
col = split.column()
|
|
col.prop(md, "use_relative_offset")
|
|
sub = col.column()
|
|
sub.active = md.use_relative_offset
|
|
sub.prop(md, "relative_offset_displace", text="")
|
|
|
|
col.separator()
|
|
|
|
col.prop(md, "use_object_offset")
|
|
sub = col.column()
|
|
sub.active = md.use_object_offset
|
|
sub.prop(md, "offset_object", text="")
|
|
|
|
layout.separator()
|
|
|
|
layout.prop(md, "start_cap")
|
|
layout.prop(md, "end_cap")
|
|
|
|
def BEVEL(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
split.prop(md, "width")
|
|
split.prop(md, "use_only_vertices")
|
|
|
|
layout.label(text="Limit Method:")
|
|
layout.row().prop(md, "limit_method", expand=True)
|
|
if md.limit_method == 'ANGLE':
|
|
layout.prop(md, "angle_limit")
|
|
elif md.limit_method == 'WEIGHT':
|
|
layout.row().prop(md, "edge_weight_method", expand=True)
|
|
|
|
def BOOLEAN(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Operation:")
|
|
col.prop(md, "operation", text="")
|
|
|
|
col = split.column()
|
|
col.label(text="Object:")
|
|
col.prop(md, "object", text="")
|
|
|
|
def BUILD(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.prop(md, "frame_start")
|
|
col.prop(md, "frame_duration")
|
|
|
|
col = split.column()
|
|
col.prop(md, "use_random_order")
|
|
sub = col.column()
|
|
sub.active = md.use_random_order
|
|
sub.prop(md, "seed")
|
|
|
|
def CAST(self, layout, ob, md):
|
|
split = layout.split(percentage=0.25)
|
|
|
|
split.label(text="Cast Type:")
|
|
split.prop(md, "cast_type", text="")
|
|
|
|
split = layout.split(percentage=0.25)
|
|
|
|
col = split.column()
|
|
col.prop(md, "use_x")
|
|
col.prop(md, "use_y")
|
|
col.prop(md, "use_z")
|
|
|
|
col = split.column()
|
|
col.prop(md, "factor")
|
|
col.prop(md, "radius")
|
|
col.prop(md, "size")
|
|
col.prop(md, "use_radius_as_size")
|
|
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
col = split.column()
|
|
col.label(text="Control Object:")
|
|
col.prop(md, "object", text="")
|
|
if md.object:
|
|
col.prop(md, "use_transform")
|
|
|
|
def CLOTH(self, layout, ob, md):
|
|
layout.label(text="Settings can be found inside the Physics context")
|
|
|
|
def COLLISION(self, layout, ob, md):
|
|
layout.label(text="Settings can be found inside the Physics context")
|
|
|
|
def CURVE(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Object:")
|
|
col.prop(md, "object", text="")
|
|
col = split.column()
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
layout.label(text="Deformation Axis:")
|
|
layout.row().prop(md, "deform_axis", expand=True)
|
|
|
|
def DECIMATE(self, layout, ob, md):
|
|
layout.prop(md, "ratio")
|
|
layout.label(text="Face Count: %s" % str(md.face_count))
|
|
|
|
def DISPLACE(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Texture:")
|
|
col.template_ID(md, "texture", new="texture.new")
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
col = split.column()
|
|
col.label(text="Direction:")
|
|
col.prop(md, "direction", text="")
|
|
col.label(text="Texture Coordinates:")
|
|
col.prop(md, "texture_coords", text="")
|
|
if md.texture_coords == 'OBJECT':
|
|
layout.prop(md, "texture_coordinate_object", text="Object")
|
|
elif md.texture_coords == 'UV' and ob.type == 'MESH':
|
|
layout.prop_search(md, "uv_layer", ob.data, "uv_textures")
|
|
|
|
layout.separator()
|
|
|
|
row = layout.row()
|
|
row.prop(md, "mid_level")
|
|
row.prop(md, "strength")
|
|
|
|
def EDGE_SPLIT(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.prop(md, "use_edge_angle", text="Edge Angle")
|
|
sub = col.column()
|
|
sub.active = md.use_edge_angle
|
|
sub.prop(md, "split_angle")
|
|
|
|
split.prop(md, "use_edge_sharp", text="Sharp Edges")
|
|
|
|
def EXPLODE(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Vertex group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
sub = col.column()
|
|
sub.active = bool(md.vertex_group)
|
|
sub.prop(md, "protect")
|
|
col.label(text="Particle UV")
|
|
col.prop_search(md, "particle_uv", ob.data, "uv_textures", text="")
|
|
|
|
col = split.column()
|
|
col.prop(md, "use_edge_cut")
|
|
col.prop(md, "show_unborn")
|
|
col.prop(md, "show_alive")
|
|
col.prop(md, "show_dead")
|
|
col.prop(md, "use_size")
|
|
|
|
layout.operator("object.explode_refresh", text="Refresh")
|
|
|
|
def FLUID_SIMULATION(self, layout, ob, md):
|
|
layout.label(text="Settings can be found inside the Physics context")
|
|
|
|
def HOOK(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Object:")
|
|
col.prop(md, "object", text="")
|
|
if md.object and md.object.type == 'ARMATURE':
|
|
col.label(text="Bone:")
|
|
col.prop_search(md, "subtarget", md.object.data, "bones", text="")
|
|
col = split.column()
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
layout.separator()
|
|
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.prop(md, "falloff")
|
|
col.prop(md, "force", slider=True)
|
|
|
|
col = split.column()
|
|
col.operator("object.hook_reset", text="Reset")
|
|
col.operator("object.hook_recenter", text="Recenter")
|
|
|
|
if ob.mode == 'EDIT':
|
|
layout.separator()
|
|
row = layout.row()
|
|
row.operator("object.hook_select", text="Select")
|
|
row.operator("object.hook_assign", text="Assign")
|
|
|
|
def LATTICE(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Object:")
|
|
col.prop(md, "object", text="")
|
|
|
|
col = split.column()
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
def MASK(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Mode:")
|
|
col.prop(md, "mode", text="")
|
|
col = split.column()
|
|
if md.mode == 'ARMATURE':
|
|
col.label(text="Armature:")
|
|
col.prop(md, "armature", text="")
|
|
elif md.mode == 'VERTEX_GROUP':
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
sub = col.column()
|
|
sub.active = bool(md.vertex_group)
|
|
sub.prop(md, "invert_vertex_group")
|
|
|
|
def MESH_DEFORM(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
sub = col.column()
|
|
sub.label(text="Object:")
|
|
sub.prop(md, "object", text="")
|
|
sub.active = not md.is_bound
|
|
col = split.column()
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
sub = col.column()
|
|
sub.active = bool(md.vertex_group)
|
|
sub.prop(md, "invert_vertex_group")
|
|
|
|
layout.separator()
|
|
|
|
if md.is_bound:
|
|
layout.operator("object.meshdeform_bind", text="Unbind")
|
|
else:
|
|
layout.operator("object.meshdeform_bind", text="Bind")
|
|
|
|
row = layout.row()
|
|
row.prop(md, "precision")
|
|
row.prop(md, "use_dynamic_bind")
|
|
|
|
def MIRROR(self, layout, ob, md):
|
|
split = layout.split(percentage=0.25)
|
|
|
|
col = split.column()
|
|
col.label(text="Axis:")
|
|
col.prop(md, "use_x")
|
|
col.prop(md, "use_y")
|
|
col.prop(md, "use_z")
|
|
|
|
col = split.column()
|
|
col.label(text="Options:")
|
|
col.prop(md, "use_mirror_merge", text="Merge")
|
|
col.prop(md, "use_clip", text="Clipping")
|
|
col.prop(md, "use_mirror_vertex_groups", text="Vertex Groups")
|
|
|
|
col = split.column()
|
|
col.label(text="Textures:")
|
|
col.prop(md, "use_mirror_u", text="U")
|
|
col.prop(md, "use_mirror_v", text="V")
|
|
|
|
col = layout.column()
|
|
|
|
if md.use_mirror_merge == True:
|
|
col.prop(md, "merge_threshold")
|
|
col.label(text="Mirror Object:")
|
|
col.prop(md, "mirror_object", text="")
|
|
|
|
def MULTIRES(self, layout, ob, md):
|
|
layout.row().prop(md, "subdivision_type", expand=True)
|
|
|
|
split = layout.split()
|
|
col = split.column()
|
|
col.prop(md, "levels", text="Preview")
|
|
col.prop(md, "sculpt_levels", text="Sculpt")
|
|
col.prop(md, "render_levels", text="Render")
|
|
|
|
col = split.column()
|
|
|
|
col.enabled = ob.mode != 'EDIT'
|
|
col.operator("object.multires_subdivide", text="Subdivide")
|
|
col.operator("object.multires_higher_levels_delete", text="Delete Higher")
|
|
col.operator("object.multires_reshape", text="Reshape")
|
|
col.operator("object.multires_base_apply", text="Apply Base")
|
|
col.prop(md, "show_only_control_edges")
|
|
|
|
layout.separator()
|
|
|
|
col = layout.column()
|
|
row = col.row()
|
|
if md.is_external:
|
|
row.operator("object.multires_external_pack", text="Pack External")
|
|
row.label()
|
|
row = col.row()
|
|
row.prop(md, "filepath", text="")
|
|
else:
|
|
row.operator("object.multires_external_save", text="Save External...")
|
|
row.label()
|
|
|
|
def PARTICLE_INSTANCE(self, layout, ob, md):
|
|
layout.prop(md, "object")
|
|
layout.prop(md, "particle_system_index", text="Particle System")
|
|
|
|
split = layout.split()
|
|
col = split.column()
|
|
col.label(text="Create From:")
|
|
col.prop(md, "use_normal")
|
|
col.prop(md, "use_children")
|
|
col.prop(md, "use_size")
|
|
|
|
col = split.column()
|
|
col.label(text="Show Particles When:")
|
|
col.prop(md, "show_alive")
|
|
col.prop(md, "show_unborn")
|
|
col.prop(md, "show_dead")
|
|
|
|
layout.separator()
|
|
|
|
layout.prop(md, "use_path", text="Create Along Paths")
|
|
|
|
split = layout.split()
|
|
split.active = md.use_path
|
|
col = split.column()
|
|
col.row().prop(md, "axis", expand=True)
|
|
col.prop(md, "use_preserve_shape")
|
|
|
|
col = split.column()
|
|
col.prop(md, "position", slider=True)
|
|
col.prop(md, "random_position", text="Random", slider=True)
|
|
|
|
def PARTICLE_SYSTEM(self, layout, ob, md):
|
|
layout.label(text="Settings can be found inside the Particle context")
|
|
|
|
def SCREW(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.prop(md, "axis")
|
|
col.prop(md, "object", text="AxisOb")
|
|
col.prop(md, "angle")
|
|
col.prop(md, "steps")
|
|
col.prop(md, "render_steps")
|
|
|
|
col = split.column()
|
|
row = col.row()
|
|
row.active = (md.object is None or md.use_object_screw_offset == False)
|
|
row.prop(md, "screw_offset")
|
|
row = col.row()
|
|
row.active = (md.object is not None)
|
|
row.prop(md, "use_object_screw_offset")
|
|
col.prop(md, "use_normal_calculate")
|
|
col.prop(md, "use_normal_flip")
|
|
col.prop(md, "iterations")
|
|
|
|
def SHRINKWRAP(self, layout, ob, md):
|
|
split = layout.split()
|
|
col = split.column()
|
|
col.label(text="Target:")
|
|
col.prop(md, "target", text="")
|
|
col = split.column()
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.prop(md, "offset")
|
|
col.prop(md, "subsurf_levels")
|
|
|
|
col = split.column()
|
|
col.label(text="Mode:")
|
|
col.prop(md, "wrap_method", text="")
|
|
|
|
split = layout.split(percentage=0.25)
|
|
|
|
col = split.column()
|
|
|
|
if md.wrap_method == 'PROJECT':
|
|
col.label(text="Axis:")
|
|
col.prop(md, "use_project_x")
|
|
col.prop(md, "use_project_y")
|
|
col.prop(md, "use_project_z")
|
|
|
|
col = split.column()
|
|
col.label(text="Direction:")
|
|
col.prop(md, "use_negative_direction")
|
|
col.prop(md, "use_positive_direction")
|
|
|
|
col = split.column()
|
|
|
|
col.label(text="Cull Faces:")
|
|
col.prop(md, "cull_face", expand=True)
|
|
|
|
layout.label(text="Auxiliary Target:")
|
|
layout.prop(md, "auxiliary_target", text="")
|
|
|
|
elif md.wrap_method == 'NEAREST_SURFACEPOINT':
|
|
layout.prop(md, "use_keep_above_surface")
|
|
|
|
def SIMPLE_DEFORM(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Mode:")
|
|
col.prop(md, "deform_method", text="")
|
|
|
|
col = split.column()
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Origin:")
|
|
col.prop(md, "origin", text="")
|
|
sub = col.column()
|
|
sub.active = (md.origin is not None)
|
|
sub.prop(md, "use_relative")
|
|
|
|
col = split.column()
|
|
col.label(text="Deform:")
|
|
col.prop(md, "factor")
|
|
col.prop(md, "limits", slider=True)
|
|
if md.deform_method in {'TAPER', 'STRETCH'}:
|
|
col.prop(md, "lock_x")
|
|
col.prop(md, "lock_y")
|
|
|
|
def SMOKE(self, layout, ob, md):
|
|
layout.label(text="Settings can be found inside the Physics context")
|
|
|
|
def SMOOTH(self, layout, ob, md):
|
|
split = layout.split(percentage=0.25)
|
|
|
|
col = split.column()
|
|
col.label(text="Axis:")
|
|
col.prop(md, "use_x")
|
|
col.prop(md, "use_y")
|
|
col.prop(md, "use_z")
|
|
|
|
col = split.column()
|
|
col.prop(md, "factor")
|
|
col.prop(md, "iterations")
|
|
col.label(text="Vertex Group:")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
def SOFT_BODY(self, layout, ob, md):
|
|
layout.label(text="Settings can be found inside the Physics context")
|
|
|
|
def SOLIDIFY(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.prop(md, "thickness")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
col.label(text="Crease:")
|
|
col.prop(md, "edge_crease_inner", text="Inner")
|
|
col.prop(md, "edge_crease_outer", text="Outer")
|
|
col.prop(md, "edge_crease_rim", text="Rim")
|
|
col.label(text="Material Index Offset:")
|
|
|
|
col = split.column()
|
|
|
|
col.prop(md, "offset")
|
|
sub = col.column()
|
|
sub.active = bool(md.vertex_group)
|
|
sub.prop(md, "invert_vertex_group", text="Invert")
|
|
|
|
col.prop(md, "use_even_offset")
|
|
col.prop(md, "use_quality_normals")
|
|
col.prop(md, "use_rim")
|
|
|
|
sub = col.column()
|
|
sub.label()
|
|
row = sub.split(align=True, percentage=0.4)
|
|
row.prop(md, "material_offset", text="")
|
|
row = row.row()
|
|
row.active = md.use_rim
|
|
row.prop(md, "material_offset_rim", text="Rim")
|
|
|
|
def SUBSURF(self, layout, ob, md):
|
|
layout.row().prop(md, "subdivision_type", expand=True)
|
|
|
|
split = layout.split()
|
|
col = split.column()
|
|
col.label(text="Subdivisions:")
|
|
col.prop(md, "levels", text="View")
|
|
col.prop(md, "render_levels", text="Render")
|
|
|
|
col = split.column()
|
|
col.label(text="Options:")
|
|
col.prop(md, "use_subsurf_uv")
|
|
col.prop(md, "show_only_control_edges")
|
|
|
|
def SURFACE(self, layout, ob, md):
|
|
layout.label(text="Settings can be found inside the Physics context")
|
|
|
|
def UV_PROJECT(self, layout, ob, md):
|
|
if ob.type == 'MESH':
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Image:")
|
|
col.prop(md, "image", text="")
|
|
|
|
col = split.column()
|
|
col.label(text="UV Layer:")
|
|
col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="")
|
|
|
|
split = layout.split()
|
|
col = split.column()
|
|
col.prop(md, "use_image_override")
|
|
col.prop(md, "projector_count", text="Projectors")
|
|
for proj in md.projectors:
|
|
col.prop(proj, "object", text="")
|
|
|
|
col = split.column()
|
|
sub = col.column(align=True)
|
|
sub.prop(md, "aspect_x", text="Aspect X")
|
|
sub.prop(md, "aspect_y", text="Aspect Y")
|
|
|
|
sub = col.column(align=True)
|
|
sub.prop(md, "scale_x", text="Scale X")
|
|
sub.prop(md, "scale_y", text="Scale Y")
|
|
|
|
def WARP(self, layout, ob, md):
|
|
use_falloff = (md.falloff_type != 'NONE')
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="From:")
|
|
col.prop(md, "object_from", text="")
|
|
|
|
col.prop(md, "use_volume_preserve")
|
|
|
|
col = split.column()
|
|
col.label(text="To:")
|
|
col.prop(md, "object_to", text="")
|
|
col.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
|
|
|
|
col = layout.column()
|
|
|
|
row = col.row(align=True)
|
|
row.prop(md, "strength")
|
|
if use_falloff:
|
|
row.prop(md, "falloff_radius")
|
|
|
|
col.prop(md, "falloff_type")
|
|
if use_falloff:
|
|
if md.falloff_type == 'CURVE':
|
|
col.template_curve_mapping(md, "falloff_curve")
|
|
|
|
# 2 new columns
|
|
split = layout.split()
|
|
col = split.column()
|
|
col.label(text="Texture:")
|
|
col.prop(md, "texture", text="")
|
|
|
|
col = split.column()
|
|
col.label(text="Texture Coordinates:")
|
|
col.prop(md, "texture_coords", text="")
|
|
|
|
if md.texture_coords == 'OBJECT':
|
|
layout.prop(md, "texture_coordinate_object", text="Object")
|
|
elif md.texture_coords == 'UV' and ob.type == 'MESH':
|
|
layout.prop_search(md, "uv_layer", ob.data, "uv_textures")
|
|
|
|
def WAVE(self, layout, ob, md):
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Motion:")
|
|
col.prop(md, "use_x")
|
|
col.prop(md, "use_y")
|
|
col.prop(md, "use_cyclic")
|
|
|
|
col = split.column()
|
|
col.prop(md, "use_normal")
|
|
sub = col.column()
|
|
sub.active = md.use_normal
|
|
sub.prop(md, "use_normal_x", text="X")
|
|
sub.prop(md, "use_normal_y", text="Y")
|
|
sub.prop(md, "use_normal_z", text="Z")
|
|
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.label(text="Time:")
|
|
sub = col.column(align=True)
|
|
sub.prop(md, "time_offset", text="Offset")
|
|
sub.prop(md, "lifetime", text="Life")
|
|
col.prop(md, "damping_time", text="Damping")
|
|
|
|
col = split.column()
|
|
col.label(text="Position:")
|
|
sub = col.column(align=True)
|
|
sub.prop(md, "start_position_x", text="X")
|
|
sub.prop(md, "start_position_y", text="Y")
|
|
col.prop(md, "falloff_radius", text="Falloff")
|
|
|
|
layout.separator()
|
|
|
|
layout.prop(md, "start_position_object")
|
|
layout.prop_search(md, "vertex_group", ob, "vertex_groups")
|
|
split = layout.split(percentage=0.33)
|
|
col = split.column()
|
|
col.label(text="Texture")
|
|
col = split.column()
|
|
col.template_ID(md, "texture", new="texture.new")
|
|
layout.prop(md, "texture_coords")
|
|
if md.texture_coords == 'MAP_UV' and ob.type == 'MESH':
|
|
layout.prop_search(md, "uv_layer", ob.data, "uv_textures")
|
|
elif md.texture_coords == 'OBJECT':
|
|
layout.prop(md, "texture_coordinate_object")
|
|
|
|
layout.separator()
|
|
|
|
split = layout.split()
|
|
|
|
col = split.column()
|
|
col.prop(md, "speed", slider=True)
|
|
col.prop(md, "height", slider=True)
|
|
|
|
col = split.column()
|
|
col.prop(md, "width", slider=True)
|
|
col.prop(md, "narrowness", slider=True)
|
|
|
|
if __name__ == "__main__": # only for live edit.
|
|
bpy.utils.register_module(__name__)
|