# Test performance of intersection of several NURBS surfaces

if { [regexp {Debug mode} [dversion]] } {
   cpulimit 1000
} else {
   cpulimit 500
}

bsplinesurf surf1 \
3 4 0 4 1 1 2 1 3 4 \
3 4 0 4 1 1 2 1 3 4 \
0  0  0 1   2  0  0 1   3  0 15 1   5  0 15 1   7  0  0 1   10  0  0 1 \
0  2  0 1   1  3  0 1   4  2 15 1   6  3 15 1   8  2  0 1   10  3  0 1 \
0  4  0 1   3  4  0 1   4  3 15 1   5  3 15 1   7  4  0 1   10  5  0 1 \
0  6  0 1   3  6  0 1   4  6 15 1   5  6 15 1   8  5  0 1   10  7  0 1 \
0  8  0 1   2  8  0 1   4  8 15 1   6  8 15 1   7  7  0 1   10  8  0 1 \
0 10  0 1   2 10  0 1   4 10 15 1   6 10 15 1   7 10  0 1   10 10  0 1

bsplinesurf surf2 \
3 4 0 4 1 1 2 1 3 4 \
3 4 0 4 1 1 2 1 3 4 \
0  0 10  1   2  0  5  1   3  0  4  1   5  0  6  1   7  0 10  1   10  0  5  1 \
0  2  5  1   1  3  7  1   4  2  7  1   6  3  4  1   8  2  4  4   10  3  7  1 \
0  4  8  1   3  4 10  1   4  3  6  1   5  3  8  1   7  4  7  4   10  5  5  1 \
0  6  8  1   3  6 10  1   4  6  6  1   5  6  4  1   8  5  7  4   10  7 10  1 \
0  8  6  1   2  8  5  1   4  8  8  1   6  8  8  1   7  7  3  4   10  8  5  1 \
0 10  8  1   2 10 10  1   4 10  6  1   6 10  5  1   7 10  3  1   10 10 10  1

bsplinesurf surf3 \
2 7 0 3 1 1 2 1 3 1 4 1 5 1 6 3 \
2 3 0 3 1 1 2 3 \
-20  20  10  1   20  20  10  1    20 -20  10  1   -20 -20  10  1   -10  10  10  1   10  10  10  1   10 -10  10  1   -10 -10  10  1 \
-10  10   5  1   15  15   5  1    10 -10   5  1   -15 -15   5  1    -5   5   5  1    5   5   5  1    5  -5   5  1    -5  -5   5  1 \
-15  15  -5  1   10  10  -5  1    15 -15  -5  1   -10 -10  -5  1    -5   5  -5  1    5   5  -5  1    5  -5  -5  1    -5  -5  -5  1 \
-20  20 -10  1   20  20 -10  1    20 -20 -10  1   -20 -20 -10  1   -10  10 -10  1   10  10 -10  1   10 -10 -10  1   -10 -10 -10  1

bsplinesurf surf4 \
4 5 0 5 2 1 4 1 5 1 6 5 \
4 5 0 5 1 1 4 1 6 1 7 5 \
 10  20 -20 1     9  19 -19 1     8  18 -18 1     7  17 -17 1     7  17  17 1     8  18  18 1     9  19  19 1    10  20  20 1 \
 10 -20  20 1     9 -19  19 1     8 -18  18 1     7 -17  17 1     7 -17 -17 1     8 -18 -18 1     9 -19 -19 1    10 -20 -20 1 \
 10  10 -10 1     9   9  -9 1     8   8  -8 1     7   7  -7 1     7   7   7 1     8   8   8 1     9   9   9 1    10  10  10 1 \
 10 -10  10 1     9  -9   9 1     8  -8   8 1     7  -7   7 1     7  -7  -7 1     8  -8  -8 1     9  -9  -9 1    10 -10 -10 1 \
-10  20 -20 1    -9  19 -19 1    -8  18 -18 1    -7  17 -17 1    -7  17  17 1    -8  18  18 1    -9  19  19 1   -10  20  20 1 \
-10 -20  20 1    -9 -19  19 1    -8 -18  18 1    -7 -17  17 1    -7 -17 -17 1    -8 -18 -18 1    -9 -19 -19 1   -10 -20 -20 1 \
-10  10 -10 1    -9   9  -9 1    -8   8  -8 1    -7   7  -7 1    -7   7   7 1    -8   8   8 1    -9   9   9 1   -10  10  10 1 \
-10 -10  10 1    -9  -9   9 1    -8  -8   8 1    -7  -7   7 1    -7  -7  -7 1    -8  -8  -8 1    -9  -9  -9 1   -10 -10 -10 1

bsplinesurf surf5 \
1 2 0 2 1 2 \
5 5 0 6 2 1 3 1 6 1 7 6 \
0 0 0 1 10 0 5 2 \
0 10  2  1   10 10  3  1 \
0 20 10  1   10 20 20  1 \
0 30  0  1   10 30  0  1 \
0 40 -1  1   10 40  5  1 \
0 50  5  1   10 50  5  1 \
0 60  4  1   10 60  4  1 \
0 70 -5  1   10 70 -3  1 \
0 80  7  1   10 80  0  1


bsplinesurf surf6 \
2 3 0 3 1 1 2 3 \
5 5 0 6 2 1 3 1 6 1 7 6 \
0 0 0 1 2 0 0 1 5 0 -1 1 10 0 5 2 \
0 10  2  1   3 10  0  1   8 10  5  1   10 10  3  1 \
0 20 10  1   4 20  4  1   7 20  4  1   10 20 20  1 \
0 30  0  1   2 30  0  1   8 30  0  1   10 30  0  1 \
0 40 -1  1   4 40  5  1   9 40  1  1   10 40  5  1 \
0 50  5  1   4 50 10  1   6 50 10  1   10 50  5  1 \
0 60  4  1   3 60 -3  1   7 60 -4  1   10 60  4  1 \
0 70 -5  1   3 70  0  1   5 70  0  1   10 70 -3  1 \
0 80  7  1   3 80  1  1   7 80  3  1   10 80  0  1

bsplinesurf surf7 \
5 5 0 6 1 1 4 1 5 1 8 6 \
5 5 0 6 2 1 3 1 6 1 7 6 \
0  0  0  1   2  0  0  1   5  0 -1  1   10  0  5  1   12  0  1  1   15  0 -3  1   16  0 -3  1   19  0 -4 1   24  0  0  1 \
0 10  2  1   3 10  0  1   8 10  5  1   10 10  3  1   12 10  2  1   15 10  0  1   20 10  5  1   21 10  3 1   24 10  0  1 \
0 20 10  1   4 20  4  1   7 20  4  1   10 20 20  1   12 20 10  1   16 20  4  1   19 20  4  1   20 20 10 1   24 20  0  1 \
0 30  0  1   2 30  0  1   8 30  0  1   10 30  0  1   12 30  0  1   14 30  0  1   20 30  0  1   22 30  0 1   24 30  0  1 \
0 40 -1  1   4 40  5  1   9 40  1  1   10 40  5  1   12 40 -1  1   16 40  5  1   21 40  1  1   22 40  5 1   24 40  0  1 \
0 50  5  1   4 50 10  1   6 50 10  1   10 50  5  1   12 50  5  1   16 50 10  1   18 50 10  1   20 50  5 1   24 50  0  1 \
0 60  4  1   3 60 -3  1   7 60 -4  1   10 60  4  1   12 60  4  1   15 60 -3  1   19 60 -4  1   20 60  4 1   24 60  0  1 \
0 70 -5  1   3 70  0  1   5 70  0  1   10 70 -3  1   12 70 -5  1   15 70  0  1   17 70  0  1   20 70 -3 1   24 70  0  1 \
0 80  7  1   3 80  1  1   7 80  3  1   10 80  0  1   12 80  7  1   15 80  1  1   19 80  3  1   21 80  0 1   24 80  0  1

