Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrendon Murphy <meta.androcto1@gmail.com>2010-04-20 08:55:22 +0400
committerBrendon Murphy <meta.androcto1@gmail.com>2010-04-20 08:55:22 +0400
commit02957152f57ebbc7b3b55f40bcbf13bff761f88b (patch)
tree03aca79b6a1972da154a1089bfdb2712b330a99d /object_cloud_gen.py
parent64585a4c7302af0792bf8fa01e7c5da3f76300e8 (diff)
fixes to script in blender projects page added.
Diffstat (limited to 'object_cloud_gen.py')
-rw-r--r--object_cloud_gen.py149
1 files changed, 84 insertions, 65 deletions
diff --git a/object_cloud_gen.py b/object_cloud_gen.py
index f764493c..243c0524 100644
--- a/object_cloud_gen.py
+++ b/object_cloud_gen.py
@@ -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 @@ are selected
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 @@ def degenerateCloud(obj):
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 @@ class VIEW3D_PT_tools_cloud(View3DPanel):
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 @@ class VIEW3D_PT_tools_cloud(View3DPanel):
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,70 +324,67 @@ class GenerateCloud(bpy.types.Operator):
# 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
-
- else:
- mainObj = active_object.parent
-
- cloudMembers = active_object.children
-
- # Find the created objects children of main and delete.
- createdObjFound = False
-
- createdObjects = []
- i = 0
- for member in cloudMembers:
- applyScaleRotLoc(scene, member)
-
- if (member["CloudMember"] == "CreatedObj"):
- createdObjects.append(member)
- del cloudMembers[i]
-
- # @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
+ if active_object != 'NoneType':
+ # Degenerate Cloud
+ mainObj = active_object
+
+ cloudMembers = active_object.children
+
+ createdObjects = []
+ definitionObjects = []
+ for member in cloudMembers:
+ applyScaleRotLoc(scene, member)
+ if (member["CloudMember"] == "CreatedObj"):
+ createdObjects.append(member)
+ else:
+ definitionObjects.append(member)
+
+ 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"])
+
+ 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 definitionObjects:
+ eachMember.max_draw_type = 'SOLID'
+ eachMember.selected = True
+ scene.objects.active = eachMember
else:
# Generate Cloud
@@ -379,7 +394,7 @@ class GenerateCloud(bpy.types.Operator):
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 @@ class GenerateCloud(bpy.types.Operator):
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 @@ class GenerateCloud(bpy.types.Operator):
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 @@ class GenerateCloud(bpy.types.Operator):
bpy.types.register(GenerateCloud)
if __name__ == "__main__":
- bpy.ops.cloud.generate_cloud()
+ bpy.ops.cloud.generate_cloud() \ No newline at end of file