Smoke:
[blender.git] / release / ui / buttons_physics_smoke.py
index 7e2395216c0a6cb2bdf7bb2891e8c413e1095c33..d187e4c5901a1825ba5bb22e81f1a4553eddd664 100644 (file)
@@ -1,6 +1,11 @@
 
 import bpy
 
+def smoke_panel_enabled_low(smd):
+       if smd.smoke_type == 'TYPE_DOMAIN':
+               return smd.domain.point_cache.baked==False
+       return True
+
 class PhysicButtonsPanel(bpy.types.Panel):
        __space_type__ = "PROPERTIES"
        __region_type__ = "WINDOW"
@@ -38,6 +43,8 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel):
                        split.itemL()
 
                if md:
+               
+                       # layout.enabled = smoke_panel_enabled(md)
                        layout.itemR(md, "smoke_type", expand=True)
                
                        if md.smoke_type == 'TYPE_DOMAIN':
@@ -49,13 +56,6 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel):
                                col = split.column()
                                col.itemL(text="Resolution:")
                                col.itemR(domain, "maxres", text="Divisions")
-
-                               col.itemL(text="Display:")
-                               col.itemR(domain, "visibility", text="Resolution")
-                               col.itemR(domain, "color", slider=True)
-                               sub = col.column()
-                               sub.active = domain.highres
-                               sub.itemR(domain, "viewhighres")
                                
                                col = split.column()
                                col.itemL(text="Behavior:")
@@ -88,9 +88,9 @@ class PHYSICS_PT_smoke(PhysicButtonsPanel):
                                        
                        #elif md.smoke_type == 'TYPE_COLL':
                        #       layout.itemS()
-                       
-class PHYSICS_PT_smoke_highres(PhysicButtonsPanel):
-       __label__ = "Smoke High Resolution"
+                                       
+class PHYSICS_PT_smoke_groups(PhysicButtonsPanel):
+       __label__ = "Smoke Groups"
        __default_closed__ = True
        
        def poll(self, context):
@@ -100,33 +100,89 @@ class PHYSICS_PT_smoke_highres(PhysicButtonsPanel):
                
                return False
 
-       def draw_header(self, context):
-               layout = self.layout
-               
-               high = context.smoke.domain_settings
-       
-               layout.itemR(high, "highres", text="")
-               
        def draw(self, context):
                layout = self.layout
                
-               high = context.smoke.domain_settings
-               
-               layout.active = high.highres
+               group = context.smoke.domain_settings
                
                split = layout.split()
                
                col = split.column()
-               col.itemL(text="Resolution:")
-               col.itemR(high, "amplify", text="Divisions")
+               col.itemL(text="Flow Group:")
+               col.itemR(group, "fluid_group", text="")
+                               
+               #col.itemL(text="Effector Group:")
+               #col.itemR(group, "eff_group", text="")
+                               
+               col = split.column()
+               col.itemL(text="Collision Group:")
+               col.itemR(group, "coll_group", text="")
+               
+class PHYSICS_PT_smoke_cache(PhysicButtonsPanel):
+       __label__ = "Smoke Cache"
+       __default_closed__ = True
+
+       def poll(self, context):
+               md = context.smoke
+               if md:
+                               return (md.smoke_type == 'TYPE_DOMAIN')
+               
+               return False
+
+       def draw(self, context):
+               layout = self.layout
+
+               md = context.smoke
                
-               sub = split.column()
-               sub.itemL(text="Noise Method:")
-               sub.row().itemR(high, "noise_type", text="")
-               sub.itemR(high, "strength")
+               if md.smoke_type == 'TYPE_DOMAIN':
                        
-class PHYSICS_PT_smoke_groups(PhysicButtonsPanel):
-       __label__ = "Smoke Groups"
+                       domain = md.domain_settings
+                       cache = domain.point_cache
+                       
+                       layout.set_context_pointer("PointCache", cache)
+                       
+                       row = layout.row()
+                       row.template_list(cache, "point_cache_list", cache, "active_point_cache_index")
+                       col = row.column(align=True)
+                       col.itemO("ptcache.add_new", icon="ICON_ZOOMIN", text="")
+                       col.itemO("ptcache.remove", icon="ICON_ZOOMOUT", text="")
+                       
+                       row = layout.row()
+                       row.itemR(cache, "name")
+                       
+                       row = layout.row()
+                       row.itemR(cache, "start_frame")
+                       row.itemR(cache, "end_frame")
+                       
+                       row = layout.row()
+                       
+                       if cache.baked == True:
+                               row.itemO("ptcache.free_bake", text="Free Bake")
+                       else:
+                               row.item_booleanO("ptcache.bake", "bake", True, text="Bake")
+                       
+                       subrow = row.row()
+                       subrow.enabled = cache.frames_skipped or cache.outdated
+                       subrow.itemO("ptcache.bake", "bake", False, text="Calculate to Current Frame")
+                               
+                       row = layout.row()
+                       #row.enabled = smoke_panel_enabled(psys)
+                       row.itemO("ptcache.bake_from_cache", text="Current Cache to Bake")
+               
+                       row = layout.row()
+                       #row.enabled = smoke_panel_enabled(psys)
+                       
+                       layout.itemL(text=cache.info)
+                       
+                       layout.itemS()
+                       
+                       row = layout.row()
+                       row.itemO("ptcache.bake_all", "bake", True, text="Bake All Dynamics")
+                       row.itemO("ptcache.free_bake_all", text="Free All Bakes")
+                       layout.itemO("ptcache.bake_all", "bake", False, text="Update All Dynamics to current frame")
+                       
+class PHYSICS_PT_smoke_highres(PhysicButtonsPanel):
+       __label__ = "Smoke High Resolution"
        __default_closed__ = True
        
        def poll(self, context):