bsplinesurf surf8 \
5 5 0 6 1 1 4 1 5 1 8 6 \
5 5 0 6 2 1 3 1 6 1 7 6 \
0  0 -8  1   2  0 -7  1   5  0 -9  1   10  0 -8  1   12  0 -9  1   15  0 -7  1   16  0 -8  1   19  0 -8 1   24  0 -8  1 \
0 10 -8  1   3 10 -7  1   8 10 -9  1   10 10 -8  1   12 10 -9  1   15 10 -7  1   20 10 -8  1   21 10 -8 1   24 10 -8  1 \
0 20  8  1   4 20  7  1   7 20  9  1   10 20  8  1   12 20  9  1   16 20  7  1   19 20  8  1   20 20  8 1   24 20  8  1 \
0 30  8  1   2 30  7  1   8 30  9  1   10 30  8  1   12 30  9  1   14 30  7  1   20 30  8  1   22 30  8 1   24 30  8  1 \
0 40 -8  1   4 40 -7  1   9 40 -9  1   10 40 -8  1   12 40 -9  1   16 40 -7  1   21 40 -8  1   22 40 -8 1   24 40 -8  1 \
0 50 -8  1   4 50 -7  1   6 50 -9  1   10 50 -8  1   12 50 -9  1   16 50 -7  1   18 50 -8  1   20 50 -8 1   24 50 -8  1 \
0 60  8  1   3 60  7  1   7 60  9  1   10 60  8  1   12 60  9  1   15 60  7  1   19 60  8  1   20 60  8 1   24 60  8  1 \
0 70  8  1   3 70  7  1   5 70  9  1   10 70  8  1   12 70  9  1   15 70  7  1   17 70  8  1   20 70  8 1   24 70  8  1 \
0 80  8  1   3 80  7  1   7 80  9  1   10 80  8  1   12 80  9  1   15 80  7  1   19 80  8  1   21 80  8 1   24 80  8  1

bsplinesurf rsurf1 \
3 4 0 4 1 1 2 1 3 4 \
3 4 0 4 1 1 2 1 3 4 \
0  0  0 1   2  0  0 1   3  0 15 1   5  0 15 1   7  0  0 1   10  0  0 1 \
0  2  0 1   1  3  0 2   4  2 15 2   6  3 15 2   8  2  0 2   10  3  0 1 \
0  4  0 1   3  4  0 2   4  3 15 3   5  3 15 3   7  4  0 2   10  5  0 1 \
0  6  0 1   3  6  0 2   4  6 15 3   5  6 15 3   8  5  0 2   10  7  0 1 \
0  8  0 1   2  8  0 2   4  8 15 2   6  8 15 2   7  7  0 2   10  8  0 1 \
0 10  0 1   2 10  0 1   4 10 15 1   6 10 15 1   7 10  0 1   10 10  0 1

bsplinesurf rsurf2 \
3 4 0 4 1 1 2 1 3 4 \
3 4 0 4 1 1 2 1 3 4 \
0  0 10  1   2  0  5  1   3  0  4  1   5  0  6  1   7  0 10  1   10  0  5  1 \
0  2  5  1   1  3  7  4   4  2  7  4   6  3  4  4   8  2  4  4   10  3  7  1 \
0  4  8  1   3  4 10  4   4  3  6  2   5  3  8  2   7  4  7  4   10  5  5  1 \
0  6  8  1   3  6 10  4   4  6  6  2   5  6  4  2   8  5  7  4   10  7 10  1 \
0  8  6  1   2  8  5  4   4  8  8  4   6  8  8  4   7  7  3  4   10  8  5  1 \
0 10  8  1   2 10 10  1   4 10  6  1   6 10  5  1   7 10  3  1   10 10 10  1

bsplinesurf rsurf3 \
2 7 0 3 1 1 2 1 3 1 4 1 5 1 6 3 \
2 3 0 3 1 1 2 3 \
-20  20  10  1   20  20  10  1    20 -20  10  2   -20 -20  10 2   -10  10  10  3   10  10  10  4   10 -10  10  4   -10 -10  10  2 \
-10  10   5  1   15  15   5  2    10 -10   5  3   -15 -15   5 1    -5   5   5  1    5   5   5  3    5  -5   5  4    -5  -5   5  3 \
-15  15  -5  3   10  10  -5  1    15 -15  -5  2   -10 -10  -5 2    -5   5  -5  3    5   5  -5  3    5  -5  -5  1    -5  -5  -5  4 \
-20  20 -10  2   20  20 -10  4    20 -20 -10  3   -20 -20 -10 3   -10  10 -10  2   10  10 -10  2   10 -10 -10  1   -10 -10 -10  1

