UI: Single-column layout for Force Fields and Particles
Force Fields and Falloff are now simpler and more compact by removing unnecesary labels (there was a text label just for one option) Particle Force Fields Falloff is now a sub-panel of each effector type, rather than just as a section with label.
This commit is contained in:
parent
51e077c5c0
commit
26251282e0
|
@ -500,6 +500,7 @@ class PARTICLE_PT_cache(ParticleButtonsPanel, Panel):
|
|||
|
||||
class PARTICLE_PT_velocity(ParticleButtonsPanel, Panel):
|
||||
bl_label = "Velocity"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
|
||||
|
||||
@classmethod
|
||||
|
@ -626,6 +627,7 @@ class PARTICLE_PT_rotation_angular_velocity(ParticleButtonsPanel, Panel):
|
|||
|
||||
class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
|
||||
bl_label = "Physics"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
|
||||
|
||||
@classmethod
|
||||
|
@ -1012,6 +1014,7 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel, Panel):
|
|||
|
||||
class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
|
||||
bl_label = "Render"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
|
||||
|
||||
@classmethod
|
||||
|
@ -1710,30 +1713,77 @@ class PARTICLE_PT_force_fields(ParticleButtonsPanel, Panel):
|
|||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
|
||||
part = particle_get_settings(context)
|
||||
|
||||
row = layout.row()
|
||||
row.prop(part, "use_self_effect")
|
||||
row.prop(part, "effector_amount", text="Amount")
|
||||
col = layout.column()
|
||||
col.prop(part, "use_self_effect")
|
||||
col.prop(part, "effector_amount", text="Effector Amount")
|
||||
|
||||
split = layout.split(percentage=0.2)
|
||||
split.label(text="Type 1:")
|
||||
split.prop(part.force_field_1, "type", text="")
|
||||
|
||||
class PARTICLE_PT_force_fields_type1(ParticleButtonsPanel, Panel):
|
||||
bl_label = "Type 1"
|
||||
bl_parent_id = "PARTICLE_PT_force_fields"
|
||||
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
|
||||
part = particle_get_settings(context)
|
||||
|
||||
col = layout.column()
|
||||
col.prop(part.force_field_1, "type", text="Type 1")
|
||||
basic_force_field_settings_ui(self, context, part.force_field_1)
|
||||
if part.force_field_1.type != 'NONE':
|
||||
layout.label(text="Falloff:")
|
||||
|
||||
|
||||
|
||||
class PARTICLE_PT_force_fields_type2(ParticleButtonsPanel, Panel):
|
||||
bl_label = "Type 2"
|
||||
bl_parent_id = "PARTICLE_PT_force_fields"
|
||||
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
|
||||
part = particle_get_settings(context)
|
||||
|
||||
col = layout.column()
|
||||
col.prop(part.force_field_2, "type", text="Type 2")
|
||||
basic_force_field_settings_ui(self, context, part.force_field_2)
|
||||
|
||||
|
||||
class PARTICLE_PT_force_fields_type1_falloff(ParticleButtonsPanel, Panel):
|
||||
bl_label = "Falloff"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
bl_parent_id = "PARTICLE_PT_force_fields_type1"
|
||||
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
|
||||
part = particle_get_settings(context)
|
||||
|
||||
basic_force_field_falloff_ui(self, context, part.force_field_1)
|
||||
|
||||
if part.force_field_1.type != 'NONE':
|
||||
layout.label(text="")
|
||||
|
||||
split = layout.split(percentage=0.2)
|
||||
split.label(text="Type 2:")
|
||||
split.prop(part.force_field_2, "type", text="")
|
||||
basic_force_field_settings_ui(self, context, part.force_field_2)
|
||||
if part.force_field_2.type != 'NONE':
|
||||
layout.label(text="Falloff:")
|
||||
|
||||
class PARTICLE_PT_force_fields_type2_falloff(ParticleButtonsPanel, Panel):
|
||||
bl_label = "Falloff"
|
||||
bl_options = {'DEFAULT_CLOSED'}
|
||||
bl_parent_id = "PARTICLE_PT_force_fields_type2"
|
||||
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
|
||||
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
|
||||
part = particle_get_settings(context)
|
||||
|
||||
basic_force_field_falloff_ui(self, context, part.force_field_2)
|
||||
|
||||
|
||||
|
@ -1916,6 +1966,10 @@ classes = (
|
|||
PARTICLE_PT_hair_shape,
|
||||
PARTICLE_PT_field_weights,
|
||||
PARTICLE_PT_force_fields,
|
||||
PARTICLE_PT_force_fields_type1,
|
||||
PARTICLE_PT_force_fields_type1_falloff,
|
||||
PARTICLE_PT_force_fields_type2,
|
||||
PARTICLE_PT_force_fields_type2_falloff,
|
||||
PARTICLE_PT_vertexgroups,
|
||||
PARTICLE_PT_textures,
|
||||
PARTICLE_PT_custom_props,
|
||||
|
|
|
@ -244,6 +244,7 @@ def effector_weights_ui(self, context, weights, weight_type):
|
|||
|
||||
def basic_force_field_settings_ui(self, context, field):
|
||||
layout = self.layout
|
||||
layout.use_property_split = True
|
||||
|
||||
if not field or field.type == 'NONE':
|
||||
return
|
||||
|
@ -279,11 +280,9 @@ def basic_force_field_settings_ui(self, context, field):
|
|||
if field.type == 'FORCE':
|
||||
col.prop(field, "use_gravity_falloff", text="Gravitation")
|
||||
|
||||
col.label(text="Effect point")
|
||||
col.prop(field, "apply_to_location")
|
||||
col.prop(field, "apply_to_rotation")
|
||||
|
||||
col.label(text="Collision")
|
||||
col.prop(field, "apply_to_location", text="Affect Location")
|
||||
col.prop(field, "apply_to_rotation", text="Affect Rotation")
|
||||
col.prop(field, "use_absorption")
|
||||
|
||||
|
||||
|
@ -298,15 +297,17 @@ def basic_force_field_falloff_ui(self, context, field):
|
|||
|
||||
col.prop(field, "falloff_power", text="Power")
|
||||
|
||||
col.prop(field, "use_min_distance", text="Min Min Distance")
|
||||
sub = col.column(align=True)
|
||||
split = layout.split()
|
||||
split.prop(field, "use_min_distance", text="Min Distance")
|
||||
sub = split.column(align=True)
|
||||
sub.active = field.use_min_distance
|
||||
sub.prop(field, "distance_min", text="Min Distance")
|
||||
sub.prop(field, "distance_min", text="")
|
||||
|
||||
col.prop(field, "use_max_distance", text="Use Max Distance")
|
||||
sub = col.column(align=True)
|
||||
split = layout.split()
|
||||
split.prop(field, "use_max_distance", text="Max Distance")
|
||||
sub = split.column(align=True)
|
||||
sub.active = field.use_max_distance
|
||||
sub.prop(field, "distance_max", text="Max Distance")
|
||||
sub.prop(field, "distance_max", text="")
|
||||
|
||||
|
||||
classes = (
|
||||
|
|
Loading…
Reference in New Issue