Full Code of SINTEF-Geometry/SISL for AI

master e854a48fc5a1 cached
911 files
7.2 MB
1.9M tokens
151 symbols
1 requests
Download .txt
Showing preview only (7,720K chars total). Download the full file or copy to clipboard to get everything.
Repository: SINTEF-Geometry/SISL
Branch: master
Commit: e854a48fc5a1
Files: 911
Total size: 7.2 MB

Directory structure:
gitextract_swl2ex7t/

├── .gitignore
├── CMakeLists.txt
├── COPYING
├── ChangeLog
├── INSTALL
├── README
├── app/
│   ├── prog1.c
│   ├── s1013prob.C
│   ├── s1320prob.C
│   ├── s1606prob.C
│   └── surf_surf_int.C
├── cmake/
│   └── sislConfig.cmake.in
├── doc/
│   └── manual/
│       ├── chap_curve_analysis.ilg
│       ├── chap_curve_analysis.ind
│       ├── chap_curve_analysis.tex
│       ├── chap_curve_definition.tex
│       ├── chap_curve_interrogation.tex
│       ├── chap_curve_utilities.tex
│       ├── chap_data_reduction.tex
│       ├── chap_error_codes.tex
│       ├── chap_intro_abridged.tex
│       ├── chap_introduction.tex
│       ├── chap_surface_analysis.tex
│       ├── chap_surface_definition.tex
│       ├── chap_surface_interrogation.tex
│       ├── chap_surface_utilities.tex
│       ├── foreword.tex
│       ├── func/
│       │   ├── copyCurve.tex
│       │   ├── copySurface.tex
│       │   ├── freeCurve.tex
│       │   ├── freeIntcrvlist.tex
│       │   ├── freeIntcurve.tex
│       │   ├── freeSurf.tex
│       │   ├── newCurve.tex
│       │   ├── newIntcurve.tex
│       │   ├── newSurf.tex
│       │   ├── newbox.tex
│       │   ├── newdir.tex
│       │   ├── s1001.tex
│       │   ├── s1011.tex
│       │   ├── s1012.tex
│       │   ├── s1013.tex
│       │   ├── s1014.tex
│       │   ├── s1015.tex
│       │   ├── s1016.tex
│       │   ├── s1017.tex
│       │   ├── s1018.tex
│       │   ├── s1021.tex
│       │   ├── s1022.tex
│       │   ├── s1023.tex
│       │   ├── s1024.tex
│       │   ├── s1025.tex
│       │   ├── s1221.tex
│       │   ├── s1225.tex
│       │   ├── s1226.tex
│       │   ├── s1227.tex
│       │   ├── s1231.tex
│       │   ├── s1233.tex
│       │   ├── s1237.tex
│       │   ├── s1238.tex
│       │   ├── s1240.tex
│       │   ├── s1241.tex
│       │   ├── s1242.tex
│       │   ├── s1243.tex
│       │   ├── s1302.tex
│       │   ├── s1303.tex
│       │   ├── s1310.tex
│       │   ├── s1314.tex
│       │   ├── s1315.tex
│       │   ├── s1316.tex
│       │   ├── s1317.tex
│       │   ├── s1318.tex
│       │   ├── s1319.tex
│       │   ├── s1327.tex
│       │   ├── s1328.tex
│       │   ├── s1332.tex
│       │   ├── s1333.tex
│       │   ├── s1334.tex
│       │   ├── s1340.tex
│       │   ├── s1341.tex
│       │   ├── s1342.tex
│       │   ├── s1343.tex
│       │   ├── s1345.tex
│       │   ├── s1346.tex
│       │   ├── s1347.tex
│       │   ├── s1348.tex
│       │   ├── s1356.tex
│       │   ├── s1357.tex
│       │   ├── s1358.tex
│       │   ├── s1360.tex
│       │   ├── s1363.tex
│       │   ├── s1364.tex
│       │   ├── s1365.tex
│       │   ├── s1369.tex
│       │   ├── s1371.tex
│       │   ├── s1372.tex
│       │   ├── s1373.tex
│       │   ├── s1374.tex
│       │   ├── s1375.tex
│       │   ├── s1379.tex
│       │   ├── s1380.tex
│       │   ├── s1383.tex
│       │   ├── s1386.tex
│       │   ├── s1387.tex
│       │   ├── s1388.tex
│       │   ├── s1389.tex
│       │   ├── s1390.tex
│       │   ├── s1391.tex
│       │   ├── s1401.tex
│       │   ├── s1421.tex
│       │   ├── s1422.tex
│       │   ├── s1424.tex
│       │   ├── s1425.tex
│       │   ├── s1436.tex
│       │   ├── s1437.tex
│       │   ├── s1439.tex
│       │   ├── s1440.tex
│       │   ├── s1441.tex
│       │   ├── s1442.tex
│       │   ├── s1443.tex
│       │   ├── s1450.tex
│       │   ├── s1451.tex
│       │   ├── s1452.tex
│       │   ├── s1501.tex
│       │   ├── s1502.tex
│       │   ├── s1503.tex
│       │   ├── s1506.tex
│       │   ├── s1508.tex
│       │   ├── s1510.tex
│       │   ├── s1511.tex
│       │   ├── s1514.tex
│       │   ├── s1515.tex
│       │   ├── s1518.tex
│       │   ├── s1520.tex
│       │   ├── s1522.tex
│       │   ├── s1529.tex
│       │   ├── s1530.tex
│       │   ├── s1534.tex
│       │   ├── s1535.tex
│       │   ├── s1536.tex
│       │   ├── s1537.tex
│       │   ├── s1538.tex
│       │   ├── s1539.tex
│       │   ├── s1542.tex
│       │   ├── s1600.tex
│       │   ├── s1601.tex
│       │   ├── s1602.tex
│       │   ├── s1603.tex
│       │   ├── s1604.tex
│       │   ├── s1606.tex
│       │   ├── s1607.tex
│       │   ├── s1608.tex
│       │   ├── s1609.tex
│       │   ├── s1610.tex
│       │   ├── s1611.tex
│       │   ├── s1613.tex
│       │   ├── s1620.tex
│       │   ├── s1630.tex
│       │   ├── s1706.tex
│       │   ├── s1710.tex
│       │   ├── s1711.tex
│       │   ├── s1712.tex
│       │   ├── s1713.tex
│       │   ├── s1714.tex
│       │   ├── s1715.tex
│       │   ├── s1716.tex
│       │   ├── s1720.tex
│       │   ├── s1730.tex
│       │   ├── s1731.tex
│       │   ├── s1732.tex
│       │   ├── s1733.tex
│       │   ├── s1740.tex
│       │   ├── s1744.tex
│       │   ├── s1745.tex
│       │   ├── s1746.tex
│       │   ├── s1750.tex
│       │   ├── s1774.tex
│       │   ├── s1775.tex
│       │   ├── s1850.tex
│       │   ├── s1851.tex
│       │   ├── s1852.tex
│       │   ├── s1853.tex
│       │   ├── s1854.tex
│       │   ├── s1855.tex
│       │   ├── s1856.tex
│       │   ├── s1857.tex
│       │   ├── s1858.tex
│       │   ├── s1859.tex
│       │   ├── s1860.tex
│       │   ├── s1870.tex
│       │   ├── s1871.tex
│       │   ├── s1920.tex
│       │   ├── s1921.tex
│       │   ├── s1940.tex
│       │   ├── s1953.tex
│       │   ├── s1954.tex
│       │   ├── s1955.tex
│       │   ├── s1957.tex
│       │   ├── s1958.tex
│       │   ├── s1961.tex
│       │   ├── s1962.tex
│       │   ├── s1963.tex
│       │   ├── s1965.tex
│       │   ├── s1966.tex
│       │   ├── s1967.tex
│       │   ├── s1968.tex
│       │   ├── s1986.tex
│       │   ├── s1987.tex
│       │   ├── s1988.tex
│       │   ├── s1989.tex
│       │   ├── s1990.tex
│       │   ├── s1991.tex
│       │   ├── s1992cu.tex
│       │   ├── s1992su.tex
│       │   ├── s2500.tex
│       │   ├── s2502.tex
│       │   ├── s2504.tex
│       │   ├── s2506.tex
│       │   ├── s2508.tex
│       │   ├── s2510.tex
│       │   ├── s2532.tex
│       │   ├── s2536.tex
│       │   ├── s2540.tex
│       │   ├── s2542.tex
│       │   ├── s2544.tex
│       │   ├── s2545.tex
│       │   ├── s2550.tex
│       │   ├── s2553.tex
│       │   ├── s2556.tex
│       │   ├── s2559.tex
│       │   ├── s2562.tex
│       │   ├── s6shadepol.tex
│       │   └── secshade.tex
│       ├── licensing_information.tex
│       ├── manual.aux
│       ├── manual.idx
│       ├── manual.ilg
│       ├── manual.ind
│       ├── manual.log
│       ├── manual.tex
│       ├── manual.toc
│       ├── raytracing.ps
│       ├── sample_programs.tex
│       ├── sec_box_object.tex
│       ├── sec_cone_object.tex
│       ├── sec_curve_object.tex
│       ├── sec_intcurve_object.tex
│       ├── sec_spline_curve.tex
│       ├── sec_spline_surface.tex
│       ├── sec_surface_object.tex
│       ├── sislman.sty
│       ├── sislman2.sty
│       ├── surf1.fig
│       ├── surf1.ps
│       ├── titlepage.sty
│       ├── type/
│       │   ├── SISLBox.tex
│       │   ├── SISLCurve.tex
│       │   ├── SISLDir.tex
│       │   ├── SISLIntcurve.tex
│       │   ├── SISLSurf.tex
│       │   └── test.tex
│       └── viewer.tex
├── examples/
│   ├── example01.cpp
│   ├── example02.cpp
│   ├── example03.cpp
│   ├── example04.cpp
│   ├── example05.cpp
│   ├── example06.cpp
│   ├── example07.cpp
│   ├── example08.cpp
│   ├── example09.cpp
│   ├── example10.cpp
│   ├── example11.cpp
│   ├── example12.cpp
│   ├── example13.cpp
│   ├── example14.cpp
│   └── example15.cpp
├── include/
│   ├── sisl-copyright.h
│   ├── sisl.h
│   └── sislP.h
├── src/
│   ├── construct.c
│   ├── crvarctang.c
│   ├── crvcrvtang.c
│   ├── crvlintang.c
│   ├── destruct.c
│   ├── ev_cv_off.c
│   ├── eval_2_crv.c
│   ├── evalcrvarc.c
│   ├── hp_s1880.c
│   ├── intjoinper.c
│   ├── make3D.c
│   ├── makecvkreg.c
│   ├── makesfkreg.c
│   ├── maketracks.c
│   ├── mk_cv_cycl.c
│   ├── newknots.c
│   ├── pickcrvsf.c
│   ├── pocrvtang.c
│   ├── refine_all.c
│   ├── s1001.c
│   ├── s1011.c
│   ├── s1012.c
│   ├── s1013.c
│   ├── s1014.c
│   ├── s1015.c
│   ├── s1016.c
│   ├── s1017.c
│   ├── s1018.c
│   ├── s1021.c
│   ├── s1022.c
│   ├── s1023.c
│   ├── s1024.c
│   ├── s1025.c
│   ├── s1119.c
│   ├── s1161.c
│   ├── s1162.c
│   ├── s1172.c
│   ├── s1173.c
│   ├── s1174.c
│   ├── s1190.c
│   ├── s1192.c
│   ├── s1219.c
│   ├── s1220.c
│   ├── s1221.c
│   ├── s1222.c
│   ├── s1223.c
│   ├── s1224.c
│   ├── s1225.c
│   ├── s1226.c
│   ├── s1227.c
│   ├── s1231.c
│   ├── s1232.c
│   ├── s1233.c
│   ├── s1235.c
│   ├── s1236.c
│   ├── s1237.c
│   ├── s1238.c
│   ├── s1239.c
│   ├── s1240.c
│   ├── s1241.c
│   ├── s1243.c
│   ├── s1244.c
│   ├── s1245.c
│   ├── s1251.c
│   ├── s1252.c
│   ├── s1291.c
│   ├── s1301.c
│   ├── s1302.c
│   ├── s1303.c
│   ├── s1304.c
│   ├── s1305.c
│   ├── s1306.c
│   ├── s1307.c
│   ├── s1308.c
│   ├── s1309.c
│   ├── s1310.c
│   ├── s1311.c
│   ├── s1312.c
│   ├── s1313.c
│   ├── s1314.c
│   ├── s1315.c
│   ├── s1316.c
│   ├── s1317.c
│   ├── s1318.c
│   ├── s1319.c
│   ├── s1320.c
│   ├── s1321.c
│   ├── s1322.c
│   ├── s1323.c
│   ├── s1324.c
│   ├── s1325.c
│   ├── s1326.c
│   ├── s1327.c
│   ├── s1328.c
│   ├── s1329.c
│   ├── s1330.c
│   ├── s1331.c
│   ├── s1332.c
│   ├── s1333.c
│   ├── s1333count.c
│   ├── s1333cycli.c
│   ├── s1334.c
│   ├── s1339.c
│   ├── s1340.c
│   ├── s1341.c
│   ├── s1342.c
│   ├── s1343.c
│   ├── s1345.c
│   ├── s1346.c
│   ├── s1347.c
│   ├── s1348.c
│   ├── s1349.c
│   ├── s1350.c
│   ├── s1351.c
│   ├── s1352.c
│   ├── s1353.c
│   ├── s1354.c
│   ├── s1355.c
│   ├── s1356.c
│   ├── s1357.c
│   ├── s1358.c
│   ├── s1359.c
│   ├── s1360.c
│   ├── s1361.c
│   ├── s1362.c
│   ├── s1363.c
│   ├── s1364.c
│   ├── s1365.c
│   ├── s1366.c
│   ├── s1367.c
│   ├── s1369.c
│   ├── s1370.c
│   ├── s1371.c
│   ├── s1372.c
│   ├── s1373.c
│   ├── s1374.c
│   ├── s1375.c
│   ├── s1376.c
│   ├── s1377.c
│   ├── s1378.c
│   ├── s1379.c
│   ├── s1380.c
│   ├── s1381.c
│   ├── s1382.c
│   ├── s1383.c
│   ├── s1384.c
│   ├── s1385.c
│   ├── s1386.c
│   ├── s1387.c
│   ├── s1388.c
│   ├── s1389.c
│   ├── s1390.c
│   ├── s1391.c
│   ├── s1393.c
│   ├── s1399.c
│   ├── s1401.c
│   ├── s1421.c
│   ├── s1422.c
│   ├── s1424.c
│   ├── s1425.c
│   ├── s1435.c
│   ├── s1436.c
│   ├── s1437.c
│   ├── s1438.c
│   ├── s1439.c
│   ├── s1440.c
│   ├── s1450.c
│   ├── s1451.c
│   ├── s1452.c
│   ├── s1500.c
│   ├── s1501.c
│   ├── s1502.c
│   ├── s1503.c
│   ├── s1504.c
│   ├── s1505.c
│   ├── s1506.c
│   ├── s1507.c
│   ├── s1508.c
│   ├── s1510.c
│   ├── s1511.c
│   ├── s1512.c
│   ├── s1513.c
│   ├── s1514.c
│   ├── s1515.c
│   ├── s1516.c
│   ├── s1517.c
│   ├── s1518.c
│   ├── s1520.c
│   ├── s1521.c
│   ├── s1522.c
│   ├── s1528.c
│   ├── s1529.c
│   ├── s1530.c
│   ├── s1531.c
│   ├── s1534.c
│   ├── s1535.c
│   ├── s1536.c
│   ├── s1537.c
│   ├── s1538.c
│   ├── s1539.c
│   ├── s1540.c
│   ├── s1541.c
│   ├── s1542.c
│   ├── s1600.c
│   ├── s1601.c
│   ├── s1602.c
│   ├── s1603.c
│   ├── s1604.c
│   ├── s1605.c
│   ├── s1606.c
│   ├── s1607.c
│   ├── s1608.c
│   ├── s1609.c
│   ├── s1611.c
│   ├── s1612.c
│   ├── s1613.c
│   ├── s1613bez.c
│   ├── s1614.c
│   ├── s1615.c
│   ├── s1616.c
│   ├── s1617.c
│   ├── s1618.c
│   ├── s1619.c
│   ├── s1620.c
│   ├── s1630.c
│   ├── s1631.c
│   ├── s1700.c
│   ├── s1701.c
│   ├── s1705.c
│   ├── s1706.c
│   ├── s1707.c
│   ├── s1708.c
│   ├── s1710.c
│   ├── s1711.c
│   ├── s1712.c
│   ├── s1713.c
│   ├── s1714.c
│   ├── s1715.c
│   ├── s1716.c
│   ├── s1720.c
│   ├── s1730.c
│   ├── s1731.c
│   ├── s1732.c
│   ├── s1733.c
│   ├── s1741.c
│   ├── s1750.c
│   ├── s1753.c
│   ├── s1754.c
│   ├── s1755.c
│   ├── s1770.c
│   ├── s17702d.c
│   ├── s1771.c
│   ├── s1772.c
│   ├── s1773.c
│   ├── s1774.c
│   ├── s1775.c
│   ├── s1780.c
│   ├── s1785.c
│   ├── s1786.c
│   ├── s1787.c
│   ├── s1788.c
│   ├── s1789.c
│   ├── s1790.c
│   ├── s1791.c
│   ├── s1792.c
│   ├── s1795.c
│   ├── s1796.c
│   ├── s1797.c
│   ├── s1830.c
│   ├── s1834.c
│   ├── s1839.c
│   ├── s1840.c
│   ├── s1850.c
│   ├── s1851.c
│   ├── s1852.c
│   ├── s1853.c
│   ├── s1854.c
│   ├── s1855.c
│   ├── s1856.c
│   ├── s1857.c
│   ├── s1858.c
│   ├── s1859.c
│   ├── s1860.c
│   ├── s1870.c
│   ├── s1871.c
│   ├── s1880.c
│   ├── s1890.c
│   ├── s1891.c
│   ├── s1893.c
│   ├── s1894.c
│   ├── s1896.c
│   ├── s1897.c
│   ├── s1900.c
│   ├── s1901.c
│   ├── s1902.c
│   ├── s1903.c
│   ├── s1904.c
│   ├── s1905.c
│   ├── s1906.c
│   ├── s1907.c
│   ├── s1908.c
│   ├── s1909.c
│   ├── s1910.c
│   ├── s1911.c
│   ├── s1912.c
│   ├── s1916.c
│   ├── s1917.c
│   ├── s1918.c
│   ├── s1919.c
│   ├── s1920.c
│   ├── s1921.c
│   ├── s1924.c
│   ├── s1925.c
│   ├── s1926.c
│   ├── s1927.c
│   ├── s1930.c
│   ├── s1931.c
│   ├── s1931unit.c
│   ├── s1932.c
│   ├── s1933.c
│   ├── s1934.c
│   ├── s1935.c
│   ├── s1936.c
│   ├── s1937.c
│   ├── s1938.c
│   ├── s1940.c
│   ├── s1941.c
│   ├── s1942.c
│   ├── s1943.c
│   ├── s1944.c
│   ├── s1945.c
│   ├── s1946.c
│   ├── s1947.c
│   ├── s1948.c
│   ├── s1949.c
│   ├── s1950.c
│   ├── s1951.c
│   ├── s1953.c
│   ├── s1954.c
│   ├── s1955.c
│   ├── s1956.c
│   ├── s1957.c
│   ├── s1958.c
│   ├── s1959.c
│   ├── s1960.c
│   ├── s1961.c
│   ├── s1962.c
│   ├── s1963.c
│   ├── s1965.c
│   ├── s1966.c
│   ├── s1967.c
│   ├── s1968.c
│   ├── s1986.c
│   ├── s1987.c
│   ├── s1988.c
│   ├── s1989.c
│   ├── s1990.c
│   ├── s1991.c
│   ├── s1992.c
│   ├── s1993.c
│   ├── s1994.c
│   ├── s2500.c
│   ├── s2501.c
│   ├── s2502.c
│   ├── s2503.c
│   ├── s2504.c
│   ├── s2505.c
│   ├── s2506.c
│   ├── s2507.c
│   ├── s2508.c
│   ├── s2509.c
│   ├── s2510.c
│   ├── s2511.c
│   ├── s2512.c
│   ├── s2513.c
│   ├── s2514.c
│   ├── s2515.c
│   ├── s2516.c
│   ├── s2532.c
│   ├── s2533.c
│   ├── s2534.c
│   ├── s2535.c
│   ├── s2536.c
│   ├── s2540.c
│   ├── s2541.c
│   ├── s2542.c
│   ├── s2543.c
│   ├── s2544.c
│   ├── s2545.c
│   ├── s2550.c
│   ├── s2551.c
│   ├── s2553.c
│   ├── s2554.c
│   ├── s2555.c
│   ├── s2556.c
│   ├── s2557.c
│   ├── s2558.c
│   ├── s2559.c
│   ├── s2560.c
│   ├── s2561.c
│   ├── s2562.c
│   ├── s6addcurve.c
│   ├── s6affdist.c
│   ├── s6ang.c
│   ├── s6angle.c
│   ├── s6bezpowsf.c
│   ├── s6castelja.c
│   ├── s6chpar.c
│   ├── s6crss.c
│   ├── s6crvature.c
│   ├── s6crvcheck.c
│   ├── s6curvrad.c
│   ├── s6decomp.c
│   ├── s6degnorm.c
│   ├── s6dertopt.c
│   ├── s6diff.c
│   ├── s6dist.c
│   ├── s6dline.c
│   ├── s6dplane.c
│   ├── s6drawseq.c
│   ├── s6equal.c
│   ├── s6err.c
│   ├── s6existbox.c
│   ├── s6findfac.c
│   ├── s6fndintv.c
│   ├── s6herm.c
│   ├── s6herm_bez.c
│   ├── s6idcon.c
│   ├── s6idcpt.c
│   ├── s6idedg.c
│   ├── s6identify.c
│   ├── s6idget.c
│   ├── s6idint.c
│   ├── s6idklist.c
│   ├── s6idkpt.c
│   ├── s6idlis.c
│   ├── s6idnpt.c
│   ├── s6idput.c
│   ├── s6inv4.c
│   ├── s6invert.c
│   ├── s6knotmult.c
│   ├── s6length.c
│   ├── s6line.c
│   ├── s6lprj.c
│   ├── s6lufacp.c
│   ├── s6lusolp.c
│   ├── s6metric.c
│   ├── s6move.c
│   ├── s6multsfs.c
│   ├── s6mulvec.c
│   ├── s6mvec.c
│   ├── s6newbox.c
│   ├── s6norm.c
│   ├── s6nullspace.c
│   ├── s6ratder.c
│   ├── s6rotax.c
│   ├── s6rotmat.c
│   ├── s6schoen.c
│   ├── s6scpr.c
│   ├── s6sortpar.c
│   ├── s6sratder.c
│   ├── s6strider.c
│   ├── s6takunion.c
│   ├── s6testimpl.c
│   ├── s6twonorm.c
│   ├── s9adsimp.c
│   ├── s9adstep.c
│   ├── s9boundimp.c
│   ├── s9boundit.c
│   ├── s9clipimp.c
│   ├── s9clipit.c
│   ├── s9conmarch.c
│   ├── s9iterate.c
│   ├── s9iterimp.c
│   ├── s9smplknot.c
│   ├── s9surmarch.c
│   ├── sh1260.c
│   ├── sh1261.c
│   ├── sh1262.c
│   ├── sh1263.c
│   ├── sh1365.c
│   ├── sh1369.c
│   ├── sh1371.c
│   ├── sh1372.c
│   ├── sh1373.c
│   ├── sh1374.c
│   ├── sh1375.c
│   ├── sh1460.c
│   ├── sh1461.c
│   ├── sh1462.c
│   ├── sh1463.c
│   ├── sh1464.c
│   ├── sh1465.c
│   ├── sh1466.c
│   ├── sh1467.c
│   ├── sh1502.c
│   ├── sh1503.c
│   ├── sh1510.c
│   ├── sh1511.c
│   ├── sh1761.c
│   ├── sh1762.c
│   ├── sh1779.c
│   ├── sh1779_at.c
│   ├── sh1780.c
│   ├── sh1780_at.c
│   ├── sh1781.c
│   ├── sh1781_at.c
│   ├── sh1782.c
│   ├── sh1783.c
│   ├── sh1784.c
│   ├── sh1786.c
│   ├── sh1787.c
│   ├── sh1790.c
│   ├── sh1794.c
│   ├── sh1795.c
│   ├── sh1830.c
│   ├── sh1831.c
│   ├── sh1834.c
│   ├── sh1839.c
│   ├── sh1850.c
│   ├── sh1851.c
│   ├── sh1852.c
│   ├── sh1853.c
│   ├── sh1854.c
│   ├── sh1855.c
│   ├── sh1856.c
│   ├── sh1857.c
│   ├── sh1858.c
│   ├── sh1859.c
│   ├── sh1860.c
│   ├── sh1870.c
│   ├── sh1871.c
│   ├── sh1922.c
│   ├── sh1923.c
│   ├── sh1924.c
│   ├── sh1925.c
│   ├── sh1926.c
│   ├── sh1927.c
│   ├── sh1928.c
│   ├── sh1929.c
│   ├── sh1930.c
│   ├── sh1992.c
│   ├── sh1993.c
│   ├── sh1994.c
│   ├── sh6clvert.c
│   ├── sh6comedg.c
│   ├── sh6condir.c
│   ├── sh6connect.c
│   ├── sh6count.c
│   ├── sh6cvvert.c
│   ├── sh6degen.c
│   ├── sh6disconn.c
│   ├── sh6edgpnt.c
│   ├── sh6edgred.c
│   ├── sh6evalint.c
│   ├── sh6floop.c
│   ├── sh6fndsplt.c
│   ├── sh6getgeom.c
│   ├── sh6getlist.c
│   ├── sh6getmain.c
│   ├── sh6getnbrs.c
│   ├── sh6getnext.c
│   ├── sh6getothr.c
│   ├── sh6getprev.c
│   ├── sh6getsegdiv.c
│   ├── sh6gettop.c
│   ├── sh6idaledg.c
│   ├── sh6idcon.c
│   ├── sh6idfcros.c
│   ├── sh6idget.c
│   ├── sh6idkpt.c
│   ├── sh6idlis.c
│   ├── sh6idnpt.c
│   ├── sh6idnwun.c
│   ├── sh6idput.c
│   ├── sh6idrcros.c
│   ├── sh6idsplit.c
│   ├── sh6idunite.c
│   ├── sh6insert.c
│   ├── sh6inspnt.c
│   ├── sh6iscnect.c
│   ├── sh6ishelp.c
│   ├── sh6isinsid.c
│   ├── sh6ismain.c
│   ├── sh6nmbhelp.c
│   ├── sh6nmbmain.c
│   ├── sh6ptobj.c
│   ├── sh6ptouchp.c
│   ├── sh6putsing.c
│   ├── sh6red.c
│   ├── sh6remcon.c
│   ├── sh6rempnt.c
│   ├── sh6sepcrv.c
│   ├── sh6setcnsd.c
│   ├── sh6setdir.c
│   ├── sh6setseg.c
│   ├── sh6settop.c
│   ├── sh6spltgeo.c
│   ├── sh6tohelp.c
│   ├── sh6tomain.c
│   ├── sh6topohlp.c
│   ├── sh6trmlist.c
│   ├── sh_1d_div.c
│   ├── sh_div_crv.c
│   ├── sh_set_at.c
│   ├── shape.c
│   ├── shcheckput.c
│   ├── shchecktyp.c
│   ├── shcsfsing.c
│   ├── shdivsurf.c
│   ├── shevalc.c
│   ├── shmkhlppts.c
│   ├── shsing.c
│   ├── spli_silh.c
│   └── tstcyclknt.c
├── streaming/
│   ├── include/
│   │   └── GoReadWrite.h
│   └── src/
│       └── GoReadWrite.cpp
└── viewer/
    ├── include/
    │   ├── aux2.h
    │   ├── gl_aux.h
    │   ├── glutils.h
    │   ├── jonvec.h
    │   ├── mouse.h
    │   ├── sisl_aux.h
    │   └── transfutils.h
    ├── sisl_view_demo.cpp
    └── src/
        ├── aux2.cpp
        ├── gl_aux.cpp
        ├── glutils.cpp
        ├── mouse.cpp
        ├── sisl_aux.cpp
        └── transfutils.cpp

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
doc/html


================================================
FILE: CMakeLists.txt
================================================
PROJECT(sisl)

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

# Organize the project in folders (VS only?)
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)

# Include directories

INCLUDE_DIRECTORIES(
  ${sisl_SOURCE_DIR}/include
  )


# Make the sisl library