bsplinesurf rsurf4 \
4 5 0 5 2 1 4 1 5 1 6 5 \
4 5 0 5 1 1 4 1 6 1 7 5 \
 10  20 -20 1     9  19 -19 1     8  18 -18 2     7  17 -17 2     7  17  17 1     8  18  18 1     9  19  19 4    10  20  20 1 \
 10 -20  20 2     9 -19  19 2     8 -18  18 1     7 -17  17 2     7 -17 -17 4     8 -18 -18 3     9 -19 -19 3    10 -20 -20 2 \
 10  10 -10 3     9   9  -9 4     8   8  -8 1     7   7  -7 2     7   7   7 4     8   8   8 1     9   9   9 2    10  10  10 3 \
 10 -10  10 4     9  -9   9 2     8  -8   8 3     7  -7   7 2     7  -7  -7 1     8  -8  -8 1     9  -9  -9 1    10 -10 -10 4 \
-10  20 -20 4    -9  19 -19 3    -8  18 -18 3    -7  17 -17 2    -7  17  17 1    -8  18  18 2    -9  19  19 4   -10  20  20 4 \
-10 -20  20 3    -9 -19  19 2    -8 -18  18 3    -7 -17  17 1    -7 -17 -17 4    -8 -18 -18 2    -9 -19 -19 3   -10 -20 -20 3 \
-10  10 -10 2    -9   9  -9 1    -8   8  -8 3    -7   7  -7 1    -7   7   7 1    -8   8   8 1    -9   9   9 2   -10  10  10 2 \
-10 -10  10 1    -9  -9   9 1    -8  -8   8 2    -7  -7   7 1    -7  -7  -7 4    -8  -8  -8 1    -9  -9  -9 1   -10 -10 -10 1

bsplinesurf rsurf5 \
1 2 0 2 1 2 \
5 5 0 6 2 1 3 1 6 1 7 6 \
0 0 0 1 10 0 5 2 \
0 10  2  3   10 10  3  1 \
0 20 10  1   10 20 20  4 \
0 30  0  2   10 30  0  2 \
0 40 -1  1   10 40  5  2 \
0 50  5  1   10 50  5  1 \
0 60  4  3   10 60  4  1 \
0 70 -5  5   10 70 -3  2 \
0 80  7  1   10 80  0  1

bsplinesurf rsurf6 \
2 3 0 3 1 1 2 3 \
5 5 0 6 2 1 3 1 6 1 7 6 \
0 0 0 1 2 0 0 1 5 0 -1 1 10 0 5 2 \
0 10  2  3   3 10  0  1   8 10  5  3   10 10  3  1 \
0 20 10  1   4 20  4  3   7 20  4  2   10 20 20  4 \
0 30  0  2   2 30  0  1   8 30  0  1   10 30  0  2 \
0 40 -1  1   4 40  5  2   9 40  1  3   10 40  5  2 \
0 50  5  1   4 50 10  5   6 50 10  5   10 50  5  1 \
0 60  4  3   3 60 -3  1   7 60 -4  1   10 60  4  1 \
0 70 -5  5   3 70  0  1   5 70  0  1   10 70 -3  2 \
0 80  7  1   3 80  1  2   7 80  3  1   10 80  0  1

