import sys
import bmesh
import numpy as np
def mapOnPlane(a, b0, b1, b2):
u = np.array([b1[0]-b0[0], b1[1]-b0[1], b1[2]-b0[2]])
v = np.array([b2[0]-b0[0], b2[1]-b0[1], b2[2]-b0[2]])
n = np.cross(u, v)
tX = np.array([n, u, v])
X = np.array([tX[:,0], tX[:,1], tX[:,2]])
print(X)
Y = np.array([b0[0]-a[0], b0[1]-a[1], b0[2]-a[2]])
s = np.linalg.solve(X, Y)
return (a[0] + s[0]*n[0], a[1] + s[0]*n[1], a[2] + s[0]*n[2])
def pressLine():
if bpy.ops.object.mode_set.poll():
bpy.ops.object.mode_set(mode='EDIT', toggle=False)
ao = bpy.context.scene.objects.active
bm = bmesh.from_edit_mesh(ao.data)
vs = bm.verts
l = len(vs)
print("lenth = "+str(l))
if l<4:
sys.exit()
b = []
b.append(vs[1])
b.append(vs[-1])
b.append(vs[0])
k=0
for i in range(l):
if bm.verts[i].select and k<3:
b[k] = vs[i]
k += 1
print(i)
for i in range(l):
print(i, vs[i].co)
vs[i].co = mapOnPlane(vs[i].co, b[0].co, b[1].co, b[2].co)
print(i, vs[i].co)
ao.data.update()