Differential D16826 Diff 59819 release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
Changeset View
Changeset View
Standalone View
Standalone View
release/scripts/startup/bl_ui/properties_physics_rigidbody_constraint.py
| # SPDX-License-Identifier: GPL-2.0-or-later | # SPDX-License-Identifier: GPL-2.0-or-later | ||||
| from bpy.types import ( | from bpy.types import ( | ||||
| Panel, | Panel, | ||||
| ) | ) | ||||
| class PHYSICS_PT_rigidbody_constraint_panel: | class PHYSICS_PT_rigidbody_constraint_panel: | ||||
| bl_space_type = 'PROPERTIES' | bl_space_type = 'PROPERTIES' | ||||
| bl_region_type = 'WINDOW' | bl_region_type = 'WINDOW' | ||||
| bl_context = "physics" | bl_context = "physics" | ||||
| class PHYSICS_PT_rigid_body_constraint(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Rigid Body Constraint" | bl_label = "Rigid Body Constraint" | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES) | return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES) | ||||
| def draw(self, context): | def draw(self, context): | ||||
| layout = self.layout | layout = self.layout | ||||
| layout.use_property_split = True | layout.use_property_split = True | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| layout.prop(rbc, "type") | layout.prop(rbc, "type") | ||||
| class PHYSICS_PT_rigid_body_constraint_settings(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_settings(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Settings" | bl_label = "Settings" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES) | return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES) | ||||
| def draw(self, context): | def draw(self, context): | ||||
| layout = self.layout | layout = self.layout | ||||
| Show All 14 Lines | def draw(self, context): | ||||
| sub = col.column() | sub = col.column() | ||||
| sub.active = rbc.use_breaking | sub.active = rbc.use_breaking | ||||
| sub.prop(rbc, "breaking_threshold", text="Threshold") | sub.prop(rbc, "breaking_threshold", text="Threshold") | ||||
| class PHYSICS_PT_rigid_body_constraint_objects(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_objects(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Objects" | bl_label = "Objects" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES) | return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES) | ||||
| def draw(self, context): | def draw(self, context): | ||||
| layout = self.layout | layout = self.layout | ||||
| layout.use_property_split = True | layout.use_property_split = True | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| layout.prop(rbc, "object1", text="First") | layout.prop(rbc, "object1", text="First") | ||||
| layout.prop(rbc, "object2", text="Second") | layout.prop(rbc, "object2", text="Second") | ||||
| class PHYSICS_PT_rigid_body_constraint_override_iterations(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_override_iterations(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Override Iterations" | bl_label = "Override Iterations" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES) | return (ob and ob.rigid_body_constraint and context.engine in cls.COMPAT_ENGINES) | ||||
| def draw_header(self, context): | def draw_header(self, context): | ||||
| ob = context.object | ob = context.object | ||||
| Show All 9 Lines | def draw(self, context): | ||||
| layout.active = rbc.use_override_solver_iterations | layout.active = rbc.use_override_solver_iterations | ||||
| layout.prop(rbc, "solver_iterations", text="Iterations") | layout.prop(rbc, "solver_iterations", text="Iterations") | ||||
| class PHYSICS_PT_rigid_body_constraint_limits(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_limits(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Limits" | bl_label = "Limits" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| return (ob and rbc and (rbc.type in {'GENERIC', 'GENERIC_SPRING', 'HINGE', 'SLIDER', 'PISTON'}) | return (ob and rbc and (rbc.type in {'GENERIC', 'GENERIC_SPRING', 'HINGE', 'SLIDER', 'PISTON'}) | ||||
| and context.engine in cls.COMPAT_ENGINES) | and context.engine in cls.COMPAT_ENGINES) | ||||
| def draw(self, _context): | def draw(self, _context): | ||||
| return # do nothing. | return # do nothing. | ||||
| class PHYSICS_PT_rigid_body_constraint_limits_linear(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_limits_linear(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Linear" | bl_label = "Linear" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_limits' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_limits' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| return (ob and rbc | return (ob and rbc | ||||
| and (rbc.type in {'GENERIC', 'GENERIC_SPRING', 'SLIDER', 'PISTON'}) | and (rbc.type in {'GENERIC', 'GENERIC_SPRING', 'SLIDER', 'PISTON'}) | ||||
| Show All 40 Lines | def draw(self, context): | ||||
| sub.active = rbc.use_limit_lin_z | sub.active = rbc.use_limit_lin_z | ||||
| sub.prop(rbc, "limit_lin_z_lower", text="Z Lower") | sub.prop(rbc, "limit_lin_z_lower", text="Z Lower") | ||||
| sub.prop(rbc, "limit_lin_z_upper", text="Upper") | sub.prop(rbc, "limit_lin_z_upper", text="Upper") | ||||
| class PHYSICS_PT_rigid_body_constraint_limits_angular(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_limits_angular(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Angular" | bl_label = "Angular" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_limits' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_limits' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| return (ob and rbc | return (ob and rbc | ||||
| and (rbc.type in {'GENERIC', 'GENERIC_SPRING', 'HINGE', 'PISTON'}) | and (rbc.type in {'GENERIC', 'GENERIC_SPRING', 'HINGE', 'PISTON'}) | ||||
| ▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | def draw(self, context): | ||||
| sub.active = rbc.use_limit_ang_z | sub.active = rbc.use_limit_ang_z | ||||
| sub.prop(rbc, "limit_ang_z_lower", text="Z Lower") | sub.prop(rbc, "limit_ang_z_lower", text="Z Lower") | ||||
| sub.prop(rbc, "limit_ang_z_upper", text="Upper") | sub.prop(rbc, "limit_ang_z_upper", text="Upper") | ||||
| class PHYSICS_PT_rigid_body_constraint_motor(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_motor(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Motor" | bl_label = "Motor" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| return (ob and rbc and rbc.type == 'MOTOR' | return (ob and rbc and rbc.type == 'MOTOR' | ||||
| and context.engine in cls.COMPAT_ENGINES) | and context.engine in cls.COMPAT_ENGINES) | ||||
| def draw(self, _context): | def draw(self, _context): | ||||
| return # do nothing. | return # do nothing. | ||||
| class PHYSICS_PT_rigid_body_constraint_motor_angular(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_motor_angular(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Angular" | bl_label = "Angular" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_motor' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_motor' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| return (ob and rbc and rbc.type == 'MOTOR' | return (ob and rbc and rbc.type == 'MOTOR' | ||||
| and context.engine in cls.COMPAT_ENGINES) | and context.engine in cls.COMPAT_ENGINES) | ||||
| Show All 19 Lines | def draw(self, context): | ||||
| col = flow.column(align=True) | col = flow.column(align=True) | ||||
| col.prop(rbc, "motor_ang_max_impulse", text="Max Impulse") | col.prop(rbc, "motor_ang_max_impulse", text="Max Impulse") | ||||
| class PHYSICS_PT_rigid_body_constraint_motor_linear(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_motor_linear(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Linear" | bl_label = "Linear" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_motor' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_motor' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| return (ob and rbc and rbc.type == 'MOTOR' | return (ob and rbc and rbc.type == 'MOTOR' | ||||
| and context.engine in cls.COMPAT_ENGINES) | and context.engine in cls.COMPAT_ENGINES) | ||||
| Show All 19 Lines | def draw(self, context): | ||||
| col = flow.column(align=True) | col = flow.column(align=True) | ||||
| col.prop(rbc, "motor_lin_max_impulse", text="Max Impulse") | col.prop(rbc, "motor_lin_max_impulse", text="Max Impulse") | ||||
| class PHYSICS_PT_rigid_body_constraint_springs(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_springs(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Springs" | bl_label = "Springs" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| return (ob and ob.rigid_body_constraint | return (ob and ob.rigid_body_constraint | ||||
| and rbc.type == 'GENERIC_SPRING' | and rbc.type == 'GENERIC_SPRING' | ||||
| and context.engine in cls.COMPAT_ENGINES) | and context.engine in cls.COMPAT_ENGINES) | ||||
| def draw(self, context): | def draw(self, context): | ||||
| layout = self.layout | layout = self.layout | ||||
| layout.use_property_split = True | layout.use_property_split = True | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| layout.prop(rbc, "spring_type", text="Type") | layout.prop(rbc, "spring_type", text="Type") | ||||
| class PHYSICS_PT_rigid_body_constraint_springs_angular(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_springs_angular(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Angular" | bl_label = "Angular" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_springs' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_springs' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| return (ob and ob.rigid_body_constraint | return (ob and ob.rigid_body_constraint | ||||
| and rbc.type == 'GENERIC_SPRING' | and rbc.type == 'GENERIC_SPRING' | ||||
| Show All 31 Lines | def draw(self, context): | ||||
| sub.active = rbc.use_spring_ang_z | sub.active = rbc.use_spring_ang_z | ||||
| sub.prop(rbc, "spring_stiffness_ang_z", text="Z Stiffness") | sub.prop(rbc, "spring_stiffness_ang_z", text="Z Stiffness") | ||||
| sub.prop(rbc, "spring_damping_ang_z", text="Damping") | sub.prop(rbc, "spring_damping_ang_z", text="Damping") | ||||
| class PHYSICS_PT_rigid_body_constraint_springs_linear(PHYSICS_PT_rigidbody_constraint_panel, Panel): | class PHYSICS_PT_rigid_body_constraint_springs_linear(PHYSICS_PT_rigidbody_constraint_panel, Panel): | ||||
| bl_label = "Linear" | bl_label = "Linear" | ||||
| bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_springs' | bl_parent_id = 'PHYSICS_PT_rigid_body_constraint_springs' | ||||
| COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH'} | COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_EEVEE_NEXT', 'BLENDER_WORKBENCH','BLENDER_WORKBENCH_NEXT'} | ||||
| @classmethod | @classmethod | ||||
| def poll(cls, context): | def poll(cls, context): | ||||
| ob = context.object | ob = context.object | ||||
| rbc = ob.rigid_body_constraint | rbc = ob.rigid_body_constraint | ||||
| return (ob and ob.rigid_body_constraint | return (ob and ob.rigid_body_constraint | ||||
| and rbc.type == 'GENERIC_SPRING' | and rbc.type == 'GENERIC_SPRING' | ||||
| ▲ Show 20 Lines • Show All 57 Lines • Show Last 20 Lines | |||||