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:
authorVuk Gardašević <lijenstina>2018-08-17 13:05:16 +0300
committerPablo Vazquez <venomgfx@gmail.com>2018-08-17 13:05:35 +0300
commit502aabb9d0c5b65614baf4d7785681f154abd77c (patch)
treec4ef2b5b49be7e53c37b6d6e37b422fb916f130d /release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
parentb19b708728d6b7ddd6d4a5c656a7fb1da2311195 (diff)
Physics Rigid Body: Use Single Column and Grid Flow layout
(and Rigid Body Constraint) See D3613
Diffstat (limited to 'release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py')
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py595
1 files changed, 410 insertions, 185 deletions
diff --git a/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py b/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
index 5e67caadc90..2c2d92be372 100644
--- a/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
+++ b/release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
@@ -17,8 +17,11 @@
# ##### END GPL LICENSE BLOCK #####
# <pep8 compliant>
+
import bpy
-from bpy.types import Panel
+from bpy.types import (
+ Panel,
+)
class PHYSICS_PT_rigidbody_constraint_panel:
@@ -38,236 +41,458 @@ class PHYSICS_PT_rigid_body_constraint(PHYSICS_PT_rigidbody_constraint_panel, Pa
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
ob = context.object
rbc = ob.rigid_body_constraint
layout.prop(rbc, "type")
- row = layout.row()
- row.prop(rbc, "enabled")
- row.prop(rbc, "disable_collisions")
- layout.prop(rbc, "object1")
- layout.prop(rbc, "object2")
+class PHYSICS_PT_rigid_body_constraint_settings(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Settings"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
+
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ col = flow.column()
+ col.prop(rbc, "enabled")
+ col.prop(rbc, "disable_collisions")
if rbc.type != 'MOTOR':
- row = layout.row()
- row.prop(rbc, "use_breaking")
- sub = row.row()
+ col = flow.column()
+ col.prop(rbc, "use_breaking")
+
+ sub = col.column()
sub.active = rbc.use_breaking
sub.prop(rbc, "breaking_threshold", text="Threshold")
- row = layout.row()
- row.prop(rbc, "use_override_solver_iterations", text="Override Iterations")
- sub = row.row()
- sub.active = rbc.use_override_solver_iterations
- sub.prop(rbc, "solver_iterations", text="Iterations")
- if rbc.type == 'HINGE':
- col = layout.column(align=True)
- col.label("Limits:")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_ang_z", toggle=True)
- sub = row.row(align=True)
- sub.active = rbc.use_limit_ang_z
- sub.prop(rbc, "limit_ang_z_lower", text="Lower")
- sub.prop(rbc, "limit_ang_z_upper", text="Upper")
+class PHYSICS_PT_rigid_body_constraint_objects(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Objects"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
- elif rbc.type == 'SLIDER':
- col = layout.column(align=True)
- col.label("Limits:")
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES)
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_lin_x", toggle=True)
- sub = row.row(align=True)
- sub.active = rbc.use_limit_lin_x
- sub.prop(rbc, "limit_lin_x_lower", text="Lower")
- sub.prop(rbc, "limit_lin_x_upper", text="Upper")
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
- elif rbc.type == 'PISTON':
- col = layout.column(align=True)
- col.label("Limits:")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_lin_x", toggle=True)
- sub = row.row(align=True)
- sub.active = rbc.use_limit_lin_x
- sub.prop(rbc, "limit_lin_x_lower", text="Lower")
- sub.prop(rbc, "limit_lin_x_upper", text="Upper")
+ ob = context.object
+ rbc = ob.rigid_body_constraint
- col = layout.column(align=True)
+ layout.prop(rbc, "object1", text="First")
+ layout.prop(rbc, "object2", text="Second")
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_ang_x", toggle=True)
- sub = row.row(align=True)
- sub.active = rbc.use_limit_ang_x
- sub.prop(rbc, "limit_ang_x_lower", text="Lower")
- sub.prop(rbc, "limit_ang_x_upper", text="Upper")
- elif rbc.type == 'MOTOR':
- col = layout.column(align=True)
- col.label("Linear motor:")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_motor_lin", toggle=True, text="Enable")
- sub = row.row(align=True)
- sub.active = rbc.use_motor_lin
- sub.prop(rbc, "motor_lin_target_velocity", text="Target Velocity")
- sub.prop(rbc, "motor_lin_max_impulse", text="Max Impulse")
-
- col.label("Angular motor:")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_motor_ang", toggle=True, text="Enable")
- sub = row.row(align=True)
- sub.active = rbc.use_motor_ang
- sub.prop(rbc, "motor_ang_target_velocity", text="Target Velocity")
- sub.prop(rbc, "motor_ang_max_impulse", text="Max Impulse")
+class PHYSICS_PT_rigid_body_constraint_override_iterations(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Override Iterations"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+ self.layout.row().prop(rbc, "use_override_solver_iterations", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ layout.active = rbc.use_override_solver_iterations
+ layout.prop(rbc, "solver_iterations", text="Iterations")
+
+
+class PHYSICS_PT_rigid_body_constraint_limits(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Limits"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ return (ob and rbc and (rbc.type in {'GENERIC', 'GENERIC_SPRING', 'HINGE', 'SLIDER', 'PISTON'})
+ and context.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ return # do nothing.
+
+
+class PHYSICS_PT_rigid_body_constraint_limits_linear(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Linear"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_limits'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ return (ob and rbc
+ and (rbc.type in {'GENERIC', 'GENERIC_SPRING', 'SLIDER', 'PISTON'})
+ and context.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
+
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ if rbc.type in {'PISTON', 'SLIDER'}:
+ col = flow.column()
+ col.prop(rbc, "use_limit_lin_x")
+
+ sub = col.column(align=True)
+ sub.active = rbc.use_limit_lin_x
+ sub.prop(rbc, "limit_lin_x_lower", text="X Lower")
+ sub.prop(rbc, "limit_lin_x_upper", text="Upper")
elif rbc.type in {'GENERIC', 'GENERIC_SPRING'}:
- if rbc.type == 'GENERIC_SPRING':
- row = layout.row()
- row.label("Spring Type:")
- row.prop(rbc, "spring_type", text="")
-
- col = layout.column(align=True)
- col.label("Limits:")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_lin_x", toggle=True)
- sub = row.row(align=True)
+ col = flow.column()
+ col.prop(rbc, "use_limit_lin_x")
+
+ sub = col.column(align=True)
sub.active = rbc.use_limit_lin_x
- sub.prop(rbc, "limit_lin_x_lower", text="Lower")
+ sub.prop(rbc, "limit_lin_x_lower", text="X Lower")
sub.prop(rbc, "limit_lin_x_upper", text="Upper")
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_lin_y", toggle=True)
- sub = row.row(align=True)
+ col = flow.column()
+ col.prop(rbc, "use_limit_lin_y")
+
+ sub = col.column(align=True)
sub.active = rbc.use_limit_lin_y
- sub.prop(rbc, "limit_lin_y_lower", text="Lower")
+ sub.prop(rbc, "limit_lin_y_lower", text="Y Lower")
sub.prop(rbc, "limit_lin_y_upper", text="Upper")
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_lin_z", toggle=True)
- sub = row.row(align=True)
+ col = flow.column()
+ col.prop(rbc, "use_limit_lin_z")
+
+ sub = col.column(align=True)
sub.active = rbc.use_limit_lin_z
- sub.prop(rbc, "limit_lin_z_lower", text="Lower")
+ sub.prop(rbc, "limit_lin_z_lower", text="Z Lower")
sub.prop(rbc, "limit_lin_z_upper", text="Upper")
- col = layout.column(align=True)
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_ang_x", toggle=True)
- sub = row.row(align=True)
+class PHYSICS_PT_rigid_body_constraint_limits_angular(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Angular"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_limits'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ return (ob and rbc
+ and (rbc.type in {'GENERIC_SPRING', 'HINGE', 'PISTON'})
+ and context.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
+
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ if rbc.type == 'HINGE':
+ col = flow.column()
+ col.prop(rbc, "use_limit_ang_z")
+
+ sub = col.column(align=True)
+ sub.active = rbc.use_limit_ang_z
+ sub.prop(rbc, "limit_ang_z_lower", text="Z Lower")
+ sub.prop(rbc, "limit_ang_z_upper", text="Upper")
+
+ elif rbc.type == 'PISTON':
+ col = flow.column()
+ col.prop(rbc, "use_limit_ang_x")
+
+ sub = col.column(align=True)
+ sub.active = rbc.use_limit_ang_x
+ sub.prop(rbc, "limit_ang_x_lower", text="X Lower")
+ sub.prop(rbc, "limit_ang_x_upper", text="Upper")
+
+ elif rbc.type == 'GENERIC_SPRING':
+ col = flow.column()
+ col.prop(rbc, "use_limit_ang_x")
+
+ sub = col.column(align=True)
sub.active = rbc.use_limit_ang_x
- sub.prop(rbc, "limit_ang_x_lower", text="Lower")
+ sub.prop(rbc, "limit_ang_x_lower", text="X Lower")
sub.prop(rbc, "limit_ang_x_upper", text="Upper")
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_ang_y", toggle=True)
- sub = row.row(align=True)
+ col = flow.column()
+ col.prop(rbc, "use_limit_ang_y")
+
+ sub = col.column(align=True)
sub.active = rbc.use_limit_ang_y
- sub.prop(rbc, "limit_ang_y_lower", text="Lower")
+ sub.prop(rbc, "limit_ang_y_lower", text="Y Lower")
sub.prop(rbc, "limit_ang_y_upper", text="Upper")
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_limit_ang_z", toggle=True)
- sub = row.row(align=True)
+ col = flow.column()
+ col.prop(rbc, "use_limit_ang_z")
+
+ sub = col.column(align=True)
sub.active = rbc.use_limit_ang_z
- sub.prop(rbc, "limit_ang_z_lower", text="Lower")
+ sub.prop(rbc, "limit_ang_z_lower", text="Z Lower")
sub.prop(rbc, "limit_ang_z_upper", text="Upper")
- if rbc.type == 'GENERIC_SPRING':
- col = layout.column(align=True)
- col.label("Springs:")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_spring_x", toggle=True, text="X Axis")
- sub = row.row(align=True)
- sub.active = rbc.use_spring_x
- sub.prop(rbc, "spring_stiffness_x", text="Stiffness")
- sub.prop(rbc, "spring_damping_x", text="Damping")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_spring_y", toggle=True, text="Y Axis")
- sub = row.row(align=True)
- sub.active = rbc.use_spring_y
- sub.prop(rbc, "spring_stiffness_y", text="Stiffness")
- sub.prop(rbc, "spring_damping_y", text="Damping")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_spring_z", toggle=True, text="Z Axis")
- sub = row.row(align=True)
- sub.active = rbc.use_spring_z
- sub.prop(rbc, "spring_stiffness_z", text="Stiffness")
- sub.prop(rbc, "spring_damping_z", text="Damping")
-
- col = layout.column(align=True)
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_spring_ang_x", toggle=True, text="X Angle")
- sub = row.row(align=True)
- sub.active = rbc.use_spring_ang_x
- sub.prop(rbc, "spring_stiffness_ang_x", text="Stiffness")
- sub.prop(rbc, "spring_damping_ang_x", text="Damping")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_spring_ang_y", toggle=True, text="Y Angle")
- sub = row.row(align=True)
- sub.active = rbc.use_spring_ang_y
- sub.prop(rbc, "spring_stiffness_ang_y", text="Stiffness")
- sub.prop(rbc, "spring_damping_ang_y", text="Damping")
-
- row = col.row(align=True)
- sub = row.row(align=True)
- sub.scale_x = 0.5
- sub.prop(rbc, "use_spring_ang_z", toggle=True, text="Z Angle")
- sub = row.row(align=True)
- sub.active = rbc.use_spring_ang_z
- sub.prop(rbc, "spring_stiffness_ang_z", text="Stiffness")
- sub.prop(rbc, "spring_damping_ang_z", text="Damping")
+
+class PHYSICS_PT_rigid_body_constraint_motor(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Motor"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ return (ob and rbc and rbc.type == 'MOTOR'
+ and context.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ return # do nothing.
+
+
+class PHYSICS_PT_rigid_body_constraint_motor_angular(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Angular"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_motor'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ return (ob and rbc and rbc.type == 'MOTOR'
+ and context.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ self.layout.row().prop(rbc, "use_motor_ang", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
+
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ flow.active = rbc.use_motor_ang
+
+ col = flow.column(align=True)
+ col.prop(rbc, "motor_ang_target_velocity", text="Target Velocity")
+
+ col = flow.column(align=True)
+ col.prop(rbc, "motor_ang_max_impulse", text="Max Impulse")
+
+
+class PHYSICS_PT_rigid_body_constraint_motor_linear(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Linear"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_motor'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ return (ob and rbc and rbc.type == 'MOTOR'
+ and context.engine in cls.COMPAT_ENGINES)
+
+ def draw_header(self, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ self.layout.row().prop(rbc, "use_motor_lin", text="")
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+ flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
+
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ flow.active = rbc.use_motor_lin
+
+ col = flow.column(align=True)
+ col.prop(rbc, "motor_lin_target_velocity", text="Target Velocity")
+
+ col = flow.column(align=True)
+ col.prop(rbc, "motor_lin_max_impulse", text="Max Impulse")
+
+
+class PHYSICS_PT_rigid_body_constraint_springs(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Springs"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ return (ob and ob.rigid_body_constraint
+ and rbc.type in {'GENERIC_SPRING'}
+ and context.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ layout.prop(rbc, "spring_type", text="Type")
+
+
+class PHYSICS_PT_rigid_body_constraint_springs_angular(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Angular"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_springs'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ return (ob and ob.rigid_body_constraint
+ and rbc.type in {'GENERIC_SPRING'}
+ and context.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
+
+ col = flow.column()
+ col.prop(rbc, "use_spring_ang_x", text="X Angle")
+
+ sub = col.column(align=True)
+ sub.active = rbc.use_spring_ang_x
+ sub.prop(rbc, "spring_stiffness_ang_x", text="X Stiffness")
+ sub.prop(rbc, "spring_damping_ang_x", text="Damping")
+
+ col = flow.column()
+ col.prop(rbc, "use_spring_ang_y", text="Y Angle")
+
+ sub = col.column(align=True)
+ sub.active = rbc.use_spring_ang_y
+ sub.prop(rbc, "spring_stiffness_ang_y", text="Y Stiffness")
+ sub.prop(rbc, "spring_damping_ang_y", text="Damping")
+
+ col = flow.column()
+ col.prop(rbc, "use_spring_ang_z", text="Z Angle")
+
+ sub = col.column(align=True)
+ sub.active = rbc.use_spring_ang_z
+ sub.prop(rbc, "spring_stiffness_ang_z", text="Z Stiffness")
+ sub.prop(rbc, "spring_damping_ang_z", text="Damping")
+
+
+class PHYSICS_PT_rigid_body_constraint_springs_linear(PHYSICS_PT_rigidbody_constraint_panel, Panel):
+ bl_label = "Linear"
+ bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_springs'
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_OPENGL'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ return (ob and ob.rigid_body_constraint
+ and rbc.type in {'GENERIC_SPRING'}
+ and context.engine in cls.COMPAT_ENGINES)
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ ob = context.object
+ rbc = ob.rigid_body_constraint
+
+ flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
+
+ col = flow.column()
+ col.prop(rbc, "use_spring_x", text="X Axis")
+
+ sub = col.column(align=True)
+ sub.active = rbc.use_spring_x
+ sub.prop(rbc, "spring_stiffness_x", text="X Stiffness")
+ sub.prop(rbc, "spring_damping_x", text="Damping")
+
+ col = flow.column()
+ col.prop(rbc, "use_spring_y", text="Y Axis")
+
+ sub = col.column(align=True)
+ sub.active = rbc.use_spring_y
+ sub.prop(rbc, "spring_stiffness_y", text="Stiffness")
+ sub.prop(rbc, "spring_damping_y", text="Damping")
+
+ col = flow.column()
+ col.prop(rbc, "use_spring_z", text="Z Axis")
+
+ sub = col.column(align=True)
+ sub.active = rbc.use_spring_z
+ sub.prop(rbc, "spring_stiffness_z", text="Stiffness")
+ sub.prop(rbc, "spring_damping_z", text="Damping")
classes = (
PHYSICS_PT_rigid_body_constraint,
+ PHYSICS_PT_rigid_body_constraint_settings,
+ PHYSICS_PT_rigid_body_constraint_limits,
+ PHYSICS_PT_rigid_body_constraint_limits_angular,
+ PHYSICS_PT_rigid_body_constraint_limits_linear,
+ PHYSICS_PT_rigid_body_constraint_motor,
+ PHYSICS_PT_rigid_body_constraint_motor_angular,
+ PHYSICS_PT_rigid_body_constraint_motor_linear,
+ PHYSICS_PT_rigid_body_constraint_objects,
+ PHYSICS_PT_rigid_body_constraint_override_iterations,
+ PHYSICS_PT_rigid_body_constraint_springs,
+ PHYSICS_PT_rigid_body_constraint_springs_angular,
+ PHYSICS_PT_rigid_body_constraint_springs_linear,
)
+
if __name__ == "__main__": # only for live edit.
from bpy.utils import register_class
for cls in classes: