Page 1 of 1

BezierCurve:insertControlPoint() indexing last doesn't work properly

Posted: Sat May 11, 2019 6:07 am
by Krunklehorn
From the wiki...
BezierCurve:insertControlPoint
Insert control point as the new i-th control point. Existing control points from i onwards are pushed back by 1. Indices start with 1. Negative indices wrap around: -1 is the last control point, -2 the one before the last, etc.
If I'm reading this correctly, the following code...

Code: Select all

-- a simple curve with four points in a counter-clockwise motion
-- default index is -1 (last), but was included for clarity
curve:insertControlPoint(0, 0, -1)	-- bottom left
curve:insertControlPoint(100, 0, -1)	-- bottom right
curve:insertControlPoint(100, -100, -1)	-- top right
curve:insertControlPoint(0, -100, -1)	-- top left

print(curve:getControlPoint(1))
print(curve:getControlPoint(2))
print(curve:getControlPoint(3))
print(curve:getControlPoint(4))
...should yield the following result.

Code: Select all

0	0
100	0
100	100
0	100
Since each point is supposed to be inserted at the last index, we expect the points to be in order as shown.
Here's what happens instead...

Code: Select all

100	0	-- (2nd)
100	100	-- (3rd)
0	100	-- (4th)
0	0	-- (1st)
Attempting to insert a point at the last index (-1) actually inserts it at the second last index.
Okay, so we think to try inserting at index 0 maybe?
Unfortunately that doesn't work....

Code: Select all

0	100	-- (4th)
100	100	-- (3rd)
100	0	-- (2nd)
0	0	-- (1st)
This gets treated as if you were inserting at index 1, which keeps your points in line but reverses their order since you're constantly pushing the whole list forward.

Additionally: the wiki's description, "points from i onwards are pushed back by 1" should actually say that the points are pushed forward, at least that's the intended result, right?

Re: BezierCurve:insertControlPoint() indexing last doesn't work properly

Posted: Fri Jun 14, 2019 4:51 am
by Krunklehorn