FILE(GLOB sisl_SRCS src/*.c include/*.h)
ADD_LIBRARY(sisl ${sisl_SRCS})
IF(CMAKE_COMPILER_IS_GNUCC)
    TARGET_LINK_LIBRARIES(sisl m)
ENDIF(CMAKE_COMPILER_IS_GNUCC)
SET_PROPERTY(TARGET sisl
  PROPERTY FOLDER "sisl/Libs")

# This line may be needed only on AMD 64 bit...
#IF(NOT WIN32)
#  SET_TARGET_PROPERTIES(sisl PROPERTIES COMPILE_FLAGS "-fPIC")
#ENDIF(NOT WIN32)


# Set various compiler flags
IF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-unused-but-set-variable -fPIC")
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wno-unused-but-set-variable -fPIC")
ENDIF(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
IF(WIN32)
  SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP8 -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS")
  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP8 -D_SCL_SECURE_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS")
ENDIF(WIN32)


# Apps, examples, tests, ...?

option(sisl_COMPILE_APPS "Compile apps?" OFF)

option(sisl_COMPILE_EXAMPLES "Compile examples?" OFF)

option(sisl_COMPILE_VIEWER "Compile viewer?" OFF)

IF(sisl_COMPILE_APPS)
  FILE(GLOB sisl_APPS app/*.[cC])
  FOREACH(app ${sisl_APPS})
    GET_FILENAME_COMPONENT(appname ${app} NAME_WE)
    ADD_EXECUTABLE(${appname} ${app})
    TARGET_LINK_LIBRARIES(${appname} sisl sisl_streaming)
    SET_TARGET_PROPERTIES(${appname}
      PROPERTIES RUNTIME_OUTPUT_DIRECTORY app)
  ENDFOREACH(app)
ENDIF()

IF(sisl_COMPILE_EXAMPLES OR sisl_COMPILE_VIEWER OR sisl_COMPILE_APPS)
  INCLUDE_DIRECTORIES(
    ${sisl_SOURCE_DIR}/streaming/include
    )

  FILE(GLOB sisl_go_SRCS streaming/src/*.cpp streaming/include/*.h)
  ADD_LIBRARY(sisl_streaming ${sisl_go_SRCS})
  # IF(CMAKE_COMPILER_IS_GNUCC)
  #     TARGET_LINK_LIBRARIES(sisl_go m)
  # ENDIF(CMAKE_COMPILER_IS_GNUCC)
ENDIF()

IF(sisl_COMPILE_EXAMPLES)
  FILE(GLOB sisl_APPS2 examples/*.cpp)
  FOREACH(app ${sisl_APPS2})
    GET_FILENAME_COMPONENT(appname ${app} NAME_WE)
    ADD_EXECUTABLE(${appname} ${app})
    TARGET_LINK_LIBRARIES(${appname} sisl sisl_streaming)
    SET_TARGET_PROPERTIES(${appname}
      PROPERTIES RUNTIME_OUTPUT_DIRECTORY examples)
  ENDFOREACH(app)
ENDIF()

IF(sisl_COMPILE_VIEWER)

  find_package(OpenGL REQUIRED)

  find_path(OPENGL_INCLUDE_DIR
            gl.h
            PATH_PREFIXES GL
            PATHS
            /usr/local/include
            /usr/include
            "$ENV{HOME}\\Install\\include" # For some reason HOME is not found in VS 2019.
            "C:\\Users\\$ENV{USERNAME}\\Install\\include"
	    "C:\\local\\include"
            )

  if(WIN32)

    find_path(GLUT_INCLUDE_DIR
              glut.h
              PATH_PREFIXES GL
              PATHS
              "$ENV{PROGRAMW6432}/Microsoft SDKs/Windows/v6.0A/Include"
              "$ENV{HOME}\\Install\\include" # For some reason HOME is not found in VS 2019.
              "C:\\Users\\$ENV{USERNAME}\\Install\\include"
	      "C:\\local\\include"
              )
    if(${MSVC_VERSION} EQUAL 1900)
      set(MSVC_NAME "msvc2015_")
      # MESSAGE("Visual Studio 2015!")
    elseif((${MSVC_VERSION} GREATER_EQUAL 1920) AND (${MSVC_VERSION} LESS 1930))
      # MESSAGE("Visual Studio 2019!")
      set(MSVC_NAME "msvc2019_")
    elseif((${MSVC_VERSION} GREATER_EQUAL 1930) AND (${MSVC_VERSION} LESS 1950))
      set(MSVC_NAME "msvc2022_")
    else()
      message("MSVC version not supported or not installed!")
    endif()
    if(CMAKE_CL_64)
      set(WIN_LIB_TYPE "64")
    else()
      set(WIN_LIB_TYPE "32")
    endif()

    find_library( GLUT_LIBRARY_RELEASE NAMES freeglut
    		  PATHS
  		  "~/Install/${MSVC_NAME}lib${WIN_LIB_TYPE}/Release"
  		  "C:/local/${MSVC_NAME}lib${WIN_LIB_TYPE}/Release"
                  ${GLUT_ROOT_PATH}/Release
                  #"~/Install/${MSVC_NAME}lib${WIN_LIB_TYPE}/Release"
                 )

    find_library( GLUT_LIBRARY_DEBUG NAMES freeglutd
    		  PATHS
                  ${GLUT_ROOT_PATH}/Debug
		  "~/Install/${MSVC_NAME}lib${WIN_LIB_TYPE}/Debug"
		  "C:/local/${MSVC_NAME}lib${WIN_LIB_TYPE}/Debug"
                  #"~/Install/${MSVC_NAME}lib${WIN_LIB_TYPE}/Debug"
                 )
    # message("GLUT_LIBRARY_RELEASE: ${GLUT_LIBRARY_RELEASE}")
    # message("GLUT_LIBRARY_DEBUG: ${GLUT_LIBRARY_DEBUG}")
    
    set(GLUT_glut_LIBRARY "")
    # message("GLUT_glut_LIBRARY: ${GLUT_glut_LIBRARY}")
    if(GLUT_LIBRARY_DEBUG)
      set(GLUT_glut_LIBRARY ${GLUT_glut_LIBRARY} debug ${GLUT_LIBRARY_DEBUG})
    endif()
    if(GLUT_LIBRARY_RELEASE)
      set(GLUT_glut_LIBRARY ${GLUT_glut_LIBRARY} optimized ${GLUT_LIBRARY_RELEASE})
    endif()
    # message("GLUT_glut_LIBRARY: ${GLUT_glut_LIBRARY}")
  else()
    find_package(GLUT REQUIRED)  
  endif()

  INCLUDE_DIRECTORIES(
    ${sisl_SOURCE_DIR}/viewer/include
    ${OPENGL_INCLUDE_DIR}
    ${GLUT_INCLUDE_DIR}
    )

  # message("GLUT_INCLUDE_DIR: ${GLUT_INCLUDE_DIR}")
  # message("GLUT_INCLUDE_PATH: ${GLUT_INCLUDE_PATH}")
  # message("GLUT_glut_LIBRARY_RELEASE: ${GLUT_glut_LIBRARY_RELEASE}")
  # message("GLUT_glut_LIBRARY_DEBUG: ${GLUT_glut_LIBRARY_DEBUG}")
  # message("GLUT_glut_LIBRARY: ${GLUT_glut_LIBRARY}")
  # message("OPENGL_LIBRARIES: ${OPENGL_LIBRARIES}")
  # message("MSVC_NAME lib WIN_LIB_TYPE: ${MSVC_NAME}lib${WIN_LIB_TYPE}")

  FILE(GLOB sisl_viewer_SRCS viewer/src/*.cpp viewer/include/*.h)
  ADD_LIBRARY(sisl_viewer ${sisl_viewer_SRCS})
  IF(CMAKE_COMPILER_IS_GNUCC)
    TARGET_LINK_LIBRARIES(sisl_streaming sisl)
  ENDIF(CMAKE_COMPILER_IS_GNUCC)

  FILE(GLOB sisl_APPS3 viewer/*.cpp)
  FOREACH(app ${sisl_APPS3})
    GET_FILENAME_COMPONENT(appname ${app} NAME_WE)
    ADD_EXECUTABLE(${appname} ${app})
    TARGET_LINK_LIBRARIES(${appname} sisl sisl_streaming sisl_viewer ${OPENGL_LIBRARIES} ${GLUT_glut_LIBRARY})
    SET_TARGET_PROPERTIES(${appname}
      PROPERTIES RUNTIME_OUTPUT_DIRECTORY viewer)
  ENDFOREACH(app)
ENDIF()


# 'install' target

# Set the installation prefix based on platform
IF(WIN32)
  SET(sisl_INSTALL_PREFIX "$ENV{PROGRAMFILES}/SINTEF/sisl" CACHE PATH "Path to install sisl")
ELSE()
  SET(sisl_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE PATH "Path to install sisl")
ENDIF()

# === Install Targets and Export CMake Package ===
include(CMakePackageConfigHelpers)

target_include_directories(sisl INTERFACE
  $<BUILD_INTERFACE:${sisl_SOURCE_DIR}/include>
)

export(TARGETS sisl FILE sislTargets.cmake)

# Install the sisl target with export
install(TARGETS sisl
    EXPORT sislTargets
    ARCHIVE DESTINATION ${sisl_INSTALL_PREFIX}/lib
    LIBRARY DESTINATION ${sisl_INSTALL_PREFIX}/lib
    RUNTIME DESTINATION ${sisl_INSTALL_PREFIX}/bin
    INCLUDES DESTINATION ${sisl_INSTALL_PREFIX}/include
)

# Install header files
install(DIRECTORY include/
    DESTINATION ${sisl_INSTALL_PREFIX}/include
    FILES_MATCHING PATTERN "*.h"
)

# Export target info to a file
install(EXPORT sislTargets
    FILE sislTargets.cmake
    #NAMESPACE sisl::             # Allow target_link_libraries(MyApp sisl::sisl)
    DESTINATION ${sisl_INSTALL_PREFIX}/lib/cmake/sisl
)

# Generate and install version/config files
write_basic_package_version_file(
    "${CMAKE_CURRENT_BINARY_DIR}/sislConfigVersion.cmake"
    VERSION 4.6.0
    COMPATIBILITY SameMajorVersion
)

configure_package_config_file(
    "${CMAKE_CURRENT_SOURCE_DIR}/cmake/sislConfig.cmake.in"
    "${CMAKE_CURRENT_BINARY_DIR}/sislConfig.cmake"
    INSTALL_DESTINATION ${sisl_INSTALL_PREFIX}/lib/cmake/sisl
)

install(FILES
    "${CMAKE_CURRENT_BINARY_DIR}/sislConfig.cmake"
    "${CMAKE_CURRENT_BINARY_DIR}/sislConfigVersion.cmake"
    DESTINATION ${sisl_INSTALL_PREFIX}/lib/cmake/sisl
)

# CPack setup for packaging if needed
IF(NOT GoTools_ALL_COMPILE)
  SET(CPACK_SOURCE_PACKAGE_FILE_NAME "sisl-4.6.0")
  SET(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;\\.swp$;\\.#;/#;.*~")
  INCLUDE(CPack)
ENDIF()

SET(CPACK_STRIP_FILES ${CPACK_STRIP_FILES} libsisl.so)


================================================
FILE: COPYING
================================================
                    GNU AFFERO GENERAL PUBLIC LICENSE
                       Version 3, 19 November 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

  A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate.  Many developers of free software are heartened and
encouraged by the resulting cooperation.  However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

  The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community.  It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server.  Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

  An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals.  This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU Affero General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Remote Network Interaction; Use with the GNU General Public License.

  Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software.  This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time.  Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source.  For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code.  There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<http://www.gnu.org/licenses/>.


================================================
FILE: ChangeLog
================================================
2021-03-16	Vibeke Skytt 	<Vibeke.Skytt@sintef.no>
	* Released version 4.7 of SISL. The main updates are related to
	documentation.
	
2013-06-06	Jan Thomassen	<jan.b.thomassen@sintef.no>
	* Released version 4.6.0 of SISL.
	* Updated license to dual license: GNU Affero  GPL 3 or
	commercial
	* Fixed a number of bugs.

16.9.2010	Jan Thomassen	<jan.b.thomassen@sintef.no>
	* Released version 4.5.0 of SISL. This is a minor update from the
	previous version.
	* Changed building system to CMake.
	* Fixed a number of bugs.

3.2.2005
	* Released version 4.4 of SISL.


================================================
FILE: INSTALL
================================================
Installation Instructions
*************************

This package uses CMake to generate a Makefile (on Linux) or
MS Visual Studio project file (on Windows).

For information on using CMake, see www.cmake.org.

A more extensive guide on how to compile and link the SISL library and 
applications build upon it can be found in the reference manual.

--------------------------------------------------------------------------------

LINUX

As a Quick Start Guide, on Linux, make a build directory inside the source
directory
$ cd <path_to_source_code>
$ mkdir build
$ cd build

Run the cmake program to setup the build process, selecting Debug or Release
as build type, optionally selecting a local install folder:
$ cmake .. -DCMAKE_BUILD_TYPE=Release (-DCMAKE_INSTALL_PREFIX=$HOME/install)

For a gui-like cmake interface use ccmake (from cmake-ncurses-gui).

Build the library:
$ make

Install the library to a local folder (requires the use of
-DCMAKE_INSTALL_PREFIX with a local folder in the previous step):
$ make install

If the -DCMAKE_INSTALL_PREFIX in the cmake step was omitted or was set to a
system folder (like /usr/local) the user needs elevated privileges to install
the library:
$ sudo make install

--------------------------------------------------------------------------------

WINDOWS

On Windows, add a new build folder somewhere. Start the CMake
executable and fill in the paths to the source and build folders. When
you run CMake, a Visual Studio project solution file will be generated
in the build folder.


================================================
FILE: README
================================================
SISL is a comprehensive NURBS library for the modeling and
interrogation of curves and surfaces. It is implemented in C.

This software was written by the Geometry Group at SINTEF Digital,
Department of Mathematics and Cybernethics.

Requirements:
* CMake
  www.cmake.org

For information on installation, see the INSTALL file.

Good luck!


 

================================================
FILE: app/prog1.c
================================================
/*
 * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,
 * Applied Mathematics, Norway.
 *
 * Contact information: E-mail: tor.dokken@sintef.no                      
 * SINTEF Digital, Department of Mathematics and Cybernetics,                         
 * P.O. Box 124 Blindern,                                                 
 * 0314 Oslo, Norway.                                                     
 *
 * This file is part of SISL.
 *
 * SISL is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version. 
 *
 * SISL is distributed in the hope that it will be useful,        
 * but WITHOUT ANY WARRANTY; without even the implied warranty of         
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public
 * License along with SISL. If not, see
 * <http://www.gnu.org/licenses/>.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public
 * License, a covered work must retain the producer line in every data
 * file that is created or manipulated using SISL.
 *
 * Other Usage
 * You can be released from the requirements of the license by purchasing
 * a commercial license. Buying such a license is mandatory as soon as you
 * develop commercial activities involving the SISL library without
 * disclosing the source code of your own applications.
 *
 * This file may be used in accordance with the terms contained in a
 * written agreement between you and SINTEF Digital. 
 */

#include "sisl.h"
#include <stdlib.h>
#include <stdio.h>
int main()
{
  SISLCurve *pc=NULL;
  double aepsco,aepsge,top[3],axispt[3],conept[3];
  double st[100],stcoef[100],*spar=NULL;
  int kstat;
  int cone_exists=0;
  int kk,kn,kdim,ki;
  int kpt,kcrv;
  SISLIntcurve **qrcrv=NULL;
  char ksvar[100];
  kdim=3;
  aepsge=0.001; /* geometric tolerance */
  aepsco=0.000001; /* computational tolerance This parameter is included from historical reasons
                      and no longer used  */

  ksvar[0] = '0';  /* arbitrary character */
  while (ksvar[0] != 'q')
    {
      printf("\n cu - define a new B-spline curve");
      printf("\n co - define a new cone");
      printf("\n i - intersect the B-spline curve with the cone");
      printf("\n q - quit");
      printf("\n> ");
      scanf("%s",ksvar);

      if (ksvar[0] == 'c' && ksvar[1] == 'u')
	{
	  printf("\n Give number of vertices, order of curve: ");
	  scanf("%d %d", &kn, &kk);
	  printf("Give knots values in ascending order: \n");
	  for (ki=0;ki<kn+kk;ki++)
	    {
	      scanf("%lf",&st[ki]);
	    }
	  printf("Give vertices \n");
	  for (ki=0;ki<kn*kdim;ki++)
	    {
	      scanf("%lf",&stcoef[ki]);
	    }
	  if(pc) freeCurve(pc);
	  pc = newCurve(kn,kk,st,stcoef,1,kdim,1);
	}
      else if (ksvar[0] == 'c' && ksvar[1] == 'o')
	{
	  printf("\n Give top point: ");
	  scanf("%lf %lf %lf",&top[0],&top[1],&top[2]);
	  printf("\n Give a point on the axis: ");
	  scanf("%lf %lf %lf",&axispt[0],&axispt[1],&axispt[2]);
	  printf("\n Give a point on the cone surface: ");
	  scanf("%lf %lf %lf",&conept[0],&conept[1],&conept[2]);
	  cone_exists=1;
	}
      else if (ksvar[0] == 'i' && cone_exists && pc)
	{
	  s1373(pc,top,axispt,conept,kdim,aepsco,aepsge,
		&kpt,&spar,&kcrv,&qrcrv,&kstat);
	  printf("\n kstat %d",kstat);
	  printf("\n kpt %d",kpt);
	  printf("\n kcrv %d",kcrv);
	  for (ki=0;ki<kpt;ki++)
	    {
	      printf("\nIntersection point %lf",spar[ki]);
	    }
	  if (spar)
	    {
	      free (spar);
	      spar=NULL;
	    }
	  if (qrcrv)
	    {
	      freeIntcrvlist(qrcrv,kcrv);
	      qrcrv=NULL;
	    }
	}
    }
  return 0;
}


================================================
FILE: app/s1013prob.C
================================================
/*
 * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,
 * Applied Mathematics, Norway.
 *
 * Contact information: E-mail: tor.dokken@sintef.no                      
 * SINTEF Digital, Department of Mathematics and Cybernetics,                         
 * P.O. Box 124 Blindern,                                                 
 * 0314 Oslo, Norway.                                                     
 *
 * This file is part of SISL.
 *
 * SISL is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version. 
 *
 * SISL is distributed in the hope that it will be useful,        
 * but WITHOUT ANY WARRANTY; without even the implied warranty of         
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public
 * License along with SISL. If not, see
 * <http://www.gnu.org/licenses/>.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public
 * License, a covered work must retain the producer line in every data
 * file that is created or manipulated using SISL.
 *
 * Other Usage
 * You can be released from the requirements of the license by purchasing
 * a commercial license. Buying such a license is mandatory as soon as you
 * develop commercial activities involving the SISL library without
 * disclosing the source code of your own applications.
 *
 * This file may be used in accordance with the terms contained in a
 * written agreement between you and SINTEF Digital. 
 */

#include "sisl.h"
#include <iostream>


using namespace std;


int main()
{
    int dim = 2;
    int kind = 1;
    double coefs[] = { -1, 1, 0, 0, 1, 0, 1, 1 };
    double knots[] = { 0, 0, 0, 0, 1, 1, 1, 1 };
    int num = 4;
    int order = 4;
    SISLCurve* sc = newCurve(num, order, knots, coefs, kind, dim, 1);

    double itpar;
    int stat;
    s1013(sc, 1.0, 0.01, 0.3, &itpar, &stat);
    double pt[4];
    int kleft;
    s1221(sc, 1, itpar, &kleft, pt, &stat);

    cout << itpar << ' ' << pt[2] << ' ' << pt[3] << endl;
}


================================================
FILE: app/s1320prob.C
================================================
/*
 * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,
 * Applied Mathematics, Norway.
 *
 * Contact information: E-mail: tor.dokken@sintef.no                      
 * SINTEF Digital, Department of Mathematics and Cybernetics,                         
 * P.O. Box 124 Blindern,                                                 
 * 0314 Oslo, Norway.                                                     
 *
 * This file is part of SISL.
 *
 * SISL is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version. 
 *
 * SISL is distributed in the hope that it will be useful,        
 * but WITHOUT ANY WARRANTY; without even the implied warranty of         
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public
 * License along with SISL. If not, see
 * <http://www.gnu.org/licenses/>.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public
 * License, a covered work must retain the producer line in every data
 * file that is created or manipulated using SISL.
 *
 * Other Usage
 * You can be released from the requirements of the license by purchasing
 * a commercial license. Buying such a license is mandatory as soon as you
 * develop commercial activities involving the SISL library without
 * disclosing the source code of your own applications.
 *
 * This file may be used in accordance with the terms contained in a
 * written agreement between you and SINTEF Digital. 
 */

#include "sisl.h"
#include <cmath>
#include <stdlib.h>
#include <iostream>
 

using namespace std;


int main()
{
  // unsigned n;
  const unsigned dim = 2;
  const unsigned NoPoints = 3;
  const unsigned Order = 3;
  int state, NoIntPoints, NoIntCurves;
  double* IntPointsOnCurve;
  double* IntPointsOnLine;
  SISLIntcurve** IntCurves;
  SISLCurve* Line = NULL;
  SISLCurve* Curve = NULL;
  double endPar;
  double knots[NoPoints+Order];
  double coef[(dim+1)*NoPoints];
  // define line
  double a[] = { 0.0, 4.0};
  double b[] = { 4.0, 4.0};
 
  // generate control polygon

   
  coef[ 0] =  0.0;
  coef[ 1] =  0.0;
  coef[ 2] =  1.0;
 
  coef[ 3] =  2.0 * sqrt(2.0)/2.0;
  coef[ 4] =  2.0 * sqrt(2.0)/2.0;
  coef[ 5] =  1.0 * sqrt(2.0)/2.0;
 
  coef[ 6] =  4.0;
  coef[ 7] =  0.0;
  coef[ 8] =  1.0;


  /*
  coef[ 0] =  0.0;
  coef[ 1] =  0.0;
  coef[ 2] =  0.0;
  coef[ 3] =  1.0;
 
  coef[ 4] =  2.0 * sqrt(2.0)/2.0;
  coef[ 5] =  2.0 * sqrt(2.0)/2.0;
  coef[ 6] =  0.0;
  coef[ 7] =  1.0 * sqrt(2.0)/2.0;
 
  coef[ 8] =  4.0;
  coef[ 9] =  0.0;
  coef[ 10] =  0.0;
 coef[ 11] =  1.0;
  */

  /*
  coef[0] = 0.0;
  coef[1] =  0.0;
  coef[2] =  2.0;
  coef[3] =  2.0;
  coef[4] =  4.0;
  coef[5] =  0.0;
  */

  // generate knots
  knots[0] = 0.0;
  knots[1] = 0.0;
  knots[2] = 0.0;
  knots[3] = 1.0;
  knots[4] = 1.0;
  knots[5] = 1.0;
 
  // ask SISL for a curve.
  Curve = newCurve(NoPoints, Order, knots, coef, 4, dim, 1);
 
  // ask SISL for a line.
  s1602(a, b, Order, dim, 0.0, &endPar, &Line, &state);
 
  if (state!=0)
    return 1;
 
  // least distance between lines
  // Denne linja krasjer
  s1955(Curve, Line, 1E-3, 1E-3, &NoIntPoints, &IntPointsOnCurve,
        &IntPointsOnLine, &NoIntCurves, &IntCurves, &state);
 
  cout << NoIntPoints << ' ' << IntPointsOnCurve[0] << ' ' 
       << IntPointsOnLine[0] << endl;

  // cleanup
  freeCurve(Curve);
  freeCurve(Line);
  free(IntPointsOnCurve);
  free(IntPointsOnLine);
  freeIntcrvlist(IntCurves, NoIntCurves);
}









================================================
FILE: app/s1606prob.C
================================================
/*
 * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,
 * Applied Mathematics, Norway.
 *
 * Contact information: E-mail: tor.dokken@sintef.no                      
 * SINTEF Digital, Department of Mathematics and Cybernetics,                         
 * P.O. Box 124 Blindern,                                                 
 * 0314 Oslo, Norway.                                                     
 *
 * This file is part of SISL.
 *
 * SISL is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version. 
 *
 * SISL is distributed in the hope that it will be useful,        
 * but WITHOUT ANY WARRANTY; without even the implied warranty of         
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public
 * License along with SISL. If not, see
 * <http://www.gnu.org/licenses/>.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public
 * License, a covered work must retain the producer line in every data
 * file that is created or manipulated using SISL.
 *
 * Other Usage
 * You can be released from the requirements of the license by purchasing
 * a commercial license. Buying such a license is mandatory as soon as you
 * develop commercial activities involving the SISL library without
 * disclosing the source code of your own applications.
 *
 * This file may be used in accordance with the terms contained in a
 * written agreement between you and SINTEF Digital. 
 */

#include "sisl.h"
#include <iostream>


using namespace std;


int main()
{
    double knots[4]
	= {0.0, 0.0, 1.0, 1.0};
    double c0[6]
	= { 0.000002, 0.000150, 0.000000, 0.000000, 0.000000, 0.000000 };
    double c1[6]
	= { 0.000000, 0.001768, -0.001768, 0.000000, 0.001914, -0.001914 };
//      double c0[6]
//  	= { 0, 0, 0, 1, 0, 0 };
//      double c1[6]
//  	= { 2, 1, 1, 2, 2, 1 };

    SISLCurve* cv[3];
    cv[0] = newCurve(2, 2, knots, c0, 1, 3, 0);
    cv[1] = newCurve(2, 2, knots, c1, 1, 3, 0);
    cv[2] = 0;
    double epsge = 1e-6;
    double point0[3] = {0.000000, 0.001768, -0.001768};
    double point1[3] = {0.000002, 0.000150,  0.000000};
//      double point0[3] = { 1, 0, 0 };
//      double point1[3] = { 2, 1, 1 };
    int blendtype = 2;
    int dim = 3;
    int order = 4;
    int stat;
//      double epoint[12] = { 0.000002, 0.000150, 0.000000,
//  			  0.013332148306149432, 0.99991112296120743, 0,
//  			  0, 0.001768, -0.001768,
//  			  0, 0.70710678118654746, -0.70710678118654746 };
    // double epoint[12] = { 0, 0, 0,
    // 			  1, 0, 0,
    // 			  0, 0, 1,
    // 			  0.000000001, 1, 0 };
    // double eptyp[4] = { 1, 4, 1, 4 };
    s1606(cv[0], cv[1], epsge, point0, point1,
  	  blendtype, dim, order, &cv[2], &stat);
    // double astpar = 0.0;
    // double cendpar;
    // double aepsge = 1e-6;
    //    s1611(epoint, 4, 3, eptyp, 1, 4, astpar, aepsge, &cendpar, &cv[2], &stat);
    int n = cv[2]->in;
    int k = cv[2]->ik;
    // int t = cv[2]->ikind;
    int d = cv[2]->idim;
    cout.precision(15);
    cout << "GoNurbsCurve3D\ndimension 3\nbounding_box 0\n"
	 << "attribute_list_length 0\nparameters "
	 << cv[2]->et[k-1] << ' ' << cv[2]->et[n] << '\n'
	 << "periodic 0\nbspline_basis\nnum_coeffs "
	 << n << "\norder " << k << "\nknot_vector\n";
    for (int i = 0; i < n + k; ++i) {
  	cout << cv[2]->et[i] << ' ';
    }
    cout << "\nkind 1\ndim 3\ncoefficients\n";
    for (int i = 0; i < n; ++i) {
	for (int j = 0; j < d; ++j) {
	    cout << cv[2]->ecoef[i*d + j] << ' ';
	}
	cout << '\n';
    }
    cout << "closedness -1" << endl;
}


================================================
FILE: app/surf_surf_int.C
================================================
/*
 * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,
 * Applied Mathematics, Norway.
 *
 * Contact information: E-mail: tor.dokken@sintef.no                      
 * SINTEF Digital, Department of Mathematics and Cybernetics,                         
 * P.O. Box 124 Blindern,                                                 
 * 0314 Oslo, Norway.                                                     
 *
 * This file is part of SISL.
 *
 * SISL is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version. 
 *
 * SISL is distributed in the hope that it will be useful,        
 * but WITHOUT ANY WARRANTY; without even the implied warranty of         
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public
 * License along with SISL. If not, see
 * <http://www.gnu.org/licenses/>.
 *
 * In accordance with Section 7(b) of the GNU Affero General Public
 * License, a covered work must retain the producer line in every data
 * file that is created or manipulated using SISL.
 *
 * Other Usage
 * You can be released from the requirements of the license by purchasing
 * a commercial license. Buying such a license is mandatory as soon as you
 * develop commercial activities involving the SISL library without
 * disclosing the source code of your own applications.
 *
 * This file may be used in accordance with the terms contained in a
 * written agreement between you and SINTEF Digital. 
 */

#include <iostream>
#include <fstream>
#include <string>
#include <stdexcept>
#include <cstdlib>

#include "sisl.h"
#include "GoReadWrite.h"

using namespace std;



//===========================================================================
int main(int avnum, char** vararg)
//===========================================================================
{
  ifstream is_sf1(vararg[1]);
  ifstream is_sf2(vararg[2]);
  double eps = atof(vararg[3]);
  ofstream os(vararg[4]);

  try {


    // reading surfaces
    SISLSurf* surf_1 = readGoSurface(is_sf1);
    SISLSurf* surf_2 = readGoSurface(is_sf2);

    // detecting (but not tracing out) intersection curves
    double epsco = 1.0e-15; // computational epsilon
    double epsge = 1.0e-5; // geometric tolerance
    int num_int_points = 0; // number of detected intersection points
    double* intpar_surf_1  = 0; // parameter values for the surface in the intersections
    double* intpar_surf_2 = 0; // parameter values for the curve in the intersections
    int num_int_curves = 0;   // number of intersection curves
    SISLIntcurve** intcurve = 0; // pointer to array of detected intersection curves
    int jstat = 0; // status variable

    // calculating topology of intersections
    s1859(surf_1,          // the first surface
	  surf_2,          // the second surface
	  epsco,           // computational resolution
	  eps,           // geometry resolution
	  &num_int_points, // number of single intersection points
	  &intpar_surf_1,  // pointer to array of parameter values for surface 1
	  &intpar_surf_2,  //               -"-                    for surface 2
	  &num_int_curves, // number of detected intersection curves
	  &intcurve,       // pointer to array of detected intersection curves.
	  &jstat);         // status variable
	
    if (jstat < 0) {
      throw runtime_error("Error occured inside call to SISL routine s1859.");
    } else if (jstat > 0) {
      cerr << "WARNING: warning occured inside call to SISL routine s1859. \n" 
	   << endl;
    }

    // In this example, we expect to detect two intersection curves, but no isolated
    // intersection points.

    cout << "Number of intersection points detected: " << num_int_points << endl;
    for (int i=0; i<num_int_points; ++i)
      cout << intpar_surf_1[2*i] << " " << intpar_surf_1[2*i+1] << " " << intpar_surf_2[2*i] << " " << intpar_surf_2[2*i+1] << endl;
    cout << "Number of intersection curves detected: " << num_int_curves << endl;
    for (int i=0; i<num_int_curves; ++i)
      {
	int npt = intcurve[i]->ipoint;
	cout << intcurve[i]->epar1[0] << " " << intcurve[i]->epar1[1] << " " ;
	cout << intcurve[i]->epar2[0] << " " << intcurve[i]->epar2[1] << " " ;
	// evaluating (tracing out) intersection curves and writing them to file
	cout << intcurve[i]->epar1[2*(npt-1)] << " " << intcurve[i]->epar1[2*npt-1] << " " ;
	cout << intcurve[i]->epar2[2*(npt-1)] << " " << intcurve[i]->epar2[2*npt-1] << endl;
      }
    for (int i = 0; i < num_int_curves; ++i) {
      s1310(surf_1,          // the first surface
	    surf_2,          // the second surface
	    intcurve[i],     // pointer to the intersection curve object 
	    epsge,           // geometric tolerance
	    double(0),       // maximum step size (ignored if <= 0)
	    1,               // make only 3D curve (no 2D curve in parametric domain)
	    0,               // don't draw the curve
	    &jstat);
      if (jstat < 0) {
	throw runtime_error("Error occured inside call to SISL routine s1310.");
      } else if (jstat == 3) {
	throw runtime_error("Iteration stopped due to singular point or degenerate "
			    "surface.");
      }
      writeGoCurve(intcurve[i]->pgeom, os);
    }

    // cleaning up
    if (surf_1) freeSurf(surf_1);
    if (surf_2) freeSurf(surf_2);
    is_sf1.close();
    is_sf2.close();
    os.close();
    if (intpar_surf_1) free(intpar_surf_1);
    if (intpar_surf_2) free(intpar_surf_2);
    if (num_int_curves > 0)
      freeIntcrvlist(intcurve, num_int_curves);

  } catch (exception& e) {
    cerr << "Exception thrown: " << e.what() << endl;
    return 0;
  }

  return 1;
};


================================================
FILE: cmake/sislConfig.cmake.in
================================================
@PACKAGE_INIT@

include("${CMAKE_CURRENT_LIST_DIR}/sislTargets.cmake")

# Legacy compatibility
set(sisl_LIBRARIES sisl)

# Optional: make include dir available
set(sisl_INCLUDE_DIRS "@CMAKE_INSTALL_PREFIX@/include")


================================================
FILE: doc/manual/chap_curve_analysis.ilg
================================================
This is makeindex, version 2.14 [02-Oct-2002] (kpathsea + Thai support).
Scanning input file chap_curve_analysis.tex...
!! Input index error (file = chap_curve_analysis.tex, line = 1):
   -- Unknown index keyword \chapter.
!! Input index error (file = chap_curve_analysis.tex, line = 2):
   -- Unknown index keyword \label.
!! Input index error (file = chap_curve_analysis.tex, line = 4):
   -- Missing arguments -- need two (premature LFD).
!! Input index error (file = chap_curve_analysis.tex, line = 6):
   -- Unknown index keyword \section.
!! Input index error (file = chap_curve_analysis.tex, line = 7):
   -- Unknown index keyword \input.
!! Input index error (file = chap_curve_analysis.tex, line = 8):
   -- Missing arguments -- need two (premature LFD).
!! Input index error (file = chap_curve_analysis.tex, line = 9):
   -- Unknown index keyword \input.
!! Input index error (file = chap_curve_analysis.tex, line = 10):
   -- Missing arguments -- need two (premature LFD).
!! Input index error (file = chap_curve_analysis.tex, line = 11):
   -- Unknown index keyword \input.
!! Input index error (file = chap_curve_analysis.tex, line = 12):
   -- Missing arguments -- need two (premature LFD).
!! Input index error (file = chap_curve_analysis.tex, line = 13):
   -- Unknown index keyword \input.
!! Input index error (file = chap_curve_analysis.tex, line = 14):
   -- Missing arguments -- need two (premature LFD).
!! Input index error (file = chap_curve_analysis.tex, line = 15):
   -- Unknown index keyword \input.
!! Input index error (file = chap_curve_analysis.tex, line = 16):
   -- Missing arguments -- need two (premature LFD).
done (0 entries accepted, 14 rejected).
Nothing written in chap_curve_analysis.ind.
Transcript written in chap_curve_analysis.ilg.


================================================
FILE: doc/manual/chap_curve_analysis.ind
================================================


================================================
FILE: doc/manual/chap_curve_analysis.tex
================================================
\chapter{Curve Analysis}
\label{curveanalysis}

This chapter describes the Curve Analysis part.

\section{Curvature Evaluation}
\input{func/s2550}
\pgsbreak
\input{func/s2553}
\pgsbreak
\input{func/s2556}
\pgsbreak
\input{func/s2559}
\pgsbreak
\input{func/s2562}
\pgsbreak


================================================
FILE: doc/manual/chap_curve_definition.tex
================================================
\chapter{Curve Definition}
\label{curvedefinition}

This chapter describes all functions in the Curve Definition module.
\section{Interpolation}
In this section we treat different kinds of interpolation of
points or points and derivatives (Hermite). In addition to the general
functions there are functions to find fillet curves
(a curve between two other curves),
and blending curves (a curve between the end points of two other curves).
\input{func/s1602}
\pgsbreak
\input{func/s1356}
\pgsbreak
\input{func/s1357}
\pgsbreak
\input{func/s1380}
\pgsbreak
\input{func/s1379}
\pgsbreak
\input{func/s1607}
\pgsbreak
\input{func/s1608}
\pgsbreak
\input{func/s1609}
\pgsbreak
\input{func/s1014}
\pgsbreak
\input{func/s1015}
\pgsbreak
\input{func/s1016}
\pgsbreak
\input{func/s1606}
\pgsbreak
\section{Approximation}
Two kinds of curves are treated in this section.
The first is approximations of special shapes like
circles and conic segments.
The second is approximation of a point set, or offsets to curves.

Except for the point set approximation function, all functions
require a tolerance for the approximation.
Note that there is a close relationship
between the size of the tolerance and the amount of data
for the curve.
\input{func/s1303}
\pgsbreak
\input{func/s1611}
\pgsbreak
\input{func/s1630}
\pgsbreak
\input{func/s1360}
\pgsbreak
\input{func/s1613}
\pgsbreak
\input{func/s1600}
\pgsbreak
\section{Conversion}
\input{func/s1389}
\pgsbreak
\input{func/s1730}
\pgsbreak
\input{func/s1732}
\pgsbreak
\input{func/s1750}
\pgsbreak
\input{func/s1720}
\pgsbreak
\input{func/s1522}
\pgsbreak
\input{func/s1011}
\pgsbreak
\input{func/s1012}


================================================
FILE: doc/manual/chap_curve_interrogation.tex
================================================
\chapter{Curve Interrogation}
\label{curveinterrogation}
This chapter describes the functions in the Curve Interrogation module.
\section{Intersections}

\input{func/s1871}
\pgsbreak
\input{func/s1850}
\pgsbreak
\input{func/s1327}
\pgsbreak
\input{func/s1371}
\pgsbreak
\input{func/s1374}
\pgsbreak
\input{func/s1857}
\pgsbreak
\input{func/s1240}
\pgsbreak
\input{func/s1364}
\pgsbreak
\input{func/s1451}
\pgsbreak
\input{func/s1363}
\pgsbreak
\section{Closest Points}
\input{func/s1953}
\pgsbreak
\input{func/s1957}
\pgsbreak
\input{func/s1774}
\pgsbreak
\input{func/s1955}
\pgsbreak
\input{func/s1013}
\pgsbreak
\input{func/s1920}
\pgsbreak
\section{Area between Curve and Point}
\input{func/s1241}
\pgsbreak
\input{func/s1243}
\pgsbreak
\section{Bounding Box}
Both curves and surfaces have bounding boxes. These are boxes surrounding an object not only parallel to the main axis, but also rotated 45 degrees around each main axis. These bounding boxes are used by the intersection functions to decide if an intersection is possible or not. They might also be used to find the position of objects under other circumstances.
\input{sec_box_object}
\pgsbreak
\input{func/s1988}
\pgsbreak
\section {Normal Cone}
Both curves and surfaces have normal cones. These are the cones that are convex hull of all normalized tangents of a curve and all normalized normals of a surface.

These normal cones are used by the intersection functions to decide if only one intersection is possible. They might also be used to find directions of objects for other reasons.
\input{sec_cone_object}
\pgsbreak
\input{func/s1986}


================================================
FILE: doc/manual/chap_curve_utilities.tex
================================================
\chapter{Curve Utilities}
\label{curveutilities}
This chapter describes the Curve Utilities.
These are common to both the Curve Definition and Curve Interrogation modules.
\input{sec_curve_object}

\pgsbreak
\section{Evaluation}
\input{func/s1227}
\pgsbreak
\input{func/s1221}
\pgsbreak
\input{func/s1225}
\pgsbreak
\input{func/s1226}
\pgsbreak
\input{func/s1542}

\section {Subdivision}
\input{func/s1710}
\pgsbreak
\input{func/s1017}
\pgsbreak
\input{func/s1018}
\pgsbreak
\input{func/s1714}
\pgsbreak
\input{func/s1712}
\pgsbreak
\input{func/s1713}
\pgsbreak
\section{Joining}
\input{func/s1715}
\pgsbreak
\input{func/s1716}
\pgsbreak
\input{func/s1706}
\pgsbreak
\input{func/s1233}



================================================
FILE: doc/manual/chap_data_reduction.tex
================================================
\chapter{Data Reduction}
\label{datareduction}
\section{Curves}
\input{func/s1940}
\pgsbreak
\input{func/s1961}
\pgsbreak
\input{func/s1962}
\pgsbreak
\input{func/s1963}
\pgsbreak
\section{Surfaces}
\input{func/s1965}
\pgsbreak
\input{func/s1966}
\pgsbreak
\input{func/s1967}
\pgsbreak
\input{func/s1968}


================================================
FILE: doc/manual/chap_error_codes.tex
================================================
\chapter{Appendix: Error Codes}
\label{errorcodes}
For reference, here is a list of the error codes used in SISL.
They can be useful for diagnosing problems encountered
when calling SISL routines.
However please note that a small number of SISL routines
use their own convention.

\begin{verbatim}
Label Value  Description
--------------------------------------------------------------------------------
err101 -101  Error in memory allocation.

err102 -102  Error in input. Dimension less than 1.

err103 -103  Error in input. Dimension less than 2.

err104 -104  Error in input. Dimension not equal 3.

err105 -105  Error in input. Dimension not equal 2 or 3.

err106 -106  Error in input. Conflicting dimensions.

err107 -107  			

err108 -108  Error in input. Dimension not equal 2.

err109 -109  Error in input. Order less than 2.

err110 -110  Error in Curve description. Order less than 1.

err111 -111  Error in Curve description. Number of vertices less than order.

err112 -112  Error in Curve description. Error in knot vector.

err113 -113  Error in Curve description. Unknown kind of Curve.

err114 -114  Error in Curve description. Open Curve when expecting closed.

err115 -115  Error in Surf description. Order less than 1.

err116 -116  Error in Surf description. Number of vertices less than order.

err117 -117  Error in Surf description. Error in knot vector.

err118 -118  Error in Surf description. Unknown kind of Surf.

err119 -119

err120 -120  Error in input. Negative relative tolerance.

err121 -121  Error in input. Unknown kind of Object.

err122 -122  Error in input. Unexpected kind of Object found.

err123 -123  Error in input. Parameter direction does not exist.

err124 -124  Error in input. Zero length parameter interval.

err125 -125

err126 -126

err127 -127  Error in input. The whole curve lies on axis.

err128 -128

err129 -129

err130 -130  Error in input. Parameter value is outside parameter area.

err131 -131

err132 -132

err133 -133

err134 -134

err135 -135  Error in data structure.
             Intersection point exists when it should not.

err136 -136  Error in data structure.
             Intersection list exists when it should not.

err137 -137  Error in data structure.
             Expected intersection point not found.

err138 -138  Error in data structure.
             Wrong number of intersections on edges/endpoints.

err139 -139  Error in data structure.
             Edge intersection does not lie on edge/endpoint.

err140 -140  Error in data structure. Intersection interval crosses
             subdivision line when not expected to.
   						
err141 -141  Error in input. Illegal edge point requested.

err142 -142  

err143 -143

err144 -144  Unknown kind of intersection curve.

err145 -145  Unknown kind of intersection list (internal format).

err146 -146  Unknown kind of intersection type.

err147 -147

err148 -147

err149 -149

err150 -150  Error in input. NULL pointer was given.

err151 -151  Error in input. One or more illegal input values.

err152 -152  Too many knots to insert.

err153 -153  Lower level routine reported error. SHOULD use label "error".

err154 -154

err155 -155

err156 -156  Illegal derivative requested. Change this label to err178.

err157 -157

err158 -158  Intersection point outside Curve.

err159 -159  No of vertices less than 1. SHOULD USE err111 or err116.

err160 -160  Error in dimension of interpolation problem.

err161 -161  Error in interpolation problem.

err162 -162  Matrix may be noninvertible.

err163 -163  Matrix part contains diagonal elements.

err164 -164  No point conditions specified in interpolation problem.

err165 -165  Error in interpolation problem.

err166 -166

err167 -167

err168 -168

err169 -169

err170 -170  Internal error: Error in moving knot values.

err171 -171  Memory allocation failure: Could not create curve or surface.

err172 -172  Input error, inarr < 1 || inarr > 3.

err173 -173  Direction vector zero length.

err174 -174  Degenerate condition.

err175 -175  Unknown degree/type of implicit surface.

err176 -176  Unexpected iteration situation.

err177 -177  Error in input. Negative step length requested.

err178 -178  Illegal derivative requested.

err179 -179  No. of Curves < 2.

err180 -180  Error in torus description.

err181 -181  Too few points as input.

err182 -182

err183 -183  Order(s) specified to low.

err184 -184  Negative tolerance given.

err185 -185  Only degenerate or singular guide points.

err186 -186  Special error in traversal of curves.

err187 -187  Error in description of input curves.

err188 -188

err189 -189

err190 -190  Too small array for storing Curve segments.

err191 -191  Error in inserted parameter number.

err192 -192

err193 -193

err194 -194

err195 -195

err196 -196

err197 -197

err198 -198

err199 -199  Error in vectors?
\end{verbatim}


================================================
FILE: doc/manual/chap_intro_abridged.tex
================================================
\chapter{General Introduction}
\label{introduction}
SISL is a geometric toolkit to model with curves and surfaces. It is a
library of C functions to perform operations such as the definition,
intersection and evaluation of NURBS (Non-Uniform Rational B-spline)
geometries. Since many applications use implicit geometric
representation such as planes, cylinders, tori etc., SISL can also
handle the interaction between such geometries and NURBS.

\medskip
Throughout this manual, a distinction is made between NURBS (the
default) and B-splines. The term B-splines is used for non-uniform
non-rational (or polynomial) B-splines. B-splines are used only where it
does not make sense to employ NURBS (such as the approximation of a
circle by a B-spline) or in cases where the research
community has yet to develop stable technology for treating NURBS.
A NURBS require more memory space than a B-spline, even when the
extra degrees of freedom in a NURBS are not used. Therefore the routines
are specified to give B-spline output whenever the extra degrees of
freedom are not required.

Transferring a B-spline into NURBS format is done by constructing a new
coefficient vector using the original B-spline coefficients and setting
all the rational weights equal to one (1).
This new coefficient vector is then given as input to the routine for
creating a new curve/surface object while specifying that the object to
be created should be of the NURBS (rational B-spline) type.

To approximate a NURBS by a B-spline, use the offset calculation
routines with an offset of zero.

The routines in SISL are designed to function on curves and surfaces
which are at least continuously differentiable. However many routines
will also handle continuous curves and surfaces, including piecewise
linear ones.

\medskip
All arrays in SISL are 1-dimensional. In an array with points or vertices
are the points stored consecutively. In a raster are points or vertices
stored consecutively while points in the first parameter direction have
the shortest stride (stored right after each other). There is a special
rule for vertices given as input to a rational curve or surface, see the
Sections~\ref{sec:newCurve} and~\ref{sec:newSurf}.

The three important data structures used by SISL are SISLCurve,
SISLSurf, and SISLIntcurve. These are defined in the Curve Utilities,
Surface Utilities, and Surface Interrogation modules respectively. Other
structures are SISLBox and SISLCone, which represents a bounding box and
a normal cone, respectively. It is
important to remember to always free these structures and also to free
internally allocated structures and arrays used to pass results to the application,
otherwise strange errors might result.

In the construction of NURBS curves and surfaces is information on the order of the curve or
surface frequently required. The order is equal to the polynomial degree plus one.

The various functions are equipped with a status variable, typically
placed as the last entity in the parameter list. It returns information
about whether or not the function succeeded in its purpose. A negative
value means failure, the result zero means success while a positive
number is a warning. Section~\ref{errorcodes} provides a list over
possible error messages where most occurances are explained. 

\medskip
SISL is divided into seven modules, partly in order to provide a logical
structure, but also to enable users with a specific application to use
subsets of SISL. There are three modules dealing with curves, three with
surfaces, and one module to perform data reduction on curves and
surfaces. The modules for
curves and surfaces focus on functions for creation and definition,
intersection and interrogation, and general utilities.

The chapters 3 to 11 in this manual contain information concerning the top
level functions of each module. Lower level functions not usually
required by an application are not included. Each top level function is
documented by describing the purpose, the input and output arguments and
an example of use. Input parameters specified in the examples are suggestions, the
actual values must be set dependent on context. The geometric tolerance tells when
two points are regarded as equal. This implies that a large tolerance leads to
higher data size in approximaation type functionality such as s1360, offset curve.
In surface-surface intersections, on the other hand, will a large tolerance imply
that there is a large area around an intersection curve where the two surfaces are
closer than the tolerance, which may lead to unstability in tangential situations.
In the examples is the suggested tolerance stricter for intersection functionality
than in other cases. However, the intersection tolerance must reflect the accuracy
in which the associated geometry entities are constructed.
To get you started, this chapter contains an Example Program.

%\vfill
%\newpage

\section{\label{syntax}C Syntax Used in Manual}
This manual uses the K\&R style C syntax for historic reasons, but both
the ISO/ANSI and the K\&R C standards are supported by the library and
the include files.

\section{\label{dynamic}Dynamic Allocation in SISL}
In the description of all the functions in this manual, a
convention exists on when to declare or allocate arrays/objects outside a
function and when an array is allocated internally.
{\em NB! When memory for output arrays/objects are allocated inside a function you
must remember to free the allocated memory when it is not in use any
more.}

The convention is the following:
\begin{itemize}
\item If $[\,]$ is used in the synopsis and in the example it means
that the array has to be declared or allocated outside the function.
\item If $*$ is used it means that the function requires a
pointer and that the allocation will be done outside the function if necessary.
\item When either an array or an array of pointers or an object is to be
allocated in a function, two or three stars are used in the
synopsis.
To use the function you declare the parameter with one star less and use  \&
in the argument list.
\item For all output variables except arrays or objects
that are declared or allocated  outside the function you have to use \&
in the argument list.
\end{itemize}


\vfill
\newpage
\vfill
\newpage
\section{Creating the library}

In order to access SISL from your program you need one library inclusion, namely
the header file sisl.h. The statement
\begin{verbatim}
#include "sisl.h"
\end{verbatim}
must be written at the top of your main program.
In this header file all types
are defined.
It also contains all the
SISL top level function declarations.
Memory management and input/output require two more includes to avoid compiler warnings,
see Section~\ref{sec:exampleprog}.

SISL is prepared for makefile generation with CMake and equipped with a CMakeLists.txt file.
For information on using CMake, see www.cmake.org. The building procedure depends on whether your platform is
Linux or Windows.

\medskip
    {\noindent \bf LINUX}

Start by creating a build directory:
\begin{verbatim}
$ cd <path_to_source_code>
$ mkdir build
$ cd build
\end{verbatim}

Run the cmake program to setup the build process, selecting Debug or Release
as build type, optionally selecting a local install folder:
\begin{verbatim}
$ cmake .. -DCMAKE_BUILD_TYPE=Release (-DCMAKE_INSTALL_PREFIX=$HOME/install)
\end{verbatim}

For a gui-like cmake interface use ccmake (from cmake-ncurses-gui) or cmake-gui (from cmake.org).

Build the library:
\begin{verbatim}
$ make
\end{verbatim}
This will install the library in the build folder. Compilation and build of one particular
example program is done by a specific make statement:
\begin{verbatim}
$ make example01
\end{verbatim}
This option requires compilation of examples to be set in the Makefile.

Install the library to a local folder (requires the use of
-DCMAKE\_INSTALL\_PREFIX with a local folder in the previous step):
\begin{verbatim}
$ make install
\end{verbatim}

If the -DCMAKE\_INSTALL\_PREFIX in the cmake step was omitted or was set to a
system folder (like /usr/local) the user needs elevated privileges to install
the library:
\begin{verbatim}
$ sudo make install
\end{verbatim}

\medskip
{\noindent \bf Windows}

Add a new build folder somewhere. Start the CMake
executable and fill in the paths to the source and build folders. When
you run CMake, a Visual Studio project solution file will be generated
in the build folder.



\newpage
\section{An Example Program} \label{sec:exampleprog}

To clarify the previous section here is an example program designed to
test the SISL algorithm for intersecting a cone with
a B-spline curve. The program calls the SISL routines newCurve() documented in
Section ~\ref{sec:newCurve}, freeCurve() documented in~\ref{sec:freeCurve},
s1373() found in Section~\ref{sec:s1373} and freeIntcrvlist() in~\ref{sec:freeIntcrvlist}.

\begin{verbatim}
#include "sisl.h"
#include <stdlib.h>  
#include <stdio.h>

int main()
{
  SISLCurve *pc=0;                    /* Pointer to spline curve */
  double aepsco,aepsge;               /* Tolerances */
  double top[3],axispt[3],conept[3];  /* Representating the cone */
  double st[100],scoef[100];          /* Knot vector and coefficients of spline curve */
  double *spar;                       /* Parameter values of intersection points */
  int kstat;                          /* Return status from function calls */
  int cone_exists=0;
  int kk,kn,kdim;                     /* Order (polynomial degree+1), number of 
                                         coefficients and spatial dimension */
  int ki;                             /* Counter */
  int kpt,kcrv;                       /* Number of intersection points and curves */
  SISLIntcurve **qrcrv;               /* Array of pointer to intersection curves  */
  char ksvar[100];                    
  kdim=3;
  aepsge=0.001; /* Geometric tolerance */
  aepsco=0.000001; /* Computational tolerance. This parameter is included from 
                      historical reasons and no longer used */

  ksvar[0] = '0';  /* Arbitrary character */
  while (ksvar[0] != 'q')
    {
      printf("\n cu - define a new B-spline curve");
      printf("\n co - define a new cone");
      printf("\n i - intersect the B-spline curve with the cone");
      printf("\n q - quit");
      printf("\n> ");
      scanf("%s",ksvar);

      if (ksvar[0] == 'c' && ksvar[1] == 'u')
        {
          /* Define spline curve */
          printf("\n Give number of vertices, order of curve: ");
          scanf("%d %d", &kn, &kk);
          printf("Give knots values in ascending order: \n");
          for (ki=0; ki<kn+kk; ki++)
            {
               scanf("%lf",&st[ki]);
            }
          printf("Give vertices \n");
          for (ki=0; ki<kn*kdim; ki++)
            {
              scanf("%lf",&scoef[ki]);
            }
         if(pc) freeCurve(pc);

          /* Create curve */
          pc = newCurve(kn,kk,st,scoef,1,kdim,1);
        }
      else if (ksvar[0] == 'c' && ksvar[1] == 'o')
       {
         printf("\n Give top point: ");
         scanf("%lf %lf %lf",&top[0],&top[1],&top[2]);
         printf("\n Give a point on the axis: ");
         scanf("%lf %lf %lf",&axispt[0],&axispt[1],&axispt[2]);
         printf("\n Give a point on the cone surface: ");
         scanf("%lf %lf %lf",&conept[0],&conept[1],&conept[2]);
         cone_exists=1;
       }
      else if (ksvar[0] == 'i' && cone_exists && pc)
       {
         /* Intersect spline curve with cone */
         s1373(pc,top,axispt,conept,kdim,aepsco,aepsge,
               &kpt,&spar,&kcrv,&qrcrv,&kstat);
         printf("\n kstat %d",kstat);
         printf("\n kpt %d",kpt);
         printf("\n kcrv %d",kcrv);
         for (ki=0;ki<kpt;ki++)
          {
            printf("\nIntersection point %lf",spar[ki]);
          }
        if (spar)
          {
            /* The array containing parameter values of the intersection points between
               the curve and the cone is allocated inside s1373 and must be freed */
            free (spar);
            spar=0;
          }
        if (qrcrv)
         {
           /* The array containing pointers to intersection points curves between
              the curve and the cone is allocated inside s1373 and must be freed.
              This is done in a special function taking care of the intersection
              curves themselves */
          freeIntcrvlist(qrcrv,kcrv);
          qrcrv=0;
        }
      }
    }
  return 0;
}

\end{verbatim}
Note that sisl.h is included. stdlib.h is included to declare free, which
releases memory allocated in the function s1373. stdio.h declares printf and
scanf.

\bigskip

The program was compiled and built using the command:
\begin{verbatim}
$ make prog1
\end{verbatim}
Note that the program must be placed in the app folder and sisl\_COMPILE\_APPS must be set to true.

A sample run of prog1 went as follows:
\begin{verbatim}
$ prog1

     cu - define a new B-spline curve
     co - define a new cone
     i  - intersect the B-spline curve with the cone
     q  - quit
> cu

 Give number of vertices, order of curve: 2 2
Give knots values in ascending order:
0 0 1 1
Give vertices
1 0 0.5
-1 0 0.5

     cu - define a new B-spline curve
     co - define a new cone
     i  - intersect the B-spline curve with the cone
     q  - quit
> co

 Give top point: 0 0 1

 Give a point on the axis: 0 0 0

 Give a point on the cone surface: 1 0 0

     cu - define a new B-spline curve
     co - define a new cone
     i  - intersect the B-spline curve with the cone
     q  - quit
> i

 kstat 0
 kpt   2
 kcrv  0
Intersection point 0.250000
Intersection point 0.750000
     cu - define a new B-spline curve
     co - define a new cone
     i  - intersect the B-spline curve with the cone
     q  - quit
> q
$
\end{verbatim}
SISL found two intersection points given by the parameters
$0.25$ and $0.75$. These parameters correspond to the 3D points
$(-0.5,0,0.5)$ and $(0.5,0,0.5)$ (which could be found by calling
the evaluation routine s1221()). They lie on both
the B-spline curve and the cone --- as expected!

\input{sec_spline_curve}
\input{sec_spline_surface}

\vfill
\newpage
%\mbox{}
%\newpage


================================================
FILE: doc/manual/chap_introduction.tex
================================================
\chapter{Introduction}
\label{introduction}
SISL is a geometric toolkit to model with curves and surfaces. It is a
library of C functions to perform operations such as the definition,
intersection and evaluation of NURBS (Non-Uniform Rational B-spline)
geometries. Since many applications use implicit geometric
representation such as planes, cylinders, tori etc., SISL can also
handle the interaction between such geometries and NURBS.

\medskip
Throughout this manual, a distinction is made between NURBS (the
default) and B-splines. The term B-splines is used for non-uniform
non-rational (or polynomial) B-splines. B-splines are used only where it
does not make sense to employ NURBS (such as the approximation of a
circle by a B-spline) or in cases where the research
community has yet to develop stable technology for treating NURBS.
A NURBS require more memory space than a B-spline, even when the
extra degrees of freedom in a NURBS are not used. Therefore the routines
are specified to give B-spline output whenever the extra degrees of
freedom are not required.

Transferring a B-spline into NURBS format is done by constructing a new
coefficient vector using the original B-spline coefficients and setting
all the rational weights equal to one (1).
This new coefficient vector is then given as input to the routine for
creating a new curve/surface object while specifying that the object to
be created should be of the NURBS (rational B-spline) type.

To approximate a NURBS by a B-spline, use the offset calculation
routines with an offset of zero.

The routines in SISL are designed to function on curves and surfaces
which are at least continuously differentiable. However many routines
will also handle continuous curves and surfaces, including piecewise
linear ones.

\medskip
All arrays in SISL are 1-dimensional. In an array with points or vertices
are the points stored consecutively. In a raster are points or vertices
stored consecutively while points in the first parameter direction have
the shortest stride (stored right after each other). There is a special
rule for vertices given as input to a rational curve or surface, see the
Sections~\ref{sec:newCurve} and~\ref{sec:newSurf}.

The three important data structures used by SISL are SISLCurve,
SISLSurf, and SISLIntcurve. These are defined in the Curve Utilities,
Surface Utilities, and Surface Interrogation modules respectively. Other
structures are SISLBox and SISLCone, which represents a bounding box and
a normal cone, respectively. It is
important to remember to always free these structures and also to free
internally allocated structures used to pass results to the application,
otherwise strange errors might result.

The various functions are equipped with a status variable, typically
placed as the last entity in the parameter list. It returns information
about whether or not the function succeeded in its purpose. A negative
value means failure, the result zero means success while a positive
number is a warning. Section~\ref{errorcodes} provides a list over
possible error messages where most occurances are explained. 

\medskip
SISL is divided into seven modules, partly in order to provide a logical
structure, but also to enable users with a specific application to use
subsets of SISL. There are three modules dealing with curves, three with
surfaces, and one module to perform data reduction on curves and
surfaces. The modules for
curves and surfaces focus on functions for creation and definition,
intersection and interrogation, and general utilities.

The chapters in this manual contains information concerning the top
level functions of each module. Lower level functions not usually
required by an application are not included. Each top level function is
documented by describing the purpose, the input and output arguments and
an example of use. To get you started, this chapter contains an Example
Program.

\medskip
SISL is a mature library that is no longer subject to the introduction of new functionality.
This version of the library differ from the previous one by bug fixing and
an update of the documentation. SINTEF Mathematics and Cybernetics provide, in
addition to SISL, GoTools. This is a collection of geometry libraries written
in C++ that complements SISL. New geometry software development is integrated
into GoTools. Corresponding geometry entities like NURBS curves and surfaces
have different representations in SISL and GoTools, but conversion
functionality exist and is placed in GoTools as well as a viewer of a set of geometry
entities including NURBS curves and surfaces. An overview of the interplay
between SISL and GoTools will be provided in the end of this document.


%\vfill
%\newpage

\section{\label{syntax}C Syntax Used in Manual}
This manual uses the K\&R style C syntax for historic reasons, but both
the ISO/ANSI and the K\&R C standards are supported by the library and
the include files.

\section{\label{dynamic}Dynamic Allocation in SISL}
In the description of all the functions in this manual, a
convention exists on when to declare or allocate arrays/objects outside a
function and when an array is allocated internally.
{\em NB! When memory for output arrays/objects are allocated inside a function you
must remember to free the allocated memory when it is not in use any
more.}

The convention is the following:
\begin{itemize}
\item If $[\,]$ is used in the synopsis and in the example it means
that the array has to be declared or allocated outside the function.
\item If $*$ is used it means that the function requires a
pointer and that the allocation will be done outside the function if necessary.
\item When either an array or an array of pointers or an object is to be
allocated in a function, two or three stars are used in the
synopsis.
To use the function you declare the parameter with one star less and use  \&
in the argument list.
\item For all output variables except arrays or objects
that are declared or allocated  outside the function you have to use \&
in the argument list.
\end{itemize}


\vfill
\newpage
\section{Creating the library}

In order to access SISL from your program you need one library inclusion, namely
the header file sisl.h. The statement
\begin{verbatim}
#include "sisl.h"
\end{verbatim}
must be written at the top of your main program.
In this header file all types
are defined.
It also contains all the
SISL top level function declarations.
Memory management and input/output require two more includes to avoid compiler warnings,
see Section~\ref{sec:exampleprog}.

SISL is prepared for makefile generation with CMake and equipped with a CMakeLists.txt file.
For information on using CMake, see www.cmake.org. The building procedure depends on whether your platform is
Linux or Windows.

\medskip
    {\noindent \bf LINUX}

Start by creating a build directory:
\begin{verbatim}
$ cd <path_to_source_code>
$ mkdir build
$ cd build
\end{verbatim}

Run the cmake program to setup the build process, selecting Debug or Release
as build type, optionally selecting a local install folder:
\begin{verbatim}
$ cmake .. -DCMAKE_BUILD_TYPE=Release (-DCMAKE_INSTALL_PREFIX=$HOME/install)
\end{verbatim}

For a gui-like cmake interface use ccmake (from cmake-ncurses-gui) or cmake-gui (from cmake.org).

Build the library:
\begin{verbatim}
$ make
\end{verbatim}
This will install the library in the build folder. Compilation and build of one particular
example program is done by a specific make statement:
\begin{verbatim}
$ make example01
\end{verbatim}
This option requires compilation of examples to be set in the Makefile.

Install the library to a local folder (requires the use of
-DCMAKE\_INSTALL\_PREFIX with a local folder in the previous step):
\begin{verbatim}
$ make install
\end{verbatim}

If the -DCMAKE\_INSTALL\_PREFIX in the cmake step was omitted or was set to a
system folder (like /usr/local) the user needs elevated privileges to install
the library:
\begin{verbatim}
$ sudo make install
\end{verbatim}

\medskip
{\noindent \bf Windows}

Add a new build folder somewhere. Start the CMake
executable and fill in the paths to the source and build folders. When
you run CMake, a Visual Studio project solution file will be generated
in the build folder.



\newpage
\section{An Example Program} \label{sec:exampleprog}

To clarify the previous section here is an example program designed to
test the SISL algorithm for intersecting a cone with
a B-spline curve. The program calls the SISL routines newCurve() documented in
Section ~\ref{sec:newCurve}, freeCurve() documented in~\ref{sec:freeCurve},
s1373() found in Section~\ref{sec:s1373} and freeIntcrvlist() in~\ref{sec:freeIntcrvlist}.

\begin{verbatim}
#include "sisl.h"
#include <stdlib.h>  
#include <stdio.h>

int main()
{
  SISLCurve *pc=NULL;                 /* Pointer to spline curve */
  double aepsco,aepsge;               /* Tolerances */
  double top[3],axispt[3],conept[3];  /* Representating the cone */
  double st[100],scoef[100];          /* Knot vector and coefficients of spline curve */
  double *spar=NULL;                  /* Parameter values of intersection points */
  int kstat;                          /* Return status from function calls */
  int cone_exists=0;
  int kk,kn,kdim;                     /* Order (polynomial degree+1), number of 
                                         coefficients and spatial dimension */
  int ki;                             /* Counter */
  int kpt,kcrv;                       /* Number of intersection points and curves */
  SISLIntcurve **qrcrv=NULL;          /* Array of pointer to intersection curves  */
  char ksvar[100];                    
  kdim=3;
  aepsge=0.001; /* Geometric tolerance */
  aepsco=0.000001; /* Computational tolerance. This parameter is included from 
                      historical reasons and no longer used */

  ksvar[0] = '0';  /* Arbitrary character */
  while (ksvar[0] != 'q')
    {
      printf("\n cu - define a new B-spline curve");
      printf("\n co - define a new cone");
      printf("\n i - intersect the B-spline curve with the cone");
      printf("\n q - quit");
      printf("\n> ");
      scanf("%s",ksvar);

      if (ksvar[0] == 'c' && ksvar[1] == 'u')
        {
          /* Define spline curve */
          printf("\n Give number of vertices, order of curve: ");
          scanf("%d %d", &kn, &kk);
          printf("Give knots values in ascending order: \n");
          for (ki=0; ki<kn+kk; ki++)
            {
               scanf("%lf",&st[ki]);
            }
          printf("Give vertices \n");
          for (ki=0; ki<kn*kdim; ki++)
            {
              scanf("%lf",&scoef[ki]);
            }
         if(pc) freeCurve(pc);

          /* Create curve */
          pc = newCurve(kn,kk,st,scoef,1,kdim,1);
        }
      else if (ksvar[0] == 'c' && ksvar[1] == 'o')
       {
         printf("\n Give top point: ");
         scanf("%lf %lf %lf",&top[0],&top[1],&top[2]);
         printf("\n Give a point on the axis: ");
         scanf("%lf %lf %lf",&axispt[0],&axispt[1],&axispt[2]);
         printf("\n Give a point on the cone surface: ");
         scanf("%lf %lf %lf",&conept[0],&conept[1],&conept[2]);
         cone_exists=1;
       }
      else if (ksvar[0] == 'i' && cone_exists && pc)
       {
         /* Intersect spline curve with cone */
         s1373(pc,top,axispt,conept,kdim,aepsco,aepsge,
               &kpt,&spar,&kcrv,&qrcrv,&kstat);
         printf("\n kstat %d",kstat);
         printf("\n kpt %d",kpt);
         printf("\n kcrv %d",kcrv);
         for (ki=0;ki<kpt;ki++)
          {
            printf("\nIntersection point %lf",spar[ki]);
          }
        if (spar)
          {
            /* The array containing parameter values of the intersection points between
               the curve and the cone is allocated inside s1373 and must be freed */
            free (spar);
            spar=NULL;
          }
        if (qrcrv)
         {
           /* The array containing pointers to intersection points curves between
              the curve and the cone is allocated inside s1373 and must be freed.
              This is done in a special function taking care of the intersection
              curves themselves */
          freeIntcrvlist(qrcrv,kcrv);
          qrcrv=NULL;
        }
      }
    }
  return 0;
}

\end{verbatim}
Note that sisl.h is included. stdlib.h is included to declare free, which
releases memory allocated in the function s1373. stdio.h declares printf and
scanf.

\bigskip

The program was compiled and built using the command:
\begin{verbatim}
$ make prog1
\end{verbatim}
Note that the program must be placed in the app folder and sisl\_COMPILE\_APPS must be set to true.

A sample run of prog1 went as follows:
\begin{verbatim}
$ prog1

     cu - define a new B-spline curve
     co - define a new cone
     i  - intersect the B-spline curve with the cone
     q  - quit
> cu

 Give number of vertices, order of curve: 2 2
Give knots values in ascending order:
0 0 1 1
Give vertices
1 0 0.5
-1 0 0.5

     cu - define a new B-spline curve
     co - define a new cone
     i  - intersect the B-spline curve with the cone
     q  - quit
> co

 Give top point: 0 0 1

 Give a point on the axis: 0 0 0

 Give a point on the cone surface: 1 0 0

     cu - define a new B-spline curve
     co - define a new cone
     i  - intersect the B-spline curve with the cone
     q  - quit
> i

 kstat 0
 kpt   2
 kcrv  0
Intersection point 0.250000
Intersection point 0.750000
     cu - define a new B-spline curve
     co - define a new cone
     i  - intersect the B-spline curve with the cone
     q  - quit
> q
$
\end{verbatim}
SISL found two intersection points given by the parameters
$0.25$ and $0.75$. These parameters correspond to the 3D points
$(-0.5,0,0.5)$ and $(0.5,0,0.5)$ (which could be found by calling
the evaluation routine s1221()). They lie on both
the B-spline curve and the cone --- as expected!

\input{sec_spline_curve}
\input{sec_spline_surface}

\vfill
\newpage
%\mbox{}
%\newpage


================================================
FILE: doc/manual/chap_surface_analysis.tex
================================================
\chapter{Surface Analysis}
\label{surfaceanalysis}
This chapter describes the Surface Analysis part.
\section{Curvature Evaluation}
\input{func/s2500}
\pgsbreak
\input{func/s2502}
\pgsbreak
\input{func/s2504}
\pgsbreak
\input{func/s2506}
\pgsbreak
\input{func/s2508}
\pgsbreak
\input{func/s2510}
\pgsbreak
\input{func/s2532}
\pgsbreak
\input{func/s2536}
\pgsbreak
\input{func/s2540}
\pgsbreak
\input{func/s2542}
\pgsbreak
\input{func/s2544}
\pgsbreak
\input{func/s2545}
\pgsbreak


================================================
FILE: doc/manual/chap_surface_definition.tex
================================================
\chapter{Surface Definition}
\label{surfacedefinition}
\section{Interpolation}
\input{func/s1536}
\pgsbreak
\input{func/s1537}
\pgsbreak
\input{func/s1534}
\pgsbreak
\input{func/s1535}
\pgsbreak
\input{func/s1529}
\pgsbreak
\input{func/s1530}
\pgsbreak
\input{func/s1538}
\pgsbreak
\input{func/s1539}
\pgsbreak
\input{func/s1508}
\pgsbreak
\input{func/s1390}
\pgsbreak
\input{func/s1391}
\pgsbreak
\input{func/s1401}
\pgsbreak
\section{Approximation}
Two kinds of surfaces are treated in this section. The first is
approximation of special shape properties like rotation or sweeping. The
second is offsets to surfaces.

All functions require a tolerance for use in the approximation. It is
useful to note that there is a close relation between the size of the
tolerance and the amount of data for the surface.
\input{func/s1620}
\pgsbreak
\input{func/s1332}
\pgsbreak
\input{func/s1302}
\pgsbreak
\input{func/s1365}
\pgsbreak
%\section{Mirror a Surface} Moved into func/s1601.tex
\input{func/s1601}
\pgsbreak
\section{Conversion}
\input{func/s1388}
\pgsbreak
\input{func/s1731}
\pgsbreak
\input{func/s1733}
\pgsbreak
\input{func/s1387}
\pgsbreak
\input{func/s1386}
\pgsbreak
\input{func/s1023}
\pgsbreak
\input{func/s1021}
\pgsbreak
\input{func/s1024}
\pgsbreak
\input{func/s1022}
\vfill
\newpage


================================================
FILE: doc/manual/chap_surface_interrogation.tex
================================================
\chapter{Surface Interrogation}
\label{surfaceinterrogation}
This chapter describes the functions in the Surface Interrogation module.

\input{sec_intcurve_object}
\pgsbreak

\section{Find the Intersections}
Intersection functionality where at least one of the input geometry entities is or can be a surface.
\input{func/s1850}
\pgsbreak
\input{func/s1371}
\pgsbreak
\input{func/s1372}
\pgsbreak
\input{func/s1373}
\pgsbreak
\input{func/s1502}
\pgsbreak
\input{func/s1375}
\pgsbreak
\input{func/s1870}
\pgsbreak
\input{func/s1856}
\pgsbreak
\input{func/s1518}
\pgsbreak
\input{func/s1328}
\pgsbreak
\input{func/s1855}
\pgsbreak
\input{func/s1858}
\pgsbreak
\section{Find the Topology of the Intersection}
\input{func/s1851}
\pgsbreak
\input{func/s1852}
\pgsbreak
\input{func/s1853}
\pgsbreak
\input{func/s1854}
\pgsbreak
\input{func/s1503}
\pgsbreak
\input{func/s1369}
\pgsbreak
\input{func/s1859}
\pgsbreak
\section{Find the Topology of a Silhouette}
\input{func/s1860}
\pgsbreak
\input{func/s1510}
\pgsbreak
\input{func/s1511}
\pgsbreak
\section{Marching}
\input{func/s1314}
\pgsbreak
\input{func/s1315}
\pgsbreak
\input{func/s1316}
\pgsbreak
\input{func/s1317}
\pgsbreak
\input{func/s1501}
\pgsbreak
\input{func/s1318}
\pgsbreak
\input{func/s1310}
\pgsbreak
\section{Marching of Silhouettes}
\input{func/s1319}
\pgsbreak
\input{func/s1514}
\pgsbreak
\input{func/s1515}
\pgsbreak
% \section{Closed or Degenerate Edges} %, moved into s1450.tex
\input{func/s1450}
\pgsbreak
\input{func/s1603}
\pgsbreak
\section{Closest Points}
\input{func/s1954}
\pgsbreak
\input{func/s1958}
\pgsbreak
\input{func/s1775}
\pgsbreak
% \section{Calculation of Absolute Extremals on a NURBS Surface} %,
% moved into s1921.tex
\input{func/s1921}
\pgsbreak
\section{Bounding Box}
Both curves and surfaces have bounding boxes. These are boxes surrounding an object not only parallel to the main axis, but also rotated 45 degrees around each main axis. These bounding boxes are used by the intersection functions to decide if an intersection is possible or not. They might also be used to find the position of objects under other circumstances. The bounding box object and corresponding initialization functionality ar described in Section~\ref{sec:bbox} at pages \pageref{SISLBox} and \pageref{newbox}.
\input{func/s1989}
\pgsbreak
\section{Normal Cone}
Both curves and surfaces have normal cones. These are the cones that are convex hull of all normalized tangents of a curve and all normalized normals of a surface.

These normal cones are used by the intersection functions to decide if only one intersection is possible. They might also be used to find directions of objects for other reasons. The direction cone object and corresponding initialization functionality ar described in Section~\ref{sec:dcone} at pages \pageref{SISLDir} and \pageref{newdir}.
\input{func/s1987}


================================================
FILE: doc/manual/chap_surface_utilities.tex
================================================
\chapter{Surface Utilities}
\label{surfaceutilities}
This chapter describes the Surface Utilities. These are common to both
the Surface Definition and Surface Interrogation modules.

\input{sec_surface_object}
\pgsbreak
\section{Evaluation}
\input{func/s1421}
\pgsbreak
\input{func/s1424}
\pgsbreak
\input{func/s1422}
\pgsbreak
\input{func/s1425}
\pgsbreak
\input{func/s1506}
\pgsbreak
\section{Subdivision}
\input{func/s1711}
\pgsbreak
\input{func/s1025}
\pgsbreak
\section{Picking Curves from a Surface}
\input{func/s1439}
\pgsbreak
\input{func/s1383}
\pgsbreak
\input{func/s1001}
\pgsbreak
\input{func/s1440}


================================================
FILE: doc/manual/foreword.tex
================================================
\chapter{Preface}
Welcome to the SISL 4.7 user's manual.  SISL stands for
\emph{\textbf{Si}ntef \textbf{S}pline \textbf{L}ibrary}, and has been gradually 
developed and enhanced for more than three decades by the geometry group at SINTEF in Oslo.
Although it is very comprehensive, its organisation is simple.  There are but a 
few structures, and its nearly four hundred main functions can usually be employed
directly and individually. This manual organises and explains the main routines.  However, much of this
information can also be found directly in the code in the form of commentaries.

The complete software package you have in your hands should contain the following:
\begin{itemize}
\item The SISL 4.7 distribution and reference guide (the document you are reading now)
\item Supplementary routines for writing SISL objects to streams (including file 
streams) in a simple ASCII format called \textbf{\Verb/Go/}.
\item A selection of \emph{sample programs}, designed to demonstrate functionalities
and use of SISL.
\item Source code for a simple \emph{viewer} that can be used to view geometric objects stored
in the \Verb/Go/-format.  This allows visual inspection of SISL-generated curves
and surfaces, as well as points.
\end{itemize}

\section{The structure of this document}
\textbf{Chapter 2} is a general introduction to SISL and its programming style. A simple example program
including instructions in how to compile and link the program and the expected output is provided.
Since it is strongly recommended that the user has some general knowledge of splines, this 
chapter also contains a couple of sections introducing the subject of spline curves and
surfaces. \\
\\
\textbf{Chapter 3 to 11} presents the main SISL routines.  \\
\\
\textbf{Chapter 12} goes through the provided sample programs and explain what these do,
and what the user can expect to learn from them.  There are a total of 15 sample 
programs, ranging from very basic to intermediate complexity.\\
\\
The goal of \textbf{Chapter 13} is to explain the use of the \emph{viewer program}, 
which is a small but handy tool for visually inspecting results from SISL routines.\\
\\
\textbf{Chapter 14} is an appendix presenting an explanation of the error codes used in SISL.\\
\\
Finally there is an \textbf{annex}, citing the text of the General Public License.

\section{The structure of the software package}\label{compile}
There are seven directories:
\begin{itemize}
\item \textbf{\Verb-include/-} - the inlude files related to the 4.7 release of SISL.
\item \textbf{\Verb-src/-} - the source code of the 4.7 release of SISL.
\item \textbf{\Verb-doc/-} - the basis for this document. 
\item \textbf{\Verb-streaming/-} - source code for the routines that can read and write
SISL objects to a stream.
\item \textbf{\Verb-examples/-} - sample programs making use of the SISL 4.7 source code.
\item \textbf{\Verb-viewer/-} - source code for a viewer that can be used to view SISL 
  objects saved in the \verb/Go/-format.
\item \textbf{\Verb-app/-} - the expected directory for test programs and applications. A
  couple of applications are provided including the example program described in Chapter 2.
\end{itemize}
Furthermore is the file CMakeLists.txt provided to facilitate building the library.

\section{Licensing information}
SISL is distributed under the \emph{GNU Affero General Public License} (aGPL).  The license text 
is given in its entirety as an annex to this document.  Commercial licenses are also
available from SINTEF.  You can contact Tor Dokken (tor.dokken@sintef.no) for more
information.

%% *what is included in this distibution
%% *explain chapters
%% *the manual
%% *licensing information
%% *compilation
%% *the object viewer


================================================
FILE: doc/manual/func/copyCurve.tex
================================================
\subsection{Make a copy of a curve.}
\funclabel{copyCurve}
\begin{minipg1}
Make a copy of a curve.
\end{minipg1}\\ \\
SYNOPSIS\\
        \>SISLCurve *copyCurve(\begin{minipg3}
          {\fov pcurve})
        \end{minipg3}\\[0.3ex]
        \>\>    SISLCurve \> *{\fov pcurve};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov pcurve}    \> - \> Curve to be copied.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov copyCurve} \> - \> The new curve.\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLCurve \> *{\fov curvecopy} = NULL;\\
        \>\>    SISLCurve \> *{\fov curve} = NULL;\\
        \>\>    int       \> {\fov number} = 10;\\
        \>\>    int       \> {\fov order} = 4;\\
        \>\>    double    \> {\fov knots}[14]; \,/* Must be defined */\\
        \>\>    double    \> {\fov coef}[30]; \, /* Must be defined */\\
        \>\>    int       \> {\fov kind} = 1; /* Non-rational */ \\
        \>\>    int       \> {\fov dim} = 3;\\
        \>\>    int       \> {\fov copy} = 1;\\
        \>\>    \ldots \\
        \>\>curve = newCurve(\begin{minipg4}
          {\fov number}, {\fov order}, {\fov knots}, {\fov coef}, {\fov kind}, {\fov dim}, {\fov copy});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>\>curvecopy = copyCurve(\begin{minipg4}
          {\fov curve});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/copySurface.tex
