[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2200] Moved to Trunk

Andrew Hale TrumanBlending at gmail.com
Sat Jul 30 11:59:19 CEST 2011


Revision: 2200
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2200
Author:   trumanblending
Date:     2011-07-30 09:59:19 +0000 (Sat, 30 Jul 2011)
Log Message:
-----------
Moved to Trunk

Added Paths:
-----------
    trunk/py/scripts/addons/add_curve_ivygen.py

Removed Paths:
-------------
    contrib/py/scripts/addons/add_curve_ivygen.py

Deleted: contrib/py/scripts/addons/add_curve_ivygen.py
===================================================================
--- contrib/py/scripts/addons/add_curve_ivygen.py	2011-07-30 09:39:06 UTC (rev 2199)
+++ contrib/py/scripts/addons/add_curve_ivygen.py	2011-07-30 09:59:19 UTC (rev 2200)
@@ -1,687 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-#  This program is free software; you can redistribute it and/or
-#  modify it under the terms of the GNU General Public License
-#  as published by the Free Software Foundation; either version 2
-#  of the License, or (at your option) any later version.
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software Foundation,
-#  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-# <pep8-80 compliant>
-
-bl_info = {
-    "name": "IvyGen",
-    "author": "testscreenings, PKHG, TrumanBlending",
-    "version": (0, 0, 7),
-    "blender": (2, 5, 8),
-    "api": 38479,
-    "location": "View3D > Add > Curve",
-    "description": "Adds generated ivy to a mesh object starting at the 3D"\
-                   " cursor.",
-    "warning": "",
-    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"\
-                "Scripts/Curve/Ivy_Gen",
-    "tracker_url": "http://projects.blender.org/tracker/index.php?"\
-                   "func=detail&aid=27234",
-    "category": "Add Curve"}
-
-
-import bpy
-from bpy.props import FloatProperty, IntProperty, BoolProperty
-from mathutils import Vector, Matrix
-from collections import deque
-from math import pow, cos, pi, atan2
-from random import random as rand_val, seed as rand_seed
-import time
-
-
-def createIvyGeometry(IVY, growLeaves):
-    '''Create the curve geometry for IVY'''
-    # Compute the local size and the gauss weight filter
-    #local_ivyBranchSize = IVY.ivyBranchSize  # * radius * IVY.ivySize
-    gaussWeight = [1.0, 2.0, 4.0, 7.0, 9.0, 10.0, 9.0, 7.0, 4.0, 2.0, 1.0]
-
-    # Create a new curve and intialise it
-    curve = bpy.data.curves.new("IVY", type='CURVE')
-    curve.dimensions = '3D'
-    curve.bevel_depth = 1
-    curve.use_fill_front = curve.use_fill_back = False
-
-    if growLeaves:
-        # Create the ivy leaves
-        # Order location of the vertices
-        signList = [(-1, 1), (1, 1), (1, -1), (-1, -1)]
-
-        # Get the local size
-        #local_ivyLeafSize = IVY.ivyLeafSize  # * radius * IVY.ivySize
-
-        # Initialise the vertex and face lists
-        vertList = deque()
-
-        # Store the methods for faster calling
-        addV = vertList.extend
-        rotMat = Matrix.Rotation
-
-    # Loop over all roots to generate its nodes
-    for root in IVY.ivyRoots:
-        # Only grow if more than one node
-        numNodes = len(root.ivyNodes)
-        if numNodes > 1:
-            # Calculate the local radius
-            local_ivyBranchRadius = 1 / (root.parents + 1) + 1
-            prevIvyLength = 1 / root.ivyNodes[-1].length
-            splineVerts = [ax for n in root.ivyNodes for ax in n.pos.to_4d()]
-
-            radiusConstant = local_ivyBranchRadius * IVY.ivyBranchSize
-            splineRadii = [radiusConstant * (1.3 - n.length * prevIvyLength)
-                                                        for n in root.ivyNodes]
-
-            # Add the poly curve and set coords and radii
-            newSpline = curve.splines.new(type='POLY')
-            newSpline.points.add(len(splineVerts) // 4 - 1)
-            newSpline.points.foreach_set('co', splineVerts)
-            newSpline.points.foreach_set('radius', splineRadii)
-
-            # Loop over all nodes in the root
-            for i, n in enumerate(root.ivyNodes):
-                for k in range(len(gaussWeight)):
-                    idx = max(0, min(i + k - 5, numNodes - 1))
-                    n.smoothAdhesionVector += (gaussWeight[k] *
-                                             root.ivyNodes[idx].adhesionVector)
-                n.smoothAdhesionVector /= 56.0
-                n.adhesionLength = n.smoothAdhesionVector.length
-                n.smoothAdhesionVector.normalize()
-
-                if growLeaves and (i < numNodes - 1):
-                    node = root.ivyNodes[i]
-                    nodeNext = root.ivyNodes[i + 1]
-
-                    # Find the weight and normalise the smooth adhesion vector
-                    weight = pow(node.length * prevIvyLength, 0.7)
-
-                    # Calculate the ground ivy and the new weight
-                    groundIvy = max(0.0, -node.smoothAdhesionVector.z)
-                    weight += groundIvy * pow(1 - node.length *
-                                                              prevIvyLength, 2)
-
-                    # Find the alignment weight
-                    alignmentWeight = node.adhesionLength
-
-                    # Calculate the needed angles
-                    phi = atan2(node.smoothAdhesionVector.y,
-                                          node.smoothAdhesionVector.x) - pi / 2
-
-                    theta = (0.5 *
-                        node.smoothAdhesionVector.angle(Vector((0, 0, -1)), 0))
-
-                    # Find the size weight
-                    sizeWeight = 1.5 - (cos(2 * pi * weight) * 0.5 + 0.5)
-
-                    # Randomise the angles
-                    phi += (rand_val() - 0.5) * (1.3 - alignmentWeight)
-                    theta += (rand_val() - 0.5) * (1.1 - alignmentWeight)
-
-                    # Calculate the leaf size an append the face to the list
-                    leafSize = IVY.ivyLeafSize * sizeWeight
-
-                    for j in range(10):
-                        # Generate the probability
-                        probability = rand_val()
-
-                        # If we need to grow a leaf, do so
-                        if (probability * weight) > IVY.leafProbability:
-
-                            # Generate the random vector
-                            randomVector = Vector((rand_val() - 0.5,
-                                           rand_val() - 0.5, rand_val() - 0.5))
-
-                            # Find the leaf center
-                            center = node.pos.lerp(nodeNext.pos, j / 10) +\
-                                               IVY.ivyLeafSize * randomVector
-
-                            # For each of the verts, rotate/scale and append
-                            basisVecX = Vector((1, 0, 0))
-                            basisVecY = Vector((0, 1, 0))
-
-                            horiRot = rotMat(theta, 3, 'X')
-                            vertRot = rotMat(phi, 3, 'Z')
-
-                            basisVecX.rotate(horiRot)
-                            basisVecY.rotate(horiRot)
-
-                            basisVecX.rotate(vertRot)
-                            basisVecY.rotate(vertRot)
-
-                            basisVecX *= leafSize
-                            basisVecY *= leafSize
-
-                            addV([k1 * basisVecX + k2 * basisVecY + center for
-                                                           k1, k2 in signList])
-
-    # Add the object and link to scene
-    newCurve = bpy.data.objects.new("IVY_Curve", curve)
-    bpy.context.scene.objects.link(newCurve)
-
-    if growLeaves:
-        faceList = [[4 * i + l for l in range(4)] for i in
-                                                     range(len(vertList) // 4)]
-
-        # Generate the new leaf mesh and link
-        me = bpy.data.meshes.new('IvyLeaf')
-        me.from_pydata(vertList, [], faceList)
-        me.update(calc_edges=True)
-        ob = bpy.data.objects.new('IvyLeaf', me)
-        bpy.context.scene.objects.link(ob)
-
-        tex = me.uv_textures.new("Leaves")
-
-        # Set the uv texture coords
-        for d in tex.data:
-            uv1, uv2, uv3, uv4 = signList
-
-        ob.parent = newCurve
-
-
-def computeBoundingSphere(ob):
-    # Get the mesh data
-    me = ob.data
-    # Intialise the center
-    center = Vector((0, 0, 0))
-    # Add all vertex coords
-    for v in me.vertices:
-        center += v.co
-    # Average over all verts
-    center /= len(me.vertices)
-    # Create the iterator and find its max
-    length_iter = ((center - v.co).length for v in me.vertices)
-    radius = max(length_iter)
-    return radius
-
-
-class IvyNode:
-    """ The basic class used for each point on the ivy which is grown."""
-    __slots__ = ('pos', 'primaryDir', 'adhesionVector', 'adhesionLength',
-                 'smoothAdhesionVector', 'length', 'floatingLength', 'climb')
-
-    def __init__(self):
-        self.pos = Vector((0, 0, 0))
-        self.primaryDir = Vector((0, 0, 1))
-        self.adhesionVector = Vector((0, 0, 0))
-        self.smoothAdhesionVector = Vector((0, 0, 0))
-        self.length = 0.0001
-        self.floatingLength = 0.0
-        self.climb = True
-
-
-class IvyRoot:
-    """ The class used to hold all ivy nodes growing from this root point."""
-    __slots__ = ('ivyNodes', 'alive', 'parents')
-
-    def __init__(self):
-        self.ivyNodes = deque()
-        self.alive = True
-        self.parents = 0
-
-
-class Ivy:
-    """ The class holding all parameters and ivy roots."""
-    __slots__ = ('ivyRoots', 'primaryWeight', 'randomWeight',
-                 'gravityWeight', 'adhesionWeight', 'branchingProbability',
-                 'leafProbability', 'ivySize', 'ivyLeafSize', 'ivyBranchSize',
-                 'maxFloatLength', 'maxAdhesionDistance', 'maxLength')
-
-    def __init__(self,
-                 primaryWeight=0.5,
-                 randomWeight=0.2,
-                 gravityWeight=1.0,
-                 adhesionWeight=0.1,
-                 branchingProbability=0.05,
-                 leafProbability=0.35,
-                 ivySize=0.02,
-                 ivyLeafSize=0.02,
-                 ivyBranchSize=0.001,
-                 maxFloatLength=0.5,
-                 maxAdhesionDistance=1.0):
-
-        self.ivyRoots = deque()
-        self.primaryWeight = primaryWeight
-        self.randomWeight = randomWeight
-        self.gravityWeight = gravityWeight
-        self.adhesionWeight = adhesionWeight

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list