bsplinesurf rsurf7 \
5 5 0 6 1 1 4 1 5 1 8 6 \
5 5 0 6 2 1 3 1 6 1 7 6 \
0  0  0  1   2  0  0  1   5  0 -1  1   10  0  5  2   12  0  1  1   15  0 -3  2   16  0 -3  1   19  0 -4 1   24  0  0  1 \
0 10  2  3   3 10  0  1   8 10  5  3   10 10  3  1   12 10  2  3   15 10  0  1   20 10  5  3   21 10  3 1   24 10  0  2 \
0 20 10  1   4 20  4  3   7 20  4  2   10 20 20  4   12 20 10  1   16 20  4  3   19 20  4  2   20 20 10 4   24 20  0  1 \
0 30  0  2   2 30  0  1   8 30  0  1   10 30  0  2   12 30  0  2   14 30  0  1   20 30  0  1   22 30  0 2   24 30  0  3 \
0 40 -1  1   4 40  5  2   9 40  1  3   10 40  5  2   12 40 -1  1   16 40  5  2   21 40  1  3   22 40  5 2   24 40  0  1 \
0 50  5  1   4 50 10  5   6 50 10  5   10 50  5  1   12 50  5  1   16 50 10  5   18 50 10  5   20 50  5 1   24 50  0  2 \
0 60  4  3   3 60 -3  1   7 60 -4  1   10 60  4  1   12 60  4  3   15 60 -3  1   19 60 -4  1   20 60  4 1   24 60  0  1 \
0 70 -5  5   3 70  0  1   5 70  0  1   10 70 -3  2   12 70 -5  5   15 70  0  1   17 70  0  1   20 70 -3 2   24 70  0  3 \
0 80  7  1   3 80  1  2   7 80  3  1   10 80  0  1   12 80  7  1   15 80  1  2   19 80  3  1   21 80  0 1   24 80  0  1

bsplinesurf rsurf8 \
5 5 0 6 1 1 4 1 5 1 8 6 \
5 5 0 6 2 1 3 1 6 1 7 6 \
0  0 -8  1   2  0 -7  1   5  0 -9  1   10  0 -8  2   12  0 -9  1   15  0 -7  2   16  0 -8  1   19  0 -8 1   24  0 -8  1 \
0 10 -8  3   3 10 -7  1   8 10 -9  3   10 10 -8  1   12 10 -9  3   15 10 -7  1   20 10 -8  3   21 10 -8 1   24 10 -8  2 \
0 20  8  1   4 20  7  3   7 20  9  2   10 20  8  4   12 20  9  1   16 20  7  3   19 20  8  2   20 20  8 4   24 20  8  1 \
0 30  8  2   2 30  7  1   8 30  9  1   10 30  8  2   12 30  9  2   14 30  7  1   20 30  8  1   22 30  8 2   24 30  8  3 \
0 40 -8  1   4 40 -7  2   9 40 -9  3   10 40 -8  2   12 40 -9  1   16 40 -7  2   21 40 -8  3   22 40 -8 2   24 40 -8  1 \
0 50 -8  1   4 50 -7  5   6 50 -9  5   10 50 -8  1   12 50 -9  1   16 50 -7  5   18 50 -8  5   20 50 -8 1   24 50 -8  2 \
0 60  8  3   3 60  7  1   7 60  9  1   10 60  8  1   12 60  9  3   15 60  7  1   19 60  8  1   20 60  8 1   24 60  8  1 \
0 70  8  5   3 70  7  1   5 70  9  1   10 70  8  2   12 70  9  5   15 70  7  1   17 70  8  1   20 70  8 2   24 70  8  3 \
0 80  8  1   3 80  7  2   7 80  9  1   10 80  8  1   12 80  9  1   15 80  7  2   19 80  8  1   21 80  8 1   24 80  8  1

# intersect all surfaces
set surfaces [list surf1 surf2 rsurf1 surf3 rsurf2 surf4 rsurf3 surf5 rsurf4 surf6 rsurf5 surf7 rsurf6 surf8 rsurf7 rsurf8]
#set i 1
#set shapes {}
foreach s1 $surfaces {
# mkface f_$s1 $s1
# lappend shapes f_$s1
  foreach s2 $surfaces {
    if { $s1 != $s2 } {
      if [catch {intersect r $s1 $s2}] {
        continue
      }
    # if { [regexp {a 3d curve} [whatis r]] } {
#   mkedge e_$i r
#   lappend shapes e_$i
#   incr i
# }
    }
  }
}

#eval vdisplay $shapes; vfit
