use set as a suffix (matches operators)
[blender-staging.git] / release / scripts / ui / properties_physics_softbody.py
index 2675b3ed9fbeed665b4b85c41c91d623c19997eb..08abf048c50126e37f6c02ad4c93a85399f0a264 100644 (file)
 #
 #  You should have received a copy of the GNU General Public License
 #  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 #
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8 compliant>
 import bpy
 
-narrowui = 180
-
 
 from properties_physics_common import point_cache_ui
 from properties_physics_common import effector_weights_ui
 
 
 def softbody_panel_enabled(md):
-    return md.point_cache.baked == False
+    return (md.point_cache.is_baked is False)
 
 
-class PhysicButtonsPanel(bpy.types.Panel):
+class PhysicButtonsPanel():
     bl_space_type = 'PROPERTIES'
     bl_region_type = 'WINDOW'
     bl_context = "physics"
 
-    def poll(self, context):
+    @classmethod
+    def poll(cls, context):
         ob = context.object
-        rd = context.scene.render_data
-        return (ob and ob.type == 'MESH') and (not rd.use_game_engine)
+        rd = context.scene.render
+#        return (ob and ob.type == 'MESH') and (not rd.use_game_engine)
+# i really hate touching things i do not understand completely .. but i think this should read (bjornmose)
+        return (ob and (ob.type == 'MESH' or ob.type == 'LATTICE'or ob.type == 'CURVE')) and (not rd.use_game_engine)
 
 
-class PHYSICS_PT_softbody(PhysicButtonsPanel):
+class PHYSICS_PT_softbody(PhysicButtonsPanel, bpy.types.Panel):
     bl_label = "Soft Body"
 
     def draw(self, context):
@@ -49,24 +50,21 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel):
 
         md = context.soft_body
         ob = context.object
-        col2 = context.region.width > narrowui
 
         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")
+            split.context_pointer_set("modifier", md)
+            split.operator("object.modifier_remove", text="Remove")
 
             row = split.row(align=True)
-            row.itemR(md, "render", text="")
-            row.itemR(md, "realtime", text="")
+            row.prop(md, "show_render", text="")
+            row.prop(md, "show_viewport", text="")
         else:
             # add modifier
-            split.item_enumO("object.modifier_add", "type", 'SOFT_BODY', text="Add")
-            if col2:
-                split.column()
+            split.operator("object.modifier_add", text="Add").type = 'SOFT_BODY'
+            split.column()
 
         if md:
             softbody = md.settings
@@ -76,41 +74,42 @@ class PHYSICS_PT_softbody(PhysicButtonsPanel):
             split.enabled = softbody_panel_enabled(md)
 
             col = split.column()
-            col.itemL(text="Object:")
-            col.itemR(softbody, "friction")
-            col.itemR(softbody, "mass")
-            col.item_pointerR(softbody, "mass_vertex_group", ob, "vertex_groups", text="Mass:")
-            
-            if col2:
-                col = split.column()
-            col.itemL(text="Simulation:")
-            col.itemR(softbody, "speed")
-
-
-class PHYSICS_PT_softbody_cache(PhysicButtonsPanel):
+            col.label(text="Object:")
+            col.prop(softbody, "friction")
+            col.prop(softbody, "mass")
+            col.prop_search(softbody, "vertex_group_mass", ob, "vertex_groups", text="Mass:")
+
+            col = split.column()
+            col.label(text="Simulation:")
+            col.prop(softbody, "speed")
+
+
+class PHYSICS_PT_softbody_cache(PhysicButtonsPanel, bpy.types.Panel):
     bl_label = "Soft Body Cache"
-    bl_default_closed = True
+    bl_options = {'DEFAULT_CLOSED'}
 
-    def poll(self, context):
+    @classmethod
+    def poll(cls, context):
         return context.soft_body
 
     def draw(self, context):
         md = context.soft_body
