[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4639] contrib/py/scripts/addons/ add_mesh_space_tree: pep8 compliance
Michel Anders
michel.anders at inter.nl.net
Fri Jul 26 21:24:26 CEST 2013
Revision: 4639
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4639
Author: varkenvarken
Date: 2013-07-26 19:24:25 +0000 (Fri, 26 Jul 2013)
Log Message:
-----------
pep8 compliance
Modified Paths:
--------------
contrib/py/scripts/addons/add_mesh_space_tree/__init__.py
contrib/py/scripts/addons/add_mesh_space_tree/kdtree.py
contrib/py/scripts/addons/add_mesh_space_tree/sca.py
contrib/py/scripts/addons/add_mesh_space_tree/simplefork.py
contrib/py/scripts/addons/add_mesh_space_tree/timer.py
Modified: contrib/py/scripts/addons/add_mesh_space_tree/__init__.py
===================================================================
--- contrib/py/scripts/addons/add_mesh_space_tree/__init__.py 2013-07-25 15:20:22 UTC (rev 4638)
+++ contrib/py/scripts/addons/add_mesh_space_tree/__init__.py 2013-07-26 19:24:25 UTC (rev 4639)
@@ -24,7 +24,7 @@
bl_info = {
"name": "SCA Tree Generator",
"author": "michel anders (varkenvarken)",
- "version": (0, 1, 0),
+ "version": (0, 1, 1),
"blender": (2, 66, 0),
"location": "View3D > Add > Mesh",
"description": "Adds a tree created with the space colonization algorithm starting at the 3D cursor",
Modified: contrib/py/scripts/addons/add_mesh_space_tree/kdtree.py
===================================================================
--- contrib/py/scripts/addons/add_mesh_space_tree/kdtree.py 2013-07-25 15:20:22 UTC (rev 4638)
+++ contrib/py/scripts/addons/add_mesh_space_tree/kdtree.py 2013-07-26 19:24:25 UTC (rev 4639)
@@ -22,426 +22,434 @@
#
# ##### END GPL LICENSE BLOCK #####
+# <pep8 compliant>
+
from copy import copy, deepcopy
+
class Hyperrectangle:
- '''an axis aligned bounding box of arbitrary dimension'''
+ '''an axis aligned bounding box of arbitrary dimension'''
- def __init__(self, dim, min, max):
- self.dim = dim
- self.min = deepcopy(min) # min and max should never point to the same instance
- self.max = deepcopy(max)
+ def __init__(self, dim, min, max):
+ self.dim = dim
+ self.min = deepcopy(min) # min and max should never point to the same instance
+ self.max = deepcopy(max)
- def extend(self,pos):
- '''adapt the hyperectangle if necessary so it will contain pos.'''
- for i in range(self.dim):
- if pos[i]<self.min[i]: self.min[i]=pos[i]
- elif pos[i]>self.max[i]: self.max[i]=pos[i]
-
- def distance_squared(self,pos):
- '''return the distance squared to the nearest edge, or zero if pos lies within the hyperrectangle'''
- result=0.0
- for i in range(self.dim):
- if pos[i]<self.min[i]:
- result+=(pos[i ]-self.min[i ])**2
- elif pos[i]>self.max[i]:
- result+=(pos[i ]-self.max[i ])**2
- return result
+ def extend(self, pos):
+ '''adapt the hyperectangle if necessary so it will contain pos.'''
+ for i in range(self.dim):
+ if pos[i] < self.min[i]:
+ self.min[i] = pos[i]
+ elif pos[i] > self.max[i]:
+ self.max[i] = pos[i]
- def __str__(self):
- return "[(%d) %s:%s]"%(int(self.dim),str(self.min),str(self.max))
+ def distance_squared(self, pos):
+ '''return the distance squared to the nearest edge, or zero if pos lies within the hyperrectangle'''
+ result = 0.0
+ for i in range(self.dim):
+ if pos[i] < self.min[i]:
+ result += (pos[i] - self.min[i]) ** 2
+ elif pos[i] > self.max[i]:
+ result += (pos[i] - self.max[i]) ** 2
+ return result
+ def __str__(self):
+ return "[(%d) %s:%s]" % (int(self.dim), str(self.min), str(self.max))
+
+
class Node:
- """implements a node in a kd-tree"""
-
- def __init__(self, pos, data=None):
- self.pos = deepcopy(pos)
- self.data = data
- self.left = None
- self.right = None
- self.dim=len(pos)
- self.dir = 0
- self.count=0
- self.level=0
- self.rect=Hyperrectangle(self.dim,pos,pos)
+ """implements a node in a kd-tree"""
- def addleft(self, node):
- self.left = node
- self.rect.extend(node.pos)
- node.level=self.level+1
- node.dir=(self.dir+1)%self.dim
-
- def addright(self, node):
- self.right = node
- self.rect.extend(node.pos)
- node.level=self.level+1
- node.dir=(self.dir+1)%self.dim
-
- def distance_squared(self, pos):
- d=self.pos-pos
- return d.dot(d)
+ def __init__(self, pos, data=None):
+ self.pos = deepcopy(pos)
+ self.data = data
+ self.left = None
+ self.right = None
+ self.dim = len(pos)
+ self.dir = 0
+ self.count = 0
+ self.level = 0
+ self.rect = Hyperrectangle(self.dim, pos, pos)
- def _str(self,level):
- s = ' '*level+str(self.dir)+' '+str(self.pos)+' '+str(self.rect)+'\n'
- return s + ('' if self.left is None else 'L:'+self.left._str(level+1)) + ('' if self.right is None else 'R:'+self.right._str(level+1))
+ def addleft(self, node):
+ self.left = node
+ self.rect.extend(node.pos)
+ node.level = self.level + 1
+ node.dir = (self.dir + 1) % self.dim
- def __str__(self):
- return self._str(0)
+ def addright(self, node):
+ self.right = node
+ self.rect.extend(node.pos)
+ node.level = self.level + 1
+ node.dir = (self.dir + 1) % self.dim
+ def distance_squared(self, pos):
+ d = self.pos - pos
+ return d.dot(d)
+
+ def _str(self, level):
+ s = ' ' * level + str(self.dir) + ' ' + str(self.pos) + ' ' + str(self.rect) + '\n'
+ return s + ('' if self.left is None else 'L:' + self.left._str(level + 1)) + ('' if self.right is None else 'R:' + self.right._str(level + 1))
+
+ def __str__(self):
+ return self._str(0)
+
+
class Tree:
- """implements a kd-tree"""
-
- def __init__(self, dim):
- self.root = None
- self.nnearest=0 # number of nearest neighbor queries
- self.count=0 # number of nodes visited
- self.level=0 # deepest node level
-
- def resetcounters(self):
- self.nnearest=0 # number of nearest neighbor queries
- self.count=0 # number of nodes visited
-
- def _insert(self, node, pos, data):
- if pos[node.dir] < node.pos[node.dir]:
- if node.left is None:
- node.addleft(Node(pos, data))
- return node.left
- else:
- node.rect.extend(pos)
- return self._insert(node.left, pos, data)
- else:
- if node.right is None:
- node.addright(Node(pos, data))
- return node.right
- else:
- node.rect.extend(pos)
- return self._insert(node.right, pos, data)
+ """implements a kd-tree"""
- def insert(self, pos, data):
- if self.root is None:
- self.root = Node(pos,data)
- self.level = self.root.level
- return self.root
- else:
- node=self._insert(self.root, pos, data)
- if node.level > self.level : self.level = node.level
- return node
+ def __init__(self, dim):
+ self.root = None
+ self.nnearest = 0 # number of nearest neighbor queries
+ self.count = 0 # number of nodes visited
+ self.level = 0 # deepest node level
- def _nearest(self, node, pos, checkempty, level=0):
-
- self.count+=1
-
- dir = node.dir
- d = pos[dir] - node.pos[dir]
-
- result = node
- distsq = None
- if checkempty and (node.data is None):
- result = None
- else:
- distsq = node.distance_squared(pos)
+ def resetcounters(self):
+ self.nnearest = 0 # number of nearest neighbor queries
+ self.count = 0 # number of nodes visited
- if d <= 0:
- neartree = node.left
- fartree = node.right
- else:
- neartree = node.right
- fartree = node.left
+ def _insert(self, node, pos, data):
+ if pos[node.dir] < node.pos[node.dir]:
+ if node.left is None:
+ node.addleft(Node(pos, data))
+ return node.left
+ else:
+ node.rect.extend(pos)
+ return self._insert(node.left, pos, data)
+ else:
+ if node.right is None:
+ node.addright(Node(pos, data))
+ return node.right
+ else:
+ node.rect.extend(pos)
+ return self._insert(node.right, pos, data)
- if neartree is not None:
- nearnode, neardistsq = self._nearest(neartree,pos,checkempty,level+1)
- if (result is None) or (neardistsq is not None and neardistsq < distsq):
- result, distsq = nearnode, neardistsq
-
- if fartree is not None:
- if (result is None) or (fartree.rect.distance_squared(pos) < distsq):
- farnode, fardistsq = self._nearest(fartree,pos,checkempty,level+1)
- if (result is None) or (fardistsq is not None and fardistsq < distsq):
- result, distsq = farnode, fardistsq
-
- return result, distsq
+ def insert(self, pos, data):
+ if self.root is None:
+ self.root = Node(pos, data)
+ self.level = self.root.level
+ return self.root
+ else:
+ node = self._insert(self.root, pos, data)
+ if node.level > self.level:
+ self.level = node.level
+ return node
- def nearest(self, pos, checkempty=False):
- self.nnearest+=1
- if self.root is None:
- return None, None
- self.root.count=0
- node, distsq = self._nearest(self.root, pos, checkempty)
- self.count+=self.root.count
- return node,distsq
-
- def __str__(self):
- return str(self.root)
+ def _nearest(self, node, pos, checkempty, level=0):
+ self.count += 1
+
+ dir = node.dir
+ d = pos[dir] - node.pos[dir]
+
+ result = node
+ distsq = None
+ if checkempty and (node.data is None):
+ result = None
+ else:
+ distsq = node.distance_squared(pos)
+
+ if d <= 0:
+ neartree = node.left
+ fartree = node.right
+ else:
+ neartree = node.right
+ fartree = node.left
+
+ if neartree is not None:
+ nearnode, neardistsq = self._nearest(neartree, pos, checkempty, level + 1)
+ if (result is None) or (neardistsq is not None and neardistsq < distsq):
+ result, distsq = nearnode, neardistsq
+
+ if fartree is not None:
+ if (result is None) or (fartree.rect.distance_squared(pos) < distsq):
+ farnode, fardistsq = self._nearest(fartree, pos, checkempty, level + 1)
+ if (result is None) or (fardistsq is not None and fardistsq < distsq):
+ result, distsq = farnode, fardistsq
+
+ return result, distsq
+
+ def nearest(self, pos, checkempty=False):
+ self.nnearest += 1
+ if self.root is None:
+ return None, None
+ self.root.count = 0
+ node, distsq = self._nearest(self.root, pos, checkempty)
+ self.count += self.root.count
+ return node, distsq
+
+ def __str__(self):
+ return str(self.root)
+
if __name__ == "__main__":
- class vector(list):
+ class vector(list):
- def __init__(self, *args):
- super().__init__([float(a) for a in args])
-
- def __str__(self):
- return "<%.1f %.1f %.1f>"%tuple(self[0:3])
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list