================================================
\subsection{Make a copy of a surface object.}
\funclabel{copySurface}
\begin{minipg1}
  Make a copy of a SISLSurface object.
\end{minipg1}\\ \\
SYNOPSIS\\
        \>SISLSurf *copySurface(\begin{minipg3}
          {\fov psurf})
        \end{minipg3}\\[0.3ex]
        \>\>    SISLSurf *{\fov psurf};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov psurf}\> - \>  \begin{minipg2}
                      Surface to be copied.
                               \end{minipg2}\\
\\
        \>Output Arguments:\\
        \>\>    {\fov copySurface}\> - \>  \begin{minipg2}
                     The new surface.
                               \end{minipg2}\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLSurf\>      {\fov *surfcopy} = NULL;\\
        \>\>    SISLSurf\>      {\fov *surf} = NULL;\\
        \>\>    int    \>       {\fov number1} = 5;\\
        \>\>    int    \>       {\fov number2} = 4;\\
        \>\>    int    \>       {\fov order1} = 4;\\
        \>\>    int    \>       {\fov order2} = 3;\\
        \>\>    double \>       {\fov knot1}[9];\\
        \>\>    double \>       {\fov knot2}[7];\\
        \>\>    double \>       {\fov coef}[60];\\
        \>\>    int    \>       {\fov kind} = 1;\\
        \>\>    int    \>       {\fov dim} = 3;\\
        \>\>    int    \>       {\fov copy} = 1;\\
        \>\>    \ldots \\
        \>\>{\fov surf} = newSurf(\begin{minipg4}
          {\fov number}1, {\fov number}2, {\fov order}1, {\fov order}2, {\fov knot}1, {\fov knot}2,\\ {\fov coef}, {\fov kind}, {\fov dim}, {\fov copy});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>\>surfcopy = copySurface(\begin{minipg4}
          {\fov surf});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/freeCurve.tex
