[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [2418] branches/geodesic_domes/vefm259. py: first test succeeded with hexify
Peter K.H. Gragert
pkhgragert at gmail.com
Tue Oct 11 15:56:47 CEST 2011
Revision: 2418
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=2418
Author: pkhg
Date: 2011-10-11 13:56:47 +0000 (Tue, 11 Oct 2011)
Log Message:
-----------
first test succeeded with hexify
an imported mesh with only tri's delivers a mesh, where new vertices are created ...
Modified Paths:
--------------
branches/geodesic_domes/vefm259.py
Modified: branches/geodesic_domes/vefm259.py
===================================================================
--- branches/geodesic_domes/vefm259.py 2011-10-11 04:44:52 UTC (rev 2417)
+++ branches/geodesic_domes/vefm259.py 2011-10-11 13:56:47 UTC (rev 2418)
@@ -6,12 +6,31 @@
from mathutils import Vector
dbg = True
sgn = lambda x : (x>0) - (x<0) #missing signum functin in Python
-breakpoint = bpy.types.bp.bp
+try:
+ breakpoint = bpy.types.bp.bp
+except:
+ pass
+#PKHG to test a mesh
+from add_utils import AddObjectHelper, add_object_data
+from mathutils import Vector
+from collections import Counter
+
+def find_twice_vert(l1,l2):
+ tmp = [el for el in l1]
+ tmp.extend(l2)
+ tt = Counter(tmp)
+ result = max(tt.keys(),key = lambda k:tt[k])
+ print("twice give", result)
+ return result
+#extra test phase
+
+
+
+
class vertex:
- def __init__(self,vec=(0,0,0)): #x=0,y=0,z=0):
-
+ 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]
@@ -60,9 +79,14 @@
start = self.boundarystart()
else:
start = self.faces[0]
+ #PKHG TODO do understand
+ start = self.faces[0]
+ start.docorners() #PKHG????
self.tempedges = []
self.tempfaces = []
for i in range(len(self.edges)):
+ print("\n----------------------voor breakpunt pkhg in clockwise")
+ #breakpoint(locals(), self.index == 0)
self.tempfaces.append(start)
for corner in start.corners:
if corner[0] is not self:
@@ -78,32 +102,41 @@
self.faces = self.tempfaces
def boundarystart(self):
+ #PKHG not implemented, needed?
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))
+ tmp = self.vector + other.vector
+ #x = self.x+other.x
+ #y = self.y+other.y
+ #z = self.z+other.z
+ #return vertex((x,y,z))
+ return vertex(tmp)
def __sub__(self,other):
- x = self.x-other.x
- y = self.y-other.y
- z = self.z-other.z
- return vertex((x,y,z))
+ tmp = self.vector - other.vector
+ #x = self.x-other.x
+ #y = self.y-other.y
+ #z = self.z-other.z
+ #return vertex((x,y,z))
+ return vertex(tmp)
def __mul__(self,other):
- x = self.x*other
- y = self.y*other
- z = self.z*other
- return vertex((x,y,z))
+ #x = self.x*other
+ #y = self.y*other
+ #z = self.z*other
+ tmp = self.vector * other
+ #return vertex((x,y,z))
+ return vertex(tmp)
- 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 __truediv__(self,other):
+ denom = 1.0/other
+ tmp = self.vector * denom
+ return (tmp)
+# 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))
@@ -151,8 +184,8 @@
self.cross = 0
self.unit = 0
self.faces = []
- self.vect = 0
- self.vectb = 0
+ self.vect = 0 #PKHG becomes b - a
+ self.vectb = 0 #PKHG becomes a - b
# self.length = 0
self.boundary = 0
self.findvect()
@@ -161,8 +194,8 @@
# print("vect after",self.vect.length)
def findvect(self):
- self.vect = self.b-self.a
- self.vectb = self.a-self.b
+ self.vect = self.b - self.a
+ self.vectb = self.a - self.b
def findlength(self):
#print("in edge findlength")
@@ -254,6 +287,22 @@
## This function identifies and stores the vectors coming from each vertex
## allowing easier calculation of cross and dot products.
finish=len(self.vertices)
+ '''
+ which = None
+ occur1 = None
+ occur2 = None
+ if finish == 3 and len(self.edges) == 2 :
+ print("\n***ERROR*** only two edges should be three")
+ # return
+ occur1 = [self.vertices.index(self.edges[0].a),self.vertices.index(self.edges[0].b)]
+ occur2 = [self.vertices.index(self.edges[1].a),self.vertices.index(self.edges[1].b)]
+ #occur2 = [self.edges[1].a.index, self.edges[1].b.index]
+ twice = find_twice_vert(occur1,occur2)
+ occur1.remove(twice)
+ occur2.remove(twice)
+ #new_edge = edge(self.vertices[occur1[0]],self.vertices[occur2[0]])
+ #self.edges.append(new_edge)
+ '''
for i in range(finish):
current=self.vertices[i]
if i==finish-1:
@@ -269,8 +318,13 @@
print("dbg current = ", current,self.edges[:])
rightedge = None
leftedge = None
+ teller = -1
for edge in self.edges:
- print(edge.a, edge.a is current)
+ # if finish == 3 and len(self.edges) == 2 and i == 2:
+ # return
+ teller += 1
+ currentinfo = (current, edge.a, edge.b, edge.a is current, edge.b is current)
+ #breakpoint(locals())
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:
@@ -289,8 +343,12 @@
#breakpoint(locals())
corner.append(rightedge)
corner.append(leftedge)
- # print("corner stuff vert",current.index,"rightedge",rightedge.index,"leftedge",leftedge.index)
- # print("corner",corner)
+ print("corner stuff vert",current.index)
+ if rightedge:
+ print("rightedge",rightedge.index)
+ if leftedge:
+ print( "leftedge",leftedge.index)
+ print("corner",corner)
dotty=self.dotproduct(rightvect,leftvect)
corner.append(dotty)
# print("corner",corner)
@@ -341,7 +399,8 @@
spokes.append(newedge)
class mesh:
- def __init__(self):
+ def __init__(self , name="pkhg_test"):
+ self.name = name #pkhg test phase at least ;-)
self.verts=[]
self.edges=[]
self.faces=[]
@@ -355,16 +414,35 @@
self.vertnormalflag=0
self.edgenormalflag=0
self.facenormalflag=0
- #found in geodesic.py ???
- self.a45=pi*0.25
- self.a90=pi*0.5
+ #found in geodesic.py ??? needed for test here!
+ self.a45=pi * 0.25
+ self.a90=pi * 0.5
self.a180=pi
- self.a270=pi*1.5
- self.a360=pi*2
+ self.a270=pi * 1.5
+ self.a360=pi * 2
+
+ def add_object(self):
+ for i in range(len(self.verts)):
+ self.verts[i].index = i
+ v = [el.vector for el in self.verts]
+ e = [[edge.a.index,edge.b.index] for edge in self.edges]
+ #faces = thisfaces #PKHG have to find out how a mesh is generated?!
+ #f = [[vert.index for vert in face.vertices] for face in self.faces]
+ for el in self.faces:
+ print("dbg pkhg",len(el.vertices), el.vertices[:])
+ #breakpoint(locals())
+ m = bpy.data.meshes.new(name= self.name)
+ m.from_pydata(v, e, [])
+ # useful for development when the mesh may be invalid.
+ m.validate(verbose=True)
+ add_object_data(bpy.context, m, operator=None)
+
+
def power(self,a,b): ## Returns a power, including negative numbers
# result=self.sign(a)*(abs(a)**b)
result = sgn(a)*(abs(a)**b)
return result
+
def sign(self,d): ## Works out the sign of a number.
return sgn(d)
'''
@@ -486,20 +564,28 @@
## The functions below turn the basic triangular faces into
## hexagonal faces, creating the buckyball effect.
+#PKHG seems to work only for meshes with tri's ;-) ??!!
def hexify(self):
self.hexverts=[]
self.hexedges=[]
self.hexfaces=[]
+ #PKHG renumbering the index of the verts
for i in range(len(self.verts)):
self.verts[i].index=i
+ #PKHG renumbering the index of the edges
for i in range(len(self.edges)):
self.edges[i].index=i
+ #PKHG self=> dovertedge, dovertface, dofaceedge, boundary()
self.connectivity()
+
for edge in self.edges:
self.hexshorten(edge)
+
for face in self.faces:
self.makehexfaces(face)
+
for vert in self.verts:
+ #PKHG TODO
vert.clockwise()
self.hexvertface(vert)
self.verts=self.hexverts
@@ -508,14 +594,18 @@
self.vertedgeflag=0
self.vertfaceflag=0
self.faceedgeflag=0
+ print("\n ==========================self hexified I hope")
+ #breakpoint(locals(),True)
def hexshorten(self,currentedge):
- third=currentedge.vect/3.0
- newvert1=vertex(currentedge.a.x,currentedge.a.y,currentedge.a.z)
- newvert2=vertex(currentedge.b.x,currentedge.b.y,currentedge.b.z)
- newvert1=newvert1+third
- newvert2=newvert2-third
- newedge=edge(newvert1,newvert2)
+ third = vertex(currentedge.vect/3.0)
+# newvert1=vertex(currentedge.a.x,currentedge.a.y,currentedge.a.z)
+# newvert2=vertex(currentedge.b.x,currentedge.b.y,currentedge.b.z)
+ newvert1 = vertex(currentedge.a.vector)
+ newvert2 = vertex(currentedge.b.vector)
+ newvert1 = newvert1 + third
+ newvert2 = newvert2 - third
+ newedge = edge(newvert1,newvert2)
newedge.index=currentedge.index
self.hexverts.append(newvert1)
self.hexverts.append(newvert2)
@@ -524,6 +614,7 @@
def makehexfaces(self,currentface):
vertices=[]
+ #???????PKHG
currentface.docorners()
for corner in currentface.corners:
@@ -735,6 +826,7 @@
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list