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:
Diffstat (limited to 'release/scripts/startup/bl_ui/properties_data_modifier.py')
-rw-r--r--release/scripts/startup/bl_ui/properties_data_modifier.py1803
1 files changed, 1 insertions, 1802 deletions
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index d58dec211be..e7536838199 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -39,1809 +39,8 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
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()
-
- split = layout.split()
-
- row = split.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- sub = row.row(align=True)
- sub.active = bool(md.vertex_group)
- sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- split.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="")
-
- row = layout.row()
- split = row.split()
- col = split.column()
- col.label(text="UVs:")
- sub = col.column(align=True)
- sub.prop(md, "offset_u")
- sub.prop(md, "offset_v")
- layout.separator()
-
- layout.prop(md, "start_cap")
- layout.prop(md, "end_cap")
-
- def BEVEL(self, layout, ob, md):
- offset_type = md.offset_type
- if offset_type == 'PERCENT':
- layout.prop(md, "width_pct")
- else:
- offset_text = "Width"
- if offset_type == 'DEPTH':
- offset_text = "Depth"
- elif offset_type == 'OFFSET':
- offset_text = "Offset"
- layout.prop(md, "width", text=offset_text)
- layout.row().prop(md, "offset_type", expand=True)
-
- split = layout.split()
- col = split.column()
- col.prop(md, "use_only_vertices")
- col.prop(md, "use_clamp_overlap")
- col.prop(md, "loop_slide")
- col = split.column()
- col.prop(md, "mark_seam")
- col.prop(md, "mark_sharp")
- col.prop(md, "harden_normals")
-
- layout.row().prop(md, "segments")
- layout.row().prop(md, "profile")
- layout.row().prop(md, "material")
-
- layout.label(text="Miter Type:")
- layout.row().prop(md, "miter_outer", text="Outer")
- layout.row().prop(md, "miter_inner", text="Inner")
- if md.miter_inner in {'MITER_PATCH', 'MITER_ARC'}:
- layout.row().prop(md, "spread")
-
- 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 == 'VGROUP':
- row = layout.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- layout.label(text="Face Strength Mode:")
- layout.row().prop(md, "face_strength_mode", expand=True)
-
- layout.label(text="Intersection Type:")
- layout.row().prop(md, "vmesh_method", expand=True)
- layout.row().prop(md, "use_custom_profile")
- row = layout.row()
- row.enabled = md.use_custom_profile
- if md.use_custom_profile:
- layout.template_curveprofile(md, "custom_profile")
-
- 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="")
-
- layout.prop(md, "double_threshold")
-
- if bpy.app.debug:
- layout.prop(md, "debug_options")
-
- def BUILD(self, layout, _ob, md):
- split = layout.split()
-
- col = split.column()
- col.prop(md, "frame_start")
- col.prop(md, "frame_duration")
- col.prop(md, "use_reverse")
-
- col = split.column()
- col.prop(md, "use_random_order")
- sub = col.column()
- sub.active = md.use_random_order
- sub.prop(md, "seed")
-
- def MESH_CACHE(self, layout, _ob, md):
- layout.prop(md, "cache_format")
- layout.prop(md, "filepath")
-
- if md.cache_format == 'ABC':
- layout.prop(md, "sub_object")
-
- layout.label(text="Evaluation:")
- layout.prop(md, "factor", slider=True)
- layout.prop(md, "deform_mode")
- layout.prop(md, "interpolation")
-
- layout.label(text="Time Mapping:")
-
- row = layout.row()
- row.prop(md, "time_mode", expand=True)
- row = layout.row()
- row.prop(md, "play_mode", expand=True)
- if md.play_mode == 'SCENE':
- layout.prop(md, "frame_start")
- layout.prop(md, "frame_scale")
- else:
- time_mode = md.time_mode
- if time_mode == 'FRAME':
- layout.prop(md, "eval_frame")
- elif time_mode == 'TIME':
- layout.prop(md, "eval_time")
- elif time_mode == 'FACTOR':
- layout.prop(md, "eval_factor")
-
- layout.label(text="Axis Mapping:")
- split = layout.split(factor=0.5, align=True)
- split.alert = (md.forward_axis[-1] == md.up_axis[-1])
- split.label(text="Forward/Up Axis:")
- split.prop(md, "forward_axis", text="")
- split.prop(md, "up_axis", text="")
- split = layout.split(factor=0.5)
- split.label(text="Flip Axis:")
- row = split.row()
- row.prop(md, "flip_axis")
-
- def MESH_SEQUENCE_CACHE(self, layout, ob, md):
- layout.label(text="Cache File Properties:")
- box = layout.box()
- box.template_cache_file(md, "cache_file")
-
- cache_file = md.cache_file
-
- layout.label(text="Modifier Properties:")
- box = layout.box()
-
- if cache_file is not None:
- box.prop_search(md, "object_path", cache_file, "object_paths")
-
- if ob.type == 'MESH':
- box.row().prop(md, "read_data")
-
- def CAST(self, layout, ob, md):
- split = layout.split(factor=0.25)
-
- split.label(text="Cast Type:")
- split.prop(md, "cast_type", text="")
-
- split = layout.split(factor=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:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
- 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 are inside the Physics tab")
-
- def COLLISION(self, layout, _ob, _md):
- layout.label(text="Settings are inside the Physics tab")
-
- 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:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
- layout.label(text="Deformation Axis:")
- layout.row().prop(md, "deform_axis", expand=True)
-
- def DECIMATE(self, layout, ob, md):
- decimate_type = md.decimate_type
-
- row = layout.row()
- row.prop(md, "decimate_type", expand=True)
-
- if decimate_type == 'COLLAPSE':
- has_vgroup = bool(md.vertex_group)
- layout.prop(md, "ratio")
-
- split = layout.split()
-
- col = split.column()
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- layout_info = col
-
- col = split.column()
- row = col.row()
- row.active = has_vgroup
- row.prop(md, "vertex_group_factor")
-
- col.prop(md, "use_collapse_triangulate")
- row = col.split(factor=0.75)
- row.prop(md, "use_symmetry")
- row.prop(md, "symmetry_axis", text="")
-
- elif decimate_type == 'UNSUBDIV':
- layout.prop(md, "iterations")
- layout_info = layout
- else: # decimate_type == 'DISSOLVE':
- layout.prop(md, "angle_limit")
- layout.prop(md, "use_dissolve_boundaries")
- layout.label(text="Delimit:")
- row = layout.row()
- row.prop(md, "delimit")
- layout_info = layout
-
- layout_info.label(
- text=iface_("Face Count: {:,}".format(md.face_count)),
- translate=False,
- )
-
- def DISPLACE(self, layout, ob, md):
- has_texture = (md.texture is not None)
-
- col = layout.column(align=True)
- col.label(text="Texture:")
- col.template_ID(md, "texture", new="texture.new")
-
- split = layout.split()
-
- col = split.column(align=True)
- col.label(text="Direction:")
- col.prop(md, "direction", text="")
- if md.direction in {'X', 'Y', 'Z', 'RGB_TO_XYZ'}:
- col.label(text="Space:")
- col.prop(md, "space", text="")
- col.label(text="Vertex Group:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- col = split.column(align=True)
- col.active = has_texture
- col.label(text="Texture Coordinates:")
- col.prop(md, "texture_coords", text="")
- if md.texture_coords == 'OBJECT':
- col.label(text="Object:")
- col.prop(md, "texture_coords_object", text="")
- obj = md.texture_coords_object
- if obj and obj.type == 'ARMATURE':
- col.label(text="Bone:")
- col.prop_search(md, "texture_coords_bone", obj.data, "bones", text="")
- elif md.texture_coords == 'UV' and ob.type == 'MESH':
- col.label(text="UV Map:")
- col.prop_search(md, "uv_layer", ob.data, "uv_layers", text="")
-
- layout.separator()
-
- row = layout.row()
- row.prop(md, "mid_level")
- row.prop(md, "strength")
-
- def DYNAMIC_PAINT(self, layout, _ob, _md):
- layout.label(text="Settings are inside the Physics tab")
-
- 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:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
- 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_layers", 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 are inside the Physics tab")
-
- def HOOK(self, layout, ob, md):
- use_falloff = (md.falloff_type != 'NONE')
- 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:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- layout.separator()
-
- row = layout.row(align=True)
- if use_falloff:
- row.prop(md, "falloff_radius")
- row.prop(md, "strength", slider=True)
- layout.prop(md, "falloff_type")
-
- col = layout.column()
- if use_falloff:
- if md.falloff_type == 'CURVE':
- col.template_curve_mapping(md, "falloff_curve")
-
- split = layout.split()
-
- col = split.column()
- col.prop(md, "use_falloff_uniform")
-
- if ob.mode == 'EDIT':
- row = col.row(align=True)
- row.operator("object.hook_reset", text="Reset")
- row.operator("object.hook_recenter", text="Recenter")
-
- row = layout.row(align=True)
- row.operator("object.hook_select", text="Select")
- row.operator("object.hook_assign", text="Assign")
-
- def LAPLACIANDEFORM(self, layout, ob, md):
- is_bind = md.is_bind
-
- layout.prop(md, "iterations")
-
- row = layout.row(align=True)
- row.enabled = not is_bind
- row.prop_search(md, "vertex_group", ob, "vertex_groups")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- layout.separator()
-
- row = layout.row()
- row.enabled = bool(md.vertex_group)
- row.operator("object.laplaciandeform_bind", text="Unbind" if is_bind else "Bind")
-
- def LAPLACIANSMOOTH(self, layout, ob, md):
- layout.prop(md, "iterations")
-
- split = layout.split(factor=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="Lambda:")
- col.prop(md, "lambda_factor", text="Factor")
- col.prop(md, "lambda_border", text="Border")
-
- col.separator()
- col.prop(md, "use_volume_preserve")
- col.prop(md, "use_normalized")
-
- layout.label(text="Vertex Group:")
- row = layout.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- 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:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- layout.separator()
- layout.prop(md, "strength", slider=True)
-
- 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:")
- row = col.row(align=True)
- row.prop(md, "armature", text="")
- sub = row.row(align=True)
- sub.active = (md.armature is not None)
- sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
- elif md.mode == 'VERTEX_GROUP':
- col.label(text="Vertex Group:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- sub = row.row(align=True)
- sub.active = bool(md.vertex_group)
- sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- col = layout.column()
- col.prop(md, "threshold")
-
- def MESH_DEFORM(self, layout, ob, md):
- split = layout.split()
-
- col = split.column()
- col.enabled = not md.is_bound
- col.label(text="Object:")
- col.prop(md, "object", text="")
-
- col = split.column()
- col.label(text="Vertex Group:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- sub = row.row(align=True)
- sub.active = bool(md.vertex_group)
- sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- layout.separator()
- row = layout.row()
- row.enabled = not md.is_bound
- row.prop(md, "precision")
- row.prop(md, "use_dynamic_bind")
-
- layout.separator()
- if md.is_bound:
- layout.operator("object.meshdeform_bind", text="Unbind")
- else:
- layout.operator("object.meshdeform_bind", text="Bind")
-
- def MIRROR(self, layout, _ob, md):
- axis_text = "XYZ"
- split = layout.split(factor=0.33)
-
- col = split.column()
- col.label(text="Axis:")
- for i, text in enumerate(axis_text):
- col.prop(md, "use_axis", text=text, index=i)
-
- col = split.column()
- col.label(text="Bisect:")
- for i, text in enumerate(axis_text):
- colsub = col.column()
- colsub.prop(md, "use_bisect_axis", text=text, index=i)
- colsub.active = md.use_axis[i]
-
- col = split.column()
- col.label(text="Flip:")
- for i, text in enumerate(axis_text):
- colsub = col.column()
- colsub.prop(md, "use_bisect_flip_axis", text=text, index=i)
- colsub.active = md.use_axis[i] and md.use_bisect_axis[i]
-
- layout.separator()
-
- col = layout.column()
- col.label(text="Mirror Object:")
- col.prop(md, "mirror_object", text="")
-
- layout.separator()
-
- col = layout.column()
- col.label(text="Options:")
-
- row = layout.row()
- row.prop(md, "use_mirror_vertex_groups", text="Vertex Groups")
- row.prop(md, "use_clip", text="Clipping")
- row = layout.row()
- row.prop(md, "use_mirror_merge", text="Merge")
-
- col = layout.column()
- if md.use_mirror_merge is True:
- col.prop(md, "merge_threshold")
-
- layout.separator()
- col = layout.column()
-
- col.label(text="Textures:")
- row = layout.row()
- row.prop(md, "use_mirror_u", text="Flip U")
- row.prop(md, "use_mirror_v", text="Flip V")
- row = layout.row()
- row.prop(md, "use_mirror_udim", text="Flip UDIM")
-
- col = layout.column(align=True)
-
- if md.use_mirror_u:
- col.prop(md, "mirror_offset_u")
-
- if md.use_mirror_v:
- col.prop(md, "mirror_offset_v")
-
- col = layout.column(align=True)
- col.prop(md, "offset_u")
- col.prop(md, "offset_v")
-
- def MULTIRES(self, layout, ob, md):
- # Changing some of the properties can not be done once there is an
- # actual displacement stored for this multires modifier. This check
- # will disallow those properties from change.
- # This is a bit stupid check but should be sufficient for the usual
- # multires usage. It might become less strict and only disallow
- # modifications if there is CD_MDISPS layer, or if there is actual
- # non-zero displacement but such checks will be too slow to be done
- # on every redraw.
- have_displacement = (md.total_levels != 0)
-
- row = layout.row()
- row.enabled = not have_displacement
- 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")
-
- row = col.row()
- row.enabled = not have_displacement
- row.prop(md, "quality")
-
- col = split.column()
-
- col.enabled = ob.mode != 'EDIT'
- op = col.operator("object.multires_subdivide", text="Subdivide")
- op.mode = 'CATMULL_CLARK'
-
- op = col.operator("object.multires_subdivide", text="Subdivide Simple")
- op.mode = 'SIMPLE'
-
- op = col.operator("object.multires_subdivide", text="Subdivide Linear")
- op.mode = 'LINEAR'
-
- col.operator("object.multires_higher_levels_delete", text="Delete Higher")
- col.operator("object.multires_unsubdivide", text="Unsubdivide")
- col.operator("object.multires_reshape", text="Reshape")
- col.operator("object.multires_base_apply", text="Apply Base")
- col.operator("object.multires_rebuild_subdiv", text="Rebuild Subdivisions")
- col.prop(md, "uv_smooth", text="")
- col.prop(md, "show_only_control_edges")
-
- row = col.row()
- row.enabled = not have_displacement
- row.prop(md, "use_creases")
-
- 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 OCEAN(self, layout, _ob, md):
- if not bpy.app.build_options.mod_oceansim:
- layout.label(text="Built without OceanSim modifier")
- return
-
- layout.prop(md, "geometry_mode")
-
- if md.geometry_mode == 'GENERATE':
- row = layout.row()
- row.prop(md, "repeat_x")
- row.prop(md, "repeat_y")
-
- layout.separator()
-
- split = layout.split()
-
- col = split.column()
- col.prop(md, "time")
- col.prop(md, "depth")
- col.prop(md, "random_seed")
-
- col = split.column()
- col.prop(md, "resolution")
- col.prop(md, "size")
- col.prop(md, "spatial_size")
-
- layout.separator()
-
- layout.prop(md, "spectrum")
-
- if md.spectrum in {'TEXEL_MARSEN_ARSLOE', 'JONSWAP'}:
- split = layout.split()
-
- col = split.column()
- col.prop(md, "sharpen_peak_jonswap")
-
- col = split.column()
- col.prop(md, "fetch_jonswap")
-
- layout.label(text="Waves:")
-
- split = layout.split()
-
- col = split.column()
- col.prop(md, "choppiness")
- col.prop(md, "wave_scale", text="Scale")
- col.prop(md, "wave_scale_min")
- col.prop(md, "wind_velocity")
-
- col = split.column()
- col.prop(md, "wave_alignment", text="Alignment")
- sub = col.column()
- sub.active = (md.wave_alignment > 0.0)
- sub.prop(md, "wave_direction", text="Direction")
- sub.prop(md, "damping")
-
- layout.separator()
-
- layout.prop(md, "use_normals")
-
- split = layout.split()
-
- col = split.column()
- col.prop(md, "use_foam")
- sub = col.row()
- sub.active = md.use_foam
- sub.prop(md, "foam_coverage", text="Coverage")
-
- col = split.column()
- col.active = md.use_foam
- col.label(text="Foam Data Layer Name:")
- col.prop(md, "foam_layer_name", text="")
-
- layout.separator()
-
- if md.is_cached:
- layout.operator("object.ocean_bake", text="Delete Bake").free = True
- else:
- layout.operator("object.ocean_bake").free = False
-
- split = layout.split()
- split.enabled = not md.is_cached
-
- col = split.column(align=True)
- col.prop(md, "frame_start", text="Start")
- col.prop(md, "frame_end", text="End")
-
- col = split.column(align=True)
- col.label(text="Cache path:")
- col.prop(md, "filepath", text="")
-
- split = layout.split()
- split.enabled = not md.is_cached
-
- col = split.column()
- col.active = md.use_foam
- col.prop(md, "bake_foam_fade")
-
- col = split.column()
-
- def PARTICLE_INSTANCE(self, layout, ob, md):
- layout.prop(md, "object")
- if md.object:
- layout.prop_search(md, "particle_system", md.object, "particle_systems", text="Particle System")
- else:
- layout.prop(md, "particle_system_index", text="Particle System")
-
- split = layout.split()
- col = split.column()
- col.label(text="Create From:")
- layout.prop(md, "space", text="")
- 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")
-
- row = layout.row(align=True)
- row.prop(md, "particle_amount", text="Amount")
- row.prop(md, "particle_offset", text="Offset")
-
- row = layout.row(align=True)
- row.prop(md, "axis", expand=True)
-
- layout.separator()
-
- layout.prop(md, "use_path", text="Create Along Paths")
-
- col = layout.column()
- col.active = md.use_path
- col.prop(md, "use_preserve_shape")
-
- row = col.row(align=True)
- row.prop(md, "position", slider=True)
- row.prop(md, "random_position", text="Random", slider=True)
- row = col.row(align=True)
- row.prop(md, "rotation", slider=True)
- row.prop(md, "random_rotation", text="Random", slider=True)
-
- layout.separator()
-
- col = layout.column()
- col.prop_search(md, "index_layer_name", ob.data, "vertex_colors", text="Index Layer")
- col.prop_search(md, "value_layer_name", ob.data, "vertex_colors", text="Value Layer")
-
- 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.prop(md, "use_smooth_shade")
- col.prop(md, "use_merge_vertices")
- sub = col.column()
- sub.active = md.use_merge_vertices
- sub.prop(md, "merge_threshold")
-
- col = split.column()
- row = col.row()
- row.active = (md.object is None or md.use_object_screw_offset is 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")
- col.prop(md, "use_stretch_u")
- col.prop(md, "use_stretch_v")
-
- 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:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- split = layout.split()
-
- col = split.column()
- col.prop(md, "offset")
-
- col = split.column()
- col.label(text="Mode:")
- col.prop(md, "wrap_method", text="")
-
- if md.wrap_method in {'PROJECT', 'NEAREST_SURFACEPOINT', 'TARGET_PROJECT'}:
- col.prop(md, "wrap_mode", text="")
-
- if md.wrap_method == 'PROJECT':
- split = layout.split()
- col = split.column()
- col.prop(md, "subsurf_levels")
- col = split.column()
-
- col.prop(md, "project_limit", text="Limit")
- split = layout.split(factor=0.25)
-
- col = split.column()
- 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")
-
- subcol = col.column()
- subcol.active = md.use_negative_direction and md.cull_face != 'OFF'
- subcol.prop(md, "use_invert_cull")
-
- col = split.column()
- col.label(text="Cull Faces:")
- col.prop(md, "cull_face", expand=True)
-
- layout.prop(md, "auxiliary_target")
-
- def SIMPLE_DEFORM(self, layout, ob, md):
-
- layout.row().prop(md, "deform_method", expand=True)
-
- split = layout.split()
-
- col = split.column()
- col.label(text="Vertex Group:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- split = layout.split()
-
- col = split.column()
- col.label(text="Axis, Origin:")
- col.prop(md, "origin", text="")
-
- col.prop(md, "deform_axis")
-
- if md.deform_method in {'TAPER', 'STRETCH', 'TWIST'}:
- row = col.row(align=True)
- row.label(text="Lock:")
- deform_axis = md.deform_axis
- if deform_axis != 'X':
- row.prop(md, "lock_x")
- if deform_axis != 'Y':
- row.prop(md, "lock_y")
- if deform_axis != 'Z':
- row.prop(md, "lock_z")
-
- col = split.column()
- col.label(text="Deform:")
- if md.deform_method in {'TAPER', 'STRETCH'}:
- col.prop(md, "factor")
- else:
- col.prop(md, "angle")
- col.prop(md, "limits", slider=True)
-
- def FLUID(self, layout, _ob, _md):
- layout.label(text="Settings are inside the Physics tab")
-
- def SMOOTH(self, layout, ob, md):
- split = layout.split(factor=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:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- def SOFT_BODY(self, layout, _ob, _md):
- layout.label(text="Settings are inside the Physics tab")
-
- def SOLIDIFY(self, layout, ob, md):
-
- layout.row().prop(md, "solidify_mode")
-
- solidify_mode = md.solidify_mode
-
- if solidify_mode == 'NON_MANIFOLD':
- layout.prop(md, "nonmanifold_thickness_mode")
- layout.prop(md, "nonmanifold_boundary_mode")
-
- split = layout.split()
-
- col = split.column()
- col.prop(md, "thickness")
- col.prop(md, "thickness_clamp")
- row = col.row()
- row.active = md.thickness_clamp > 0.0
- row.prop(md, "use_thickness_angle_clamp")
-
- col.separator()
-
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- sub = row.row(align=True)
- sub.active = bool(md.vertex_group)
- sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- sub = col.row()
- sub.active = bool(md.vertex_group)
- sub.prop(md, "thickness_vertex_group", text="Factor")
- if solidify_mode == 'NON_MANIFOLD':
- sub = col.row()
- sub.active = bool(md.vertex_group)
- sub.prop(md, "use_flat_faces")
-
- if solidify_mode == 'EXTRUDE':
- 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="Bevel:")
- col.prop(md, "bevel_convex")
- else:
- col.label(text="Bevel:")
- col.prop(md, "bevel_convex")
- col.separator()
- col.prop(md, "nonmanifold_merge_threshold")
-
- col = split.column()
-
- col.prop(md, "offset")
-
- col.prop(md, "use_flip_normals")
-
- if solidify_mode == 'EXTRUDE':
- col.prop(md, "use_even_offset")
- col.prop(md, "use_quality_normals")
-
- col.prop(md, "use_rim")
- col_rim = col.column()
- col_rim.active = md.use_rim
- col_rim.prop(md, "use_rim_only")
-
- col.separator()
-
- col.label(text="Material Index Offset:")
-
- sub = col.column()
- row = sub.split(factor=0.4, align=True)
- row.prop(md, "material_offset", text="")
- row = row.row(align=True)
- row.active = md.use_rim
- row.prop(md, "material_offset_rim", text="Rim")
-
- col.separator()
-
- row = col.row(align=True)
- row.label(text="Shell Vertex Group:")
- row = col.row(align=True)
- row.prop_search(md, "shell_vertex_group", ob, "vertex_groups", text="")
- row = col.row(align=True)
- row.label(text="Rim Vertex Group:")
- row = col.row(align=True)
- row.prop_search(md, "rim_vertex_group", ob, "vertex_groups", text="")
-
- def SUBSURF(self, layout, ob, md):
- from bpy import context
- layout.row().prop(md, "subdivision_type", expand=True)
-
- split = layout.split()
- col = split.column()
-
- scene = context.scene
- engine = context.engine
- show_adaptive_options = (
- engine == 'CYCLES' and md == ob.modifiers[-1] and
- scene.cycles.feature_set == 'EXPERIMENTAL'
- )
- if show_adaptive_options:
- col.label(text="Render:")
- col.prop(ob.cycles, "use_adaptive_subdivision", text="Adaptive")
- if ob.cycles.use_adaptive_subdivision:
- col.prop(ob.cycles, "dicing_rate")
- else:
- col.prop(md, "render_levels", text="Levels")
-
- col.separator()
-
- col.label(text="Viewport:")
- col.prop(md, "levels", text="Levels")
- else:
- col.label(text="Subdivisions:")
- sub = col.column(align=True)
- sub.prop(md, "render_levels", text="Render")
- sub.prop(md, "levels", text="Viewport")
-
- col.prop(md, "quality")
-
- col = split.column()
- col.label(text="Options:")
-
- sub = col.column()
- sub.active = (not show_adaptive_options) or (not ob.cycles.use_adaptive_subdivision)
- sub.prop(md, "uv_smooth", text="")
-
- col.prop(md, "show_only_control_edges")
- col.prop(md, "use_creases")
-
- if show_adaptive_options and ob.cycles.use_adaptive_subdivision:
- col = layout.column(align=True)
- col.scale_y = 0.6
- col.separator()
- col.label(text="Final Dicing Rate:")
- col.separator()
-
- render = max(scene.cycles.dicing_rate * ob.cycles.dicing_rate, 0.1)
- preview = max(scene.cycles.preview_dicing_rate * ob.cycles.dicing_rate, 0.1)
- col.label(text=f"Render {render:.2f} px, Preview {preview:.2f} px")
-
- def SURFACE(self, layout, _ob, _md):
- layout.label(text="Settings are inside the Physics tab")
-
- def SURFACE_DEFORM(self, layout, _ob, md):
- split = layout.split()
- col = split.column()
- col.active = not md.is_bound
-
- col.label(text="Target:")
- col.prop(md, "target", text="")
-
- col = split.column()
- col.label(text="Vertex Group:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", _ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- split = layout.split()
- col = split.column()
- col.prop(md, "falloff")
- col = split.column()
- col.prop(md, "strength")
-
- col = layout.column()
-
- if md.is_bound:
- col.operator("object.surfacedeform_bind", text="Unbind")
- else:
- col.active = md.target is not None
- col.operator("object.surfacedeform_bind", text="Bind")
-
- def UV_PROJECT(self, layout, ob, md):
- split = layout.split()
- col = split.column()
- col.prop_search(md, "uv_layer", ob.data, "uv_layers")
- col.separator()
-
- 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 = split.column()
- col.label(text="To:")
- col.prop(md, "object_to", text="")
-
- split = layout.split()
- col = split.column()
- obj = md.object_from
- if obj and obj.type == 'ARMATURE':
- col.label(text="Bone:")
- col.prop_search(md, "bone_from", obj.data, "bones", text="")
-
- col = split.column()
- obj = md.object_to
- if obj and obj.type == 'ARMATURE':
- col.label(text="Bone:")
- col.prop_search(md, "bone_to", obj.data, "bones", text="")
-
- split = layout.split()
- col = split.column()
- col.prop(md, "use_volume_preserve")
- col = split.column()
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- 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.template_ID(md, "texture", new="texture.new")
-
- col = split.column()
- col.label(text="Texture Coordinates:")
- col.prop(md, "texture_coords", text="")
-
- if md.texture_coords == 'OBJECT':
- layout.prop(md, "texture_coords_object", text="Object")
- obj = md.texture_coords_object
- if obj and obj.type == 'ARMATURE':
- layout.prop_search(md, "texture_coords_bone", obj.data, "bones", text="Bone")
- elif md.texture_coords == 'UV' and ob.type == 'MESH':
- layout.prop_search(md, "uv_layer", ob.data, "uv_layers")
-
- 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")
- row = layout.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
- split = layout.split(factor=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 == 'UV' and ob.type == 'MESH':
- layout.prop_search(md, "uv_layer", ob.data, "uv_layers")
- elif md.texture_coords == 'OBJECT':
- layout.prop(md, "texture_coords_object")
- obj = md.texture_coords_object
- if obj and obj.type == 'ARMATURE':
- layout.prop_search(md, "texture_coords_bone", obj.data, "bones")
-
- 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)
-
- def REMESH(self, layout, _ob, md):
- if not bpy.app.build_options.mod_remesh:
- layout.label(text="Built without Remesh modifier")
- return
-
- layout.prop(md, "mode")
-
- row = layout.row()
- if md.mode == 'VOXEL':
- layout.prop(md, "voxel_size")
- layout.prop(md, "adaptivity")
- else:
- row.prop(md, "octree_depth")
- row.prop(md, "scale")
-
- if md.mode == 'SHARP':
- layout.prop(md, "sharpness")
-
- layout.prop(md, "use_remove_disconnected")
- row = layout.row()
- row.active = md.use_remove_disconnected
- row.prop(md, "threshold")
-
- layout.prop(md, "use_smooth_shade")
-
- @staticmethod
- def vertex_weight_mask(layout, ob, md):
- layout.label(text="Influence/Mask Options:")
-
- split = layout.split(factor=0.4)
- split.label(text="Global Influence:")
- split.prop(md, "mask_constant", text="")
-
- if not md.mask_texture:
- split = layout.split(factor=0.4)
- split.label(text="Vertex Group Mask:")
- row = split.row(align=True)
- row.prop_search(md, "mask_vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_mask_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- if not md.mask_vertex_group:
- split = layout.split(factor=0.4)
- split.label(text="Texture Mask:")
- split.template_ID(md, "mask_texture", new="texture.new")
- if md.mask_texture:
- split = layout.split()
-
- col = split.column()
- col.label(text="Texture Coordinates:")
- col.prop(md, "mask_tex_mapping", text="")
-
- col = split.column()
- col.label(text="Use Channel:")
- col.prop(md, "mask_tex_use_channel", text="")
-
- if md.mask_tex_mapping == 'OBJECT':
- layout.prop(md, "mask_tex_map_object", text="Object")
- obj = md.mask_tex_map_object
- if obj and obj.type == 'ARMATURE':
- layout.prop_search(md, "mask_tex_map_bone", obj.data, "bones", text="Bone")
- elif md.mask_tex_mapping == 'UV' and ob.type == 'MESH':
- layout.prop_search(md, "mask_tex_uv_layer", ob.data, "uv_layers")
-
- def VERTEX_WEIGHT_EDIT(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="")
-
- col.label(text="Default Weight:")
- col.prop(md, "default_weight", text="")
-
- col = split.column()
- col.prop(md, "use_add")
- sub = col.column()
- sub.active = md.use_add
- sub.prop(md, "add_threshold")
-
- col = col.column()
- col.prop(md, "use_remove")
- sub = col.column()
- sub.active = md.use_remove
- sub.prop(md, "remove_threshold")
-
- layout.separator()
-
- row = layout.row(align=True)
- row.prop(md, "falloff_type")
- row.prop(md, "invert_falloff", text="", icon='ARROW_LEFTRIGHT')
- if md.falloff_type == 'CURVE':
- layout.template_curve_mapping(md, "map_curve")
-
- row = layout.row(align=True)
- row.prop(md, "normalize")
-
- # Common mask options
- layout.separator()
- self.vertex_weight_mask(layout, ob, md)
-
- def VERTEX_WEIGHT_MIX(self, layout, ob, md):
- split = layout.split()
-
- col = split.column()
- col.label(text="Vertex Group A:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group_a", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group_a", text="", icon='ARROW_LEFTRIGHT')
- col.label(text="Default Weight A:")
- col.prop(md, "default_weight_a", text="")
-
- col.label(text="Mix Mode:")
- col.prop(md, "mix_mode", text="")
-
- col = split.column()
- col.label(text="Vertex Group B:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group_b", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group_b", text="", icon='ARROW_LEFTRIGHT')
- col.label(text="Default Weight B:")
- col.prop(md, "default_weight_b", text="")
-
- col.label(text="Mix Set:")
- col.prop(md, "mix_set", text="")
-
- row = layout.row(align=True)
- row.prop(md, "normalize")
-
- # Common mask options
- layout.separator()
- self.vertex_weight_mask(layout, ob, md)
-
- def VERTEX_WEIGHT_PROXIMITY(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="")
-
- col = split.column()
- col.label(text="Target Object:")
- col.prop(md, "target", text="")
-
- split = layout.split()
-
- col = split.column()
- col.label(text="Distance:")
- col.prop(md, "proximity_mode", text="")
- if md.proximity_mode == 'GEOMETRY':
- col.row().prop(md, "proximity_geometry")
-
- col = split.column()
- col.label()
- col.prop(md, "min_dist")
- col.prop(md, "max_dist")
-
- layout.separator()
- row = layout.row(align=True)
- row.prop(md, "falloff_type")
- row.prop(md, "invert_falloff", text="", icon='ARROW_LEFTRIGHT')
-
- row = layout.row(align=True)
- row.prop(md, "normalize")
-
- # Common mask options
- layout.separator()
- self.vertex_weight_mask(layout, ob, md)
-
- def SKIN(self, layout, _ob, md):
- row = layout.row()
- row.operator("object.skin_armature_create", text="Create Armature")
- row.operator("mesh.customdata_skin_add")
-
- layout.separator()
-
- row = layout.row(align=True)
- row.prop(md, "branch_smoothing")
- row.prop(md, "use_smooth_shade")
-
- split = layout.split()
-
- col = split.column()
- col.label(text="Selected Vertices:")
- sub = col.column(align=True)
- sub.operator("object.skin_loose_mark_clear", text="Mark Loose").action = 'MARK'
- sub.operator("object.skin_loose_mark_clear", text="Clear Loose").action = 'CLEAR'
-
- sub = col.column()
- sub.operator("object.skin_root_mark", text="Mark Root")
- sub.operator("object.skin_radii_equalize", text="Equalize Radii")
-
- col = split.column()
- col.label(text="Symmetry Axes:")
- col.prop(md, "use_x_symmetry")
- col.prop(md, "use_y_symmetry")
- col.prop(md, "use_z_symmetry")
-
- def TRIANGULATE(self, layout, _ob, md):
- row = layout.row()
-
- col = row.column()
- col.label(text="Quad Method:")
- col.prop(md, "quad_method", text="")
- col.prop(md, "keep_custom_normals")
- col = row.column()
- col.label(text="Ngon Method:")
- col.prop(md, "ngon_method", text="")
- col.label(text="Minimum Vertices:")
- col.prop(md, "min_vertices", text="")
-
- def UV_WARP(self, layout, ob, md):
- split = layout.split()
- col = split.column()
- col.prop(md, "center")
-
- col = split.column()
- col.label(text="UV Axis:")
- col.prop(md, "axis_u", text="")
- col.prop(md, "axis_v", text="")
-
- split = layout.split()
- col = split.column()
- col.label(text="From:")
- col.prop(md, "object_from", text="")
-
- col = split.column()
- col.label(text="To:")
- col.prop(md, "object_to", text="")
-
- split = layout.split()
- col = split.column()
- obj = md.object_from
- if obj and obj.type == 'ARMATURE':
- col.label(text="Bone:")
- col.prop_search(md, "bone_from", obj.data, "bones", text="")
-
- col = split.column()
- obj = md.object_to
- if obj and obj.type == 'ARMATURE':
- col.label(text="Bone:")
- col.prop_search(md, "bone_to", obj.data, "bones", text="")
-
- split = layout.split()
- col = split.column()
- col.label(text="Offset:")
- col.prop(md, "offset", text="")
-
- col = split.column()
- col.label(text="Scale:")
- col.prop(md, "scale", text="")
-
- col = split.column()
- col.label(text="Rotate:")
- col.prop(md, "rotation", text="")
-
- split = layout.split()
-
- col = split.column()
- col.label(text="Vertex Group:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- col = split.column()
- col.label(text="UV Map:")
- col.prop_search(md, "uv_layer", ob.data, "uv_layers", text="")
-
- def WIREFRAME(self, layout, ob, md):
- has_vgroup = bool(md.vertex_group)
-
- split = layout.split()
-
- col = split.column()
- col.prop(md, "thickness", text="Thickness")
-
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- sub = row.row(align=True)
- sub.active = has_vgroup
- sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
- row = col.row(align=True)
- row.active = has_vgroup
- row.prop(md, "thickness_vertex_group", text="Factor")
-
- col.prop(md, "use_crease", text="Crease Edges")
- row = col.row()
- row.active = md.use_crease
- row.prop(md, "crease_weight", text="Crease Weight")
-
- col = split.column()
-
- col.prop(md, "offset")
- col.prop(md, "use_even_offset", text="Even Thickness")
- col.prop(md, "use_relative_offset", text="Relative Thickness")
- col.prop(md, "use_boundary", text="Boundary")
- col.prop(md, "use_replace", text="Replace Original")
-
- col.prop(md, "material_offset", text="Material Offset")
-
- def WELD(self, layout, ob, md):
- layout.prop(md, "merge_threshold", text="Distance")
- layout.prop(md, "max_interactions")
- row = layout.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- def DATA_TRANSFER(self, layout, ob, md):
- row = layout.row(align=True)
- row.prop(md, "object")
- sub = row.row(align=True)
- sub.active = bool(md.object)
- sub.prop(md, "use_object_transform", text="", icon='GROUP')
-
- layout.separator()
-
- split = layout.split(factor=0.333)
- split.prop(md, "use_vert_data")
- use_vert = md.use_vert_data
- row = split.row()
- row.active = use_vert
- row.prop(md, "vert_mapping", text="")
- if use_vert:
- col = layout.column(align=True)
- split = col.split(factor=0.333, align=True)
- sub = split.column(align=True)
- sub.prop(md, "data_types_verts")
- sub = split.column(align=True)
- row = sub.row(align=True)
- row.prop(md, "layers_vgroup_select_src", text="")
- row.label(icon='RIGHTARROW')
- row.prop(md, "layers_vgroup_select_dst", text="")
- row = sub.row(align=True)
- row.label(text="", icon='NONE')
-
- layout.separator()
-
- split = layout.split(factor=0.333)
- split.prop(md, "use_edge_data")
- use_edge = md.use_edge_data
- row = split.row()
- row.active = use_edge
- row.prop(md, "edge_mapping", text="")
- if use_edge:
- col = layout.column(align=True)
- split = col.split(factor=0.333, align=True)
- sub = split.column(align=True)
- sub.prop(md, "data_types_edges")
-
- layout.separator()
-
- split = layout.split(factor=0.333)
- split.prop(md, "use_loop_data")
- use_loop = md.use_loop_data
- row = split.row()
- row.active = use_loop
- row.prop(md, "loop_mapping", text="")
- if use_loop:
- col = layout.column(align=True)
- split = col.split(factor=0.333, align=True)
- sub = split.column(align=True)
- sub.prop(md, "data_types_loops")
- sub = split.column(align=True)
- row = sub.row(align=True)
- row.label(text="", icon='NONE')
- row = sub.row(align=True)
- row.prop(md, "layers_vcol_select_src", text="")
- row.label(icon='RIGHTARROW')
- row.prop(md, "layers_vcol_select_dst", text="")
- row = sub.row(align=True)
- row.prop(md, "layers_uv_select_src", text="")
- row.label(icon='RIGHTARROW')
- row.prop(md, "layers_uv_select_dst", text="")
- col.prop(md, "islands_precision")
-
- layout.separator()
-
- split = layout.split(factor=0.333)
- split.prop(md, "use_poly_data")
- use_poly = md.use_poly_data
- row = split.row()
- row.active = use_poly
- row.prop(md, "poly_mapping", text="")
- if use_poly:
- col = layout.column(align=True)
- split = col.split(factor=0.333, align=True)
- sub = split.column(align=True)
- sub.prop(md, "data_types_polys")
-
- layout.separator()
-
- split = layout.split()
- col = split.column()
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.active = md.use_max_distance
- sub.prop(md, "max_distance")
- row.prop(md, "use_max_distance", text="", icon='STYLUS_PRESSURE')
-
- col = split.column()
- col.prop(md, "ray_radius")
-
- layout.separator()
-
- split = layout.split()
- col = split.column()
- col.prop(md, "mix_mode")
- col.prop(md, "mix_factor")
-
- col = split.column()
- row = col.row()
- row.active = bool(md.object)
- row.operator("object.datalayout_transfer", text="Generate Data Layers")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- sub = row.row(align=True)
- sub.active = bool(md.vertex_group)
- sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- def NORMAL_EDIT(self, layout, ob, md):
- has_vgroup = bool(md.vertex_group)
- do_polynors_fix = not md.no_polynors_fix
- needs_object_offset = (((md.mode == 'RADIAL') and not md.target) or
- ((md.mode == 'DIRECTIONAL') and md.use_direction_parallel))
-
- row = layout.row()
- row.prop(md, "mode", expand=True)
-
- split = layout.split()
-
- col = split.column()
- col.prop(md, "target", text="")
- sub = col.column(align=True)
- sub.active = needs_object_offset
- sub.prop(md, "offset")
- row = col.row(align=True)
-
- col = split.column()
- row = col.row()
- row.active = (md.mode == 'DIRECTIONAL')
- row.prop(md, "use_direction_parallel")
-
- subcol = col.column(align=True)
- subcol.label(text="Mix Mode:")
- subcol.prop(md, "mix_mode", text="")
- subcol.prop(md, "mix_factor")
- row = subcol.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- sub = row.row(align=True)
- sub.active = has_vgroup
- sub.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
- row = subcol.row(align=True)
- row.prop(md, "mix_limit")
- row.prop(md, "no_polynors_fix", text="", icon='UNLOCKED' if do_polynors_fix else 'LOCKED')
-
- def CORRECTIVE_SMOOTH(self, layout, ob, md):
- is_bind = md.is_bind
-
- layout.prop(md, "factor", text="Factor")
- layout.prop(md, "iterations")
- layout.prop(md, "scale")
- row = layout.row()
- row.prop(md, "smooth_type")
-
- split = layout.split()
-
- col = split.column()
- col.label(text="Vertex Group:")
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
-
- col = split.column()
- col.prop(md, "use_only_smooth")
- col.prop(md, "use_pin_boundary")
-
- layout.prop(md, "rest_source")
- if md.rest_source == 'BIND':
- layout.operator("object.correctivesmooth_bind", text="Unbind" if is_bind else "Bind")
-
- def WEIGHTED_NORMAL(self, layout, ob, md):
- layout.label(text="Weighting Mode:")
- split = layout.split(align=True)
- col = split.column(align=True)
- col.prop(md, "mode", text="")
- col.prop(md, "weight", text="Weight")
- col.prop(md, "keep_sharp")
-
- col = split.column(align=True)
- row = col.row(align=True)
- row.prop_search(md, "vertex_group", ob, "vertex_groups", text="")
- row.active = bool(md.vertex_group)
- row.prop(md, "invert_vertex_group", text="", icon='ARROW_LEFTRIGHT')
- col.prop(md, "thresh", text="Threshold")
- col.prop(md, "face_influence")
-
- def SIMULATION(self, layout, ob, md):
- layout.prop(md, "simulation")
- layout.prop(md, "data_path")
+ layout.template_modifiers()
class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):