[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