@@ -136,24 +192,93 @@ class PHYSICS_PT_smoke_groups(PhysicButtonsPanel):
                
                return False
 
+       def draw_header(self, context):
+               layout = self.layout
+               
+               high = context.smoke.domain_settings
+       
+               layout.itemR(high, "highres", text="")
+               
        def draw(self, context):
                layout = self.layout
                
-               group = context.smoke.domain_settings
+               md = context.smoke_hr
                
-               split = layout.split()
+               if md:
                
-               col = split.column()
-               col.itemL(text="Flow Group:")
-               col.itemR(group, "fluid_group", text="")
-                               
-               #col.itemL(text="Effector Group:")
-               #col.itemR(group, "eff_group", text="")
+                       split = layout.split()
+                       
+                       col = split.column()
+                       col.itemL(text="Resolution:")
+                       col.itemR(md, "amplify", text="Divisions")
+                       
+                       sub = split.column()
+                       sub.itemL(text="Noise Method:")
+                       sub.row().itemR(md, "noise_type", text="")
+                       sub.itemR(md, "strength")
+                       sub.itemR(md, "show_highres")
+               
+class PHYSICS_PT_smoke_cache_highres(PhysicButtonsPanel):
+       __label__ = "Smoke Cache"
+       __default_closed__ = True
+
+       def poll(self, context):
+               return (context.smoke_hr != None)
+
+       def draw(self, context):
+               layout = self.layout
+
+               md = context.smoke_hr
+               
+               if md:
+                       
+                       cache = md.point_cache
+                       
+                       layout.set_context_pointer("PointCache", cache)
+                       
+                       row = layout.row()
+                       row.template_list(cache, "point_cache_list", cache, "active_point_cache_index")
+                       col = row.column(align=True)
+                       col.itemO("ptcache.add_new", icon="ICON_ZOOMIN", text="")
+                       col.itemO("ptcache.remove", icon="ICON_ZOOMOUT", text="")
+                       
+                       row = layout.row()
+                       row.itemR(cache, "name")
+                       
+                       row = layout.row()
+                       row.itemR(cache, "start_frame")
+                       row.itemR(cache, "end_frame")
+                       
+                       row = layout.row()
+                       
+                       if cache.baked == True:
+                               row.itemO("ptcache.free_bake", text="Free Bake")
+                       else:
+                               row.item_booleanO("ptcache.bake", "bake", True, text="Bake")
+                       
+                       subrow = row.row()
+                       subrow.enabled = cache.frames_skipped or cache.outdated
+                       subrow.itemO("ptcache.bake", "bake", False, text="Calculate to Current Frame")
                                
-               col = split.column()
-               col.itemL(text="Collision Group:")
-               col.itemR(group, "coll_group", text="")
+                       row = layout.row()
+                       #row.enabled = smoke_panel_enabled(psys)
+                       row.itemO("ptcache.bake_from_cache", text="Current Cache to Bake")
+               
+                       row = layout.row()
+                       #row.enabled = smoke_panel_enabled(psys)
+                       
+                       layout.itemL(text=cache.info)
+                       
+                       layout.itemS()
+                       
+                       row = layout.row()
+                       row.itemO("ptcache.bake_all", "bake", True, text="Bake All Dynamics")
+                       row.itemO("ptcache.free_bake_all", text="Free All Bakes")
+                       layout.itemO("ptcache.bake_all", "bake", False, text="Update All Dynamics to current frame")
+
 
 bpy.types.register(PHYSICS_PT_smoke)
-bpy.types.register(PHYSICS_PT_smoke_highres)
+bpy.types.register(PHYSICS_PT_smoke_cache)
 bpy.types.register(PHYSICS_PT_smoke_groups)
+#bpy.types.register(PHYSICS_PT_smoke_highres)
+#bpy.types.register(PHYSICS_PT_smoke_cache_highres)