[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [850] branches/ivygen/ivy_test.py: - commiting this for now

Florian Meyer florianfelix at web.de
Mon Jul 26 22:57:54 CEST 2010


Revision: 850
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-extensions&revision=850
Author:   testscreenings
Date:     2010-07-26 22:57:54 +0200 (Mon, 26 Jul 2010)

Log Message:
-----------
- commiting this for now
- adhesion3 is finished in principal
- but i must have made one error somewhere with the math
--> need to investigate
- but as expected: the runtime is faster

Modified Paths:
--------------
    branches/ivygen/ivy_test.py

Modified: branches/ivygen/ivy_test.py
===================================================================
--- branches/ivygen/ivy_test.py	2010-07-26 19:45:52 UTC (rev 849)
+++ branches/ivygen/ivy_test.py	2010-07-26 20:57:54 UTC (rev 850)
@@ -337,24 +337,30 @@
 def generateSamples(faces, mesh):
     samplePoints = []
     for face in faces:
-        print('face', face.index)
+        #print('face', face.index)
+
         # adding the vertcoordinates --> doesn't account for shared verts
         samplePoints += ([mesh.verts[i].co.copy() for i in face.verts])
-        #print('samplePoints - Verts', len(samplePoints))
     
-        # ATM this only works for quads, hence:
+        isQuad = True
+
+        # set for triangle
         if len(face.verts) == 3:
-            print('skipping Triangle')
-            continue
+            isQuad = False
 
+        #the verts
         start0 = mesh.verts[face.verts[0]].co
         start1 = mesh.verts[face.verts[1]].co
         start2 = mesh.verts[face.verts[2]].co
-        start3 = mesh.verts[face.verts[3]].co
+        if isQuad:
+            start3 = mesh.verts[face.verts[3]].co
+
+        #the directionvectors of the face
         V0 = mesh.verts[face.verts[0]].co - mesh.verts[face.verts[1]].co
         V1 = mesh.verts[face.verts[1]].co - mesh.verts[face.verts[2]].co
-        V2 = mesh.verts[face.verts[2]].co - mesh.verts[face.verts[3]].co
-        V3 = mesh.verts[face.verts[3]].co - mesh.verts[face.verts[0]].co
+        if isQuad:
+            V2 = mesh.verts[face.verts[2]].co - mesh.verts[face.verts[3]].co
+            V3 = mesh.verts[face.verts[3]].co - mesh.verts[face.verts[0]].co
 
         # add edgesamples (3 each)
         a = 0.0
@@ -366,96 +372,97 @@
             esample0 = start0 + V0 * a
             esample1 = start1 + V1 * a
             esample2 = start2 + V2 * a
-            esample3 = start3 + V3 * a
+            if isQuad:
+                esample3 = start3 + V3 * a
             samplePoints.append(esample0)
             samplePoints.append(esample1)
             samplePoints.append(esample2)
-            samplePoints.append(esample3)
+            if isQuad:
+                samplePoints.append(esample3)
 
-        print('samplePoints - Edge', len(samplePoints))
 
+
         # add facesamples (12)
         # maybe add a test here if the face is facing the point
 
+        # get the two triangles with the smallest angle if face is quad
 
-        # get the two triangles with the smallest angle
-
         angle0 = (V0).angle(-V1)
         #print('vert 0',angle0)
 
         angle1 = (V1).angle(-V2)
         #print('vert 1',angle1)
+        if isQuad:
+            angle2 = (V2).angle(-V3)
+            #print('vert 2',angle2)
+    
+            angle3 = (V3).angle(-V0)
+            #print('vert 3',angle3)
 
-        angle2 = (V2).angle(-V3)
-        #print('vert 2',angle2)
 
-        angle3 = (V3).angle(-V0)
-        #print('vert 3',angle3)
-
         angle = angle0
         tri_1 = [[V0, -V1],[mesh.verts[face.verts[0]].co,
                             mesh.verts[face.verts[1]].co,
                             mesh.verts[face.verts[2]].co]]
-        tri_2 = [[V2, -V3],[mesh.verts[face.verts[2]].co,
-                            mesh.verts[face.verts[3]].co,
-                            mesh.verts[face.verts[0]].co]]
-
-        if angle1 < angle:
-            angle = angle1
-            tri_1 = [[V1, -V2],[mesh.verts[face.verts[1]].co,
-                                mesh.verts[face.verts[2]].co,
-                                mesh.verts[face.verts[3]].co]]
-            tri_2 = [[V3, -V0],[mesh.verts[face.verts[3]].co,
-                                mesh.verts[face.verts[0]].co,
-                                mesh.verts[face.verts[1]].co]]
-
-        if angle2 < angle:
-            angle = angle2
-            tri_1 = [[V2, -V3],[mesh.verts[face.verts[2]].co,
+        if isQuad:
+            tri_2 = [[V2, -V3],[mesh.verts[face.verts[2]].co,
                                 mesh.verts[face.verts[3]].co,
                                 mesh.verts[face.verts[0]].co]]
-            tri_2 = [[V0, -V1],[mesh.verts[face.verts[0]].co,
-                                mesh.verts[face.verts[1]].co,
-                                mesh.verts[face.verts[2]].co]]
 
-        if angle3 < angle:
-            angle = angle3
-            tri_1 = [[V3, -V0],[mesh.verts[face.verts[3]].co,
-                                mesh.verts[face.verts[0]].co,
-                                mesh.verts[face.verts[1]].co]]
-            tri_2 = [[V1, -V2],[mesh.verts[face.verts[1]].co,
-                                mesh.verts[face.verts[2]].co,
-                                mesh.verts[face.verts[3]].co]]
-
+            if angle1 < angle:
+                angle = angle1
+                tri_1 = [[V1, -V2],[mesh.verts[face.verts[1]].co,
+                                    mesh.verts[face.verts[2]].co,
+                                    mesh.verts[face.verts[3]].co]]
+                tri_2 = [[V3, -V0],[mesh.verts[face.verts[3]].co,
+                                    mesh.verts[face.verts[0]].co,
+                                    mesh.verts[face.verts[1]].co]]
     
-        #print('smallest',angle)
+            if angle2 < angle:
+                angle = angle2
+                tri_1 = [[V2, -V3],[mesh.verts[face.verts[2]].co,
+                                    mesh.verts[face.verts[3]].co,
+                                    mesh.verts[face.verts[0]].co]]
+                tri_2 = [[V0, -V1],[mesh.verts[face.verts[0]].co,
+                                    mesh.verts[face.verts[1]].co,
+                                    mesh.verts[face.verts[2]].co]]
+    
+            if angle3 < angle:
+                angle = angle3
+                tri_1 = [[V3, -V0],[mesh.verts[face.verts[3]].co,
+                                    mesh.verts[face.verts[0]].co,
+                                    mesh.verts[face.verts[1]].co]]
+                tri_2 = [[V1, -V2],[mesh.verts[face.verts[1]].co,
+                                    mesh.verts[face.verts[2]].co,
+                                    mesh.verts[face.verts[3]].co]]
 
-
+        #add samples from first tri
         samplePoints += samplesOnTry(tri_1[0][0], tri_1[0][1], tri_1[1])
-        samplePoints += samplesOnTry(tri_2[0][0], tri_2[0][1], tri_2[1])
 
+        #add samples from second tri
+        if isQuad:
+            samplePoints += samplesOnTry(tri_2[0][0], tri_2[0][1], tri_2[1])
+
+    #print('samplePoints - all: ', len(samplePoints))
     return samplePoints
 
-def samplesOnTry(vecA, vecB, verts):
+def samplesOnTry(vecA, vecB, verts, rows=3):
     samples = []
     base = verts[1]
-    print('base', base)
-    rows = 3
+    #rows = 3
 
     b = 0.0
     for row in range(rows+1):
         b += 1 / (rows +1)
         a = 0.0
         samp = row
-        #print(verts[0])
+
         for s in range(samp):
             a += 1 / (samp + 1)
-            sample = (base + (vecA.lerp(vecB, a) * b))
-            print(sample)
-            samples.append(sample)
-        #print(verts[2], '\n')
+            sample = (base + (vecA.lerp(vecB, a) * b))  #concerning b: still need to offset for the last row
+            samples.append(sample)                      #or we have duplicated samples at the tri intersection
 
-    print('\n samples', len(samples))
+    #print('\n samples', len(samples))
     return samples
 
 
@@ -467,15 +474,20 @@
     sortetFaces = sorted(mesh.faces, key=lambda face: (face.center - NodePoint).length)
 
     # now generate oversampling points for the closest faces
-    samplePoints = generateSamples(sortetFaces[0:1], mesh)
+    samplePoints = generateSamples(sortetFaces[0:4], mesh) # generate samples for the 4 nearest faces
 
-    sortetSample = sorted(samplePoints, key=lambda point: (point - NodePoint).length)
+    sortetSample = sorted(samplePoints, key=lambda point: (NodePoint - point).length)
 
+    print('sortetSample - all: ', len(sortetSample))
+
     try:
         adhesionVector = NodePoint - sortetSample[0]
+        print('NodePoint', NodePoint)
+        print('sortetSample[0]', sortetSample[0])
     except:
         adhesionVector = mathutils.Vector((0,0,0))
 
+    print(adhesionVector)
     return adhesionVector
 
 def collision(ob, root, new_pos):




More information about the Bf-extensions-cvs mailing list