Skip to content

Instantly share code, notes, and snippets.

@zeffii
Forked from anonymous/darpa.py
Created May 27, 2014 12:02
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zeffii/24d27661a06d68e83deb to your computer and use it in GitHub Desktop.
Save zeffii/24d27661a06d68e83deb to your computer and use it in GitHub Desktop.
import mathutils
from mathutils import Vector
import math
def get_length(verts):
summed = 0
lengths = []
lengths_add = lengths.append
for idx in range(len(verts)-1):
segment = (verts[idx]-verts[idx+1]).length
summed += segment
lengths_add(segment)
return summed, lengths
def get_verts_n_edges(verts, lengths, seg_width, tlen):
K = seg_width
# print('start seg width:', seg_width)
eps = 0.0001
new_points = []
add_point = new_points.append
def consume(K, A, idx, v1):
# tlen -= A
# if tlen <= 0:
# return
if idx > len(lengths)-2:
return
R = K - A
# close enough to start fresh segment
if (-eps <= R <= eps):
K = seg_width
idx += 1
add_point(verts[idx])
A = lengths[idx]
consume(K, A, idx, None)
elif (R < -eps):
# must divide segment, same idx
rate = A / R
if not v1:
v1 = verts[idx]
v2 = verts[idx+1]
vmid = v1.lerp(v2, rate)
add_point(vmid)
A = (vmid-v2).length
consume(seg_width, A, idx, v1)
elif (R > eps):
# consume segment, update k, update idx
A = lengths[idx+1]
consume(R, A, idx+1, None)
consume(K, lengths[0], 0, None)
add_point(verts[-1])
return new_points
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment