[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [608] trunk/py/scripts/addons/ object_cloud_gen.py: fixes to script in blender projects page added.

Brendon Murphy meta.androcto1 at gmail.com
Tue Apr 20 06:55:23 CEST 2010


Revision: 608
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-extensions&revision=608
Author:   meta-androcto
Date:     2010-04-20 06:55:22 +0200 (Tue, 20 Apr 2010)

Log Message:
-----------
fixes to script in blender projects page added.

Modified Paths:
--------------
    trunk/py/scripts/addons/object_cloud_gen.py

Modified: trunk/py/scripts/addons/object_cloud_gen.py
===================================================================
--- trunk/py/scripts/addons/object_cloud_gen.py	2010-04-19 21:30:22 UTC (rev 607)
+++ trunk/py/scripts/addons/object_cloud_gen.py	2010-04-20 04:55:22 UTC (rev 608)
@@ -18,9 +18,9 @@
 
 
 bl_addon_info = {
-    'name': 'Object: Cloud generator',
+    'name': 'Cloud generator',
     'author': 'Nick Keeline(nrk)',
-    'version': '0.1',
+    'version': '0.3',
     'blender': (2, 5, 3),
     'location': 'Tool Shelf ',
     'description': 'Creates Volumetric Clouds',
@@ -37,6 +37,8 @@
 
 Rev 0 initial release
 Rev 0.1 added scene to create_mesh per python api change.
+Rev 0.2 Added Point Density turbulence and fixed degenerate
+Rev 0.3 Fixed bug in degenerate
 """
 
 import bpy
@@ -223,10 +225,11 @@
     if "CloudMember" in obj:
         if obj["CloudMember"] != None:
             if obj.parent:
-                return True
+               if "CloudMember" not in obj.parent:
+                return False
 
             else:
-                del(obj["CloudMember"])
+                return True
 
     return False
 
@@ -251,6 +254,20 @@
             col = layout.column(align=True)
             col.operator("cloud.generate_cloud", text="DeGenerate")
 
+        elif active_obj == 'NoneType':
+            layout = self.layout
+
+            col = layout.column(align=True)
+            col.label(text="Select one or more")
+            col.label(text="objects to generate")
+            col.label(text="a cloud.")
+        elif "CloudMember" in  active_obj:
+            layout = self.layout
+
+            col = layout.column(align=True)
+            col.label(text="Must select")
+            col.label(text="bound box")
+           
         elif active_obj and active_obj.type == 'MESH':
             layout = self.layout
 
@@ -264,6 +281,7 @@
             col.label(text="Select one or more")
             col.label(text="objects to generate")
             col.label(text="a cloud.")
+        # col.label(active_obj["CloudMember"])
 
 classes = [VIEW3D_PT_tools_cloud]
 
@@ -306,71 +324,68 @@
             # the number of points the scripts will put in the volume.
             numOfPoints = 35
             maxNumOfPoints = 100000
-            scattering = 3
+            scattering = 2.5
             pointDensityRadius = 0.4
+            densityScale = 1.5
 
             # Should we degnerate?
             degenerate = degenerateCloud(active_object)
 
             if degenerate:
-                # Degenerate Cloud
-                if active_object["CloudMember"] == "MainObj":
-                    mainObj = active_object
+                if active_object != 'NoneType':
+                   # Degenerate Cloud
+                   mainObj = active_object
 
-                else:
-                    mainObj = active_object.parent
+                   cloudMembers = active_object.children
 
-                cloudMembers = active_object.children
+                   createdObjects = []
+                   definitionObjects = []
+                   for member in cloudMembers:
+                       applyScaleRotLoc(scene, member)
+                       if (member["CloudMember"] == "CreatedObj"):
+                          createdObjects.append(member)
+                       else:
+                          definitionObjects.append(member)
 
-                # Find the created objects children of main and delete.
-                createdObjFound = False
+                   for defObj in definitionObjects:
+                       # @todo check if it wouldn't be better to remove this
+                       # in the first place (see del() in degenerateCloud)
+                       #totally agree didn't know how before now...thanks! done.
+                       if "CloudMember" in defObj:
+                          del(defObj["CloudMember"])
 
-                createdObjects = []
-                i = 0
-                for member in cloudMembers:
-                    applyScaleRotLoc(scene, member)
+                   for createdObj in createdObjects:
+                       # Deselect All
+                       bpy.ops.object.select_all(action='DESELECT')
+   
+                       # Select the object and delete it.
+                       createdObj.selected = True
+                       scene.objects.active = createdObj
+                       bpy.ops.object.delete()
 
-                    if (member["CloudMember"] == "CreatedObj"):
-                        createdObjects.append(member)
-                        del cloudMembers[i]
+                   # Delete the main object
+                   # Deselect All
+                   bpy.ops.object.select_all(action='DESELECT')
+   
+                   # Select the object and delete it.
+                   mainObj.selected = True
+                   scene.objects.active = mainObj
+   
+                   # Delete all material slots in mainObj object
+                   for i in range(len(mainObj.material_slots)):
+                       mainObj.active_material_index = i - 1
+                       bpy.ops.object.material_slot_remove()
+  
+                   # Delete the Main Object
+                   bpy.ops.object.delete()
+  
+                   # Select all of the left over boxes so people can immediately
+                   # press generate again if they want.
+                   for eachMember in definitionObjects:
+                       eachMember.max_draw_type = 'SOLID'
+                       eachMember.selected = True
+                       scene.objects.active = eachMember
 
-                    # @todo check if it wouldn't be better to remove this
-                    # in the first place (see del() in degenerateCloud)
-                    member["CloudMember"] = None
-                    i += 1
-
-                for createdObj in createdObjects:
-                    # Deselect All
-                    bpy.ops.object.select_all(action='DESELECT')
-
-                    # Select the object and delete it.
-                    createdObj.selected = True
-                    scene.objects.active = createdObj
-                    bpy.ops.object.delete()
-
-                # Delete the main object
-                # Deselect All
-                bpy.ops.object.select_all(action='DESELECT')
-
-                # Select the object and delete it.
-                mainObj.selected = True
-                scene.objects.active = mainObj
-
-                # Delete all material slots in mainObj object
-                for i in range(len(mainObj.material_slots)):
-                    mainObj.active_material_index = i - 1
-                    bpy.ops.object.material_slot_remove()
-
-                # Delete the Main Object
-                bpy.ops.object.delete()
-
-                # Select all of the left over boxes so people can immediately
-                # press generate again if they want.
-                for eachMember in cloudMembers:
-                    eachMember.max_draw_type = 'SOLID'
-                    eachMember.selected = True
-                    scene.objects.active = eachMember
-
             else:
                 # Generate Cloud
 
@@ -379,7 +394,7 @@
                 selectedObjects = bpy.context.selected_objects
 
                 # Create a new object bounds
-                if len(selectedObjects) == 0:
+                if selectedObjects == 'NoneType':
                     bounds = addNewObject(scene,
                         "CloudBounds",
                         [])
@@ -490,7 +505,7 @@
                 mVolume = cloudMaterial.volume
                 mVolume.scattering = scattering
                 mVolume.density = 0
-                mVolume.density_scale = 1
+                mVolume.density_scale = densityScale
                 mVolume.transmission_color = [3, 3, 3]
                 mVolume.step_size = 0.1
                 mVolume.light_cache = True
@@ -514,6 +529,10 @@
                 vMaterialTextureSlots[1].texture_coordinates = 'GLOBAL'
                 pDensity.pointdensity.radius = pointDensityRadius
                 pDensity.pointdensity.vertices_cache = 'WORLD_SPACE'
+                pDensity.pointdensity.turbulence = True
+                pDensity.pointdensity.noise_basis = 'VORONOI_F2'
+                pDensity.pointdensity.turbulence_depth = 3
+
                 pDensity.use_color_ramp = True
                 pRamp = pDensity.color_ramp
                 pRamp.interpolation = 'LINEAR'
@@ -621,4 +640,4 @@
 bpy.types.register(GenerateCloud)
 
 if __name__ == "__main__":
-    bpy.ops.cloud.generate_cloud()
+    bpy.ops.cloud.generate_cloud()
\ No newline at end of file




More information about the Bf-extensions-cvs mailing list