[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2403] branches/geodesic_domes: second try repairing dir structure
Peter K.H. Gragert
pkhgragert at gmail.com
Sun Oct 9 13:56:22 CEST 2011
Revision: 2403
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2403
Author: pkhg
Date: 2011-10-09 11:56:21 +0000 (Sun, 09 Oct 2011)
Log Message:
-----------
second try repairing dir structure
Added Paths:
-----------
branches/geodesic_domes/vefm259.py
Removed Paths:
-------------
branches/geodesic_domes/geodesic_dome/vefm259.py
Deleted: branches/geodesic_domes/geodesic_dome/vefm259.py
===================================================================
--- branches/geodesic_domes/geodesic_dome/vefm259.py 2011-10-09 11:53:20 UTC (rev 2402)
+++ branches/geodesic_domes/geodesic_dome/vefm259.py 2011-10-09 11:56:21 UTC (rev 2403)
@@ -1,1223 +0,0 @@
-## vert class and overloading experiments
-import bpy
-import math
-from math import sqrt,acos,pi,sin,cos,atan,tan,fabs
-#from Blender import NMesh
-from mathutils import Vector
-dbg = True
-sgn = lambda x : (x>0) - (x<0) #missing signum functin in Python
-breakpoint = bpy.types.bp.bp
-
-class vertex:
-
- def __init__(self,vec=(0,0,0)): #x=0,y=0,z=0):
-
- self.vector = Vector(vec)
- self.x = vec[0]
- self.y = vec[1]
- self.z = vec[2]
- self.length = self.vector.length
- self.index = 0
- self.normal = 0
- self.edges = []
- self.faces = []
- self.boundary = 0
- if dbg:
- print("dbg: vertex generate with length = ",self.length)
-
-
- def findlength(self):
-
-# self.length=sqrt(self.x*self.x+self.y*self.y+self.z*self.z)
- self.length = self.vector.length
-
- def normalize(self):
-
- self.findlength()
- if self.length > 0:
- tmp = 1.0/self.length
- self.vector = tmp * self.vector
- self.x = self.vector[0] #(1.0/self.length)
- self.y = self.vector[1] #(1.0/self.length)
- self.z = self.vector[2] #(1.0/self.length)
- self.length = 1.0
-
- def findnormal(self):
- target = []
- if self.faces[:] == []:
- print("pkhg:*****ERROR**** findnormal has no faces")
- return
- for currentface in self.faces:
- target.append(currentface.normal)
- self.normal = average(target).centroid()
- self.normal.findlength()
- if self.length == 0:
- print("******ERROR*** lenght zero in findnormal")
- self.normal.normalize()
-
- def clockwise(self):
- if self.boundary:
- start = self.boundarystart()
- else:
- start = self.faces[0]
- self.tempedges = []
- self.tempfaces = []
- for i in range(len(self.edges)):
- self.tempfaces.append(start)
- for corner in start.corners:
- if corner[0] is not self:
- pass
- elif corner[0] is self:
- self.tempedges.append(corner[1])
- nextedge = corner[2]
- for facey in nextedge.faces:
- if facey is not start:
- start = facey
- break
- self.edges = self.tempedges
- self.faces = self.tempfaces
-
- def boundarystart(self):
- pass
-
- def __add__(self,other):
- x = self.x+other.x
- y = self.y+other.y
- z = self.z+other.z
- return vertex((x,y,z))
-
- def __sub__(self,other):
- x = self.x-other.x
- y = self.y-other.y
- z = self.z-other.z
- return vertex((x,y,z))
-
- def __mul__(self,other):
- x = self.x*other
- y = self.y*other
- z = self.z*other
- return vertex((x,y,z))
-
- def __div__(self,other):
- tmp = 1.0/other
- x = self.x*tmp#(1/other)
- y = self.y*tmp#(1/other)
- z = self.z*tmp#(1/other)
- return vertex((x,y,z))
-
- def negative(self):
- return vertex((-self.x,-self.y,-self.z))
-
-class crossp:
- ## Takes in two vertices(vectors), returns the cross product.
- def __init__(self,v1,v2):
- self.v1 = v1
- self.v2 = v2
- # self.docrossproduct(v1,v2)
-#
- def docrossproduct(self):
- tmp = self.v1.vector.cross(self.v2.vector)
-# x = (self.v1.y*self.v2.z)-(self.v2.y*self.v1.z)
-# y = (self.v1.z*self.v2.x)-(self.v2.z*self.v1.x)
-# z = (self.v1.x*self.v2.y)-(self.v2.x*self.v1.y)
-# return vertex(x,y,z)
- return vertex(tmp)
-class average:
- ## Takes a list of vertices and returns the average. If two verts are passed, returns midpoint.
- def __init__(self,vertlist):
- self.vertlist = vertlist
- # self.centroid()
-
- def centroid(self):
-# x = y = z = 0
- tmp = Vector()
- divisor = 1.0 / len(self.vertlist)
- for vert in self.vertlist:
- tmp += vert.vector
-# x=x+vert.x
-# y=y+vert.y
-# z=z+vert.z
- tmp *= divisor
-# return vertex(x/divisor,y/divisor,z/divisor)
- #return vertex(tmp[0],tmp[1],tmp[2])
- return vertex(tmp)
-
-class edge:
- def __init__(self,a=0,b=0):
- self.a = a
- self.b = b
- self.index = 0
- self.normal = 0
- self.cross = 0
- self.unit = 0
- self.faces = []
- self.vect = 0
- self.vectb = 0
-# self.length = 0
- self.boundary = 0
- self.findvect()
-# print("vect len before",self.vect.length)
- self.findlength()
-# print("vect after",self.vect.length)
-
- def findvect(self):
- self.vect = self.b-self.a
- self.vectb = self.a-self.b
-
- def findlength(self):
- #print("in edge findlength")
- self.vect.findlength()
- self.vectb.length = self.vect.length
-
- def findnormal(self):
-
- if self.boundary:
- self.normal = self.faces[0].normal #average([self.a,self.b]).centroid()
-
- else:
-
- self.normal = average([self.faces[0].normal,self.faces[1].normal]).centroid()
-
- self.normal.normalize()
-# def findother(self,vertindex):
-#
-# if vertindex==self.a:
-#
-# return self.b
-#
-# else:
-# return self.a
-## different classes for 3,4,> sides??
-class face:
- def __init__(self,vertices=[]):
- print("\ndbg face vertices = ",vertices)
- self.vertices=vertices ## List of vertex instances.
- self.edges=[] ## Will be filled with the sides of the face.
- self.boundary=0 ## When set will have bool and id of edge concerned.
- self.normal=0 ## Face normal found through cross product.
- self.corners=[]
- self.spokes=[] ## Vectors of the bisecting angles from each corner to the centre + dotproduct.
- self.index=0
-
- #dotproduct is misleading name, it is the hook between two vectors!
- def dotproduct(self,v1,v2):
- # print("dp ",v1.x,v1.y,v1.z," ",v2.x,v2.y,v2.z)
- # print("v1 length",v1.length)
- # print("v2 length",v2.length)
-
- v1.findlength()
- v2.findlength()
- if v1.length == 0 or v2.length == 0:
- print("\nPKHG warning, =========== at least one zero vector 0.0 used")
- return 0.0
- # print("v1 length",v1.length)
- # print("v2 length",v2.length)
- dot=(v1.x*v2.x)+(v1.y*v2.y)+(v1.z*v2.z)
- costheta=dot/(v1.length*v2.length)
- pkhgtmp = v1.vector.dot(v2.vector)
- tmp = acos(costheta)
- print("dbg 204 dotprod in face",dot,pkhgtmp,tmp)
- return tmp
-
- def orderedges(self):
- print("\n-----------------dbg 212 orderedeges called")
- temp=[]
- finish=len(self.vertices)
- for i in range(finish):
- current=self.vertices[i]
- if i==finish-1:
- next=self.vertices[0]
- else:
- next=self.vertices[i+1]
- for edge in face.edges:
- if edge.a==current and edge.b==next:
- face.clockw.append(edge.vect)
- face.aclockw.append(edge.vectb)
- temp.append(edge)
- if edge.b==current and edge.a==next:
- face.clockw.append(edge.vectb)
- face.aclockw.append(edge.vect)
- temp.append(edge)
- for edge in face.edges:
- if edge.a==current and edge.b==next:
- face.clockw.append(edge.vect)
- face.aclockw.append(edge.vectb)
- temp.append(edge)
- if edge.b==current and edge.a==next:
- face.clockw.append(edge.vectb)
- face.aclockw.append(edge.vect)
- temp.append(edge)
- face.vertices=temp
-
-
- def docorners(self):
- ## This function identifies and stores the vectors coming from each vertex
- ## allowing easier calculation of cross and dot products.
- finish=len(self.vertices)
- for i in range(finish):
- current=self.vertices[i]
- if i==finish-1:
- next=self.vertices[0]
- else:
- next=self.vertices[i+1]
- if i==0:
- previous=self.vertices[-1]
- else:
- previous=self.vertices[i-1]
- corner=[current]
- #corner = current
- print("dbg current = ", current,self.edges[:])
- rightedge = None
- leftedge = None
- for edge in self.edges:
- print(edge.a, edge.a is current)
- if edge.a is current or edge.b is current: ## does this edge contain our current vert
- if edge.a is current:
- if edge.b is next:
- rightedge=edge
- rightvect=edge.vect
- if edge.b is previous:
- leftedge=edge
- leftvect=edge.vect
- elif edge.b is current:
- if edge.a is next:
- rightedge=edge
- rightvect=edge.vectb
- if edge.a is previous:
- leftedge=edge
- leftvect=edge.vectb
- #breakpoint(locals())
- corner.append(rightedge)
- corner.append(leftedge)
- # print("corner stuff vert",current.index,"rightedge",rightedge.index,"leftedge",leftedge.index)
- # print("corner",corner)
- dotty=self.dotproduct(rightvect,leftvect)
- corner.append(dotty)
- # print("corner",corner)
- self.corners.append(corner)
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list