lini
lini is lin with an index progression in place of the region. The i means the command takes a progression. It does not mean inverse.
Syntax
lini i_list ; j_list ; k_list ;
A progression is three lists, one for i, one for j and one for k, each ending in ;. An empty list means the whole range. Inside a progression a 0 separates unions and never means an extreme. A single negative number pins that index. The concepts chapter explains progressions.
What it does
James expands the progression into regions and applies lin to each one. lin describes the interpolation and what it leaves alone.
When James applies it
As lin: step 4, 7 or 14 for each region the progression expands to, chosen by that region’s shape. One progression can therefore place its members at different steps. lini is legal only in the Part phase.
Rules James adds
- A progression that expands to no region warns (E0107) and the command is ignored.
- A region that the progression expands to and that is a single vertex is an error (E0700), as with
lin.
Diagnostics
- E0700: a region the progression expands to is a single vertex.
- E0101: a list holds one positive number, which selects nothing.
- E0102: a reduced index lies outside the part.
- E0103: an interval is written high to low.
- E0107: the progression expands to no region.
Example
The script tests/corpus/179-lini-edge-progression/input.tg, which make test runs:
c lini over two edges that each span two blocks
block 1 3 5;1 3;1 3;0 1 2;0 1;0 1;
pb 2 1 1 2 1 1 y 0.2
lini ;-1 -2;-1;
endpart
The progression ;-1 -2;-1; pins j to 1 and 2 and k to 1, and leaves i empty. James expands it to two edges, 1 1 1 3 1 1 and 1 2 1 3 2 1, and stores each for step 4. pb lifted the middle vertex of the first edge to y = 0.2. The lini recomputes that vertex from the end vertices: with it, nodes 2, 3 and 4 of the first edge return to y = 0, and without it they stay at y = 0.1, 0.2 and 0.1.