-        point_cache_ui(self, context, md.point_cache, softbody_panel_enabled(md), 0, 0)
+        point_cache_ui(self, context, md.point_cache, softbody_panel_enabled(md), 'SOFTBODY')
 
 
-class PHYSICS_PT_softbody_goal(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_goal(PhysicButtonsPanel, bpy.types.Panel):
     bl_label = "Soft Body Goal"
-    bl_default_closed = True
+    bl_options = {'DEFAULT_CLOSED'}
 
-    def poll(self, context):
+    @classmethod
+    def poll(cls, context):
         return context.soft_body
 
     def draw_header(self, context):
         softbody = context.soft_body.settings
 
         self.layout.active = softbody_panel_enabled(context.soft_body)
-        self.layout.itemR(softbody, "use_goal", text="")
+        self.layout.prop(softbody, "use_goal", text="")
 
     def draw(self, context):
         layout = self.layout
@@ -118,7 +117,6 @@ class PHYSICS_PT_softbody_goal(PhysicButtonsPanel):
         md = context.soft_body
         softbody = md.settings
         ob = context.object
-        col2 = context.region.width > narrowui
 
         layout.active = softbody.use_goal and softbody_panel_enabled(md)
 
@@ -128,33 +126,33 @@ class PHYSICS_PT_softbody_goal(PhysicButtonsPanel):
         split = layout.split()
 
         col = split.column()
-        col.itemL(text="Goal Strengths:")
-        col.itemR(softbody, "goal_default", text="Default")
+        col.label(text="Goal Strengths:")
+        col.prop(softbody, "goal_default", text="Default")
         sub = col.column(align=True)
-        sub.itemR(softbody, "goal_min", text="Minimum")
-        sub.itemR(softbody, "goal_max", text="Maximum")
-        
-        if col2:
-            col = split.column()
-        col.itemL(text="Goal Settings:")
-        col.itemR(softbody, "goal_spring", text="Stiffness")
-        col.itemR(softbody, "goal_friction", text="Damping")
+        sub.prop(softbody, "goal_min", text="Minimum")
+        sub.prop(softbody, "goal_max", text="Maximum")
 
-        layout.item_pointerR(softbody, "goal_vertex_group", ob, "vertex_groups", text="Vertex Group")
+        col = split.column()
+        col.label(text="Goal Settings:")
+        col.prop(softbody, "goal_spring", text="Stiffness")
+        col.prop(softbody, "goal_friction", text="Damping")
+
+        layout.prop_search(softbody, "vertex_group_goal", ob, "vertex_groups", text="Vertex Group")
 
 
-class PHYSICS_PT_softbody_edge(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_edge(PhysicButtonsPanel, bpy.types.Panel):
     bl_label = "Soft Body Edges"
-    bl_default_closed = True
+    bl_options = {'DEFAULT_CLOSED'}
 
-    def poll(self, context):
+    @classmethod
+    def poll(cls, context):
         return context.soft_body
 
     def draw_header(self, context):
         softbody = context.soft_body.settings
 
         self.layout.active = softbody_panel_enabled(context.soft_body)
-        self.layout.itemR(softbody, "use_edges", text="")
+        self.layout.prop(softbody, "use_edges", text="")
 
     def draw(self, context):
         layout = self.layout
@@ -162,79 +160,78 @@ class PHYSICS_PT_softbody_edge(PhysicButtonsPanel):
         md = context.soft_body
         softbody = md.settings
         ob = context.object
-        col2 = context.region.width > narrowui
 
         layout.active = softbody.use_edges and softbody_panel_enabled(md)
 
         split = layout.split()
 
         col = split.column()
-        col.itemL(text="Springs:")
-        col.itemR(softbody, "pull")
-        col.itemR(softbody, "push")
-        col.itemR(softbody, "damp")
-        col.itemR(softbody, "plastic")
-        col.itemR(softbody, "bending")
-        col.itemR(softbody, "spring_length", text="Length")
-        col.item_pointerR(softbody, "spring_vertex_group", ob, "vertex_groups", text="Springs:")
-        
-        if col2:
-            col = split.column()
-        col.itemR(softbody, "stiff_quads")
-        sub = col.column()
-        sub.active = softbody.stiff_quads
-        sub.itemR(softbody, "shear")
+        col.label(text="Springs:")
+        col.prop(softbody, "pull")
+        col.prop(softbody, "push")
+        col.prop(softbody, "damping")
+        col.prop(softbody, "plastic")
+        col.prop(softbody, "bend")
+        col.prop(softbody, "spring_length", text="Length")
+        col.prop_search(softbody, "vertex_group_spring", ob, "vertex_groups", text="Springs:")
 
-        col.itemR(softbody, "new_aero", text="Aero")
+        col = split.column()
+        col.prop(softbody, "use_stiff_quads")
         sub = col.column()
-        sub.enabled = softbody.new_aero
-        sub.itemR(softbody, "aero", text="Factor")
+        sub.active = softbody.use_stiff_quads
+        sub.prop(softbody, "shear")
+
+        col.label(text="Aerodynamics:")
+        col.row().prop(softbody, "aerodynamics_type", expand=True)
+        col.prop(softbody, "aero", text="Factor")
 
-        col.itemL(text="Collision:")
-        col.itemR(softbody, "edge_collision", text="Edge")
-        col.itemR(softbody, "face_collision", text="Face")
+        #sub = col.column()
+        #sub.enabled = softbody.aero > 0
 
 
-class PHYSICS_PT_softbody_collision(PhysicButtonsPanel):
-    bl_label = "Soft Body Collision"
-    bl_default_closed = True
+        col.label(text="Collision:")
+        col.prop(softbody, "use_edge_collision", text="Edge")
+        col.prop(softbody, "use_face_collision", text="Face")
 
-    def poll(self, context):
+
+class PHYSICS_PT_softbody_collision(PhysicButtonsPanel, bpy.types.Panel):
+    bl_label = "Soft Body Self Collision"
+    bl_options = {'DEFAULT_CLOSED'}
+
+    @classmethod
+    def poll(cls, context):
         return context.soft_body
 
     def draw_header(self, context):
         softbody = context.soft_body.settings
 
         self.layout.active = softbody_panel_enabled(context.soft_body)
-        self.layout.itemR(softbody, "self_collision", text="")
+        self.layout.prop(softbody, "use_self_collision", text="")
 
     def draw(self, context):
         layout = self.layout
 
         md = context.soft_body
         softbody = md.settings
-        col2 = context.region.width > narrowui
 
-        layout.active = softbody.self_collision and softbody_panel_enabled(md)
+        layout.active = softbody.use_self_collision and softbody_panel_enabled(md)
 
-        layout.itemL(text="Collision Type:")
-        if col2:
-            layout.itemR(softbody, "collision_type", expand=True)
-        else:
-            layout.itemR(softbody, "collision_type", text="")
+        layout.label(text="Collision Ball Size Calculation:")
+        layout.prop(softbody, "collision_type", expand=True)
 
         col = layout.column(align=True)
-        col.itemL(text="Ball:")
-        col.itemR(softbody, "ball_size", text="Size")
-        col.itemR(softbody, "ball_stiff", text="Stiffness")
-        col.itemR(softbody, "ball_damp", text="Dampening")
+        col.label(text="Ball:")
+        col.prop(softbody, "ball_size", text="Size")
+        col.prop(softbody, "ball_stiff", text="Stiffness")
+        col.prop(softbody, "ball_damp", text="Dampening")
 
 
-class PHYSICS_PT_softbody_solver(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_solver(PhysicButtonsPanel, bpy.types.Panel):
     bl_label = "Soft Body Solver"
-    bl_default_closed = True
+    bl_options = {'DEFAULT_CLOSED'}
 
-    def poll(self, context):
+    @classmethod
+    def poll(cls, context):
         return context.soft_body
 
     def draw(self, context):
@@ -242,7 +239,6 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel):
 
         md = context.soft_body
         softbody = md.settings
-        col2 = context.region.width > narrowui
 
         layout.active = softbody_panel_enabled(md)
 
@@ -250,39 +246,43 @@ class PHYSICS_PT_softbody_solver(PhysicButtonsPanel):
         split = layout.split()
 
         col = split.column(align=True)
-        col.itemL(text="Step Size:")
-        col.itemR(softbody, "minstep")
-        col.itemR(softbody, "maxstep")
-        col.itemR(softbody, "auto_step", text="Auto-Step")
-        
-        if col2:
-            col = split.column()
-        col.itemR(softbody, "error_limit")
-        col.itemL(text="Helpers:")
-        col.itemR(softbody, "choke")
-        col.itemR(softbody, "fuzzy")
+        col.label(text="Step Size:")
+        col.prop(softbody, "step_min")
+        col.prop(softbody, "step_max")
+        col.prop(softbody, "use_auto_step", text="Auto-Step")
+
+        col = split.column()
+        col.prop(softbody, "error_threshold")
+        col.label(text="Helpers:")
+        col.prop(softbody, "choke")
+        col.prop(softbody, "fuzzy")
 
-        layout.itemL(text="Diagnostics:")
-        layout.itemR(softbody, "diagnose")
+        layout.label(text="Diagnostics:")
+        layout.prop(softbody, "use_diagnose")
+        layout.prop(softbody, "use_estimate_matrix")
 
 
-class PHYSICS_PT_softbody_field_weights(PhysicButtonsPanel):
+class PHYSICS_PT_softbody_field_weights(PhysicButtonsPanel, bpy.types.Panel):
     bl_label = "Soft Body Field Weights"
-    bl_default_closed = True
+    bl_options = {'DEFAULT_CLOSED'}
 
-    def poll(self, context):
+    @classmethod
+    def poll(cls, context):
         return (context.soft_body)
 
     def draw(self, context):
         md = context.soft_body
         softbody = md.settings
-        
+
         effector_weights_ui(self, context, softbody.effector_weights)
 
-bpy.types.register(PHYSICS_PT_softbody)
-bpy.types.register(PHYSICS_PT_softbody_cache)
-bpy.types.register(PHYSICS_PT_softbody_goal)
-bpy.types.register(PHYSICS_PT_softbody_edge)
-bpy.types.register(PHYSICS_PT_softbody_collision)
-bpy.types.register(PHYSICS_PT_softbody_solver)
-bpy.types.register(PHYSICS_PT_softbody_field_weights)
+
+def register():
+    pass
+
+
+def unregister():
+    pass
+
+if __name__ == "__main__":
+    register()