[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