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/ui/buttons_physics_cloth.py')
-rw-r--r--release/scripts/ui/buttons_physics_cloth.py186
1 files changed, 186 insertions, 0 deletions
diff --git a/release/scripts/ui/buttons_physics_cloth.py b/release/scripts/ui/buttons_physics_cloth.py
new file mode 100644
index 00000000000..e25497b3713
--- /dev/null
+++ b/release/scripts/ui/buttons_physics_cloth.py
@@ -0,0 +1,186 @@
+
+import bpy
+
+from buttons_physics_common import point_cache_ui
+from buttons_physics_common import effector_weights_ui
+
+def cloth_panel_enabled(md):
+ return md.point_cache.baked==False
+
+class PhysicButtonsPanel(bpy.types.Panel):
+ __space_type__ = 'PROPERTIES'
+ __region_type__ = 'WINDOW'
+ __context__ = "physics"
+
+ def poll(self, context):
+ ob = context.object
+ rd = context.scene.render_data
+ return (ob and ob.type == 'MESH') and (not rd.use_game_engine)
+
+class PHYSICS_PT_cloth(PhysicButtonsPanel):
+ __label__ = "Cloth"
+
+ def draw(self, context):
+ layout = self.layout
+
+ md = context.cloth
+ ob = context.object
+
+ split = layout.split()
+ split.operator_context = 'EXEC_DEFAULT'
+
+ if md:
+ # remove modifier + settings
+ split.set_context_pointer("modifier", md)
+ split.itemO("object.modifier_remove", text="Remove")
+
+ row = split.row(align=True)
+ row.itemR(md, "render", text="")
+ row.itemR(md, "realtime", text="")
+ else:
+ # add modifier
+ split.item_enumO("object.modifier_add", "type", 'CLOTH', text="Add")
+ split.itemL()
+
+ if md:
+ cloth = md.settings
+
+ layout.active = cloth_panel_enabled(md)
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Material:")
+ sub = col.column(align=True)
+ sub.itemR(cloth, "mass")
+ sub.itemR(cloth, "structural_stiffness", text="Structural")
+ sub.itemR(cloth, "bending_stiffness", text="Bending")
+
+ col.itemR(cloth, "pin_cloth", text="Pin")
+ sub = col.column(align=True)
+ sub.active = cloth.pin_cloth
+ sub.itemR(cloth, "pin_stiffness", text="Stiffness")
+ sub.item_pointerR(cloth, "mass_vertex_group", ob, "vertex_groups", text="")
+
+ col = split.column()
+
+ col.itemL(text="Damping:")
+ sub = col.column(align=True)
+ sub.itemR(cloth, "spring_damping", text="Spring")
+ sub.itemR(cloth, "air_damping", text="Air")
+
+ col.itemL(text="Presets...")
+ col.itemL(text="TODO!")
+
+ col.itemL(text="Quality:")
+ col.itemR(cloth, "quality", text="Steps",slider=True)
+
+ # Disabled for now
+ """
+ if cloth.mass_vertex_group:
+ layout.itemL(text="Goal:")
+
+ col = layout.column_flow()
+ col.itemR(cloth, "goal_default", text="Default")
+ col.itemR(cloth, "goal_spring", text="Stiffness")
+ col.itemR(cloth, "goal_friction", text="Friction")
+ """
+
+class PHYSICS_PT_cloth_cache(PhysicButtonsPanel):
+ __label__ = "Cloth Cache"
+ __default_closed__ = True
+
+ def poll(self, context):
+ return context.cloth
+
+ def draw(self, context):
+ md = context.cloth
+ point_cache_ui(self, md.point_cache, cloth_panel_enabled(md), 0, 0)
+
+class PHYSICS_PT_cloth_collision(PhysicButtonsPanel):
+ __label__ = "Cloth Collision"
+ __default_closed__ = True
+
+ def poll(self, context):
+ return context.cloth
+
+ def draw_header(self, context):
+ cloth = context.cloth.collision_settings
+
+ self.layout.active = cloth_panel_enabled(context.cloth)
+ self.layout.itemR(cloth, "enable_collision", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ cloth = context.cloth.collision_settings
+ md = context.cloth
+
+ layout.active = cloth.enable_collision and cloth_panel_enabled(md)
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemR(cloth, "collision_quality", slider=True, text="Quality")
+ col.itemR(cloth, "min_distance", slider=True, text="Distance")
+ col.itemR(cloth, "friction")
+
+ col = split.column()
+ col.itemR(cloth, "enable_self_collision", text="Self Collision")
+ sub = col.column()
+ sub.active = cloth.enable_self_collision
+ sub.itemR(cloth, "self_collision_quality", slider=True, text="Quality")
+ sub.itemR(cloth, "self_min_distance", slider=True, text="Distance")
+
+class PHYSICS_PT_cloth_stiffness(PhysicButtonsPanel):
+ __label__ = "Cloth Stiffness Scaling"
+ __default_closed__ = True
+
+ def poll(self, context):
+ return context.cloth
+
+ def draw_header(self, context):
+ cloth = context.cloth.settings
+
+ self.layout.active = cloth_panel_enabled(context.cloth)
+ self.layout.itemR(cloth, "stiffness_scaling", text="")
+
+ def draw(self, context):
+ layout = self.layout
+
+ md = context.cloth
+ ob = context.object
+ cloth = context.cloth.settings
+
+ layout.active = cloth.stiffness_scaling and cloth_panel_enabled(md)
+
+ split = layout.split()
+
+ col = split.column()
+ col.itemL(text="Structural Stiffness:")
+ sub = col.column(align=True)
+ sub.itemR(cloth, "structural_stiffness_max", text="Max")
+ sub.item_pointerR(cloth, "structural_stiffness_vertex_group", ob, "vertex_groups", text="")
+
+ col = split.column()
+ col.itemL(text="Bending Stiffness:")
+ sub = col.column(align=True)
+ sub.itemR(cloth, "bending_stiffness_max", text="Max")
+ sub.item_pointerR(cloth, "bending_vertex_group", ob, "vertex_groups", text="")
+
+class PHYSICS_PT_cloth_field_weights(PhysicButtonsPanel):
+ __label__ = "Cloth Field Weights"
+ __default_closed__ = True
+
+ def poll(self, context):
+ return (context.cloth)
+
+ def draw(self, context):
+ cloth = context.cloth.settings
+ effector_weights_ui(self, cloth.effector_weights)
+
+bpy.types.register(PHYSICS_PT_cloth)
+bpy.types.register(PHYSICS_PT_cloth_cache)
+bpy.types.register(PHYSICS_PT_cloth_collision)
+bpy.types.register(PHYSICS_PT_cloth_stiffness)
+bpy.types.register(PHYSICS_PT_cloth_field_weights)