[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