| 21 | } |
| 22 | |
| 23 | MatrixIr generate_faces_connecting_loops(size_t loop_size, bool closed) { |
| 24 | size_t num_quads; |
| 25 | if (closed) { |
| 26 | num_quads = loop_size; |
| 27 | } else { |
| 28 | num_quads = loop_size-1; |
| 29 | } |
| 30 | |
| 31 | MatrixIr faces(num_quads * 2, 3); |
| 32 | for (size_t i=0; i<num_quads; i++) { |
| 33 | // i i+loop_size |
| 34 | // +-----+ |
| 35 | // | /| |
| 36 | // | / | |
| 37 | // | / | |
| 38 | // | / | |
| 39 | // |/____| |
| 40 | // i+1 i+1 + loop_size |
| 41 | |
| 42 | size_t j = (i+1) % loop_size; |
| 43 | faces(i*2, 0) = i; |
| 44 | faces(i*2, 1) = j; |
| 45 | faces(i*2, 2) = i + loop_size; |
| 46 | faces(i*2+1, 0) = j; |
| 47 | faces(i*2+1, 1) = j + loop_size, |
| 48 | faces(i*2+1, 2) = i + loop_size; |
| 49 | } |
| 50 | return faces; |
| 51 | } |
| 52 | |
| 53 | /** |
| 54 | * Return true iff the projection of loop onto line (v0, v1) is completely |