================================================
\subsection{Delete a curve object.} \label{sec:freeCurve}
\funclabel{freeCurve}
\begin{minipg1}
Free the space occupied by the curve. Before using freeCurve, make sure the curve object exists.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void freeCurve(\begin{minipg3}
          {\fov curve})
        \end{minipg3}\\[0.3ex]
        \>\>    SISLCurve    \> *{\fov curve};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov curve}    \> - \> Pointer to the curve to delete.\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLCurve    \> *{\fov curve} = NULL;\\
        \>\>    int    \>       {\fov number} = 10;\\
        \>\>    int    \>       {\fov order} = 4;\\
        \>\>    double \>       {\fov knots}[14];\\
        \>\>    double \>       {\fov coef}[30];\\
        \>\>    int    \>       {\fov kind} = 1;\\
        \>\>    int    \>       {\fov dim} = 3;\\
        \>\>    int    \>       {\fov copy} = 1;\\
        \>\>    \ldots \\
        \>\>curve = newCurve(\begin{minipg4}
          {\fov number}, {\fov order}, {\fov knots}, {\fov coef}, {\fov kind}, {\fov dim}, {\fov copy});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>\>if (curve) freeCurve(\begin{minipg4}
          {\fov curve});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/freeIntcrvlist.tex
================================================
\subsection{Free a list of intersection curves.}\label{sec:freeIntcrvlist}
\funclabel{freeIntcrvlist}
\begin{minipg1}
      Free a list of SISLIntcurve.
\end{minipg1} \\ \\
SYNOPSIS\\
        \> void freeIntcrvlist(\begin{minipg3}
            {\fov vilist}, {\fov icrv})
                \end{minipg3}\\
                \>\>    SISLIntcurve **{\fov vilist};\\
                \>\>    int    \>  {\fov icrv};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov vilist}\> - \>  \begin{minipg2}
                     Array of pointers to pointers to instance
                           of Intcurve.
                               \end{minipg2}\\
        \>\>    {\fov icrv}\> - \>  \begin{minipg2}
                     number of SISLIntcurves in the list.
                               \end{minipg2}\\
\\
        \>Output Arguments:\\
        \>\>    {\fov None}\> - \>  \begin{minipg2}
                None.
                               \end{minipg2}\\
\\
EXAMPLE OF USE\\
                \>      \{ \\

                \>\>    SISLIntcurve **{\fov vilist} = NULL;\\
                \>\>    int    \>  {\fov icrv} = 0;\\                \>\>    \ldots \\
                \>\> /* SISLIntcurve instances are generated for instance in surface--surface \\
                \>\> intersection */ \\
                \>\> \ldots \\
        \>\>if (vilist) freeIntcrvlist(\begin{minipg4}
            {\fov vilist}, {\fov icrv});
                \end{minipg4}\\
                \>\>    \ldots \\
                \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/freeIntcurve.tex
================================================
\subsection{Delete an intersection curve object.}
\funclabel{freeIntcurve}
\begin{minipg1}
  Free the space occupied by a SISLIntcurve.\\
  Note that the arrays {\fov guidepar1} and {\fov guidepar2} will be freed as well.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void freeIntcurve(\begin{minipg3}
        intcurve)
                \end{minipg3}\\[0.3ex]
                \>\>    SISLIntcurve \> *{\fov intcurve};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov intcurve} \> - \> Pointer to the SISLIntcurve to delete.\\
\\
EXAMPLE OF USE\\
                \>      \{ \\
                \>\>    SISLIntcurve    \>      *{\fov intcurve} = NULL;\\
                \>\>    int    \>       {\fov numgdpt} = 2;\\
                \>\>    int    \>       {\fov numpar1} = 2;\\
                \>\>    int    \>       {\fov numpar2} = 2;\\
                \>\>    double \>       {\fov guidepar1}[4];\\
                \>\>    double \>       {\fov guidepar2}[4];\\
                \>\>    int    \>       {\fov type} = 4;\\
                \>\>    \ldots \\
        \>\>{\fov intcurve} = newIntcurve(\begin{minipg4}
                {\fov numgdpt}, {\fov numpar1}, {\fov numpar2}, {\fov guidepar1},\\ {\fov guidepar2}, {\fov type});
                        \end{minipg4}\\
                \>\>    \ldots \\
        \>\>if (intcurve) freeIntcurve(\begin{minipg4}
                {\fov intcurve});
                        \end{minipg4}\\
                \>\>    \ldots \\
                \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/freeSurf.tex
================================================
\subsection{Delete a surface object.}
\funclabel{freeSurf}
\begin{minipg1}
  Free the space occupied by the surface. Before using freeSurf, make
  sure that the surface object exists.
\end{minipg1} \\
SYNOPSIS\\
        \>void freeSurf(\begin{minipg3}
          {\fov surf})
        \end{minipg3}\\[0.3ex]
        \>\>    SISLSurf    \>  *{\fov surf};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov surf}     \> - \> Pointer to the surface to
        delete.\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLSurf\>      *{\fov surf} = NULL;\\
        \>\>    int    \>       {\fov number1} = 5;\\
        \>\>    int    \>       {\fov number2} = 4;\\
        \>\>    int    \>       {\fov order1} = 4;\\
        \>\>    int    \>       {\fov order2} = 3;\\
        \>\>    double \>       {\fov knot1}[9];\\
        \>\>    double \>       {\fov knot2}[7];\\
        \>\>    double \>       {\fov coef}[60];\\
        \>\>    int    \>       {\fov kind} = 1;\\
        \>\>    int    \>       {\fov dim} = 3;\\
        \>\>    int    \>       {\fov copy} = 1;\\
        \>\>    \ldots \\
        \>\>{\fov surf}$=$newSurf(\begin{minipg4}
          {\fov number1}, {\fov number2}, {\fov order1}, {\fov order2}, {\fov knot1}, {\fov knot2},\\ {\fov coef}, {\fov kind}, {\fov dim}, {\fov copy});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>\>{\fov if (surf) freeSurf}(\begin{minipg4}
          {\fov surf});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/newCurve.tex
================================================
\subsection{Create new curve object.} \label{sec:newCurve}
\funclabel{newCurve}
\begin{minipg1}
  Create and initialize a SISLCurve-instance. Note that the vertex input to a
  rational curve is unstandard. Given the curve
  $$
{\bf c}(t) = {\sum_{i=1}^{n} w_i {\bf p}_{i} B_{i,k,{\bf t}}(t)
                 \over
                 \sum_{i=1}^{n} w_i B_{i,k,{\bf t}}(t)},
$$
must the vertices be given as
${w_1  {\bf p}_1, w_1, w_2  {\bf p}_2, w_2, \ldots,
  w_n  {\bf p}_n, w_n}$ when invoking this function. Thus the vertices are multiplied with the
associated weight.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>SISLCurve *newCurve(\begin{minipg3}
        {\fov number}, {\fov order}, {\fov knots}, {\fov coef}, {\fov kind}, {\fov dim}, {\fov copy})
                \end{minipg3}\\[0.3ex]
                \>\>    int    \>       {\fov number};\\
                \>\>    int    \>       {\fov order};\\
                \>\>    double \>       {\fov knots}[\,];\\
                \>\>    double \>       {\fov coef}[\,];\\
                \>\>    int    \>       {\fov kind};\\
                \>\>    int    \>       {\fov dim};\\
                \>\>    int    \>       {\fov copy};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov number}   \> - \> Number of vertices in the new curve.\\
        \>\>    {\fov order} \> - \> Order of curve.\\
        \>\>    {\fov knots} \> - \> Knot vector of curve.\\
        \>\>    {\fov coef}  \> - \> \begin{minipg2}
                      Vertices of curve. These can either be the $dim$
                      \mbox{dimensional}
                      non-rational vertices, or the $(dim+1)$ dimensional rational
                      vertices.
                                     \end{minipg2}\\[0.8ex]
        \>\>    {\fov kind} \> - \> Type of curve.\\
        \>\>\>\>\>       $= 1$ :\> Polynomial B-spline curve.\\
        \>\>\>\>\>       $= 2$ :\> Rational B-spline (nurbs) curve.\\
        \>\>\>\>\>       $= 3$ :\> Polynomial Bezier curve.\\
        \>\>\>\>\>       $= 4$ :\> Rational Bezier curve.\\
        \>\>    {\fov dim} \> - \> Dimension of the space in which the
                                   curve lies.\\
        \>\>    {\fov copy} \> - \> Flag \\
        \>\>\>\>\>       $= 0$ :\> Set pointer to input arrays.\\
        \>\>\>\>\>       $= 1$ :\> Copy input arrays.\\
        \>\>\>\>\>       $= 2$ :\> Set pointer and remember to free arrays.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov newCurve} \> - \> \begin{minipg2}
                                 Pointer to the new curve. If it is impossible
                                 to allocate space for the curve, newCurve
                                 returns NULL.
                                \end{minipg2}\\
\newpagetabs
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLCurve    \> *{\fov curve} = NULL;\\
        \>\>    int    \>       {\fov number} = 10;\\
        \>\>    int    \>       {\fov order} = 4;\\
        \>\>    double \>       {\fov knots}[14]; \,/* Must be defined */\\
        \>\>    double \>       {\fov coef}[30]; \, /* Must be defined */\\
        \>\>    int    \>       {\fov kind} = 1; /* Non-rational */ \\
        \>\>    int    \>       {\fov dim} = 3;\\
        \>\>    int    \>       {\fov copy} = 1;\\
        \>\>    \ldots \\
        \>\>{\fov curve} = newCurve(\begin{minipg4}
          {\fov number}, {\fov order}, {\fov knots}, {\fov coef}, {\fov kind},
          {\fov dim}, {\fov copy});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \} \\
\end{tabbing}


================================================
FILE: doc/manual/func/newIntcurve.tex
================================================
\subsection{Create a new intersection curve object.}
\funclabel{newIntcurve}
\begin{minipg1}
Create and initialize a SISLIntcurve-instance. Note that the arrays
{\fov guidepar1} and {\fov guidepar2} will be freed by freeIntcurve. In most cases the SISLIntcurve objects will be generated internally in the SISL intersection routines.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>SISLIntcurve *newIntcurve(\begin{minipg3}
        {\fov numgdpt}, {\fov numpar1}, {\fov numpar2}, {\fov guidepar1},\\ {\fov guidepar2}, type)
                \end{minipg3}\\[0.3ex]
                \>\>    int    \>       {\fov numgdpt};\\
                \>\>    int    \>       {\fov numpar1};\\
                \>\>    int    \>       {\fov numpar2};\\
                \>\>    double \>       {\fov guidepar1}[\,];\\
                \>\>    double \>       {\fov guidepar2}[\,];\\
                \>\>    int    \>       {\fov type};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov numgdpt}  \> - \> \begin{minipg2}
                                Number of guide points that describe the curve.
                                \end{minipg2}\\
        \>\>    {\fov numpar1} \> - \> \begin{minipg2}
                                Number of parameter directions of first object
                                involved in the intersection.
                                \end{minipg2}\\[0.8ex]
        \>\>    {\fov numpar2}  \> - \> \begin{minipg2}
                                Number of parameter directions of second object
                                involved in the intersection.
                                \end{minipg2}\\[0.8ex]
        \>\>    {\fov guidepar1}\> - \> \begin{minipg2}
                                Parameter values of the guide points in the parameter
                                area of the first object.
                                NB! The epar1 pointer is set to point to this
                                array. The values are not copied.
                                \end{minipg2}\\[0.3ex]
        \>\>    {\fov guidepar2}\> - \> \begin{minipg2}
                                Parameter values of the guide points in the parameter
                                area of the second object.
                                NB! The epar2 pointer is set to point to this
                                array. The values are not copied.
                                \end{minipg2}\\[0.3ex].
        \>\>    {\fov type} \> - \> \begin{minipg2}
                                Kind of curve, see type SISLIntcurve on
                                page \pageref{SISLIntcurve}
                                \end{minipg2}\\
\\
        \>Output Arguments:\\
        \>\>    {\fov newIntcurve} \> \> \begin{minipg2}
                                 Pointer to new SISLIntcurve. If it is impossible
                                 to allocate space for the SISLIntcurve, newIntcurve
                                 returns NULL.
                                \end{minipg2}\\
\newpagetabs
EXAMPLE OF USE\\
                \>      \{ \\
                \>\>    SISLIntcurve    \>      *{\fov intcurve = NULL};\\
                \>\>    int    \>       {\fov numgdpt} = 2;\\
                \>\>    int    \>       {\fov numpar1} = 2;\\
                \>\>    int    \>       {\fov numpar2} = 2;\\
                \>\>    double \>       {\fov guidepar1}[4]; \, /* Must be defined */\\
                \>\>    double \>       {\fov guidepar2}[4]; \, /* Must be defined */\\
                \>\>    int    \>       {\fov type} = 4;\\
                \>\>    \ldots \\
        \>\>{\fov intcurve} = newIntcurve(\begin{minipg4}
                {\fov numgdpt}, {\fov numpar1}, {\fov numpar2}, {\fov guidepar1},\\ {\fov guidepar2}, type);
                        \end{minipg4}\\
                \>\>    \ldots \\
                \>      \} \\
\end{tabbing}


================================================
FILE: doc/manual/func/newSurf.tex
================================================
\subsection{Create a new surface object.}\label{sec:newSurf}
\funclabel{newSurf}
\begin{minipg1}
Create and initialize a surface object instance. Note that the vertex input to a
  rational surface is unstandard. Given the surface
  $$
{\bf s}(u,v) = {\sum_{i=1}^{n_1}\sum_{j=1}^{n_2} w_{i,j} {\bf p}_{i,j} 
	    B_{i,k_1,{\bf u}}(u) B_{j,k_2,{\bf v}}(v)  \over
             \sum_{i=1}^{n_1}\sum_{j=1}^{n_2} w_{i,j}
	         B_{i,k_1,{\bf u}}(u) B_{j,k_2,{\bf v}}(v)},
$$
must the vertices be given as
${w_{1,1}  {\bf p}_{1,1}, w_{1,1}, w_{1,2}  {\bf p}_{1,2}, w_{1,2},  \ldots,
  w_{n_1,n_2}  {\bf p}_{n_1,n_2}, w_{n_1,n_2}}$ when invoking this function. Thus the vertices are multiplied with the
associated weight.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>SISLSurf *newSurf(\begin{minipg3}
        {\fov number}1, {\fov number}2, {\fov order}1, {\fov order}2, {\fov knot}1, {\fov knot}2, {\fov coef},\\ {\fov kind}, {\fov dim}, {\fov copy})
                \end{minipg3}\\[0.3ex]
                \>\>    int    \>       {\fov number}1;\\
                \>\>    int    \>       {\fov number}2;\\
                \>\>    int    \>       {\fov order}1;\\
                \>\>    int    \>       {\fov order}2;\\
                \>\>    double \>       {\fov knot1}[\,];\\
                \>\>    double \>       {\fov knot2}[\,];\\
                \>\>    double \>       {\fov coef}[\,];\\
                \>\>    int    \>       {\fov kind};\\
                \>\>    int    \>       {\fov dim};\\
                \>\>    int    \>       {\fov copy};\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov number}1  \> - \> \begin{minipg2}
                        Number of vertices in the first parameter direction
                        of new surface.
                                \end{minipg2}\\[0.8ex]
        \>\>    {\fov number}2  \> - \> \begin{minipg2}
                        Number of vertices in the second parameter direction
                        of new surface.
                                \end{minipg2}\\[0.8ex]
        \>\>    {\fov order1     } \> - \>\begin{minipg2}
                        Order of surface in first parameter direction.
                                \end{minipg2}\\
        \>\>    {\fov order2     } \> - \> \begin{minipg2}
                        Order of surface in second parameter direction.
                                \end{minipg2}\\
        \>\>    {\fov knot1    } \> - \> \begin{minipg2}
                        Knot vector of surface in first parameter direction.
                                \end{minipg2}\\
        \>\>    {\fov knot2    } \> - \> \begin{minipg2}
                        Knot vector of surface in second parameter direction.
                                \end{minipg2}\\[0.8ex]
        \>\>    {\fov coef }    \> - \> \begin{minipg2}
Vertices of surface. These may either be the {\fov dim} dimensional non-rational vertices or the {\fov (dim+1)} dimensional rational vertices.
                                \end{minipg2}\\[0.8ex]
        \>\>    {\fov kind  } \> - \> Type of surface.\\
        \>\>\>\>\>       $= 1$ :\> Polynomial B-spline surface.\\
        \>\>\>\>\>       $= 2$ :\> Rational B-spline (nurbs) surface.\\
        \>\>\>\>\>       $= 3$ :\> Polynomial Bezier surface.\\
        \>\>\>\>\>       $= 4$ :\> Rational Bezier surface.\\
        \>\>    {\fov dim   } \> - \> Dimension of the space in which the surface lies.\\
        \>\>    {\fov copy  } \> - \> Flag \\
        \>\>\>\>\>       $= 0$ :\> Set pointer to input arrays.\\
        \>\>\>\>\>       $= 1$ :\> Copy input arrays.\\
        \>\>\>\>\>       $= 2$ :\> Set pointer and remember to free arrays.\\
        \>Output Arguments:\\
        \>\>    {\fov newSurf} \> - \> \begin{minipg2}
                                 Pointer to new surface. If it is impossible
                                 to allocate space for the surface, newSurface
                                 returns NULL.
                                \end{minipg2}\\
\newpagetabs
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLSurf\>      *{\fov surf} = NULL;\\
        \>\>    int    \>       {\fov number1} = 5;\\
        \>\>    int    \>       {\fov number2} = 4;\\
        \>\>    int    \>       {\fov order1} = 4; /* Polynomial degree 3 */\\
        \>\>    int    \>       {\fov order2} = 3; /* Polynomial degree 2 */\\
        \>\>    double \>       {\fov knot1}[9];  \, /* Must be defined */ \\
        \>\>    double \>       {\fov knot2}[7]; \, /* Must be defined */\\
        \>\>    double \>       {\fov coef}[60];  \, /* Must be defined */\\ 
        \>\>    int    \>       {\fov kind} = 1;\\
        \>\>    int    \>       {\fov dim} = 3;\\
        \>\>    int    \>       {\fov copy} = 1;\\
        \>\> /* Knots and vertices must be defined prior to the function call. \\
        \>\>    The vertices are given in a 1-dimensional array */ \\
        \>\>    \ldots \\
        \>\>{\fov surf} = newSurf(\begin{minipg4}
          {\fov number}1, {\fov number}2, {\fov order}1, {\fov order}2, {\fov knot}1, {\fov knot}2,\\ {\fov coef}, {\fov kind}, {\fov dim}, {\fov copy});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \} \\
\end{tabbing}


================================================
FILE: doc/manual/func/newbox.tex
================================================
\subsection{Create and initialize a curve/surface bounding box instance.}
\funclabel{newbox}
\begin{minipg1}
Create and initialize a curve/surface bounding box instance.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>SISLbox *newbox(\begin{minipg3}
          {\fov idim})
        \end{minipg3}\\
        \>\>    int \> {\fov idim};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov idim}\> - \>
        \begin{minipg2}
          Dimension of geometry space.
        \end{minipg2}\\
\\
        \>Output Arguments:\\
        \>\>    {\fov newbox}\> - \>
        \begin{minipg2}
          Pointer to new SISLbox structure. If it is
          impossible to allocate space for the structure,
          newbox will return a NULL value.
        \end{minipg2}\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>int   \> {\fov idim} = 3;\\
        \>\>SISLbox *{\fov box} = NULL;\\
        \>\>    \ldots \\
        \>\>{\fov box} = newbox(\begin{minipg4}
          {\fov idim});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/newdir.tex
================================================
\subsection{Create and initialize a curve/surface direction instance.}
\funclabel{newdir}
\begin{minipg1}
Create and initialize a curve/surface direction instance.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>SISLdir *newdir(\begin{minipg3}
          {\fov idim})
        \end{minipg3}\\[0.3ex]
        \>\>    int \> {\fov idim};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov idim}\> - \>
        \begin{minipg2}
          Dimension of the space in which the object lies.
        \end{minipg2}\\
\\
        \>Output Arguments:\\
        \>\>    {\fov newdir}\> - \>
        \begin{minipg2}
          Pointer to new direction structure. If it is
          impossible to allocate space for the structure,
          newdir will return a NULL value.
        \end{minipg2}\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>int     \> {\fov idim} = 3;\\
        \>\>SISLdir \> *{\fov dir} = NULL;\\
        \>\>    \ldots \\
        \>\>{\fov dir} = newdir(\begin{minipg4}
          {\fov idim});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1001.tex
================================================
\section{Pick a Part of a Surface.}
\funclabel{s1001}
\begin{minipg1}
  To pick a part of a surface.
  The surface produced will always be k-regular, i.e.\ with
  k-tupple start/end knots.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void s1001(\begin{minipg3}
          {\fov ps},  {\fov min1},  {\fov min2},  {\fov max1},  {\fov max2},  {\fov rsnew},  {\fov jstat})
        \end{minipg3}\\[0.3ex]
        \>\>    SISLSurf \> *{\fov ps};\\
        \>\>    double   \> {\fov min1};\\
        \>\>    double   \> {\fov min2};\\
        \>\>    double   \> {\fov max1};\\
        \>\>    double   \> {\fov max2};\\
        \>\>    SISLSurf \> **{\fov rsnew};\\
        \>\>    int      \> *{\fov jstat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov ps}\> - \>  \begin{minipg2}
                     Surface to pick a part of.
                               \end{minipg2}\\
        \>\>    {\fov min1}\> - \>  \begin{minipg2}
                     Minimum value in first parameter direction.
                               \end{minipg2}\\
        \>\>    {\fov min2}\> - \>  \begin{minipg2}
                     Minimum value in second parameter direction.
                               \end{minipg2}\\
        \>\>    {\fov max1}\> - \>  \begin{minipg2}
                     Maximum value in first parameter direction.
                               \end{minipg2}\\
        \>\>    {\fov max2}\> - \>  \begin{minipg2}
                     Maximum value second parameter direction.
                               \end{minipg2}\\
\\
        \>Output Arguments:\\
        \>\>    {\fov rsnew}\> - \>  \begin{minipg2}
                     The new, picked surface.
                               \end{minipg2}\\
        \>\>    {\fov jstat} \> - \> Status messages\\
                \>\>\>\>\>           $> 0$ \> : Warning.\\
                \>\>\>\>\>           $= 0$ \> : Ok.\\
                \>\>\>\>\>           $< 0$ \> : Error.\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLSurf \> *{\fov ps}; \, /* Must be defined */\\
        \>\>    double   \> {\fov min1}; \, /* Must be defined */\\
        \>\>    double   \> {\fov min2}; \, /* Must be defined */\\
        \>\>    double   \> {\fov max1}; \, /* Must be defined */\\
        \>\>    double   \> {\fov max2}; \, /* Must be defined */\\
        \>\>    SISLSurf \> *{\fov rsnew} = NULL;\\
        \>\>    int      \> {\fov jstat} = 0;\\
        \>\>    \ldots \\
        \>\>s1001(\begin{minipg4}
          {\fov ps},  {\fov min1},  {\fov min2},  {\fov max1},  {\fov max2}, \&{\fov rsnew},  \&{\fov jstat});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1011.tex
================================================
\subsection{Express a conic arc as a curve.}
\funclabel{s1011}
\begin{minipg1}
  Convert an analytic conic arc to a curve.
  The curve will be geometrically exact.
  The arc is given by position at start, shoulder point and end, and a
  shape factor.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void s1011(\begin{minipg3}
          {\fov start\_pos},  {\fov top\_pos},  {\fov end\_pos},  {\fov shape},  {\fov dim},  {\fov arc\_seg},  {\fov stat})
        \end{minipg3}\\[0.3ex]
        \>\>    double \> {\fov start\_pos}[\,];\\
        \>\>    double \> {\fov top\_pos}[\,];\\
        \>\>    double \> {\fov end\_pos}[\,];\\
        \>\>    double \> {\fov shape};\\
        \>\>    int    \> {\fov dim};\\
        \>\>    SISLCurve \> **{\fov arc\_seg};\\
        \>\>    int    \> *{\fov stat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov start\_pos} \> - \> Start point of segment.\\
        \>\>    {\fov top\_pos}   \> - \> \begin{minipg2}
                                            Shoulder point of
                                            segment. This is the
                                            intersection point of the
                                            tangents in {\fov start\_pos} and
                                            {\fov end\_pos}.
                                          \end{minipg2}\\[0.8ex]
        \>\>    {\fov end\_pos}   \> - \> End point of segment.\\
        \>\>    {\fov shape}      \> - \> Shape factor, must be $\geq 0$.\\
                \>\>\>\>\> $< 0.5$, an ellipse,\\
                \>\>\>\>\> $= 0.5$, a parabola,\\
                \>\>\>\>\> $> 0.5$, a hyperbola,\\
                \>\>\>\>\> $\geq 1$,
                           \begin{minipg5}
                             the start and end points lies on different branches of
                             the hyperbola.  We want a single arc
                             segment, therefore if $shape\geq 1$, shape
                             is set to $0.999999$.
                           \end{minipg5}\\[0.8ex]
        \>\>    {\fov dim}        \> - \> The spatial dimension of the curve to
                                          be produced.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov jstat} \> - \> Status message\\
                \>\>\>\>\> $< 0$ : Error.\\
                \>\>\>\>\> $= 0$ : Ok.\\
                \>\>\>\>\> $> 0$ : Warning.\\
        \>\>    {\fov arc\_seg} \> - \> Pointer to the curve produced.\\
\newpagetabs
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    double \> {\fov start\_pos}[3]; \,/* Must be defined */\\
        \>\>    double \> {\fov top\_pos}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov end\_pos}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov shape} = 0.3;\\
        \>\>    int    \> {\fov dim} = 3;\\
        \>\>    SISLCurve \> *{\fov arc\_seg} = NULL;\\
        \>\>    int    \> {\fov stat} = 0;\\
        \>\>    \ldots \\
        \>\>s1011(\begin{minipg4}
        {\fov start\_pos},  {\fov top\_pos},  {\fov end\_pos},  {\fov shape},  {\fov dim},  \&{\fov arc\_seg},  \&{\fov stat});
      \end{minipg4}\\
      \>\>    \ldots \\
      \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1012.tex
================================================
\subsection{Express a truncated helix as a curve.}
\funclabel{s1012}
\begin{minipg1}
  Convert an analytical truncated helix to a curve.
  The curve will be geometrically exact.
\end{minipg1}\\ \\
SYNOPSIS\\
        \>void s1012(\begin{minipg3}
          {\fov start\_pos}, {\fov axis\_pos}, {\fov axis\_dir}, {\fov frequency}, {\fov numb\_quad},
          {\fov counter\_clock}, {\fov helix}, {\fov stat})
        \end{minipg3}\\[0.3ex]
        \>\>    double \> {\fov start\_pos}[\,];\\
        \>\>    double \> {\fov axis\_pos}[\,];\\
        \>\>    double \> {\fov axis\_dir}[\,];\\
        \>\>    double \> {\fov frequency};\\
        \>\>    int    \> {\fov numb\_quad};\\
        \>\>    int    \> {\fov counter\_clock};\\
        \>\>    SISLCurve \> **{\fov helix};\\
        \>\>    int    \> *{\fov stat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov start\_pos} \> - \> Start position on the helix.\\
        \>\>    {\fov axis\_pos}  \> - \> Point on the helix axis.\\
        \>\>    {\fov axis\_dir}  \> - \> Direction of the helix axis.\\
        \>\>    {\fov frequency}  \> - \> \begin{minipg2}
                                            The length along the helix
                                            axis for one period of revolution.
                                          \end{minipg2}\\[0.8ex]
        \>\>    {\fov numb\_quad} \> - \> Number of quadrants in the helix.\\
        \>\>    {\fov counter\_clock} \> - \> Flag for direction of revolution:\\
                \>\>\>\>\> $= 0$ : clockwise,\\
                \>\>\>\>\> $= 1$ : counter\_clockwise.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov jstat} \> - \> Status message\\
                \>\>\>\>\> $< 0$ : Error.\\
                \>\>\>\>\> $= 0$ : Ok.\\
                \>\>\>\>\> $> 0$ : Warning.\\
        \>\>    {\fov helix} \> - \> Pointer to the helix curve produced.\\
\newpagetabs
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    double \> {\fov start\_pos}[3]; \,/* Must be defined */\\
        \>\>    double \> {\fov axis\_pos}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov axis\_dir}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov frequency}; \, /* Must be defined */\\
        \>\>    int    \> {\fov numb\_quad} = 5;\\
        \>\>    int    \> {\fov counter\_clock} = 1;\\
        \>\>    SISLCurve \> *{\fov helix} = NULL;\\
        \>\>    int    \> {\fov stat} = 0;\\
        \>\>    \ldots \\
        \>\>s1012(\begin{minipg4}
          {\fov start\_pos}, {\fov axis\_pos}, {\fov axis\_dir}, {\fov frequency}, {\fov numb\_quad},
          {\fov counter\_clock}, \&{\fov helix}, \&{\fov stat})
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1013.tex
================================================
\subsection{Find a point on a 2D curve along a given direction.}
\funclabel{s1013}
\begin{minipg1}
  Find a point on a 2D curve along a given direction.
\end{minipg1}\\ \\
SYNOPSIS\\
        \>void s1013(\begin{minipg3}
        {\fov pcurve}, {\fov ang}, {\fov ang\_tol}, {\fov guess\_par}, {\fov iter\_par}, {\fov jstat})
      \end{minipg3}\\[0.3ex]
      \>\>      SISLCurve \>  *{\fov pcurve};\\
      \>\>      double    \>   {\fov ang};\\
      \>\>      double    \>   {\fov ang\_tol};\\
      \>\>      double    \>   {\fov guess\_par};\\
      \>\>      double    \>  *{\fov iter\_par};\\
      \>\>      int       \>  *{\fov jstat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov pcurve}    \> - \> Pointer to the curve.\\
        \>\>    {\fov ang}       \> - \> \begin{minipg2}
                                           The angle (in radians)
                                           describing the wanted
                                           \mbox{direction}.
                                         \end{minipg2}\\[0.8ex]
        \>\>    {\fov ang\_tol}  \> - \> The angular tolerance (in radians).\\
        \>\>    {\fov guess\_par}\> - \> Start parameter value on the curve.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov iter\_par} \> - \> The parameter value found on the curve.\\
        \>\>    {\fov stat}     \> - \> Status messages\\
                \>\>\>\>\>              $= 2$   : A minimum distance found.\\
                \>\>\>\>\>              $= 1$   : Intersection found.\\
                \>\>\>\>\>              $< 0$   : Error.\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLCurve \>  *{\fov pcurve}; \, /* Must be defined */\\
        \>\>    double    \>  {\fov ang}; \, /* Must be defined */\\
        \>\>    double    \>  {\fov ang\_tol} = 0.01;\\
        \>\>    double    \>  {\fov guess\_par}; \, /* Must be defined */\\
        \>\>    double    \>  {\fov iter\_par};\\
        \>\>    int       \>  {\fov jstat} = 0;\\
        \>\>    \ldots \\
        \>\>s1013(\begin{minipg4}
        {\fov pcurve}, {\fov ang}, {\fov ang\_tol}, {\fov guess\_par}, \&{\fov iter\_par}, \&{\fov jstat});
      \end{minipg4}\\
      \>\>    \ldots \\
      \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1014.tex
================================================
\subsection{Compute a circular fillet between a 2D curve and a circle.}
\funclabel{s1014}
\begin{minipg1}
  Compute the fillet by iterating to the start and end points of a
  fillet between a 2D curve and a circle. The centre of the circular
  fillet is also calculated.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void s1014(\begin{minipg3}
        {\fov pc1}, {\fov circ\_cen}, {\fov circ\_rad}, {\fov aepsge}, {\fov eps1}, {\fov eps2}, {\fov aradius},
        {\fov parpt1}, {\fov parpt2}, {\fov centre}, {\fov jstat})
        \end{minipg3}\\[0.3ex]
        \>\>    SISLCurve \> *{\fov pc1};\\
        \>\>    double    \> {\fov circ\_cen}[\,];\\
        \>\>    double    \> {\fov circ\_rad};\\
        \>\>    double    \> {\fov aepsge};\\
        \>\>    double    \> {\fov eps1}[\,];\\
        \>\>    double    \> {\fov eps2}[\,];\\
        \>\>    double    \> {\fov aradius};\\
        \>\>    double    \> *{\fov parpt1};\\
        \>\>    double    \> *{\fov parpt2};\\
        \>\>    double    \> {\fov centre}[\,];\\
        \>\>    int       \> *{\fov jstat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov pc1}    \> - \> The first input curve.\\
        \>\>    {\fov circ\_cen}   \> - \> 2D centre of the circle.\\
        \>\>    {\fov circ\_rad}   \> - \> Radius of the circle.\\
        \>\>    {\fov aepsge} \> - \> Geometry resolution.\\
        \>\>    {\fov eps1}   \> - \> \begin{minipg2}
                                        2D point telling that the fillet
                                        should be put on the side of
                                        curve 1 where {\fov eps1} is situated.
                                      \end{minipg2}\\[0.8ex]
        \>\>    {\fov eps2}   \> - \> \begin{minipg2}
                                        2D point telling that the fillet
                                        should be put on the side of the
                                        input circle where {\fov eps2} is
                                        situated.
                                      \end{minipg2}\\[0.8ex]
        \>\>    {\fov aradius} \> - \> The radius to be used on the fillet.\\
\\
        \>Input/Output Arguments:\\
        \>\>    {\fov parpt1} \> - \> \begin{minipg2}
                                        Parameter value of the point on
                                        curve 1 where the fillet
                                        starts. Input is a guess value
                                        for the iteration.
                                      \end{minipg2}\\[0.8ex]
        \>\>    {\fov parpt2} \> - \> \begin{minipg2}
                                        Parameter value of the point on
                                        the input circle where the
                                        fillet ends. Input is a guess
                                        value for the iteration.
                                      \end{minipg2}\\[0.8ex]
\\
        \>Output Arguments:\\
        \>\>    {\fov centre} \> - \> \begin{minipg2}
                                        2D centre of the circular
                                        fillet.  Space must be allocated
                                        outside the function.
                                      \end{minipg2}\\[0.8ex]
        \>\>    {\fov jstat} \> - \> Status message\\
                \>\>\>\>\> $= 1$      : Converged,\\
                \>\>\>\>\> $= 2$      : Diverged,\\
                \>\>\>\>\> $< 0$      : Error.\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLCurve \> *{\fov pc1}; \,/* Must be defined */ \\
        \>\>    double    \> {\fov circ\_cen}[2]; \,/* Must be defined */ \\
        \>\>    double    \> {\fov circ\_rad}; \,/* Must be defined */ \\
        \>\>    double    \> {\fov aepsge} = 0.00001;\\
        \>\>    double    \> {\fov eps1}[2]; \,/* Must be defined */ \\
        \>\>    double    \> {\fov eps2}[2]; \,/* Must be defined */ \\
        \>\>    double    \> {\fov aradius}; \,/* Must be defined */ \\
        \>\>    double    \> {\fov parpt1};\\
        \>\>    double    \> {\fov parpt2};\\
        \>\>    double    \> {\fov centre}[2];\\
        \>\>    int       \> {\fov jstat} = 0;\\
        \>\>    \ldots \\
        \>\>s1014(\begin{minipg4}
        {\fov pc1}, {\fov circ\_cen}, {\fov circ\_rad}, {\fov aepsge}, {\fov eps1}, {\fov eps2}, {\fov aradius},
        \&{\fov parpt1}, \&{\fov parpt2}, {\fov centre}, \&{\fov jstat});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1015.tex
================================================
\subsection{Compute a circular fillet between two 2D curves.}
\funclabel{s1015}
\begin{minipg1}
  Compute the fillet by iterating to the start and end points of a
  fillet between two 2D curves. The centre of the circular fillet is
  also calculated.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void s1015(\begin{minipg3}
          {\fov pc1}, {\fov pc2}, {\fov aepsge}, {\fov eps1}, {\fov eps2}, {\fov aradius}, {\fov parpt1}, {\fov parpt2},
          {\fov centre}, {\fov jstat})
        \end{minipg3}\\[0.3ex]
                \>\>    SISLCurve  \>  *{\fov pc1};\\
                \>\>    SISLCurve  \>  *{\fov pc2};\\
                \>\>    double     \>  {\fov aepsge};\\
                \>\>    double     \>  {\fov eps1}[\,];\\
                \>\>    double     \>  {\fov eps2}[\,];\\
                \>\>    double     \>  {\fov aradius};\\
                \>\>    double     \>  *{\fov parpt1};\\
                \>\>    double     \>  *{\fov parpt2};\\
                \>\>    double     \>  {\fov centre}[\,];\\
                \>\>    int        \>  *{\fov jstat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov pc1}     \> - \> The first 2D input curve.\\
        \>\>    {\fov pc2}     \> - \> The second 2D input curve.\\
        \>\>    {\fov aepsge}  \> - \> Geometry resolution.\\
        \>\>    {\fov eps1}    \> - \>
        \begin{minipg2}
          2D point telling that the fillet should be put on
          the side of curve 1 where {\fov eps1} is situated.
        \end{minipg2}\\[0.8ex]
        \>\>    {\fov eps2}    \> - \>
        \begin{minipg2}
          2D point telling that the fillet should be put on the
          side of curve 2 where {\fov eps2} is situated.
        \end{minipg2}\\[0.8ex]
        \>\>    {\fov aradius} \> - \> The radius to be used on the fillet.\\
\\
        \>Input/Output Arguments:\\
        \>\>    {\fov parpt1}  \> - \>
        \begin{minipg2}
          Parameter value of the point on curve 1 where the
          fillet starts. Input is a guess value for the iteration.
        \end{minipg2}\\[0.8ex]
        \>\>    {\fov parpt2}  \> - \>
        \begin{minipg2}
          Parameter value of the point on curve 2 where the
          fillet ends. Input is a guess value for the iteration.
        \end{minipg2}\\[0.8ex]
\\
        \>Output Arguments:\\
        \>\>    {\fov centre}  \> - \>
        \begin{minipg2}
          2D centre of the circular fillet.  Space must be
          allocated outside the function.
        \end{minipg2}\\[0.8ex]
        \>\>    {\fov jstat} \> - \> Status message\\
                \>\>\>\>\> $= 1$      : Converged,\\
                \>\>\>\>\> $= 2$      : Diverged,\\
                \>\>\>\>\> $< 0$      : Error.\\
\newpagetabs
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLCurve \> *{\fov pc1}; \,/* Must be defined */ \\
        \>\>    SISLCurve \> *{\fov pc2}; \,/* Must be defined */ \\
        \>\>    double    \> {\fov aepsge} = 0.00001;\\
        \>\>    double    \> {\fov eps1}[2]; \,/* Must be defined */ \\
        \>\>    double    \> {\fov eps2}[2]; \,/* Must be defined */ \\
        \>\>    double    \> {\fov aradius}; \,/* Must be defined */ \\
        \>\>    double    \> {\fov parpt1}; \,/* Must be defined */ \\
        \>\>    double    \> {\fov parpt2}; \,/* Must be defined */ \\
        \>\>    double    \> {\fov centre}[2];\\
        \>\>    int       \> {\fov jstat} = 0;\\
        \>\>    \ldots \\
        \>\>s1015(\begin{minipg4}
          {\fov pc1}, {\fov pc2}, {\fov aepsge}, {\fov eps1}, {\fov eps2}, {\fov aradius}, \&{\fov parpt1}, \&{\fov parpt2},
          {\fov centre}, \&{\fov jstat});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1016.tex
================================================
\subsection{Compute a circular fillet between a 2D curve and a 2D line.}
\funclabel{s1016}
\begin{minipg1}
  Compute the fillet by iterating to the start and end points of a
  fillet between a 2D curve and a 2D line. The centre of the circular
  fillet is also calculated.
\end{minipg1}\\ \\
SYNOPSIS\\
        \>void s1016(\begin{minipg3}
          {\fov pc1}, {\fov point}, {\fov normal}, {\fov aepsge}, {\fov eps1}, {\fov eps2}, {\fov aradius},
          {\fov parpt1}, {\fov parpt2}, {\fov centre}, {\fov jstat})
        \end{minipg3}\\[0.3ex]
                \>\>    SISLCurve \> *{\fov pc1};\\
                \>\>    double    \> {\fov point}[\,];\\
                \>\>    double    \> {\fov normal}[\,];\\
                \>\>    double    \> {\fov aepsge};\\
                \>\>    double    \> {\fov eps1}[\,];\\
                \>\>    double    \> {\fov eps2}[\,];\\
                \>\>    double    \> {\fov aradius};\\
                \>\>    double    \> *{\fov parpt1};\\
                \>\>    double    \> *{\fov parpt2};\\
                \>\>    double    \> {\fov centre}[\,];\\
                \>\>    int       \> *{\fov jstat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov pc1}     \> - \> The 2D input curve.\\
        \>\>    {\fov point}   \> - \> 2D point on the line.\\
        \>\>    {\fov normal}  \> - \> 2D normal to the line.\\
        \>\>    {\fov aepsge}  \> - \> Geometry resolution.\\
        \>\>    {\fov eps1}    \> - \>
        \begin{minipg2}
          2D point telling that the fillet should be put on
          the side of curve 1 where {\fov eps1} is situated.
        \end{minipg2}\\[0.8ex]
        \>\>    {\fov eps2}    \> - \>
        \begin{minipg2}
          2D point telling that the fillet should be put on the
          side of curve 2 where {\fov eps2} is situated.
        \end{minipg2}\\[0.8ex]
        \>\>    {\fov aradius} \> - \> The radius to be used on the fillet.\\
\\
        \>Input/Output Arguments:\\
        \>\>    {\fov parpt1}  \> - \>
        \begin{minipg2}
          Parameter value of the point on curve 1 where the
          fillet starts. Input is a guess value for the iteration.
        \end{minipg2}\\[0.8ex]
        \>\>    {\fov parpt2}  \> - \>
        \begin{minipg2}
          Parameter value of the point on the line where the
          fillet ends. Input is a guess value for the iteration.
        \end{minipg2}\\[0.8ex]
\\
        \>Output Arguments:\\
        \>\>    {\fov centre}  \> - \>
        \begin{minipg2}
          2D centre of the (circular) fillet.  Space must be
          allocated outside the function.
        \end{minipg2}\\[0.8ex]
\newpagetabs
        \>\>    {\fov jstat} \> - \> Status message\\
                \>\>\>\>\> $= 1$      : Converged,\\
                \>\>\>\>\> $= 2$      : Diverged,\\
                \>\>\>\>\> $< 0$      : Error.\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLCurve \> *{\fov pc1}; \,/* Must be defined */ \\
        \>\>    double    \> {\fov point}[2]; \,/* Must be defined */ \\
        \>\>    double    \> {\fov normal}[2]; \,/* Must be defined */ \\
        \>\>    double    \> {\fov aepsge} = 0.00001;\\
        \>\>    double    \> {\fov eps1}[2]; \,/* Must be defined */ \\
        \>\>    double    \> {\fov eps2}[2]; \,/* Must be defined */ \\
        \>\>    double    \> {\fov aradius}; \,/* Must be defined */ \\
        \>\>    double    \> {\fov parpt1};\\
        \>\>    double    \> {\fov parpt2};\\
        \>\>    double    \> {\fov centre}[2];\\
        \>\>    int       \> {\fov jstat} = 0;\\
        \>\>    \ldots \\
        \>\>s1016(\begin{minipg4}
          {\fov pc1}, {\fov point}, {\fov normal}, {\fov aepsge}, {\fov eps1}, {\fov eps2}, {\fov aradius},
          \&{\fov parpt1}, \&{\fov parpt2}, {\fov centre}, \&{\fov jstat});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1017.tex
================================================
\subsection{Insert a given knot into the description of a curve.}
\funclabel{s1017}
\begin{minipg1}
  Insert a given knot into the description of a curve.\\
  NOTE       : When the curve is periodic (i.e.\ the curve flag
  $cuopen=-1$), the input parameter value must lie in the half-open
  $[et[kk-1], et[kn)$ interval, the function will automatically update
  the extra knots and  coeffisients. {\fov rcnew}{\tt ->}{\fov in} is
  still equal to  $pc${\tt ->}$in + 1$!
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void s1017(\begin{minipg3}
          {\fov pc},  {\fov rc},  {\fov apar},  {\fov jstat})
        \end{minipg3}\\[0.3ex]
        \>\>    SISLCurve \> *{\fov pc};\\
        \>\>    SISLCurve \> **{\fov rc};\\
        \>\>    double    \> {\fov apar};\\
        \>\>    int       \> *{\fov jstat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov pc}   \> - \> The curve to be refined.\\
        \>\>    {\fov apar} \> - \> Parameter value of the knot to be inserted.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov rc}    \> - \> The new, refined curve.\\
        \>\>    {\fov jstat} \> - \> Status message\\
                      \>\>\>\>\> $> 0$ : Warning.\\
                      \>\>\>\>\> $= 0$ : Ok.\\
                      \>\>\>\>\> $< 0$ : Error.\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLCurve \> *{\fov pc}; \, /* Must be defined */\\
        \>\>    double    \> {\fov apar}; \, /* Must be defined */\\
        \>\>    SISLCurve \> *{\fov rc} = NULL;\\
        \>\>    int       \> {\fov jstat} = 0;\\
        \>\>    \ldots \\
        \>\>s1017(\begin{minipg4}
          {\fov pc},  \&{\fov rc},  {\fov apar}, \&{\fov jstat});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1018.tex
================================================
\subsection{Insert a given set of knots into the description of a curve.}
\funclabel{s1018}
\begin{minipg1}
  Insert a given set of knots into the description of a curve.\\
  NOTE       : When the curve is periodic (i.e.\ when the curve flag
  $cuopen=-1$), the input parameter values must lie in the half-open
  $[et[kk-1], et[kn)$, the function will automatically update the extra
  knots and coeffisients.
  The {\fov rcnew}{\tt ->}{\fov in} will still be equal to $pc${\tt ->}$in + inpar$.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void s1018(\begin{minipg3}
          {\fov pc},  {\fov epar},  {\fov inpar},  {\fov rcnew},  {\fov jstat})
        \end{minipg3}\\[0.3ex]
        \>\>    SISLCurve \> *{\fov pc};\\
        \>\>    double    \> {\fov epar}[\,];\\
        \>\>    int       \> {\fov inpar};\\
        \>\>    SISLCurve \> **{\fov rcnew};\\
        \>\>    int       \> *{\fov jstat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov pc}   \> - \> The curve to be refined.\\
        \>\>    {\fov epar} \> - \>
        \begin{minipg2}
          Knots to be inserted. The values are stored in increasing
          order and may be multiple.
        \end{minipg2}\\[0.8ex]
        \>\>    {\fov inpar} \> - \> Number of knots in {\fov epar}.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov rcnew} \> - \> The new, refined curve.\\
        \>\>    {\fov jstat} \> - \> Status message\\
                      \>\>\>\>\> $> 0$ : Warning.\\
                      \>\>\>\>\> $= 0$ : Ok.\\
                      \>\>\>\>\> $< 0$ : Error.\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLCurve \> *{\fov pc}; \, /* Must be defined */\\
        \>\>    double    \> {\fov epar}[5]; \,/* Must be defined */\\
        \>\>    int       \> {\fov inpar} = 5;\\
        \>\>    SISLCurve \> *{\fov rcnew} = NULL;\\
        \>\>    int       \> {\fov jstat} = 0;\\
        \>\>    \ldots \\
        \>\>s1018(\begin{minipg4}
          {\fov pc},  {\fov epar},  {\fov inpar}, \&{\fov rcnew}, \&{\fov jstat});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1021.tex
================================================
\subsection{Express a truncated cylinder as a surface.}
\funclabel{s1021}
\begin{minipg1}
  To express a truncated cylinder as a surface. The cylinder can be
  elliptic.
  The cylinder will be geometrically exact.
\end{minipg1}\\ \\
SYNOPSIS\\
        \>void s1021(\begin{minipg3}
        {\fov bottom\_pos}, {\fov bottom\_axis}, {\fov ellipse\_ratio}, {\fov axis\_dir},
        {\fov height}, {\fov cyl}, {\fov stat})
      \end{minipg3}\\[0.3ex]
      \>\>    double \> {\fov bottom\_pos}[\,];\\
      \>\>    double \> {\fov bottom\_axis}[\,];\\
      \>\>    double \> {\fov ellipse\_ratio};\\
      \>\>    double \> {\fov axis\_dir}[\,];\\
      \>\>    double \> {\fov height};\\
      \>\>    SISLSurf \> **{\fov cyl};\\
      \>\>    int    \> *{\fov stat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov bottom\_pos}  \> - \> Center point of the bottom.\\
        \>\>    {\fov bottom\_axis} \> - \> One of the bottom axis
                                            (major or minor).\\
        \>\>    {\fov ellipse\_ratio} \> - \> Ratio between the other
                                              axis and bottom\_axis.\\
        \>\>    {\fov axis\_dir}    \> - \> Direction of the cylinder axis.\\
        \>\>    {\fov height}       \> - \> Height of the cone, can be negative.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov cyl}  \> - \> Pointer to the cylinder produced.\\
        \>\>    {\fov stat}     \> - \> Status messages\\
                \>\>\>\>\>              $> 0$   : Warning.\\
                \>\>\>\>\>              $= 0$   : Ok.\\
                \>\>\>\>\>              $< 0$   : Error.\\
\\
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    double \> {\fov bottom\_pos}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov bottom\_axis}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov ellipse\_ratio} = 1.0; /* Circular cylinder */\\
        \>\>    double \> {\fov axis\_dir}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov height}; \, /* Must be defined */\\
        \>\>    SISLSurf \> *{\fov cyl} = NULL;\\
        \>\>    int    \> {\fov stat} = 0;\\
        \>\>    \ldots \\
        \>\>s1021(\begin{minipg4}
        {\fov bottom\_pos}, {\fov bottom\_axis}, {\fov ellipse\_ratio}, {\fov axis\_dir},
        {\fov height}, \&{\fov cyl}, \&{\fov stat})
      \end{minipg4}\\
      \>\>    \ldots \\
      \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1022.tex
================================================
\subsection{Express a truncated cone as a surface.}
\funclabel{s1022}
\begin{minipg1}
  To express a truncated cone as a surface. The cone can be elliptic.
  The cone will be geometrically exact.
\end{minipg1}\\ \\
SYNOPSIS\\
        \>void s1022(\begin{minipg3}
        {\fov bottom\_pos}, {\fov bottom\_axis}, {\fov ellipse\_ratio}, {\fov axis\_dir},
        {\fov cone\_angle}, {\fov height}, {\fov cone}, {\fov stat})
      \end{minipg3}\\[0.3ex]
      \>\>    double \> {\fov bottom\_pos}[\,];\\
      \>\>    double \> {\fov bottom\_axis}[\,];\\
      \>\>    double \> {\fov ellipse\_ratio};\\
      \>\>    double \> {\fov axis\_dir}[\,];\\
      \>\>    double \> {\fov cone\_angle};\\
      \>\>    double \> {\fov height};\\
      \>\>    SISLSurf \> **{\fov cone};\\
      \>\>    int    \> *{\fov stat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov bottom\_pos}  \> - \> Center point of the bottom.\\
        \>\>    {\fov bottom\_axis} \> - \> One of the bottom axis (major or minor).\\
        \>\>    {\fov ellipse\_ratio} \> - \> Ratio between the other axis and bottom\_axis.\\
        \>\>    {\fov axis\_dir}    \> - \> Direction of the cone axis.\\
        \>\>    {\fov cone\_angle}  \> - \> \begin{minipg2}
                                              Angle between axis\_dir
                                              and the cone at the end of
                                              bottom\_axis, positive if
                                              the cone is sloping
                                              inwards.
                                            \end{minipg2}\\[0.8ex]
        \>\>    {\fov height}       \> - \> Height of the cone, can be negative.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov cone} \> - \> Pointer to the cone produced.\\
        \>\>    {\fov stat}     \> - \> Status messages\\
                \>\>\>\>\>              $> 0$   : Warning.\\
                \>\>\>\>\>              $= 0$   : Ok.\\
                \>\>\>\>\>              $< 0$   : Error.\\
\newpagetabs
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    double \> {\fov bottom\_pos}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov bottom\_axis}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov ellipse\_ratio} =0.5;  /* Elliptic cone */\\
        \>\>    double \> {\fov axis\_dir}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov cone\_angle}; \, /* Must be defined */\\
        \>\>    double \> {\fov height}; \, /* Must be defined */\\
        \>\>    SISLSurf \> *{\fov cone} = NULL;\\
        \>\>    int    \> {\fov stat} = 0;\\
        \>\>    \ldots \\
        \>\>s1022(\begin{minipg4}
          {\fov bottom\_pos}, {\fov bottom\_axis}, {\fov ellipse\_ratio}, {\fov axis\_dir},
          {\fov cone\_angle}, {\fov height}, \&{\fov cone}, \&{\fov stat})
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1023.tex
================================================
\subsection{Express the octants of a sphere as a surface.}
\funclabel{s1023}
\begin{minipg1}
  To express the octants of a sphere as a surface. This can also
  be used to describe the complete sphere.
  The sphere/the octants of the sphere will be geometrically exact.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void s1023(\begin{minipg3}
          {\fov centre},  {\fov axis},  {\fov equator},  {\fov latitude},  {\fov longitude},  {\fov sphere},  {\fov stat})
        \end{minipg3}\\[0.3ex]
        \>\>    double \> {\fov centre}[\,];\\
        \>\>    double \> {\fov axis}[\,];\\
        \>\>    double \> {\fov equator}[\,];\\
        \>\>    int    \> {\fov latitude};\\
        \>\>    int    \> {\fov longitude};\\
        \>\>    SISLSurf \> **{\fov sphere};\\
        \>\>    int    \> *{\fov stat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov centre}\> - \> Centre point of the sphere.\\
        \>\>    {\fov axis}\> - \> Axis of the sphere (towards the north pole).\\
        \>\>    {\fov equator}\> - \> Vector from centre to start point
                                      on the equator.\\
        \>\>    {\fov latitude} \> - \>
        \begin{minipg2}
          Flag indicating number of
          octants in north/south direction:
        \end{minipg2}\\[0.3ex]
          \>\>\>\>\> $= 1$ : Octants in the northern hemisphere.\\
          \>\>\>\>\> $= 2$ : Octants in both hemispheres.\\
        \>\>    {\fov longitude} \> - \>
        \begin{minipg2}
          Flag indicating number of octants along the equator.
          This is counted counterclockwise from equator.
        \end{minipg2}\\[0.3ex]
          \>\>\>\>\> $= 1$ : Octants in 1.\ quadrant.\\
          \>\>\>\>\> $= 2$ : Octants in 1.\ and 2.\ quadrant.\\
          \>\>\>\>\> $= 3$ : Octants in 1., 2.\ and 3.\ quadrant.\\
          \>\>\>\>\> $= 4$ : Octants in all quadrants.\\
\\
        \>Output Arguments:\\
        \>\>    {\fov sphere} \> - \> The sphere produced.\\
        \>\>    {\fov stat}     \> - \> Status messages\\
                \>\>\>\>\>              $> 0$   : warning\\
                \>\>\>\>\>              $= 0$   : ok\\
                \>\>\>\>\>              $< 0$   : error
\newpagetabs
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    double \> {\fov centre}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov axis}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov equator}[3]; \, /* Must be defined */\\
        \>\>    int    \> {\fov latitude} = 1;\\
        \>\>    int    \> {\fov longitude} = 2;\\
        \>\>    SISLSurf \> *{\fov sphere} = NULL;\\
        \>\>    int    \> {\fov stat} = 0;\\
        \>\>    \ldots \\
        \>\>s1023(\begin{minipg4}
          {\fov centre},  {\fov axis},  {\fov equator},  {\fov latitude},  {\fov longitude},  \&{\fov sphere},  \&{\fov stat});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1024.tex
================================================
\subsection{Express the octants of a torus as a surface.}
\funclabel{s1024}
\begin{minipg1}
  To express the octants of a torus as a surface. This can also be used
  to describe the complete torus.
  The torus/the octants of the torus will be geometrically exact.
\end{minipg1}\\ \\
SYNOPSIS\\
        \>void s1024(\begin{minipg3}
          {\fov centre}, {\fov axis}, {\fov equator}, {\fov minor\_radius}, {\fov start\_minor}, {\fov end\_minor},
          {\fov numb\_major}, {\fov torus}, {\fov stat})
        \end{minipg3}\\[0.3ex]
        \>\>    double \> {\fov centre}[\,];\\
        \>\>    double \> {\fov axis}[\,];\\
        \>\>    double \> {\fov equator}[\,];\\
        \>\>    double \> {\fov minor\_radius};\\
        \>\>    int    \> {\fov start\_minor};\\
        \>\>    int    \> {\fov end\_minor};\\
        \>\>    int    \> {\fov numb\_major};\\
        \>\>    SISLSurf \> **{\fov torus};\\
        \>\>    int    \> *{\fov stat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov centre} \> - \> Centre point of the torus.\\
        \>\>    {\fov axis}   \> - \> Normal to the torus plane.\\
        \>\>    {\fov equator}\> - \> \begin{minipg2}
                                        Vector from centre to start point
                                        on the major circle.
                                      \end{minipg2}\\[0.8ex]
        \>\>    {\fov minor\_radius} \> - \> Radius of the minor circle.\\
        \>\>    {\fov start\_minor}  \> - \> \begin{minipg2}
                                               Start quadrant on the
                                               minor circle (1,2,3 or 4).
                                               This is counted clockwise
                                               from the extremum in the
                                               direction of axis.
                                             \end{minipg2}\\[0.8ex]
        \>\>    {\fov end\_minor}    \> - \> \begin{minipg2}
                                               End quadrant on the minor
                                               circle (1,2,3 or 4). This
                                               is counted clockwise from
                                               the extremum in the
                                               direction of axis.
                                             \end{minipg2}\\[0.8ex]
        \>\>    {\fov numb\_major}   \> - \> \begin{minipg2}
                                               Number of quadrants on
                                               the major circle (1,2,3
                                               or 4). This is counted
                                               counterclockwise from
                                               equator.
                                             \end{minipg2}\\[0.8ex]
\\
        \>Output Arguments:\\
        \>\>    {\fov torus} \> - \> Pointer to the torus produced.\\
        \>\>    {\fov stat}     \> - \> Status messages\\
                \>\>\>\>\>              $> 0$   : Warning.\\
                \>\>\>\>\>              $= 0$   : Ok.\\
                \>\>\>\>\>              $< 0$   : Error.\\
\newpagetabs
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    double \> {\fov centre}[3]; \,/* Must be defined */\\
        \>\>    double \> {\fov axis}[3]; \, /* Must be defined */\\
        \>\>    double \> {\fov equator}[3]; \,/* Must be defined. Length gives major radius */\\
        \>\>    double \> {\fov minor\_radius}; \, /* Must be defined */\\
        \>\>    int    \> {\fov start\_minor} = 1;\\
        \>\>    int    \> {\fov end\_minor} = 4;  /* start\_minor and end\_minor defines full circle */\\
        \>\>    int    \> {\fov numb\_major} = 2;\\
        \>\>    SISLSurf \> *{\fov torus} = NULL;\\
        \>\>    int    \> {\fov stat} = 0;\\
        \>\>    \ldots \\
        \>\>s1024(\begin{minipg4}
          {\fov centre}, {\fov axis}, {\fov equator}, {\fov minor\_radius}, {\fov start\_minor}, {\fov end\_minor},
          {\fov numb\_major}, \&{\fov torus}, \&{\fov stat})
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1025.tex
================================================
\subsection{Insert a given set of knots, in each parameter direction, into the description of a surface.}
\funclabel{s1025}
\begin{minipg1}
  Insert a given set of knots in each parameter direction
  into the description of a surface.\\
  NOTE       : When the surface is periodic in one direction, the input
               parameter values in this direction
               must lie in the half-open interval $[et[kk-1], et[kn)$, the function
               will automatically update the extra knots and
               coeffisients.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void s1025(\begin{minipg3}
          {\fov ps},  {\fov epar1},  {\fov inpar1},  {\fov epar2},  {\fov inpar2},  {\fov rsnew},  {\fov jstat})
        \end{minipg3}\\[0.3ex]
        \>\>    SISLSurf \> *{\fov ps};\\
        \>\>    double   \> {\fov epar1}[\,];\\
        \>\>    int      \> {\fov inpar1};\\
        \>\>    double   \> {\fov epar2}[\,];\\
        \>\>    int      \> {\fov inpar2};\\
        \>\>    SISLSurf \> **{\fov rsnew};\\
        \>\>    int      \> *{\fov jstat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov ps}\> - \>  \begin{minipg2}
                     Surface to be refined.
                               \end{minipg2}\\
        \>\>    {\fov epar1}\> - \>  \begin{minipg2}
                     Knots to insert in first parameter direction.
                               \end{minipg2}\\
        \>\>    {\fov inpar1}\> - \>  \begin{minipg2}
                     Number of new knots in first parameter direction.
                               \end{minipg2}\\
        \>\>    {\fov epar2}\> - \>  \begin{minipg2}
                     Knots to insert in second parameter direction.
                               \end{minipg2}\\
        \>\>    {\fov inpar2}\> - \>  \begin{minipg2}
                     Number of new knots in second parameter direction.
                               \end{minipg2}\\
\\
        \>Output Arguments:\\
        \>\>    {\fov rsnew}\> - \>  \begin{minipg2}
                     The new, refined surface.
                                \end{minipg2}\\
        \>\>    {\fov stat}     \> - \> Status messages\\
                \>\>\>\>\>      $> 0$ : \>      Warning.\\
                \>\>\>\>\>      $= 0$ : \>      Ok.\\
                \>\>\>\>\>      $< 0$ : \>      Error.\\
\newpagetabs
EXAMPLE OF USE\\
        \>      \{ \\
        \>\>    SISLSurf \> *{\fov ps}; \, /* Must be defined */\\
        \>\>    double   \> {\fov epar1}[3]; \, /* Must be defined */\\
        \>\>    int      \> {\fov inpar1} = 3;\\
        \>\>    double   \> {\fov epar2}[4]; \, /* Must be defined */\\
        \>\>    int      \> {\fov inpar2} = 4;\\
        \>\>    SISLSurf \> *{\fov rsnew} = NULL;\\
        \>\>    int      \> {\fov jstat} = 0;\\
        \>\>    \ldots \\
        \>\>s1025(\begin{minipg4}
          {\fov ps},  {\fov epar1},  {\fov inpar1},  {\fov epar2},  {\fov inpar2},  \&{\fov rsnew},  \&{\fov jstat});
        \end{minipg4}\\
        \>\>    \ldots \\
        \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1221.tex
================================================
\subsection{Compute the position and the right-hand derivatives of a
curve at a given parameter value.}
\funclabel{s1221}
\begin{minipg1}
  To compute the positione and the first derivatives of a curve at
  a given parameter value.
  Evaluation from the right hand side.
\end{minipg1} \\ \\
SYNOPSIS\\
        \>void s1221(\begin{minipg3}
        {\fov curve}, {\fov der}, {\fov parvalue}, {\fov leftknot},
        {\fov derive}, {\fov stat})
                \end{minipg3}\\[0.3ex]
                \>\>    SISLCurve       \>      *{\fov curve};\\
                \>\>    int     \>      {\fov der};\\
                \>\>    double  \>      {\fov parvalue};\\
                \>\>    int     \>      *{\fov leftknot};\\
                \>\>    double  \>      {\fov derive}[\,];\\
                \>\>    int     \>      *{\fov stat};\\
\\
ARGUMENTS\\
        \>Input Arguments:\\
        \>\>    {\fov curve}    \> - \> \begin{minipg2}
                                Pointer to the curve for which position and
                                derivatives are to be computed.
                                \end{minipg2}\\[0.3ex]
        \>\>    {\fov der}      \> - \> The number (order) of derivatives to compute.\\
                \>\>\>\>\>              $< 0$   : Error.\\
                \>\>\>\>\>              $= 0$   : Compute position.\\
                \>\>\>\>\>              $= 1$   : Compute position and derivative.\\
                \>\>\>\>\>              etc.\\
        \>\>    {\fov parvalue}\> - \>  \begin{minipg2}
                                The parameter value at which to compute position
                                and derivatives.
                                \end{minipg2}\\[0.3ex]
\\
        \>Input/Output Arguments:\\
        \>\>    {\fov leftknot}\> - \>  \begin{minipg2}
                                Pointer to the interval in the knot
                                vector where {\fov parvalue}
                                is located. If $et[\,]$ is the knot vector, the relation:\\
                                \[ et[leftknot] \leq parvalue < et[leftknot+1] \]
                                should hold. (If $parvalue\geq et[in]$)
                                then {\fov leftknot} should be
                                ``in-1''. Here ``in'' is the number of coefficients.)
                                If leftknot does not have the right value when entering
                                the routine, its value will be changed to the value
                                satisfying the above condition.
                                \end{minipg2}\\
\newpagetabs
        \>Output Arguments:\\
        \>\>    {\fov derive}   \> - \> \begin{minipg2}
                                        Double array of dimension $(der+1)\times dim$
                                        containing the position and derivative vectors.
                                        ({\fov dim} is
                                         the dimension of the Euclidean
                                        space in which the curve lies.) These vectors are
                                        stored in the following order: first the dim
                                        components of the position vector, then the dim
                                        components of the tangent vector, then the dim
                                        components of the second derivative vector, and so
                                        on. (The C declaration of derive as a two dimensional
                                        array would therefore be
                                        $derive[der+1][dim]$.)

                                \end{minipg2}\\[0.8ex]
        \>\>    {\fov stat}     \> - \> Status messages\\
                \>\>\>\>\>              $> 0$   : warning\\
                \>\>\>\>\>              $= 0$   : ok\\
                \>\>\>\>\>              $< 0$   : error\\
\\
EXAMPLE OF USE\\
                \>      \{ \\
                \>\>    SISLCurve       \>      *{\fov curve}; \, /* Must be defined */\\
                \>\>    int     \>      {\fov der} = 3;\\
                \>\>    double  \>      {\fov parvalue}; \, /* Must be defined */\\
                \>\>    int     \>      {\fov leftknot} = 0; /* Define initially as zero. For consequtive evaluations \\
                \>\>\>\>\>\> leave leftknot as returned from s1221 */\\
                \>\>    double  \>      {\fov derive}[12]; /* Curve dimension times (der+1) */\\\
                \>\>    int     \>      {\fov stat} = 0;\\
                \>\>    \ldots \\
        \>\>s1221(\begin{minipg4}
                {\fov curve}, {\fov der}, {\fov parvalue}, \&{\fov leftknot},
                {\fov derive}, \&{\fov stat});
                        \end{minipg4}\\
                \>\>    \ldots \\
                \>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1225.tex
================================================
\subsection{Evaluate position, first derivative, curvature and radius of curvature of a curve at a given parameter value, from the left hand side.}
\funclabel{s1225}
\begin{minipg1}
Evaluate position, derivatives, curvature and radius of
               curvature of a curve at a given parameter value, from the
               left hand side.
\end{minipg1} \\ \\
SYNOPSIS\\
        \> void s1225(\begin{minipg3}
            {\fov curve}, {\fov der}, {\fov parvalue}, {\fov leftknot}, {\fov derive}, {\fov curvature},
	   radius\_of\_{\fov curvature}, {\fov jstat})
                \end{minipg3}\\
                \>\>    SISLCurve    \>  *{\fov curve};\\
                \>\>    int    \>  {\fov der};\\
                \>\>    double \> parvalue;\\
                \>\>    int    \>  *{\fov leftknot};\\
                \>\>    double \> derive[\,];\\
                \>\>    double \> curvature[\,];\\
                \>\>    double \> *{\fov radius}\_of\_curvature;\\
                \>\>    int    \>  *{\fov jstat};\\
\\
ARGUMENTS\\
	\>Input Arguments:\\
        \>\>    {\fov curve}\> - \>  \begin{minipg2}
                     Pointer to the curve for which position
                       and derivatives are to be computed.
                               \end{minipg2}\\
        \>\>    {\fov der}\> - \> The number of derivatives to compute. \\
	            \>\>\>\>\>          $ < 0$ : Error. \\
		    \>\>\>\>\>          $ = 0$ : Compute position.\\
		    \>\>\>\>\>          $ = 1$ : Compute position and first derivative.\\
		    \>\>\>\>\>          etc. \\
        \>\>    {\fov parvalue}\> - \>  \begin{minipg2}
                     The parameter value at which to compute
                       position and derivatives.
                               \end{minipg2}\\
\\
	\>Input/Output Arguments:\\
        \>\>    {\fov leftknot}\> - \>  \begin{minipg2}
                     Pointer to the interval in the knot vector
                        where ax is located. If et is the knot vector,
                        the relation
                          $$et[ileft] < parvalue <= et[ileft+1]$$
                        should hold. (If parvalue = et[ik-1] then ileft
                        should be ik-1. Here in is the number of B-spline
                        coefficients.)
                        If ileft does not have the right value upon
                        entry to the routine, its value will be changed
                        to the value satisfying the above condition.
                               \end{minipg2}\\
\\
	\>Output Arguments:\\
        \>\>    {\fov derive}\> - \>  \begin{minipg2}
                     Double array of dimension $[(ider+1)*idim]$
                       containing the position and derivative vectors.
                       (idim is the number of components of each B-spline
                       coefficient, i.e. the dimension of the Euclidean
                       space in which the curve lies.)
                       These vectors are stored in the following order:
                       First the idim components of the position vector,
                       then the idim components of the tangent vector,
                       then the idim components of the second derivative
                       vector, and so on.
                       (The C declaration of eder as a two dimensional array
                       would therefore be eder[ider+1,idim].)
                               \end{minipg2}\\
        \>\>    {\fov curvature}\> - \>  \begin{minipg2}
                     Array of dimension idim
                               \end{minipg2}\\
        \>\>    {\fov radius}\> - \>  \begin{minipg2}
                    1, indicates
                       that the radius of curvature is infinit.
                               \end{minipg2}\\
        \>\>    {\fov jstat}\> - \> Status messages \\
                    \>\>\>\>\>          $ > 0$      : Warning. \\
                    \>\>\>\>\>          $ = 0$      : Ok. \\
                    \>\>\>\>\>          $ < 0$      : Error. \\
					 
\\
EXAMPLE OF USE\\
		\>      \{ \\

                \>\>    SISLCurve    \>  *{\fov curve}; \, /* Must be defined */\\
                \>\>    int    \>  {\fov der} = 1;\\
                \>\>    double \> parvalue; \, /* Must be defined */\\
                \>\>    int    \>  {\fov leftknot} = 0; /* Define initially as zero. For consequtive evaluations \\
                \>\>\>\>\>\> leave leftknot as returned from s1225 */\\
                \>\>    double \> derive[6]; /* Curve dimension times (der + 1) */\\
                \>\>    double \> curvature[3]; /* Curve dimension */\\
                \>\>    double \> {\fov radius}\_of\_curvature = 0;\\
                \>\>    int    \>  {\fov jstat} = 0;\\                \>\>    \ldots \\
        \>\>s1225(\begin{minipg4}
            {\fov curve}, {\fov der}, {\fov parvalue}, {\fov leftknot}, {\fov derive}, {\fov curvature},
	   \&radius\_of\_{\fov curvature}, \&{\fov jstat});
                \end{minipg4}\\
                \>\>    \ldots \\
		\>      \}
\end{tabbing}


================================================
FILE: doc/manual/func/s1226.tex
================================================
\subsection{Evaluate position, first derivative, curvature and radius of
               curvature of a curve at a given parameter value, from the
               right hand side.}
\funclabel{s1226}
\begin{minipg1}
Evaluate position, derivatives, curvature and radius of
               curvature of a curve at a given parameter value, from the
               right hand side.
\end{minipg1} \\ \\
SYNOPSIS\\
        \> void s1226(\begin{minipg3}
            {\fov curve}, {\fov der}, {\fov parvalue}, {\fov leftknot}, {\fov derive}, {\fov curvature},
	   radius\_of\_{\fov curvature}, {\fov jstat})
                \end{minipg3}\\
                \>\>    SISLCurve    \>  *{\fov curve};\\
                \>\>    int    \>  {\fov der};\\
                \>\>    double \> parvalue;\\
                \>\>    int    \>  *{\fov leftknot};\\
                \>\>    double \> derive[\,];\\
                \>\>    double \> curvature[\,];\\
                \>\>    double \>*{\fov radius}\_of\_curvature;\\
                \>\>    int    \>  *{\fov jstat};\\
\\
ARGUMENTS\\
	\>Input Arguments:\\
        \>\>    {\fov curve}\> - \>  \begin{minipg2}
                     Pointer to the curve for which position
                       and derivatives are to be computed.
                               \end{minipg2}\\
        \>\>    {\fov der}\> - \> The number of derivatives to compute.\\
	            \>\>\>\>\>       $< 0$ : Error.\\
		    \>\>\>\>\>       $= 0$ : Compute position.\\
		    \>\>\>\>\>       $= 1$ : Compute position and first derivative.\\
		    \>\>\>\>\>       etc.\\
        \>\>    {\fov parvalue}\> - \>  \begin{minipg2}
                     The parameter value at which to compute
                       position and derivatives.
                               \end{minipg2}\\
\\
	\>Input/Output Arguments:\\
        \>\>    {\fov leftknot}\> - \>  \begin{minipg2}
                     Pointer to the interval in the knot vector
                        where ax is located. If et is the knot vector,
                        the relation
                          $$et[ileft] < parvalue <= et[ileft+1]$$
                        should hold. (If parvalue = et[ik-1] then ileft
                        should be ik-1. Here in is the number of B-spline
                        coefficients.)
                        If ileft does not have the right value upon
                        entry to the routine, its value will be changed
                        to the value satisfying the above condition.
                       
Download .txt
gitextract_swl2ex7t/

├── .gitignore
├── CMakeLists.txt
├── COPYING
├── ChangeLog
├── INSTALL
├── README
├── app/
│   ├── prog1.c
│   ├── s1013prob.C
│   ├── s1320prob.C
│   ├── s1606prob.C
│   └── surf_surf_int.C
├── cmake/
│   └── sislConfig.cmake.in
├── doc/
│   └── manual/
│       ├── chap_curve_analysis.ilg
│       ├── chap_curve_analysis.ind
│       ├── chap_curve_analysis.tex
│       ├── chap_curve_definition.tex
│       ├── chap_curve_interrogation.tex
│       ├── chap_curve_utilities.tex
│       ├── chap_data_reduction.tex
│       ├── chap_error_codes.tex
│       ├── chap_intro_abridged.tex
│       ├── chap_introduction.tex
│       ├── chap_surface_analysis.tex
│       ├── chap_surface_definition.tex
│       ├── chap_surface_interrogation.tex
│       ├── chap_surface_utilities.tex
│       ├── foreword.tex
│       ├── func/
│       │   ├── copyCurve.tex
│       │   ├── copySurface.tex
│       │   ├── freeCurve.tex
│       │   ├── freeIntcrvlist.tex
│       │   ├── freeIntcurve.tex
│       │   ├── freeSurf.tex
│       │   ├── newCurve.tex
│       │   ├── newIntcurve.tex
│       │   ├── newSurf.tex
│       │   ├── newbox.tex
│       │   ├── newdir.tex
│       │   ├── s1001.tex
│       │   ├── s1011.tex
│       │   ├── s1012.tex
│       │   ├── s1013.tex
│       │   ├── s1014.tex
│       │   ├── s1015.tex
│       │   ├── s1016.tex
│       │   ├── s1017.tex
│       │   ├── s1018.tex
│       │   ├── s1021.tex
│       │   ├── s1022.tex
│       │   ├── s1023.tex
│       │   ├── s1024.tex
│       │   ├── s1025.tex
│       │   ├── s1221.tex
│       │   ├── s1225.tex
│       │   ├── s1226.tex
│       │   ├── s1227.tex
│       │   ├── s1231.tex
│       │   ├── s1233.tex
│       │   ├── s1237.tex
│       │   ├── s1238.tex
│       │   ├── s1240.tex
│       │   ├── s1241.tex
│       │   ├── s1242.tex
│       │   ├── s1243.tex
│       │   ├── s1302.tex
│       │   ├── s1303.tex
│       │   ├── s1310.tex
│       │   ├── s1314.tex
│       │   ├── s1315.tex
│       │   ├── s1316.tex
│       │   ├── s1317.tex
│       │   ├── s1318.tex
│       │   ├── s1319.tex
│       │   ├── s1327.tex
│       │   ├── s1328.tex
│       │   ├── s1332.tex
│       │   ├── s1333.tex
│       │   ├── s1334.tex
│       │   ├── s1340.tex
│       │   ├── s1341.tex
│       │   ├── s1342.tex
│       │   ├── s1343.tex
│       │   ├── s1345.tex
│       │   ├── s1346.tex
│       │   ├── s1347.tex
│       │   ├── s1348.tex
│       │   ├── s1356.tex
│       │   ├── s1357.tex
│       │   ├── s1358.tex
│       │   ├── s1360.tex
│       │   ├── s1363.tex
│       │   ├── s1364.tex
│       │   ├── s1365.tex
│       │   ├── s1369.tex
│       │   ├── s1371.tex
│       │   ├── s1372.tex
│       │   ├── s1373.tex
│       │   ├── s1374.tex
│       │   ├── s1375.tex
│       │   ├── s1379.tex
│       │   ├── s1380.tex
│       │   ├── s1383.tex
│       │   ├── s1386.tex
│       │   ├── s1387.tex
│       │   ├── s1388.tex
│       │   ├── s1389.tex
│       │   ├── s1390.tex
│       │   ├── s1391.tex
│       │   ├── s1401.tex
│       │   ├── s1421.tex
│       │   ├── s1422.tex
│       │   ├── s1424.tex
│       │   ├── s1425.tex
│       │   ├── s1436.tex
│       │   ├── s1437.tex
│       │   ├── s1439.tex
│       │   ├── s1440.tex
│       │   ├── s1441.tex
│       │   ├── s1442.tex
│       │   ├── s1443.tex
│       │   ├── s1450.tex
│       │   ├── s1451.tex
│       │   ├── s1452.tex
│       │   ├── s1501.tex
│       │   ├── s1502.tex
│       │   ├── s1503.tex
│       │   ├── s1506.tex
│       │   ├── s1508.tex
│       │   ├── s1510.tex
│       │   ├── s1511.tex
│       │   ├── s1514.tex
│       │   ├── s1515.tex
│       │   ├── s1518.tex
│       │   ├── s1520.tex
│       │   ├── s1522.tex
│       │   ├── s1529.tex
│       │   ├── s1530.tex
│       │   ├── s1534.tex
│       │   ├── s1535.tex
│       │   ├── s1536.tex
│       │   ├── s1537.tex
│       │   ├── s1538.tex
│       │   ├── s1539.tex
│       │   ├── s1542.tex
│       │   ├── s1600.tex
│       │   ├── s1601.tex
│       │   ├── s1602.tex
│       │   ├── s1603.tex
│       │   ├── s1604.tex
│       │   ├── s1606.tex
│       │   ├── s1607.tex
│       │   ├── s1608.tex
│       │   ├── s1609.tex
│       │   ├── s1610.tex
│       │   ├── s1611.tex
│       │   ├── s1613.tex
│       │   ├── s1620.tex
│       │   ├── s1630.tex
│       │   ├── s1706.tex
│       │   ├── s1710.tex
│       │   ├── s1711.tex
│       │   ├── s1712.tex
│       │   ├── s1713.tex
│       │   ├── s1714.tex
│       │   ├── s1715.tex
│       │   ├── s1716.tex
│       │   ├── s1720.tex
│       │   ├── s1730.tex
│       │   ├── s1731.tex
│       │   ├── s1732.tex
│       │   ├── s1733.tex
│       │   ├── s1740.tex
│       │   ├── s1744.tex
│       │   ├── s1745.tex
│       │   ├── s1746.tex
│       │   ├── s1750.tex
│       │   ├── s1774.tex
│       │   ├── s1775.tex
│       │   ├── s1850.tex
│       │   ├── s1851.tex
│       │   ├── s1852.tex
│       │   ├── s1853.tex
│       │   ├── s1854.tex
│       │   ├── s1855.tex
│       │   ├── s1856.tex
│       │   ├── s1857.tex
│       │   ├── s1858.tex
│       │   ├── s1859.tex
│       │   ├── s1860.tex
│       │   ├── s1870.tex
│       │   ├── s1871.tex
│       │   ├── s1920.tex
│       │   ├── s1921.tex
│       │   ├── s1940.tex
│       │   ├── s1953.tex
│       │   ├── s1954.tex
│       │   ├── s1955.tex
│       │   ├── s1957.tex
│       │   ├── s1958.tex
│       │   ├── s1961.tex
│       │   ├── s1962.tex
│       │   ├── s1963.tex
│       │   ├── s1965.tex
│       │   ├── s1966.tex
│       │   ├── s1967.tex
│       │   ├── s1968.tex
│       │   ├── s1986.tex
│       │   ├── s1987.tex
│       │   ├── s1988.tex
│       │   ├── s1989.tex
│       │   ├── s1990.tex
│       │   ├── s1991.tex
│       │   ├── s1992cu.tex
│       │   ├── s1992su.tex
│       │   ├── s2500.tex
│       │   ├── s2502.tex
│       │   ├── s2504.tex
│       │   ├── s2506.tex
│       │   ├── s2508.tex
│       │   ├── s2510.tex
│       │   ├── s2532.tex
│       │   ├── s2536.tex
│       │   ├── s2540.tex
│       │   ├── s2542.tex
│       │   ├── s2544.tex
│       │   ├── s2545.tex
│       │   ├── s2550.tex
│       │   ├── s2553.tex
│       │   ├── s2556.tex
│       │   ├── s2559.tex
│       │   ├── s2562.tex
│       │   ├── s6shadepol.tex
│       │   └── secshade.tex
│       ├── licensing_information.tex
│       ├── manual.aux
│       ├── manual.idx
│       ├── manual.ilg
│       ├── manual.ind
│       ├── manual.log
│       ├── manual.tex
│       ├── manual.toc
│       ├── raytracing.ps
│       ├── sample_programs.tex
│       ├── sec_box_object.tex
│       ├── sec_cone_object.tex
│       ├── sec_curve_object.tex
│       ├── sec_intcurve_object.tex
│       ├── sec_spline_curve.tex
│       ├── sec_spline_surface.tex
│       ├── sec_surface_object.tex
│       ├── sislman.sty
│       ├── sislman2.sty
│       ├── surf1.fig
│       ├── surf1.ps
│       ├── titlepage.sty
│       ├── type/
│       │   ├── SISLBox.tex
│       │   ├── SISLCurve.tex
│       │   ├── SISLDir.tex
│       │   ├── SISLIntcurve.tex
│       │   ├── SISLSurf.tex
│       │   └── test.tex
│       └── viewer.tex
├── examples/
│   ├── example01.cpp
│   ├── example02.cpp
│   ├── example03.cpp
│   ├── example04.cpp
│   ├── example05.cpp
│   ├── example06.cpp
│   ├── example07.cpp
│   ├── example08.cpp
│   ├── example09.cpp
│   ├── example10.cpp
│   ├── example11.cpp
│   ├── example12.cpp
│   ├── example13.cpp
│   ├── example14.cpp
│   └── example15.cpp
├── include/
│   ├── sisl-copyright.h
│   ├── sisl.h
│   └── sislP.h
├── src/
│   ├── construct.c
│   ├── crvarctang.c
│   ├── crvcrvtang.c
│   ├── crvlintang.c
│   ├── destruct.c
│   ├── ev_cv_off.c
│   ├── eval_2_crv.c
│   ├── evalcrvarc.c
│   ├── hp_s1880.c
│   ├── intjoinper.c
│   ├── make3D.c
│   ├── makecvkreg.c
│   ├── makesfkreg.c
│   ├── maketracks.c
│   ├── mk_cv_cycl.c
│   ├── newknots.c
│   ├── pickcrvsf.c
│   ├── pocrvtang.c
│   ├── refine_all.c
│   ├── s1001.c
│   ├── s1011.c
│   ├── s1012.c
│   ├── s1013.c
│   ├── s1014.c
│   ├── s1015.c
│   ├── s1016.c
│   ├── s1017.c
│   ├── s1018.c
│   ├── s1021.c
│   ├── s1022.c
│   ├── s1023.c
│   ├── s1024.c
│   ├── s1025.c
│   ├── s1119.c
│   ├── s1161.c
│   ├── s1162.c
│   ├── s1172.c
│   ├── s1173.c
│   ├── s1174.c
│   ├── s1190.c
│   ├── s1192.c
│   ├── s1219.c
│   ├── s1220.c
│   ├── s1221.c
│   ├── s1222.c
│   ├── s1223.c
│   ├── s1224.c
│   ├── s1225.c
│   ├── s1226.c
│   ├── s1227.c
│   ├── s1231.c
│   ├── s1232.c
│   ├── s1233.c
│   ├── s1235.c
│   ├── s1236.c
│   ├── s1237.c
│   ├── s1238.c
│   ├── s1239.c
│   ├── s1240.c
│   ├── s1241.c
│   ├── s1243.c
│   ├── s1244.c
│   ├── s1245.c
│   ├── s1251.c
│   ├── s1252.c
│   ├── s1291.c
│   ├── s1301.c
│   ├── s1302.c
│   ├── s1303.c
│   ├── s1304.c
│   ├── s1305.c
│   ├── s1306.c
│   ├── s1307.c
│   ├── s1308.c
│   ├── s1309.c
│   ├── s1310.c
│   ├── s1311.c
│   ├── s1312.c
│   ├── s1313.c
│   ├── s1314.c
│   ├── s1315.c
│   ├── s1316.c
│   ├── s1317.c
│   ├── s1318.c
│   ├── s1319.c
│   ├── s1320.c
│   ├── s1321.c
│   ├── s1322.c
│   ├── s1323.c
│   ├── s1324.c
│   ├── s1325.c
│   ├── s1326.c
│   ├── s1327.c
│   ├── s1328.c
│   ├── s1329.c
│   ├── s1330.c
│   ├── s1331.c
│   ├── s1332.c
│   ├── s1333.c
│   ├── s1333count.c
│   ├── s1333cycli.c
│   ├── s1334.c
│   ├── s1339.c
│   ├── s1340.c
│   ├── s1341.c
│   ├── s1342.c
│   ├── s1343.c
│   ├── s1345.c
│   ├── s1346.c
│   ├── s1347.c
│   ├── s1348.c
│   ├── s1349.c
│   ├── s1350.c
│   ├── s1351.c
│   ├── s1352.c
│   ├── s1353.c
│   ├── s1354.c
│   ├── s1355.c
│   ├── s1356.c
│   ├── s1357.c
│   ├── s1358.c
│   ├── s1359.c
│   ├── s1360.c
│   ├── s1361.c
│   ├── s1362.c
│   ├── s1363.c
│   ├── s1364.c
│   ├── s1365.c
│   ├── s1366.c
│   ├── s1367.c
│   ├── s1369.c
│   ├── s1370.c
│   ├── s1371.c
│   ├── s1372.c
│   ├── s1373.c
│   ├── s1374.c
│   ├── s1375.c
│   ├── s1376.c
│   ├── s1377.c
│   ├── s1378.c
│   ├── s1379.c
│   ├── s1380.c
│   ├── s1381.c
│   ├── s1382.c
│   ├── s1383.c
│   ├── s1384.c
│   ├── s1385.c
│   ├── s1386.c
│   ├── s1387.c
│   ├── s1388.c
│   ├── s1389.c
│   ├── s1390.c
│   ├── s1391.c
│   ├── s1393.c
│   ├── s1399.c
│   ├── s1401.c
│   ├── s1421.c
│   ├── s1422.c
│   ├── s1424.c
│   ├── s1425.c
│   ├── s1435.c
│   ├── s1436.c
│   ├── s1437.c
│   ├── s1438.c
│   ├── s1439.c
│   ├── s1440.c
│   ├── s1450.c
│   ├── s1451.c
│   ├── s1452.c
│   ├── s1500.c
│   ├── s1501.c
│   ├── s1502.c
│   ├── s1503.c
│   ├── s1504.c
│   ├── s1505.c
│   ├── s1506.c
│   ├── s1507.c
│   ├── s1508.c
│   ├── s1510.c
│   ├── s1511.c
│   ├── s1512.c
│   ├── s1513.c
│   ├── s1514.c
│   ├── s1515.c
│   ├── s1516.c
│   ├── s1517.c
│   ├── s1518.c
│   ├── s1520.c
│   ├── s1521.c
│   ├── s1522.c
│   ├── s1528.c
│   ├── s1529.c
│   ├── s1530.c
│   ├── s1531.c
│   ├── s1534.c
│   ├── s1535.c
│   ├── s1536.c
│   ├── s1537.c
│   ├── s1538.c
│   ├── s1539.c
│   ├── s1540.c
│   ├── s1541.c
│   ├── s1542.c
│   ├── s1600.c
│   ├── s1601.c
│   ├── s1602.c
│   ├── s1603.c
│   ├── s1604.c
│   ├── s1605.c
│   ├── s1606.c
│   ├── s1607.c
│   ├── s1608.c
│   ├── s1609.c
│   ├── s1611.c
│   ├── s1612.c
│   ├── s1613.c
│   ├── s1613bez.c
│   ├── s1614.c
│   ├── s1615.c
│   ├── s1616.c
│   ├── s1617.c
│   ├── s1618.c
│   ├── s1619.c
│   ├── s1620.c
│   ├── s1630.c
│   ├── s1631.c
│   ├── s1700.c
│   ├── s1701.c
│   ├── s1705.c
│   ├── s1706.c
│   ├── s1707.c
│   ├── s1708.c
│   ├── s1710.c
│   ├── s1711.c
│   ├── s1712.c
│   ├── s1713.c
│   ├── s1714.c
│   ├── s1715.c
│   ├── s1716.c
│   ├── s1720.c
│   ├── s1730.c
│   ├── s1731.c
│   ├── s1732.c
│   ├── s1733.c
│   ├── s1741.c
│   ├── s1750.c
│   ├── s1753.c
│   ├── s1754.c
│   ├── s1755.c
│   ├── s1770.c
│   ├── s17702d.c
│   ├── s1771.c
│   ├── s1772.c
│   ├── s1773.c
│   ├── s1774.c
│   ├── s1775.c
│   ├── s1780.c
│   ├── s1785.c
│   ├── s1786.c
│   ├── s1787.c
│   ├── s1788.c
│   ├── s1789.c
│   ├── s1790.c
│   ├── s1791.c
│   ├── s1792.c
│   ├── s1795.c
│   ├── s1796.c
│   ├── s1797.c
│   ├── s1830.c
│   ├── s1834.c
│   ├── s1839.c
│   ├── s1840.c
│   ├── s1850.c
│   ├── s1851.c
│   ├── s1852.c
│   ├── s1853.c
│   ├── s1854.c
│   ├── s1855.c
│   ├── s1856.c
│   ├── s1857.c
│   ├── s1858.c
│   ├── s1859.c
│   ├── s1860.c
│   ├── s1870.c
│   ├── s1871.c
│   ├── s1880.c
│   ├── s1890.c
│   ├── s1891.c
│   ├── s1893.c
│   ├── s1894.c
│   ├── s1896.c
│   ├── s1897.c
│   ├── s1900.c
│   ├── s1901.c
│   ├── s1902.c
│   ├── s1903.c
│   ├── s1904.c
│   ├── s1905.c
│   ├── s1906.c
│   ├── s1907.c
│   ├── s1908.c
│   ├── s1909.c
│   ├── s1910.c
│   ├── s1911.c
│   ├── s1912.c
│   ├── s1916.c
│   ├── s1917.c
│   ├── s1918.c
│   ├── s1919.c
│   ├── s1920.c
│   ├── s1921.c
│   ├── s1924.c
│   ├── s1925.c
│   ├── s1926.c
│   ├── s1927.c
│   ├── s1930.c
│   ├── s1931.c
│   ├── s1931unit.c
│   ├── s1932.c
│   ├── s1933.c
│   ├── s1934.c
│   ├── s1935.c
│   ├── s1936.c
│   ├── s1937.c
│   ├── s1938.c
│   ├── s1940.c
│   ├── s1941.c
│   ├── s1942.c
│   ├── s1943.c
│   ├── s1944.c
│   ├── s1945.c
│   ├── s1946.c
│   ├── s1947.c
│   ├── s1948.c
│   ├── s1949.c
│   ├── s1950.c
│   ├── s1951.c
│   ├── s1953.c
│   ├── s1954.c
│   ├── s1955.c
│   ├── s1956.c
│   ├── s1957.c
│   ├── s1958.c
│   ├── s1959.c
│   ├── s1960.c
│   ├── s1961.c
│   ├── s1962.c
│   ├── s1963.c
│   ├── s1965.c
│   ├── s1966.c
│   ├── s1967.c
│   ├── s1968.c
│   ├── s1986.c
│   ├── s1987.c
│   ├── s1988.c
│   ├── s1989.c
│   ├── s1990.c
│   ├── s1991.c
│   ├── s1992.c
│   ├── s1993.c
│   ├── s1994.c
│   ├── s2500.c
│   ├── s2501.c
│   ├── s2502.c
│   ├── s2503.c
│   ├── s2504.c
│   ├── s2505.c
│   ├── s2506.c
│   ├── s2507.c
│   ├── s2508.c
│   ├── s2509.c
│   ├── s2510.c
│   ├── s2511.c
│   ├── s2512.c
│   ├── s2513.c
│   ├── s2514.c
│   ├── s2515.c
│   ├── s2516.c
│   ├── s2532.c
│   ├── s2533.c
│   ├── s2534.c
│   ├── s2535.c
│   ├── s2536.c
│   ├── s2540.c
│   ├── s2541.c
│   ├── s2542.c
│   ├── s2543.c
│   ├── s2544.c
│   ├── s2545.c
│   ├── s2550.c
│   ├── s2551.c
│   ├── s2553.c
│   ├── s2554.c
│   ├── s2555.c
│   ├── s2556.c
│   ├── s2557.c
│   ├── s2558.c
│   ├── s2559.c
│   ├── s2560.c
│   ├── s2561.c
│   ├── s2562.c
│   ├── s6addcurve.c
│   ├── s6affdist.c
│   ├── s6ang.c
│   ├── s6angle.c
│   ├── s6bezpowsf.c
│   ├── s6castelja.c
│   ├── s6chpar.c
│   ├── s6crss.c
│   ├── s6crvature.c
│   ├── s6crvcheck.c
│   ├── s6curvrad.c
│   ├── s6decomp.c
│   ├── s6degnorm.c
│   ├── s6dertopt.c
│   ├── s6diff.c
│   ├── s6dist.c
│   ├── s6dline.c
│   ├── s6dplane.c
│   ├── s6drawseq.c
│   ├── s6equal.c
│   ├── s6err.c
│   ├── s6existbox.c
│   ├── s6findfac.c
│   ├── s6fndintv.c
│   ├── s6herm.c
│   ├── s6herm_bez.c
│   ├── s6idcon.c
│   ├── s6idcpt.c
│   ├── s6idedg.c
│   ├── s6identify.c
│   ├── s6idget.c
│   ├── s6idint.c
│   ├── s6idklist.c
│   ├── s6idkpt.c
│   ├── s6idlis.c
│   ├── s6idnpt.c
│   ├── s6idput.c
│   ├── s6inv4.c
│   ├── s6invert.c
│   ├── s6knotmult.c
│   ├── s6length.c
│   ├── s6line.c
│   ├── s6lprj.c
│   ├── s6lufacp.c
│   ├── s6lusolp.c
│   ├── s6metric.c
│   ├── s6move.c
│   ├── s6multsfs.c
│   ├── s6mulvec.c
│   ├── s6mvec.c
│   ├── s6newbox.c
│   ├── s6norm.c
│   ├── s6nullspace.c
│   ├── s6ratder.c
│   ├── s6rotax.c
│   ├── s6rotmat.c
│   ├── s6schoen.c
│   ├── s6scpr.c
│   ├── s6sortpar.c
│   ├── s6sratder.c
│   ├── s6strider.c
│   ├── s6takunion.c
│   ├── s6testimpl.c
│   ├── s6twonorm.c
│   ├── s9adsimp.c
│   ├── s9adstep.c
│   ├── s9boundimp.c
│   ├── s9boundit.c
│   ├── s9clipimp.c
│   ├── s9clipit.c
│   ├── s9conmarch.c
│   ├── s9iterate.c
│   ├── s9iterimp.c
│   ├── s9smplknot.c
│   ├── s9surmarch.c
│   ├── sh1260.c
│   ├── sh1261.c
│   ├── sh1262.c
│   ├── sh1263.c
│   ├── sh1365.c
│   ├── sh1369.c
│   ├── sh1371.c
│   ├── sh1372.c
│   ├── sh1373.c
│   ├── sh1374.c
│   ├── sh1375.c
│   ├── sh1460.c
│   ├── sh1461.c
│   ├── sh1462.c
│   ├── sh1463.c
│   ├── sh1464.c
│   ├── sh1465.c
│   ├── sh1466.c
│   ├── sh1467.c
│   ├── sh1502.c
│   ├── sh1503.c
│   ├── sh1510.c
│   ├── sh1511.c
│   ├── sh1761.c
│   ├── sh1762.c
│   ├── sh1779.c
│   ├── sh1779_at.c
│   ├── sh1780.c
│   ├── sh1780_at.c
│   ├── sh1781.c
│   ├── sh1781_at.c
│   ├── sh1782.c
│   ├── sh1783.c
│   ├── sh1784.c
│   ├── sh1786.c
│   ├── sh1787.c
│   ├── sh1790.c
│   ├── sh1794.c
│   ├── sh1795.c
│   ├── sh1830.c
│   ├── sh1831.c
│   ├── sh1834.c
│   ├── sh1839.c
│   ├── sh1850.c
│   ├── sh1851.c
│   ├── sh1852.c
│   ├── sh1853.c
│   ├── sh1854.c
│   ├── sh1855.c
│   ├── sh1856.c
│   ├── sh1857.c
│   ├── sh1858.c
│   ├── sh1859.c
│   ├── sh1860.c
│   ├── sh1870.c
│   ├── sh1871.c
│   ├── sh1922.c
│   ├── sh1923.c
│   ├── sh1924.c
│   ├── sh1925.c
│   ├── sh1926.c
│   ├── sh1927.c
│   ├── sh1928.c
│   ├── sh1929.c
│   ├── sh1930.c
│   ├── sh1992.c
│   ├── sh1993.c
│   ├── sh1994.c
│   ├── sh6clvert.c
│   ├── sh6comedg.c
│   ├── sh6condir.c
│   ├── sh6connect.c
│   ├── sh6count.c
│   ├── sh6cvvert.c
│   ├── sh6degen.c
│   ├── sh6disconn.c
│   ├── sh6edgpnt.c
│   ├── sh6edgred.c
│   ├── sh6evalint.c
│   ├── sh6floop.c
│   ├── sh6fndsplt.c
│   ├── sh6getgeom.c
│   ├── sh6getlist.c
│   ├── sh6getmain.c
│   ├── sh6getnbrs.c
│   ├── sh6getnext.c
│   ├── sh6getothr.c
│   ├── sh6getprev.c
│   ├── sh6getsegdiv.c
│   ├── sh6gettop.c
│   ├── sh6idaledg.c
│   ├── sh6idcon.c
│   ├── sh6idfcros.c
│   ├── sh6idget.c
│   ├── sh6idkpt.c
│   ├── sh6idlis.c
│   ├── sh6idnpt.c
│   ├── sh6idnwun.c
│   ├── sh6idput.c
│   ├── sh6idrcros.c
│   ├── sh6idsplit.c
│   ├── sh6idunite.c
│   ├── sh6insert.c
│   ├── sh6inspnt.c
│   ├── sh6iscnect.c
│   ├── sh6ishelp.c
│   ├── sh6isinsid.c
│   ├── sh6ismain.c
│   ├── sh6nmbhelp.c
│   ├── sh6nmbmain.c
│   ├── sh6ptobj.c
│   ├── sh6ptouchp.c
│   ├── sh6putsing.c
│   ├── sh6red.c
│   ├── sh6remcon.c
│   ├── sh6rempnt.c
│   ├── sh6sepcrv.c
│   ├── sh6setcnsd.c
│   ├── sh6setdir.c
│   ├── sh6setseg.c
│   ├── sh6settop.c
│   ├── sh6spltgeo.c
│   ├── sh6tohelp.c
│   ├── sh6tomain.c
│   ├── sh6topohlp.c
│   ├── sh6trmlist.c
│   ├── sh_1d_div.c
│   ├── sh_div_crv.c
│   ├── sh_set_at.c
│   ├── shape.c
│   ├── shcheckput.c
│   ├── shchecktyp.c
│   ├── shcsfsing.c
│   ├── shdivsurf.c
│   ├── shevalc.c
│   ├── shmkhlppts.c
│   ├── shsing.c
│   ├── spli_silh.c
│   └── tstcyclknt.c
├── streaming/
│   ├── include/
│   │   └── GoReadWrite.h
│   └── src/
│       └── GoReadWrite.cpp
└── viewer/
    ├── include/
    │   ├── aux2.h
    │   ├── gl_aux.h
    │   ├── glutils.h
    │   ├── jonvec.h
    │   ├── mouse.h
    │   ├── sisl_aux.h
    │   └── transfutils.h
    ├── sisl_view_demo.cpp
    └── src/
        ├── aux2.cpp
        ├── gl_aux.cpp
        ├── glutils.cpp
        ├── mouse.cpp
        ├── sisl_aux.cpp
        └── transfutils.cpp
Download .txt
SYMBOL INDEX (151 symbols across 40 files)

FILE: app/prog1.c
  function main (line 43) | int main()

FILE: app/s1013prob.C
  function main (line 47) | int main()

FILE: app/s1320prob.C
  function main (line 49) | int main()

FILE: app/s1606prob.C
  function main (line 47) | int main()

FILE: app/surf_surf_int.C
  function main (line 54) | int main(int avnum, char** vararg)

FILE: examples/example01.cpp
  function main (line 81) | int main(int avnum, char** vararg)

FILE: examples/example02.cpp
  function main (line 79) | int main(int avnum, char** vararg)

FILE: examples/example03.cpp
  function main (line 66) | int main(int avnum, char** vararg)

FILE: examples/example04.cpp
  function main (line 66) | int main(int avnum, char** vararg)

FILE: examples/example05.cpp
  function main (line 80) | int main(int avnum, char** vararg)

FILE: examples/example06.cpp
  function main (line 91) | int main(int avnum, char** vararg)

FILE: examples/example07.cpp
  function main (line 61) | int main(int avnum, char** vararg)

FILE: examples/example08.cpp
  function main (line 90) | int main(int avnum, char** vararg)

FILE: examples/example09.cpp
  function main (line 92) | int main(int avnum, char** vararg)

FILE: examples/example10.cpp
  function main (line 88) | int main(int avnum, char** vararg)
  function incrementally_change_control_points (line 167) | void incrementally_change_control_points()

FILE: examples/example11.cpp
  function main (line 68) | int main(int avnum, char** vararg)

FILE: examples/example12.cpp
  function main (line 68) | int main(int avnum, char** vararg)

FILE: examples/example13.cpp
  function main (line 71) | int main(int avnum, char** vararg)

FILE: examples/example14.cpp
  function main (line 85) | int main(int avnum, char** vararg)

FILE: examples/example15.cpp
  function main (line 106) | int main(int varnum, char** vararg)
  function raytracer_simple (line 166) | void raytracer_simple(SISLSurf* surf, vector<double>& points)
  function raytracer_advanced (line 186) | void raytracer_advanced(SISLSurf* surf, vector<double>& points)
  function calculate_direction (line 225) | void calculate_direction(int vscan, int hscan, double* dir)
  function trace_ray_rapid (line 237) | bool trace_ray_rapid(SISLSurf* surf, double* init_guess, double* dir)
  function trace_ray_robust (line 345) | bool trace_ray_robust(SISLSurf* surf, double* param_val, double* dir)

FILE: include/sisl.h
  type SISLdir (line 78) | typedef struct SISLdir
  type SISLbox (line 107) | typedef struct SISLbox
  type SISLSegmentation (line 139) | typedef struct SISLSegmentation
  type SISLCurve (line 149) | typedef struct SISLCurve
  type SISLSurf (line 181) | typedef struct SISLSurf
  type SISLIntcurve (line 237) | typedef struct SISLIntcurve

FILE: include/sislP.h
  type SISLPoint (line 137) | typedef struct SISLPoint
  type SISLObject (line 161) | typedef struct SISLObject
  type SISLIntsurf (line 181) | typedef struct SISLIntsurf
  type SISLTrimpar (line 192) | typedef struct SISLTrimpar
  type SISLIntpt (line 206) | typedef struct SISLIntpt
  type SISLTrack (line 257) | typedef struct SISLTrack
  type SISLIntlist (line 293) | typedef struct SISLIntlist
  type SISLPtedge (line 316) | typedef struct SISLPtedge
  type SISLEdge (line 327) | typedef struct SISLEdge
  type SISLIntdat (line 340) | typedef struct SISLIntdat
  type rank_info (line 350) | typedef struct rank_info

FILE: src/s1252.c
  function s1252_s6dir (line 385) | static void s1252_s6dir(cdiff,acoef,eval,astart,aend)

FILE: src/s17702d.c
  function s1770_2D_s6sekant1 (line 797) | static void s1770_2D_s6sekant1(pcurve1,pcurve2,par_val,delta,dist,aepsge,

FILE: src/s6bezpowsf.c
  function s6bezpowsf (line 53) | void s6bezpowsf(c1, order11, order12, power, Pascal, c1_power)

FILE: src/s6err.c
  function s6err (line 56) | void s6err(rut,jstat,ipos)

FILE: src/sh1762.c
  function s9edgsscon_simplify (line 6881) | static void s9edgsscon_simplify(rintdat, uipt, edg, kn1, eval, edist, di...
  function s9edgsscon_con (line 7053) | static int s9edgsscon_con(pt1, pt2)
  function s9edgsscon_directed (line 7175) | static void s9edgsscon_directed(rintdat, uipt, kn1, eval, dirval, ndir, ...

FILE: src/sh1795.c
  function sh1795_s9iterate (line 411) | static int sh1795_s9iterate(ps1, ps2, aepsge, eps, dir, sgn, epar1,

FILE: src/sh6red.c
  function sh6red_help (line 420) | static int sh6red_help(po1, po2, pt, pmain, jstat)

FILE: streaming/include/GoReadWrite.h
  type SISLCurve (line 47) | struct SISLCurve
  type SISLSurf (line 48) | struct SISLSurf

FILE: streaming/src/GoReadWrite.cpp
  function determine_go_instance_type (line 58) | inline int determine_go_instance_type(istream& is)
  function read_basis (line 71) | inline void read_basis(istream& is, int& n, int& k, vector<double>& knots)
  function write_basis (line 80) | inline void write_basis(ostream& os, const int&n, const int& k, const do...
  function SISLSurf (line 93) | SISLSurf* readGoSurface(istream& go_stream)
  function writeGoSurface (line 134) | void writeGoSurface(SISLSurf* surf, ostream& go_stream)
  function writeGoCurve (line 165) | void writeGoCurve(SISLCurve* curve, std::ostream& go_stream)
  function SISLCurve (line 195) | SISLCurve* readGoCurve(istream& go_stream)
  function writeGoPoints (line 226) | void writeGoPoints(int num_points, double* coords, std::ostream& go_stream)
  function readGoPoints (line 252) | void readGoPoints(std::vector<double>& coords, std::istream& go_stream)

FILE: viewer/include/gl_aux.h
  function class (line 68) | class material_appearance
  function col_scheme_selected (line 188) | int col_scheme_selected(void) const { return col_scheme; }
  function col_scheme_select (line 189) | void col_scheme_select(const int i)
  function set_material (line 194) | void set_material(void)
  function redefine_material_f (line 209) | void redefine_material_f(const vector3t<double> &diff,
  function Key (line 238) | void Key(unsigned char key)

FILE: viewer/include/jonvec.h
  function T (line 124) | inline const T *raw(void) const
  function T (line 133) | inline T x(void) const { return coo[0]; }
  function T (line 134) | inline T y(void) const { return coo[1]; }
  function T (line 135) | inline T z(void) const { return coo[2]; }
  function T (line 136) | inline T &x(void) { return coo[0]; }
  function T (line 137) | inline T &y(void) { return coo[1]; }
  function T (line 138) | inline T &z(void) { return coo[2]; }
  function setx (line 143) | inline void setx(const T a) { coo[0]=a; }
  function sety (line 144) | inline void sety(const T a) { coo[1]=a; }
  function setz (line 145) | inline void setz(const T a) { coo[2]=a; }
  function v (line 150) | inline bool operator==(const vector3t &v) const
  function v (line 160) | inline bool operator<(const vector3t &v) const
  function v (line 164) | inline bool operator>(const vector3t &v) const
  function v (line 172) | inline bool operator!=(const vector3t &v) const
  function vector3t (line 274) | inline vector3t operator/(const vector3t &v) const
  function friend (line 284) | inline friend T cosangle(const vector3t &v0, const vector3t &v1)
  function vector3t (line 289) | inline const vector3t &clamp(const vector3t &v0, const vector3t &v1)
  function min (line 311) | inline void min(const vector3t &v)
  function max (line 317) | inline void max(const vector3t &v)
  function vector3t (line 340) | inline vector3t &conv(const vector3t &v)
  function friend (line 348) | inline friend vector3t conv2(const vector3t &v1, const vector3t &v2)
  function vector3t (line 356) | inline vector3t reciprocal(void) const
  function vector3t (line 363) | inline vector3t &rescale(const vector3t &mi, const vector3t &ma,
  function T (line 370) | inline T length_squared(void) const
  function T (line 375) | inline T length(void) const
  function normalize (line 381) | inline void normalize(void)
  function vector3t (line 389) | inline vector3t normalized(void) const
  function print (line 394) | void print(void) const
  function print2 (line 401) | void print2(void) const
  function print3 (line 408) | void print3(void) const
  function T (line 414) | inline T min_coo(void) const
  function T (line 419) | inline T max_coo(void) const
  function dequal (line 424) | inline bool dequal(const vector3t<T> &v) const
  function dequal2 (line 429) | inline bool dequal2(const vector3t<T> &v) const
  function dequal3 (line 437) | inline bool dequal3(const vector3t<T> &v) const
  function dequal_2d (line 445) | inline bool dequal_2d(const vector3t<T> &v) const
  function rotate_xy (line 451) | inline void rotate_xy(const double cosa, const double sina)
  function rotate_xz (line 460) | inline void rotate_xz(const double cosa, const double sina)
  function rotate_yz (line 468) | inline void rotate_yz(const double cosa, const double sina)

FILE: viewer/sisl_view_demo.cpp
  function set_material (line 199) | static void set_material(int i)
  function show_general_help (line 244) | static void show_general_help()
  function show_hotkey_help (line 254) | static void show_hotkey_help()
  function draw_all_surfaces (line 264) | static void draw_all_surfaces(void)
  function draw_all_points (line 357) | static void draw_all_points(void)
  function draw_all_curves (line 376) | void draw_all_curves(void)
  function draw (line 445) | static void draw(void)
  function Reshape (line 472) | static void Reshape(int width, int height)
  function center_and_scale (line 485) | static void center_and_scale(const int rescale)
  function parse_keys (line 626) | static void parse_keys(const int key_in,
  function Key (line 956) | static void Key(unsigned char key_in, int x, int y)
  function idle_func (line 1020) | static void idle_func(void)
  function read_curves_and_surfaces (line 1029) | static void read_curves_and_surfaces(int argc, char *argv[])
  function main (line 1291) | int main(int argc, char *argv[])

FILE: viewer/src/aux2.cpp
  function jon_sec (line 73) | static double jon_sec(void)
  function tic (line 100) | void tic(void)
  function toc (line 106) | void toc(void)

FILE: viewer/src/gl_aux.cpp
  function draw_cylinder (line 91) | void draw_cylinder(double x0, double y0, double z0,
  function draw_gl_axes_old (line 174) | void draw_gl_axes_old(int n, double r, double radius, double rim, double l)
  function draw_grid (line 223) | void draw_grid(const int n1, const int n2, const int n3)
  function draw_grid_planes (line 273) | void draw_grid_planes(const int n1, const int n2, const int n3)
  function gl_init (line 329) | void gl_init(int argc, char *argv[],
  function transpose_matrix (line 641) | void transpose_matrix(double * const d)
  function print_gl_matrix (line 659) | void print_gl_matrix(const int m)
  function reshape_window (line 741) | void reshape_window(int width, int height)
  function write_gl_matrices (line 761) | void write_gl_matrices(FILE *f)
  function read_gl_matrices (line 781) | void read_gl_matrices(FILE *f)

FILE: viewer/src/glutils.cpp
  function assert_gl_m (line 60) | void assert_gl_m(int line, char *file, const bool do_exit /* =true */ )
  function assert_gl_dummy_and_empty (line 166) | void assert_gl_dummy_and_empty(void)
  function list_FBConfigs (line 186) | void list_FBConfigs(GLXFBConfig *config, int nelements)
  function draw_sphere (line 327) | void draw_sphere(const vector3t<float> &pos, const float r,

FILE: viewer/src/mouse.cpp
  function draw_cursor (line 86) | void draw_cursor(int x, int y)
  function transversal_rotation (line 115) | int transversal_rotation(int x, int y, int last_xx, int last_yy)
  function MouseRotate (line 151) | void MouseRotate(int x, int y)
  function MouseZoom (line 196) | void MouseZoom(int x, int y)
  function MouseTranslate (line 209) | void MouseTranslate(int x, int y)
  function Mouse (line 222) | void Mouse(int butt, int state, int x, int y)

FILE: viewer/src/sisl_aux.cpp
  function lower_degree_to_linear (line 62) | void lower_degree_to_linear(SISLSurf **srf, double e)
  function lower_degree_and_subdivide (line 81) | void lower_degree_and_subdivide(SISLSurf **srf,
  function compute_surface_normals (line 231) | void compute_surface_normals(SISLSurf *srf, double **ngrid)

FILE: viewer/src/transfutils.cpp
  function rotate (line 68) | void rotate(double y_ang, double x_ang, double z_ang)
  function translate (line 108) | void translate(double x, double y, double z)
  function scale (line 127) | void scale(double x, double y, double z)
Condensed preview — 911 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,991K chars).
[
  {
    "path": ".gitignore",
    "chars": 9,
    "preview": "doc/html\n"
  },
  {
    "path": "CMakeLists.txt",
    "chars": 8052,
    "preview": "PROJECT(sisl)\n\nCMAKE_MINIMUM_REQUIRED(VERSION 2.8)\n\n# Organize the project in folders (VS only?)\nSET_PROPERTY(GLOBAL PRO"
  },
  {
    "path": "COPYING",
    "chars": 34520,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "ChangeLog",
    "chars": 563,
    "preview": "2021-03-16\tVibeke Skytt \t<Vibeke.Skytt@sintef.no>\n\t* Released version 4.7 of SISL. The main updates are related to\n\tdocu"
  },
  {
    "path": "INSTALL",
    "chars": 1532,
    "preview": "Installation Instructions\n*************************\n\nThis package uses CMake to generate a Makefile (on Linux) or\nMS Vis"
  },
  {
    "path": "README",
    "chars": 343,
    "preview": "SISL is a comprehensive NURBS library for the modeling and\ninterrogation of curves and surfaces. It is implemented in C."
  },
  {
    "path": "app/prog1.c",
    "chars": 3868,
    "preview": "/*\n * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,\n * Applied Mathematics, Norway.\n *\n * Contac"
  },
  {
    "path": "app/s1013prob.C",
    "chars": 2281,
    "preview": "/*\n * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,\n * Applied Mathematics, Norway.\n *\n * Contac"
  },
  {
    "path": "app/s1320prob.C",
    "chars": 3742,
    "preview": "/*\n * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,\n * Applied Mathematics, Norway.\n *\n * Contac"
  },
  {
    "path": "app/s1606prob.C",
    "chars": 3844,
    "preview": "/*\n * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,\n * Applied Mathematics, Norway.\n *\n * Contac"
  },
  {
    "path": "app/surf_surf_int.C",
    "chars": 5874,
    "preview": "/*\n * Copyright (C) 1998, 2000-2007, 2010, 2011, 2012, 2013 SINTEF Digital,\n * Applied Mathematics, Norway.\n *\n * Contac"
  },
  {
    "path": "cmake/sislConfig.cmake.in",
    "chars": 216,
    "preview": "@PACKAGE_INIT@\n\ninclude(\"${CMAKE_CURRENT_LIST_DIR}/sislTargets.cmake\")\n\n# Legacy compatibility\nset(sisl_LIBRARIES sisl)\n"
  },
  {
    "path": "doc/manual/chap_curve_analysis.ilg",
    "chars": 1778,
    "preview": "This is makeindex, version 2.14 [02-Oct-2002] (kpathsea + Thai support).\nScanning input file chap_curve_analysis.tex...\n"
  },
  {
    "path": "doc/manual/chap_curve_analysis.ind",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "doc/manual/chap_curve_analysis.tex",
    "chars": 273,
    "preview": "\\chapter{Curve Analysis}\n\\label{curveanalysis}\n\nThis chapter describes the Curve Analysis part.\n\n\\section{Curvature Eval"
  },
  {
    "path": "doc/manual/chap_curve_definition.tex",
    "chars": 1641,
    "preview": "\\chapter{Curve Definition}\n\\label{curvedefinition}\n\nThis chapter describes all functions in the Curve Definition module."
  },
  {
    "path": "doc/manual/chap_curve_interrogation.tex",
    "chars": 1608,
    "preview": "\\chapter{Curve Interrogation}\n\\label{curveinterrogation}\nThis chapter describes the functions in the Curve Interrogation"
  },
  {
    "path": "doc/manual/chap_curve_utilities.tex",
    "chars": 687,
    "preview": "\\chapter{Curve Utilities}\n\\label{curveutilities}\nThis chapter describes the Curve Utilities.\nThese are common to both th"
  },
  {
    "path": "doc/manual/chap_data_reduction.tex",
    "chars": 305,
    "preview": "\\chapter{Data Reduction}\n\\label{datareduction}\n\\section{Curves}\n\\input{func/s1940}\n\\pgsbreak\n\\input{func/s1961}\n\\pgsbrea"
  },
  {
    "path": "doc/manual/chap_error_codes.tex",
    "chars": 4857,
    "preview": "\\chapter{Appendix: Error Codes}\n\\label{errorcodes}\nFor reference, here is a list of the error codes used in SISL.\nThey c"
  },
  {
    "path": "doc/manual/chap_intro_abridged.tex",
    "chars": 14250,
    "preview": "\\chapter{General Introduction}\n\\label{introduction}\nSISL is a geometric toolkit to model with curves and surfaces. It is"
  },
  {
    "path": "doc/manual/chap_introduction.tex",
    "chars": 14045,
    "preview": "\\chapter{Introduction}\n\\label{introduction}\nSISL is a geometric toolkit to model with curves and surfaces. It is a\nlibra"
  },
  {
    "path": "doc/manual/chap_surface_analysis.tex",
    "chars": 480,
    "preview": "\\chapter{Surface Analysis}\n\\label{surfaceanalysis}\nThis chapter describes the Surface Analysis part.\n\\section{Curvature "
  },
  {
    "path": "doc/manual/chap_surface_definition.tex",
    "chars": 1297,
    "preview": "\\chapter{Surface Definition}\n\\label{surfacedefinition}\n\\section{Interpolation}\n\\input{func/s1536}\n\\pgsbreak\n\\input{func/"
  },
  {
    "path": "doc/manual/chap_surface_interrogation.tex",
    "chars": 2856,
    "preview": "\\chapter{Surface Interrogation}\n\\label{surfaceinterrogation}\nThis chapter describes the functions in the Surface Interro"
  },
  {
    "path": "doc/manual/chap_surface_utilities.tex",
    "chars": 612,
    "preview": "\\chapter{Surface Utilities}\n\\label{surfaceutilities}\nThis chapter describes the Surface Utilities. These are common to b"
  },
  {
    "path": "doc/manual/foreword.tex",
    "chars": 3745,
    "preview": "\\chapter{Preface}\nWelcome to the SISL 4.7 user's manual.  SISL stands for\n\\emph{\\textbf{Si}ntef \\textbf{S}pline \\textbf{"
  },
  {
    "path": "doc/manual/func/copyCurve.tex",
    "chars": 1422,
    "preview": "\\subsection{Make a copy of a curve.}\n\\funclabel{copyCurve}\n\\begin{minipg1}\nMake a copy of a curve.\n\\end{minipg1}\\\\ \\\\\nSY"
  },
  {
    "path": "doc/manual/func/copySurface.tex",
    "chars": 1778,
    "preview": "\\subsection{Make a copy of a surface object.}\n\\funclabel{copySurface}\n\\begin{minipg1}\n  Make a copy of a SISLSurface obj"
  },
  {
    "path": "doc/manual/func/freeCurve.tex",
    "chars": 1326,
    "preview": "\\subsection{Delete a curve object.} \\label{sec:freeCurve}\n\\funclabel{freeCurve}\n\\begin{minipg1}\nFree the space occupied "
  },
  {
    "path": "doc/manual/func/freeIntcrvlist.tex",
    "chars": 1540,
    "preview": "\\subsection{Free a list of intersection curves.}\\label{sec:freeIntcrvlist}\n\\funclabel{freeIntcrvlist}\n\\begin{minipg1}\n  "
  },
  {
    "path": "doc/manual/func/freeIntcurve.tex",
    "chars": 1521,
    "preview": "\\subsection{Delete an intersection curve object.}\n\\funclabel{freeIntcurve}\n\\begin{minipg1}\n  Free the space occupied by "
  },
  {
    "path": "doc/manual/func/freeSurf.tex",
    "chars": 1539,
    "preview": "\\subsection{Delete a surface object.}\n\\funclabel{freeSurf}\n\\begin{minipg1}\n  Free the space occupied by the surface. Bef"
  },
  {
    "path": "doc/manual/func/newCurve.tex",
    "chars": 3591,
    "preview": "\\subsection{Create new curve object.} \\label{sec:newCurve}\n\\funclabel{newCurve}\n\\begin{minipg1}\n  Create and initialize "
  },
  {
    "path": "doc/manual/func/newIntcurve.tex",
    "chars": 3903,
    "preview": "\\subsection{Create a new intersection curve object.}\n\\funclabel{newIntcurve}\n\\begin{minipg1}\nCreate and initialize a SIS"
  },
  {
    "path": "doc/manual/func/newSurf.tex",
    "chars": 5251,
    "preview": "\\subsection{Create a new surface object.}\\label{sec:newSurf}\n\\funclabel{newSurf}\n\\begin{minipg1}\nCreate and initialize a"
  },
  {
    "path": "doc/manual/func/newbox.tex",
    "chars": 1071,
    "preview": "\\subsection{Create and initialize a curve/surface bounding box instance.}\n\\funclabel{newbox}\n\\begin{minipg1}\nCreate and "
  },
  {
    "path": "doc/manual/func/newdir.tex",
    "chars": 1099,
    "preview": "\\subsection{Create and initialize a curve/surface direction instance.}\n\\funclabel{newdir}\n\\begin{minipg1}\nCreate and ini"
  },
  {
    "path": "doc/manual/func/s1001.tex",
    "chars": 2683,
    "preview": "\\section{Pick a Part of a Surface.}\n\\funclabel{s1001}\n\\begin{minipg1}\n  To pick a part of a surface.\n  The surface produ"
  },
  {
    "path": "doc/manual/func/s1011.tex",
    "chars": 3223,
    "preview": "\\subsection{Express a conic arc as a curve.}\n\\funclabel{s1011}\n\\begin{minipg1}\n  Convert an analytic conic arc to a curv"
  },
  {
    "path": "doc/manual/func/s1012.tex",
    "chars": 2771,
    "preview": "\\subsection{Express a truncated helix as a curve.}\n\\funclabel{s1012}\n\\begin{minipg1}\n  Convert an analytical truncated h"
  },
  {
    "path": "doc/manual/func/s1013.tex",
    "chars": 2269,
    "preview": "\\subsection{Find a point on a 2D curve along a given direction.}\n\\funclabel{s1013}\n\\begin{minipg1}\n  Find a point on a 2"
  },
  {
    "path": "doc/manual/func/s1014.tex",
    "chars": 4600,
    "preview": "\\subsection{Compute a circular fillet between a 2D curve and a circle.}\n\\funclabel{s1014}\n\\begin{minipg1}\n  Compute the "
  },
  {
    "path": "doc/manual/func/s1015.tex",
    "chars": 3753,
    "preview": "\\subsection{Compute a circular fillet between two 2D curves.}\n\\funclabel{s1015}\n\\begin{minipg1}\n  Compute the fillet by "
  },
  {
    "path": "doc/manual/func/s1016.tex",
    "chars": 3938,
    "preview": "\\subsection{Compute a circular fillet between a 2D curve and a 2D line.}\n\\funclabel{s1016}\n\\begin{minipg1}\n  Compute the"
  },
  {
    "path": "doc/manual/func/s1017.tex",
    "chars": 1783,
    "preview": "\\subsection{Insert a given knot into the description of a curve.}\n\\funclabel{s1017}\n\\begin{minipg1}\n  Insert a given kno"
  },
  {
    "path": "doc/manual/func/s1018.tex",
    "chars": 2133,
    "preview": "\\subsection{Insert a given set of knots into the description of a curve.}\n\\funclabel{s1018}\n\\begin{minipg1}\n  Insert a g"
  },
  {
    "path": "doc/manual/func/s1021.tex",
    "chars": 2451,
    "preview": "\\subsection{Express a truncated cylinder as a surface.}\n\\funclabel{s1021}\n\\begin{minipg1}\n  To express a truncated cylin"
  },
  {
    "path": "doc/manual/func/s1022.tex",
    "chars": 2977,
    "preview": "\\subsection{Express a truncated cone as a surface.}\n\\funclabel{s1022}\n\\begin{minipg1}\n  To express a truncated cone as a"
  },
  {
    "path": "doc/manual/func/s1023.tex",
    "chars": 2950,
    "preview": "\\subsection{Express the octants of a sphere as a surface.}\n\\funclabel{s1023}\n\\begin{minipg1}\n  To express the octants of"
  },
  {
    "path": "doc/manual/func/s1024.tex",
    "chars": 4218,
    "preview": "\\subsection{Express the octants of a torus as a surface.}\n\\funclabel{s1024}\n\\begin{minipg1}\n  To express the octants of "
  },
  {
    "path": "doc/manual/func/s1025.tex",
    "chars": 3060,
    "preview": "\\subsection{Insert a given set of knots, in each parameter direction, into the description of a surface.}\n\\funclabel{s10"
  },
  {
    "path": "doc/manual/func/s1221.tex",
    "chars": 4915,
    "preview": "\\subsection{Compute the position and the right-hand derivatives of a\ncurve at a given parameter value.}\n\\funclabel{s1221"
  },
  {
    "path": "doc/manual/func/s1225.tex",
    "chars": 5117,
    "preview": "\\subsection{Evaluate position, first derivative, curvature and radius of curvature of a curve at a given parameter value"
  },
  {
    "path": "doc/manual/func/s1226.tex",
    "chars": 5134,
    "preview": "\\subsection{Evaluate position, first derivative, curvature and radius of\n               curvature of a curve at a given "
  },
  {
    "path": "doc/manual/func/s1227.tex",
    "chars": 4921,
    "preview": "\\subsection{Compute the position and the left-hand derivatives of a\ncurve at a given parameter value.}\n\\funclabel{s1227}"
  },
  {
    "path": "doc/manual/func/s1231.tex",
    "chars": 1609,
    "preview": "\\subsection{Subdivide a NURBS curve at a specified internal parameter value.}\n\\funclabel{s1231}\n\\begin{minipg1}\nSubdivid"
  },
  {
    "path": "doc/manual/func/s1233.tex",
    "chars": 2631,
    "preview": "\\section{Extend a B-spline Curve.}\n\\funclabel{s1233}\n\\begin{minipg1}\n  To extend a B-spline curve (i.e.\\ NOT rationals) "
  },
  {
    "path": "doc/manual/func/s1237.tex",
    "chars": 2906,
    "preview": "\\subsection{Draw constant parameter lines in a surface\nusing piecewise straight lines.}\n\\funclabel{s1237}\n\\begin{minipg1"
  },
  {
    "path": "doc/manual/func/s1238.tex",
    "chars": 3748,
    "preview": "\\subsection{Draw constant parameter lines in a\nsurface bounded by a closed curve in the parameter plane of the surface.}"
  },
  {
    "path": "doc/manual/func/s1240.tex",
    "chars": 1917,
    "preview": "\\section{Compute the Length of a Curve}\n\\funclabel{s1240}\n\\begin{minipg1}\n  Compute the length of a curve. The length ca"
  },
  {
    "path": "doc/manual/func/s1241.tex",
    "chars": 3047,
    "preview": "\\subsection{Calculate the area between a 2D curve and a 2D point.}\n\\funclabel{s1241}\n\\begin{minipg1}\nTo calculate the ar"
  },
  {
    "path": "doc/manual/func/s1242.tex",
    "chars": 3860,
    "preview": "\\subsection{Calculate area, moment of inertia and weightpoint of area limited by 2-D curve.}\n\\funclabel{s1242}\n\\begin{mi"
  },
  {
    "path": "doc/manual/func/s1243.tex",
    "chars": 3464,
    "preview": "\\subsection{Calculate the weight point and rotational momentum of\n               an area between a 2D curve and a 2D poi"
  },
  {
    "path": "doc/manual/func/s1302.tex",
    "chars": 3925,
    "preview": "\\subsection{Compute a rotational swept surface.}\n\\funclabel{s1302}\n\\begin{minipg1}\n  To create a rotational swept surfac"
  },
  {
    "path": "doc/manual/func/s1303.tex",
    "chars": 3809,
    "preview": "\\subsection{Approximate a circular arc with a curve.}\n\\funclabel{s1303}\n\\begin{minipg1}\n  To create a curve approximatin"
  },
  {
    "path": "doc/manual/func/s1310.tex",
    "chars": 6032,
    "preview": "\\subsection{March an intersection curve between two spline surfaces.}\n\\funclabel{s1310}\n\\begin{minipg1}\n  To march an in"
  },
  {
    "path": "doc/manual/func/s1314.tex",
    "chars": 7004,
    "preview": "\\subsection{March an intersection curve between a spline surface and a plane.}\n\\funclabel{s1314}\n\\begin{minipg1}\n  To ma"
  },
  {
    "path": "doc/manual/func/s1315.tex",
    "chars": 6966,
    "preview": "\\subsection{March an intersection curve between a spline surface and a sphere.}\n\\funclabel{s1315}\n\\begin{minipg1}\n  To m"
  },
  {
    "path": "doc/manual/func/s1316.tex",
    "chars": 7354,
    "preview": "\\subsection{March an intersection curve between a spline surface and a \\mbox{cylinder}.}\n\\funclabel{s1316}\n\\begin{minipg"
  },
  {
    "path": "doc/manual/func/s1317.tex",
    "chars": 7407,
    "preview": "\\subsection{March an intersection curve between a spline surface and a cone.}\n\\funclabel{s1317}\n\\begin{minipg1}\n  To mar"
  },
  {
    "path": "doc/manual/func/s1318.tex",
    "chars": 7783,
    "preview": "\\subsection{March an intersection curve between a spline surface and a torus.}\n\\funclabel{s1318}\n\\begin{minipg1}\n  To ma"
  },
  {
    "path": "doc/manual/func/s1319.tex",
    "chars": 6998,
    "preview": "\\subsection{\\sloppy March a silhouette curve of a surface, using parallel \\mbox{projection}.}\n\\funclabel{s1319}\n\\begin{m"
  },
  {
    "path": "doc/manual/func/s1327.tex",
    "chars": 2984,
    "preview": "\\subsection{Convert a curve/line intersection into a two-dimensional curve/origo intersection}\n\n\\funclabel{s1327}\n\\begin"
  },
  {
    "path": "doc/manual/func/s1328.tex",
    "chars": 2941,
    "preview": "\\subsection{Convert a surface/line intersection into a two-dimensional surface/origo intersection}\n\\funclabel{s1328}\n\\be"
  },
  {
    "path": "doc/manual/func/s1332.tex",
    "chars": 2938,
    "preview": "\\subsection{Compute a linear swept surface.}\n\\funclabel{s1332}\n\\begin{minipg1}\n  To create a linear swept surface by mak"
  },
  {
    "path": "doc/manual/func/s1333.tex",
    "chars": 3575,
    "preview": "\\subsection{Lofted surface.}\n\\funclabel{s1333}\n\\begin{minipg1}\nTo create a spline lofted surface from a set of input cur"
  },
  {
    "path": "doc/manual/func/s1334.tex",
    "chars": 4272,
    "preview": "\\subsection{Spline interpolation automatic paramete\\-risation.}\n\\funclabel{s1334}\n\\begin{minipg1}\nTo calculate a B-splin"
  },
  {
    "path": "doc/manual/func/s1340.tex",
    "chars": 4970,
    "preview": "\\subsection{Data reduction: B-spline curve as input.}\n\\funclabel{s1340}\n\\begin{minipg1}\n  To remove knots from a B-splin"
  },
  {
    "path": "doc/manual/func/s1341.tex",
    "chars": 8683,
    "preview": "\\subsection{Data reduction: Point data as input.}\n\\funclabel{s1341}\n\\begin{minipg1}\n  To compute a spline approximation "
  },
  {
    "path": "doc/manual/func/s1342.tex",
    "chars": 7981,
    "preview": "\\subsection{Data reduction: Points and tangents as input.}\n\\funclabel{s1342}\n\\begin{minipg1}\n  To compute the approximat"
  },
  {
    "path": "doc/manual/func/s1343.tex",
    "chars": 4236,
    "preview": "\\subsection{Degree reduction: B-spline curve as input.}\n\\funclabel{s1343}\n\\begin{minipg1}\n  To approximate the input B-s"
  },
  {
    "path": "doc/manual/func/s1345.tex",
    "chars": 8799,
    "preview": "\\subsection{Data reduction: B-spline surface as input.}\n\\funclabel{s1345}\n\\begin{minipg1}\n  To remove knots from a tenso"
  },
  {
    "path": "doc/manual/func/s1346.tex",
    "chars": 13817,
    "preview": "\\subsection{Data reduction: Point data as input.}\n\\funclabel{s1346}\n\\begin{minipg1}\n  To compute a tensor-product B-spli"
  },
  {
    "path": "doc/manual/func/s1347.tex",
    "chars": 13155,
    "preview": "\\subsection{Data reduction: Points and tangents as input.}\n\\funclabel{s1347}\n\\begin{minipg1}\n  To compute a bicubic herm"
  },
  {
    "path": "doc/manual/func/s1348.tex",
    "chars": 8184,
    "preview": "\\subsection{Degree reduction: B-spline surface as input}\n\\funclabel{s1348}\n\\begin{minipg1}\n  To compute a cubic tensor-p"
  },
  {
    "path": "doc/manual/func/s1356.tex",
    "chars": 5632,
    "preview": "\\subsection{Compute a curve interpolating a set of points,\n\\mbox{automatic} parameterization.}\n\\funclabel{s1356}\n\\begin{"
  },
  {
    "path": "doc/manual/func/s1357.tex",
    "chars": 6286,
    "preview": "\\subsection{Compute a curve interpolating a set of points,\nparameter\\-ization as input.}\n\\funclabel{s1357}\n\\begin{minipg"
  },
  {
    "path": "doc/manual/func/s1358.tex",
    "chars": 6759,
    "preview": "\\subsection{Spline interpolation, parameterization as input.}\n\\funclabel{s1358}\n\\begin{minipg1}\nTo calculate a B-spline "
  },
  {
    "path": "doc/manual/func/s1360.tex",
    "chars": 4252,
    "preview": "\\subsection{Approximate the offset of a curve with a curve.}\n\\funclabel{s1360}\n\\begin{minipg1}\n  To create a approximati"
  },
  {
    "path": "doc/manual/func/s1363.tex",
    "chars": 1650,
    "preview": "\\section{Pick the Parameter Range of a Curve}\n\\funclabel{s1363}\n\\begin{minipg1}\n  To pick the parameter range of a curve"
  },
  {
    "path": "doc/manual/func/s1364.tex",
    "chars": 1569,
    "preview": "\\section{Check if a Curve is Closed}\n\\funclabel{s1364}\n\\begin{minipg1}\n  To check if a curve is closed, i.e.\\ test if th"
  },
  {
    "path": "doc/manual/func/s1365.tex",
    "chars": 2899,
    "preview": "\\subsection{Compute a surface approximating the offset of a surface.}\n\\funclabel{s1365}\n\\begin{minipg1}\n  Create a surfa"
  },
  {
    "path": "doc/manual/func/s1369.tex",
    "chars": 5988,
    "preview": "\\subsection{Find the topology for the intersections between a spline surface and a \\mbox{torus}.}\n\\funclabel{s1369}\n\\beg"
  },
  {
    "path": "doc/manual/func/s1371.tex",
    "chars": 4443,
    "preview": "\\subsection{Intersection between a spline curve and a 2D circle or a sphere.}\n\\funclabel{s1371}\n\\begin{minipg1}\n  Find a"
  },
  {
    "path": "doc/manual/func/s1372.tex",
    "chars": 4558,
    "preview": "\\subsection{Intersection between a spline curve and a cylinder.}\n\\funclabel{s1372}\n\\begin{minipg1}\n  Find all the inters"
  },
  {
    "path": "doc/manual/func/s1373.tex",
    "chars": 4572,
    "preview": "\\subsection{Intersection between a spline curve and a cone.} \\label{sec:s1373}\n\\funclabel{s1373}\n\\begin{minipg1}\n  Find "
  },
  {
    "path": "doc/manual/func/s1374.tex",
    "chars": 5010,
    "preview": "\\subsection{Intersection between a curve and a quadric curve.}\n\\funclabel{s1374}\n\\begin{minipg1}\n  Find all the intersec"
  },
  {
    "path": "doc/manual/func/s1375.tex",
    "chars": 5071,
    "preview": "\\subsection{Intersection between a curve and a torus.}\n\\funclabel{s1375}\n\\begin{minipg1}\n  Find all the intersections be"
  },
  {
    "path": "doc/manual/func/s1379.tex",
    "chars": 3705,
    "preview": "\\subsection{Compute a curve by Hermite interpolation,\nparameter\\-ization as input.}\n\\funclabel{s1379}\n\\begin{minipg1}\nTo"
  },
  {
    "path": "doc/manual/func/s1380.tex",
    "chars": 3759,
    "preview": "\\subsection{\\sloppy Compute a curve by Hermite interpolation, automatic parameteriza\\-tion.}\n\\funclabel{s1380}\n\\begin{mi"
  },
  {
    "path": "doc/manual/func/s1383.tex",
    "chars": 4817,
    "preview": "\\subsection{Pick the curve lying in a surface, described by a curve in the parameter plane of\nthe surface.}\n\\funclabel{s"
  },
  {
    "path": "doc/manual/func/s1386.tex",
    "chars": 2465,
    "preview": "\\subsection{Express the ``i,j''-th derivative of an open surface as a \\mbox{surface}.}\n\\funclabel{s1386}\n\\begin{minipg1}"
  },
  {
    "path": "doc/manual/func/s1387.tex",
    "chars": 2754,
    "preview": "\\subsection{Express a surface using a higher order basis.}\n\\funclabel{s1387}\n\\begin{minipg1}\n  To express a surface as a"
  },
  {
    "path": "doc/manual/func/s1388.tex",
    "chars": 3610,
    "preview": "\\subsection{Convert a surface of order up to four to a mesh of Coons\npatches.}\n\\funclabel{s1388}\n\\begin{minipg1}\n  To co"
  },
  {
    "path": "doc/manual/func/s1389.tex",
    "chars": 2836,
    "preview": "\\subsection{Convert a curve of order up to four, to a sequence of cubic polynomials.}\n\\funclabel{s1389}\n\\begin{minipg1}\n"
  },
  {
    "path": "doc/manual/func/s1390.tex",
    "chars": 4266,
    "preview": "\\subsection{Compute a rectangular blending surface from a set of\n\\mbox{B-spline} input curves.}\n\\funclabel{s1390}\n\\begin"
  },
  {
    "path": "doc/manual/func/s1391.tex",
    "chars": 3394,
    "preview": "\\subsection{Compute a first derivative continuous blending surface set,\nover a 3-, 4-, 5- or 6-sided region in space, fr"
  },
  {
    "path": "doc/manual/func/s1401.tex",
    "chars": 3498,
    "preview": "\\subsection{Compute a surface, representing a Gordon patch, from a set\nof B-spline input curves.}\n\\funclabel{s1401}\n\\beg"
  },
  {
    "path": "doc/manual/func/s1421.tex",
    "chars": 5961,
    "preview": "\\subsection{Compute the position, the derivatives and the normal of a\nsurface at a given parameter value pair.}\n\\funclab"
  },
  {
    "path": "doc/manual/func/s1422.tex",
    "chars": 6874,
    "preview": "\\subsection{Compute the position and the left- or right-hand derivatives of\na surface at a given parameter value pair.}\n"
  },
  {
    "path": "doc/manual/func/s1424.tex",
    "chars": 5877,
    "preview": "\\subsection{Compute the position and derivatives of a surface at a given\nparameter value pair.}\n\\funclabel{s1424}\n\\begin"
  },
  {
    "path": "doc/manual/func/s1425.tex",
    "chars": 8789,
    "preview": "\\subsection{Compute the position and the derivatives of a surface at a\ngiven parameter value pair.}\n\\funclabel{s1425}\n\\b"
  },
  {
    "path": "doc/manual/func/s1436.tex",
    "chars": 1437,
    "preview": "\\subsection{Pick a curve lying in surface, with constant second parameter value.}\n\\funclabel{s1436}\n\\begin{minipg1}\nMake"
  },
  {
    "path": "doc/manual/func/s1437.tex",
    "chars": 1460,
    "preview": "\\subsection{Pick a curve lying in a surface, with constant first parameter value.}\n\\funclabel{s1437}\n\\begin{minipg1}\nMak"
  },
  {
    "path": "doc/manual/func/s1439.tex",
    "chars": 2070,
    "preview": "\\subsection{Pick a curve along a constant parameter line in a surface.}\n\\funclabel{s1439}\n\\begin{minipg1}\n  Make a const"
  },
  {
    "path": "doc/manual/func/s1440.tex",
    "chars": 1869,
    "preview": "\\section{Turn the Direction of the Surface Normal Vector.}\n\\funclabel{s1440}\n\\begin{minipg1}\n  Interchange the two param"
  },
  {
    "path": "doc/manual/func/s1441.tex",
    "chars": 2302,
    "preview": "\\subsection{Compute volume between a B-spline surface and a point.}\n\\funclabel{s1441}\n\\begin{minipg1}\nCompute the volume"
  },
  {
    "path": "doc/manual/func/s1442.tex",
    "chars": 2645,
    "preview": "\\subsection{Compute area, weight point and moment of inertia of a B-spline patch.}\n\\funclabel{s1442}\n\\begin{minipg1}\nCom"
  },
  {
    "path": "doc/manual/func/s1443.tex",
    "chars": 3078,
    "preview": "\\subsection{Compute volume, weight point and moment of inertia of an object defined by a B-spline \npatch and a point.}\n\\"
  },
  {
    "path": "doc/manual/func/s1450.tex",
    "chars": 5646,
    "preview": "\\section{Check if a Surface is Closed or has Degenerate Edges.}\n\\funclabel{s1450}\n\\begin{minipg1}\n  To check if a surfac"
  },
  {
    "path": "doc/manual/func/s1451.tex",
    "chars": 1662,
    "preview": "\\section{Check if a Curve is Degenerated.}\n\\funclabel{s1451}\n\\begin{minipg1}\n  To check if a curve is degenerated.\n\\end{"
  },
  {
    "path": "doc/manual/func/s1452.tex",
    "chars": 1793,
    "preview": "\\subsection{Offset surface.}\n\\funclabel{s1452}\n\\begin{minipg1}\nTo make a B-spline surface approximating an offset surfac"
  },
  {
    "path": "doc/manual/func/s1501.tex",
    "chars": 8462,
    "preview": "\\subsection{March an intersection curve between a surface and an\n\\mbox{elliptic} cone.}\n\\funclabel{s1501}\n\\begin{minipg1"
  },
  {
    "path": "doc/manual/func/s1502.tex",
    "chars": 5750,
    "preview": "\\subsection{Intersection between a spline curve and an elliptic cone.}\n\\funclabel{s1502}\n\\begin{minipg1}\n  Find all the "
  },
  {
    "path": "doc/manual/func/s1503.tex",
    "chars": 6570,
    "preview": "\\subsection{Find the topology for the intersections between a spline surface and an\n\\mbox{elliptic} cone.}\n\\funclabel{s1"
  },
  {
    "path": "doc/manual/func/s1506.tex",
    "chars": 4642,
    "preview": "\\subsection{Evaluate the surface pointed at by ps1 over an m1 * m2 grid\n               of points (x[i],y[j]). Compute id"
  },
  {
    "path": "doc/manual/func/s1508.tex",
    "chars": 2052,
    "preview": "\\subsection{Create a rational lofted surface from a set of rational input-curves}\n\\funclabel{s1508}\n\\begin{minipg1}\n  To"
  },
  {
    "path": "doc/manual/func/s1510.tex",
    "chars": 4202,
    "preview": "\\subsection{Find the topology of the silhouette curves of a spline surface,\n using perspective projection.}\n\\funclabel{s"
  },
  {
    "path": "doc/manual/func/s1511.tex",
    "chars": 4399,
    "preview": "\\subsection{Find the topology of the circular silhouette curves of a spline\n\\mbox{surface}.}\n\\funclabel{s1511}\n\\begin{mi"
  },
  {
    "path": "doc/manual/func/s1514.tex",
    "chars": 6024,
    "preview": "\\subsection{\\sloppy March a silhouette curve of a surface, using\nperspective \\mbox{projection}.}\n\\funclabel{s1514}\n\\begi"
  },
  {
    "path": "doc/manual/func/s1515.tex",
    "chars": 6225,
    "preview": "\\subsection{March a circular silhouette curve of a surface.}\n\\funclabel{s1515}\n\\begin{minipg1}\n  To march the circular s"
  },
  {
    "path": "doc/manual/func/s1518.tex",
    "chars": 3883,
    "preview": "\\subsection{Newton iteration on the intersection between a 3D NURBS surface and a line.}\n\\funclabel{s1518}\n\\begin{minipg"
  },
  {
    "path": "doc/manual/func/s1520.tex",
    "chars": 2159,
    "preview": "\\subsection{Create a NURBS rotational surface by rotating\na curve around an axis over a given angle.}\n\\funclabel{s1520}\n"
  },
  {
    "path": "doc/manual/func/s1522.tex",
    "chars": 2991,
    "preview": "\\subsection{Express a 2D or 3D ellipse as a curve.}\n\\funclabel{s1522}\n\\begin{minipg1}\n  Convert a 2D or 3D analytical el"
  },
  {
    "path": "doc/manual/func/s1529.tex",
    "chars": 4295,
    "preview": "\\subsection{\\sloppy Compute a surface by Hermite interpolation, automatic parameter\\-ization.}\n\\funclabel{s1529}\n\\begin{"
  },
  {
    "path": "doc/manual/func/s1530.tex",
    "chars": 4348,
    "preview": "\\subsection{Compute a surface by Hermite interpolation, parameter\\-ization as input.}\n\\funclabel{s1530}\n\\begin{minipg1}\n"
  },
  {
    "path": "doc/manual/func/s1534.tex",
    "chars": 6569,
    "preview": "\\subsection{Compute a surface interpolating a set of points,\nderivatives as input.}\n\\funclabel{s1534}\n\\begin{minipg1}\n  "
  },
  {
    "path": "doc/manual/func/s1535.tex",
    "chars": 6516,
    "preview": "\\subsection{Compute a surface interpolating a set of points,\nderivatives and parameterization as input.}\n\\funclabel{s153"
  },
  {
    "path": "doc/manual/func/s1536.tex",
    "chars": 6444,
    "preview": "\\subsection{Compute a surface interpolating a set of points,\nautomatic parameterization.}\n\\funclabel{s1536}\n\\begin{minip"
  },
  {
    "path": "doc/manual/func/s1537.tex",
    "chars": 6523,
    "preview": "\\subsection{Compute a surface interpolating a set of points,\nparameterization as input.}\n\\funclabel{s1537}\n\\begin{minipg"
  },
  {
    "path": "doc/manual/func/s1538.tex",
    "chars": 4603,
    "preview": "\\subsection{Create a lofted surface from a set of B-spline\ninput curves.}\n\\funclabel{s1538}\n\\begin{minipg1}\n  To create "
  },
  {
    "path": "doc/manual/func/s1539.tex",
    "chars": 6203,
    "preview": "\\subsection{Create a lofted surface\n               from a set of B-spline input curves and parametrization.}\n\\funclabel{"
  },
  {
    "path": "doc/manual/func/s1542.tex",
    "chars": 2374,
    "preview": "\\subsection{Evaluate the curve over a grid of m points.  Only positions are evaluated.}\n\\funclabel{s1542}\n\\begin{minipg1"
  },
  {
    "path": "doc/manual/func/s1600.tex",
    "chars": 2124,
    "preview": "\\section{Mirror a Curve}\n\\funclabel{s1600}\n\\begin{minipg1}\n  To mirror a curve around a plane.\n\\end{minipg1} \\\\ \\\\\nSYNOP"
  },
  {
    "path": "doc/manual/func/s1601.tex",
    "chars": 1891,
    "preview": "\\section{Mirror a Surface}\n\\funclabel{s1601}\n\\begin{minipg1}\n  Mirror a surface about a plane.\n\\end{minipg1} \\\\ \\\\\nSYNOP"
  },
  {
    "path": "doc/manual/func/s1602.tex",
    "chars": 2957,
    "preview": "\\subsection{Compute a curve interpolating a straight line between two points.}\n\\funclabel{s1602}\n\\begin{minipg1}\nTo make"
  },
  {
    "path": "doc/manual/func/s1603.tex",
    "chars": 2595,
    "preview": "\\section{Pick the Parameter Ranges of a Surface}\n\\funclabel{s1603}\n\\begin{minipg1}\n  To pick the parameter ranges of a s"
  },
  {
    "path": "doc/manual/func/s1604.tex",
    "chars": 3302,
    "preview": "\\subsection{B-spline approximation.}\n\\funclabel{s1604}\n\\begin{minipg1}\n        To make a B-spline curve using the input "
  },
  {
    "path": "doc/manual/func/s1606.tex",
    "chars": 4247,
    "preview": "\\subsection{Compute a blending curve between two curves.}\n\\funclabel{s1606}\n\\begin{minipg1}\n  To compute a blending curv"
  },
  {
    "path": "doc/manual/func/s1607.tex",
    "chars": 5145,
    "preview": "\\subsection{Compute a fillet curve based on parameter value.}\n\\funclabel{s1607}\n\\begin{minipg1}\n  To calculate a fillet "
  },
  {
    "path": "doc/manual/func/s1608.tex",
    "chars": 6746,
    "preview": "\\subsection{Compute a fillet curve based on points.}\n\\funclabel{s1608}\n\\begin{minipg1}\n  To calculate a fillet curve bet"
  },
  {
    "path": "doc/manual/func/s1609.tex",
    "chars": 7656,
    "preview": "\\subsection{Compute a fillet curve based on radius.}\n\\funclabel{s1609}\n\\begin{minipg1}\n  To calculate a constant radius "
  },
  {
    "path": "doc/manual/func/s1610.tex",
    "chars": 1904,
    "preview": "\\subsection{Draw ``polygons'' in a surface using a recursive algorithm testing for \nplanarity of the subdivided parts.}\n"
  },
  {
    "path": "doc/manual/func/s1611.tex",
    "chars": 5213,
    "preview": "\\subsection{Approximate a conic arc with a curve.}\n\\funclabel{s1611}\n\\begin{minipg1}\n  To approximate a conic arc with a"
  },
  {
    "path": "doc/manual/func/s1613.tex",
    "chars": 2741,
    "preview": "\\subsection{Approximate a curve with a sequence of straight lines.}\n\\funclabel{s1613}\n\\begin{minipg1}\n  To calculate a s"
  },
  {
    "path": "doc/manual/func/s1620.tex",
    "chars": 3859,
    "preview": "\\subsection{Compute a surface using the input points as\ncontrol vertices, automatic parameterization.}\n\\funclabel{s1620}"
  },
  {
    "path": "doc/manual/func/s1630.tex",
    "chars": 2768,
    "preview": "\\subsection{Compute a curve using the input points as\ncontrolling \\mbox{vertices}, automatic parameterization.}\n\\funclab"
  },
  {
    "path": "doc/manual/func/s1706.tex",
    "chars": 1078,
    "preview": "\\section{Reverse the Orientation of a Curve.}\n\\funclabel{s1706}\n\\begin{minipg1}\n  Turn the direction of a curve by rever"
  },
  {
    "path": "doc/manual/func/s1710.tex",
    "chars": 2835,
    "preview": "\\subsection{Subdivide a curve at a given parameter value.}\n\\funclabel{s1710}\n\\begin{minipg1}\n  Subdivide a curve at a gi"
  },
  {
    "path": "doc/manual/func/s1711.tex",
    "chars": 2832,
    "preview": "\\subsection{Subdivide a surface along a given parameter line.}\n\\funclabel{s1711}\n\\begin{minipg1}\n  Subdivide a surface a"
  },
  {
    "path": "doc/manual/func/s1712.tex",
    "chars": 2509,
    "preview": "\\subsection{Pick a part of a curve.}\n\\funclabel{s1712}\n\\begin{minipg1}\n  To pick one part of a curve and make a new curv"
  },
  {
    "path": "doc/manual/func/s1713.tex",
    "chars": 2544,
    "preview": "\\subsection{Pick a part of a closed curve.}\n\\funclabel{s1713}\n\\begin{minipg1}\n  To pick one part of a closed curve and m"
  },
  {
    "path": "doc/manual/func/s1714.tex",
    "chars": 2743,
    "preview": "\\subsection{Split a curve into two new curves.}\n\\funclabel{s1714}\n\\begin{minipg1}\n  Split a curve in two parts at two sp"
  },
  {
    "path": "doc/manual/func/s1715.tex",
    "chars": 2867,
    "preview": "\\subsection{Join two curves at specified ends.}\n\\funclabel{s1715}\n\\begin{minipg1}\n  To join one end of one curve with on"
  },
  {
    "path": "doc/manual/func/s1716.tex",
    "chars": 2897,
    "preview": "\\subsection{Join two curves at closest ends.}\n\\funclabel{s1716}\n\\begin{minipg1}\n  To join two curves at the ends that li"
  },
  {
    "path": "doc/manual/func/s1720.tex",
    "chars": 2024,
    "preview": "\\subsection{Express the ``i''-th derivative of an open curve as a curve.}\n\\funclabel{s1720}\n\\begin{minipg1}\nTo express t"
  },
  {
    "path": "doc/manual/func/s1730.tex",
    "chars": 1928,
    "preview": "\\subsection{Convert a curve to a sequence of Bezier curves.}\n\\funclabel{s1730}\n\\begin{minipg1}\n  To convert a curve to a"
  },
  {
    "path": "doc/manual/func/s1731.tex",
    "chars": 2071,
    "preview": "\\subsection{Convert a surface to a mesh of Bezier surfaces.}\n\\funclabel{s1731}\n\\begin{minipg1}\n  To convert a surface to"
  },
  {
    "path": "doc/manual/func/s1732.tex",
    "chars": 3433,
    "preview": "\\subsection{Pick out the next Bezier curve from a curve.}\n\\funclabel{s1732}\n\\begin{minipg1}\n  To pick out the next Bezie"
  },
  {
    "path": "doc/manual/func/s1733.tex",
    "chars": 4744,
    "preview": "\\subsection{Pick the next Bezier surface from a surface.}\n\\funclabel{s1733}\n\\begin{minipg1}\n  To pick the next Bezier su"
  },
  {
    "path": "doc/manual/func/s1740.tex",
    "chars": 1508,
    "preview": "\\subsection{Draw piecewise straight lines approximating a B-spline curve.}\n\\funclabel{s1740}\n\\begin{minipg1}\nDraw piecew"
  },
  {
    "path": "doc/manual/func/s1744.tex",
    "chars": 2282,
    "preview": "\\subsection{Draw ``polygons'' in a surface limited by a closed B-spline \ncurve in the parameter plane of the surface\nusi"
  },
  {
    "path": "doc/manual/func/s1745.tex",
    "chars": 1326,
    "preview": "\\subsection{Shade a surface.}\n\\funclabel{s1745}\n\\begin{minipg1}\nTo shade a surface \nusing a recursive algorithm testing "
  },
  {
    "path": "doc/manual/func/s1746.tex",
    "chars": 1712,
    "preview": "\\subsection{Shade a surface limited by a closed B-spline \ncurve in the parameter plane of the surface.}\n\\funclabel{s1746"
  },
  {
    "path": "doc/manual/func/s1750.tex",
    "chars": 1861,
    "preview": "\\subsection{Express a curve using a higher order basis.}\n\\funclabel{s1750}\n\\begin{minipg1}\n  To describe a curve using a"
  },
  {
    "path": "doc/manual/func/s1774.tex",
    "chars": 3725,
    "preview": "\\subsection{Local iteration to closest point between point and curve.}\n\\funclabel{s1774}\n\\begin{minipg1}\nNewton iteratio"
  },
  {
    "path": "doc/manual/func/s1775.tex",
    "chars": 3783,
    "preview": "\\subsection{Local iteration to closest point bewteen point and surface.}\n\\funclabel{s1775}\n\\begin{minipg1}\nNewton iterat"
  },
  {
    "path": "doc/manual/func/s1850.tex",
    "chars": 4605,
    "preview": "\\subsection{\\sloppy Intersection between a spline curve and a straight line or a plane.}\n\\funclabel{s1850}\n\\begin{minipg"
  },
  {
    "path": "doc/manual/func/s1851.tex",
    "chars": 5111,
    "preview": "\\subsection{Find the topology for the intersections between a spline surface and a plane.}\n\\funclabel{s1851}\n\\begin{mini"
  },
  {
    "path": "doc/manual/func/s1852.tex",
    "chars": 5118,
    "preview": "\\subsection{Find the topology for the intersection between a spline surface and a sphere.}\n\\funclabel{s1852}\n\\begin{mini"
  },
  {
    "path": "doc/manual/func/s1853.tex",
    "chars": 5478,
    "preview": "\\subsection{Find the topology for the intersections between a spline surface and a cylinder.}\n\\funclabel{s1853}\n\\begin{m"
  },
  {
    "path": "doc/manual/func/s1854.tex",
    "chars": 5482,
    "preview": "\\subsection{Find the topology for the intersections between a spline surface and a cone.}\n\\funclabel{s1854}\n\\begin{minip"
  },
  {
    "path": "doc/manual/func/s1855.tex",
    "chars": 5104,
    "preview": "\\subsection{Intersection between a spline surface and a circle.}\n\\funclabel{s1855}\n\\begin{minipg1}\n  Find all intersecti"
  },
  {
    "path": "doc/manual/func/s1856.tex",
    "chars": 4927,
    "preview": "\\subsection{Intersection between a spline surface and a straight line.}\n\\funclabel{s1856}\n\\begin{minipg1}\n  Find all int"
  },
  {
    "path": "doc/manual/func/s1857.tex",
    "chars": 4329,
    "preview": "\\subsection{\\sloppy Intersection between two curves.}\n\\funclabel{s1857}\n\\begin{minipg1}\n  Find all the intersections bet"
  },
  {
    "path": "doc/manual/func/s1858.tex",
    "chars": 5136,
    "preview": "\\subsection{Intersection between a surface and a curve.}\n\\funclabel{s1858}\n\\begin{minipg1}\n  Find all intersections betw"
  },
  {
    "path": "doc/manual/func/s1859.tex",
    "chars": 5009,
    "preview": "\\subsection{Find the topology for the intersection between two spline surfaces.}\n\\funclabel{s1859}\n\\begin{minipg1}\n  Fin"
  },
  {
    "path": "doc/manual/func/s1860.tex",
    "chars": 5228,
    "preview": "\\subsection{Find the topology of the silhouette curves of a spline surface,\nusing parallel projection.}\n\\funclabel{s1860"
  },
  {
    "path": "doc/manual/func/s1870.tex",
    "chars": 3854,
    "preview": "\\subsection{Intersection between a surface and a point.}\n\\funclabel{s1870}\n\\begin{minipg1}\n  Find all intersections betw"
  },
  {
    "path": "doc/manual/func/s1871.tex",
    "chars": 4158,
    "preview": "\\subsection{Intersection between a curve and a point.}\n\\funclabel{s1871}\n\\begin{minipg1}\n  Find all the intersections be"
  },
  {
    "path": "doc/manual/func/s1920.tex",
    "chars": 4624,
    "preview": "\\section{Find the Absolute Extremals of a Curve.}\n\\funclabel{s1920}\n\\begin{minipg1}\n  Find the absolute extremal points/"
  },
  {
    "path": "doc/manual/func/s1921.tex",
    "chars": 4106,
    "preview": "\\section{Find the Absolute Extremals of a Surface.}\n\\funclabel{s1921}\n\\begin{minipg1}\n  Find the absolute extremal point"
  },
  {
    "path": "doc/manual/func/s1940.tex",
    "chars": 5752,
    "preview": "\\subsection{Data reduction: B-spline curve as input.}\n\\funclabel{s1940}\n\\begin{minipg1}\nTo remove as many knots as possi"
  },
  {
    "path": "doc/manual/func/s1953.tex",
    "chars": 4125,
    "preview": "\\subsection{Find the closest point between a curve and a point.}\n\\funclabel{s1953}\n\\begin{minipg1}\n  Find the closest po"
  },
  {
    "path": "doc/manual/func/s1954.tex",
    "chars": 4544,
    "preview": "\\subsection{Find the closest point between a surface and a point.}\n\\funclabel{s1954}\n\\begin{minipg1}\n  Find the points o"
  },
  {
    "path": "doc/manual/func/s1955.tex",
    "chars": 4668,
    "preview": "\\subsection{Find the closest points between two curves.}\n\\funclabel{s1955}\n\\begin{minipg1}\n  Find the closest points bet"
  },
  {
    "path": "doc/manual/func/s1957.tex",
    "chars": 2894,
    "preview": "\\subsection{Find the closest point between a curve and a point. Simple version.}\n\\funclabel{s1957}\n\\begin{minipg1}\n  Fin"
  },
  {
    "path": "doc/manual/func/s1958.tex",
    "chars": 3504,
    "preview": "\\subsection{Find the closest point between a surface and a point.\nSimple version.}\n\\funclabel{s1958}\n\\begin{minipg1}\n  F"
  },
  {
    "path": "doc/manual/func/s1961.tex",
    "chars": 7904,
    "preview": "\\subsection{Data reduction: Point data as input.}\n\\funclabel{s1961}\n\\begin{minipg1}\nTo compute a spline-approximation to"
  }
]

// ... and 711 more files (download for full content)

About this extraction

This page contains the full source code of the SINTEF-Geometry/SISL GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 911 files (7.2 MB), approximately 1.9M tokens, and a symbol index with 151 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!