Hello, I would like to be able to grow the curve shown in the gif above at a constant velocity. For the straight edges of the curve, I just don't like how they grow super quickly. It looks a bit too choppy.
I assume that the curve growth velocity is dependent upon the density of the curve's vertices. There are fewer vertices throughout these straight edges, therefore the curve will grow faster along those edges. I think an even distribution of vertices throughout the curve with small distances between them to maintain detail could possibly solve this, but I don't know how to do that.
To create the animation, I started off with my mesh symbol. I converted it to a curve, added a nurbs path and scaled it down, set the curve's bevel object as the small nurbs path, set the curve type to 2D, unchecked the curve's cyclic-u property, and then keyframed the end value from 0 to 1 under start & end mapping to animate the growth. I also added a few vertices to the curve to patch the slit caused by unchecking cyclic - U.
I found that animating the curve using this method had the best topology on the symbols I'm creating these curves out of. I would prefer to maintain the sharp corners of the symbol if possible.
EDIT: So, to remove slanted tips caused by changing the mapping end & start to spline, I end up having to subdivide the long segments of the curve. I wrote a script that does this if anyone else out there needs it. The pseudocode is as follows: "for each of the curve's segments, if the segment length is greater than some amount, subdivide that segment with some number of cuts"
import bpy
curve = bpy.context.scene.objects["Latex Figure"]
matrix = curve.matrix_world
bpy.context.view_layer.objects.active = curve
bpy.ops.object.mode_set(mode = 'EDIT')
i = 0
range = len(curve.data.splines.active.points)
while i < range:
point0 = curve.data.splines.active.points[i].co
point0 = matrix @ point0
if i == range - 1:
point1 = curve.data.splines.active.points[0].co
else:
point1 = curve.data.splines.active.points[i + 1].co
point1 = matrix @ point1
d = (point1 - point0).magnitude
someAmount = .1
numCuts = int(2 * d/someAmount)
if d > someAmount:
bpy.ops.curve.select_all(action='DESELECT')
curve.data.splines.active.points[i].select = True
if k == r - 1:
curve.data.splines.active.points[0].select = True
else:
curve.data.splines.active.points[k + 1].select = True
bpy.ops.curve.subdivide(number_cuts = numCuts)
i += numCuts + 1
range += numCuts
else:
i += 1
bpy.ops.object.mode_set(mode = 'OBJECT')