[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2431] branches/geodesic_domes: all main function went to geodesic_259.py , gui_259. py contains ONLY gui code

james bond thekilon at yahoo.co.uk
Thu Oct 13 14:36:20 CEST 2011


Revision: 2431
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2431
Author:   kilon
Date:     2011-10-13 12:36:20 +0000 (Thu, 13 Oct 2011)
Log Message:
-----------
all main function went to geodesic_259.py , gui_259.py contains ONLY gui code

Modified Paths:
--------------
    branches/geodesic_domes/geodesic_259.py
    branches/geodesic_domes/gui_259.py

Modified: branches/geodesic_domes/geodesic_259.py
===================================================================
--- branches/geodesic_domes/geodesic_259.py	2011-10-13 10:36:36 UTC (rev 2430)
+++ branches/geodesic_domes/geodesic_259.py	2011-10-13 12:36:20 UTC (rev 2431)
@@ -1,872 +1,1172 @@
-## geodesic rewrite four or five, I've lost track - Jan 05
-#import Blender
-#from Blender  import NMesh #import *
-import sys
-sys.path.append("c:\\Users\\Peter\\25blender\\blenderlatest\\2.59\\scripts\\addons\\geodesicDome")
-#print(sys.path)
-import forms_259
-from forms_259 import mesh
-import math
-from math import pi,acos,sin,cos,atan,tan,fabs
-import vefm_259
-from vefm_259 import *
-#OK print(dir(vefm_259))
-class geodesic(mesh):
+import bpy
 
-    def __init__(self,parameters):
+def generate(context):
+    chosen_type  = get_chosen_type(context)
+    print(chosen_type) #PKHG seems to work
+    parameters = get_parameter_of_chosen_type(chosen_type)
+    print("parameters of ", chosen_type, parameters)
+    return {'FINISHED'}
+    
+    # Make variable that is the current .blend file main data blocks
+    blend_data = context.blend_data 
+    
+    # Make variable that is the active object selected by user
+    active_object = context.active_object
+    
+    # Make variable scene that is current scene
+    scene = context.scene
+    
+    # Parameters the user may want to change:
+    # Number of points this number is multiplied by the volume to get
+    # the number of points the scripts will put in the volume.
+    numOfPoints = 1.0
+    maxNumOfPoints = 100000
+    maxPointDensityRadius = 1.5
+    scattering = 2.5
+    pointDensityRadiusFactor = 1.0
+    densityScale = 1.5
+         
+    # What should we do?
+    WhatToDo = getActionToDo(active_object)
+    
+    if WhatToDo == 'DEGENERATE':
+    # Degenerate Cloud
+        mainObj = active_object
+            
+        cloudMembers = active_object.children
 
-        mesh.__init__(self)
+        createdObjects = []
+        definitionObjects  = []
+        for member in cloudMembers:
+            applyScaleRotLoc(scene, member)
+            if (member["CloudMember"] == "CreatedObj"):
+                createdObjects.append(member)
+            else:
+                definitionObjects.append(member)
+              
+        for defObj in definitionObjects:
+           #Delete cloudmember data from objects
+            if "CloudMember" in defObj:
+                del(defObj["CloudMember"])
+               
+        for createdObj in createdObjects:
+            totallyDeleteObject(scene, createdObj)
+             
+        # Delete the blend_data object
+        totallyDeleteObject(scene, mainObj)
 
-        self.panels = []
-        self.vertsdone = []
-        self.skeleton = []                ## List of verts in the full skelton edges.
+        # Select all of the left over boxes so people can immediately
+        # press generate again if they want.
+        for eachMember in definitionObjects:
+            eachMember.draw_type = 'SOLID'
+            eachMember.select = True
+            eachMember.hide_render = False
+               
+    elif WhatToDo == 'CLOUD_CONVERT_TO_MESH':
+            
+        cloudParticles = active_object.particle_systems.active
+           
+        bounds = active_object.parent
+           
+        ###############Create CloudPnts for putting points in#########
+        # Create a new object cloudPnts
+        cloudPnts = addNewObject(scene, "CloudPoints", bounds)
+        cloudPnts["CloudMember"] = "CreatedObj"
+        cloudPnts.draw_type = 'WIRE'
+        cloudPnts.hide_render = True
 
-        self.sphericalverts = []
+        makeParent(bounds, cloudPnts, scene) 
+            
+        convertParticlesToMesh(scene, cloudParticles, cloudPnts, True)
+          
+        removeParticleSystemFromObj(scene, active_object)
+           
+        pDensity = getpdensitytexture(bounds)
+        pDensity.point_density.point_source = 'OBJECT'
+        pDensity.point_density.object = cloudPnts
+           
+        #Let's resize the bound box to be more accurate.
+        how_much_bigger =  pDensity.point_density.radius 
+        makeObjectIntoBoundBox(scene, bounds, how_much_bigger, cloudPnts)
+           
+    else:
+           
+            # Generate Cloud
 
-        self.a45 = pi * 0.25
-        self.a90 = pi * 0.5
-        self.a180 = pi
-        self.a270 = pi * 1.5
-        self.a360 = pi * 2
+            ###############Create Combined Object bounds##################
+            # Make a list of all Selected objects.
+            selectedObjects = bpy.context.selected_objects
+            if not selectedObjects:
+                selectedObjects = [bpy.context.active_object]
 
-        self.setparameters(parameters)
-        self.makegeodesic()
-        #self.connectivity()
+            # Create a new object bounds
+            bounds = addNewObject(scene,
+                "CloudBounds",
+                selectedObjects[0])
 
-    def setparameters(self,parameters):
+            bounds.draw_type = 'BOUNDS'
+            bounds.hide_render = False
 
-        self.frequency = parameters[0]    ## How many subdivisions - up to 20.
-        self.eccentricity = parameters[1]    ## Elliptical if >1.0.
-        self.squish = parameters[2]        ## Flattened if < 1.0.
-        self.radius = parameters[3]        ## Exactly what it says.
-        self.square = parameters[4]        ## Controls amount of superellipse in X/Y plane.
-        self.squarez = parameters[5]        ## Controls amount of superellipse in Z dimension.
-        self.cart = parameters[6]            ## Cuts out sphericalisation step.
-        self.shape = parameters[7]        ## Full sphere, dome, flatbase.
-        self.baselevel = parameters[8]        ## Where the base is cut on a flatbase dome.
-        self.faceshape = parameters[9]    ## Triangular, hexagonal, tri-hex.
-        self.dualflag = parameters[10]
-        self.rotxy = parameters[11]
-        self.rotz = parameters[12]
-        self.klass = parameters[13]
-        self.sform = parameters[14]
-        self.super = 0                    ## Toggles superellipse.
+            # Just add a Definition Property designating this
+            # as the blend_data object.
+            bounds["CloudMember"] = "MainObj"
 
-        if self.square != 2.0 or self.squarez != 2.0:
+            # Since we used iteration 0 to copy with object we
+            # delete it off the list.
+            firstObject = selectedObjects[0]
+            del selectedObjects[0]
 
-            self.super = 1
+            # Apply location Rotation and Scale to all objects involved.
+            applyScaleRotLoc(scene, bounds)
+            for each in selectedObjects:
+                applyScaleRotLoc(scene, each)
 
-        self.odd = 0                    ## Is the frequency odd. It matters for dome building.
+            # Lets combine all of them together.
+            combineObjects(scene, bounds, selectedObjects)
 
-        if self.frequency % 2 != 0:
+            # Lets add some property info to the objects.
+            for selObj in selectedObjects:
+                selObj["CloudMember"] = "DefinitioinObj"
+                selObj.name = "DefinitioinObj"
+                selObj.draw_type = 'WIRE'
+                selObj.hide_render = True
+                makeParent(bounds, selObj, scene)
 
-            self.odd = 1
+            # Do the same to the 1. object since it is no longer in list.
+            firstObject["CloudMember"] = "DefinitioinObj"
+            firstObject.name = "DefinitioinObj"
+            firstObject.draw_type = 'WIRE'
+            firstObject.hide_render = True
+            makeParent(bounds, firstObject, scene)
 
-    def makegeodesic(self):
+            ###############Create Cloud for putting Cloud Mesh############
+            # Create a new object cloud.
+            cloud = addNewObject(scene, "CloudMesh", bounds)
+            cloud["CloudMember"] = "CreatedObj"
+            cloud.draw_type = 'WIRE'
+            cloud.hide_render = True
 
-        self.vertedgefacedata() #PKHG only a pass 13okt11
-        self.config()                    ## Generate all the configuration information.
+            makeParent(bounds, cloud, scene)
 
-        if self.klass:
+            bpy.ops.object.editmode_toggle()
+            bpy.ops.mesh.select_all(action='SELECT')
             
-            self.class2()
-            
-        if self.faceshape == 1:
+            #Don't subdivide object or smooth if smoothing box not checked.
+            if scene.cloudsmoothing:            
+                bpy.ops.mesh.subdivide(number_cuts=2, fractal=0, smoothness=1)
+                bpy.ops.object.transform_apply(location=True)
+                bpy.ops.mesh.vertices_smooth(repeat=20)
+            bpy.ops.mesh.tris_convert_to_quads()
+            bpy.ops.mesh.faces_shade_smooth()
+            bpy.ops.object.editmode_toggle()
 
-            self.hexify()                ## Hexagonal faces
+            ###############Create Particles in cloud obj##################
 
-        elif self.faceshape == 2:
+            # Set time to 0.
+#            scene.frame_current = 0
+            
+            # Add a new particle system.
+            bpy.ops.object.particle_system_add()
 
-            self.starify()                ## Hex and Triangle faces
+            #Particle settings setting it up!
+            
+            cloudParticles = cloud.particle_systems.active
+            cloudParticles.name = "CloudParticles"
+            cloudParticles.settings.frame_start = 0
+            cloudParticles.settings.frame_end = 0
+            cloudParticles.settings.emit_from = 'VOLUME'
+            cloudParticles.settings.lifetime = scene.frame_end
+            cloudParticles.settings.draw_method = 'DOT'
+            cloudParticles.settings.render_type = 'NONE'
+            cloudParticles.settings.distribution = 'RAND'
+            cloudParticles.settings.physics_type = 'NEWTON'
+            cloudParticles.settings.normal_factor = 0
+            
+            #Gravity does not effect the particle system
+            eWeights = cloudParticles.settings.effector_weights
+            eWeights.gravity = 0
+            
 
-        if self.dualflag:
-            self.dual()
-        
-        if not self.cart:
+            ####################Create Volume Material####################
+            # Deselect All

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list