Show topology manipulation tools in slam

# Authors: Guillaume Auzias <guillaume.auzias@univ-amu.fr>

# License: MIT
# sphinx_gallery_thumbnail_number = 2
NOTE: there is no visualization tool in slam, but we provide at the

end of this script exemplare code to do the visualization with an external solution


importation of slam modules

import slam.io as sio
import slam.topology as stop
import slam.generate_parametric_surfaces as sps
import numpy as np

here is how to get the vertices that define the boundary of an open mesh

K = [-1, -1]
open_mesh = sps.generate_quadric(K, nstep=[5, 5])

Identify the vertices lying on the boundary of the mesh and order them to get a path traveling across boundary vertices The output is a list of potentially more than one boudaries depending on the topology of the input mesh. Here the mesh has a single boundary

open_mesh_boundary = stop.mesh_boundary(open_mesh)
print(open_mesh_boundary)
[[1, 2, 3, 8, 13, 18, 21, 20, 19, 14, 9, 4, 0]]

erode the mesh by removing the faces having 3 vertices on the boundary

eroded_mesh = stop.remove_mesh_boundary_faces(open_mesh, face_vertex_number=1)

here is how to get the vertices that define the boundary of a texture on a mesh Let us first load example data

mesh = sio.load_mesh("../examples/data/example_mesh.gii")
# rotate the mesh for better visualization
transfo_flip = np.array(
    [[-1, 0, 0, 0], [0, 1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
mesh.apply_transform(transfo_flip)

# Load the example texture and compute its boundary
tex_parcel = sio.load_texture("../examples/data/example_texture_parcel.gii")
texture_bound = stop.texture_boundary(mesh, tex_parcel.darray[0], 20)

================= cut_mesh ================= Cut he mesh into subparts corresponding to the different values in the texture tex_parcel

parc_u = np.unique(tex_parcel.darray[0])
print(
    "Here the texture contains {0} different values: {1}" "".format(
        len(parc_u), parc_u)
)
Here the texture contains 5 different values: [ 0.       20.       50.000004 50.00005  99.99989 ]

Let us cut the mesh

sub_meshes, sub_tex, sub_corresp = stop.cut_mesh(mesh, tex_parcel.darray[0])
# The output submeshes are ordered following texture values
# The second output of cut_mesh gives the texture value corresponding to
# each submesh
print(
    "Corresponding texture values are given by" " the second ouput: {}".format(
        sub_tex)
)

# The respective indices of the vertices of each submesh in the original
# mesh before the cut is given by the third output:
print(sub_corresp)
Corresponding texture values are given by the second ouput: [100.0, 50.0, 20.0, 0.0]
[[53, 54, 56, 57, 62, 63, 66, 67, 75, 215, 216, 225, 231, 234, 235, 237, 239, 240, 241, 242, 246, 247, 248, 252, 253, 254, 255, 260, 261, 263, 266, 270, 274, 275, 276, 280, 939, 960, 961, 963, 970, 987, 988, 998, 1015, 1041, 1042, 1043, 1052, 1053, 1072, 1073, 1100, 1101, 1133, 1152, 2117, 2119, 2120, 2121, 2123, 2124, 2125, 2126, 2127, 2143, 2144, 2145, 2154, 2155, 2156, 2157, 2247, 2253, 2254, 2256, 2271, 2272, 2273, 2274, 2276, 2277, 2278, 2279, 2287], [27, 28, 44, 50, 51, 52, 55, 59, 148, 153, 161, 162, 165, 166, 178, 184, 185, 213, 220, 230, 236, 244, 245, 250, 258, 259, 354, 756, 757, 758, 764, 772, 777, 778, 779, 792, 814, 843, 922, 978, 982, 983, 984, 986, 1005, 1007, 1031, 1051, 1834, 1876, 1901, 1902, 1905, 1906, 1907, 1936, 1949, 1950, 1951, 1953, 1975, 1976, 2042, 2070, 2077, 2078, 2079, 2080, 2095, 2108, 2109, 2110, 2111, 2112, 2141, 2142, 2153, 2168, 2169, 2170, 2180, 2181, 2182, 2206, 2207, 2208, 2209, 2237, 2238, 2246, 2269], [9, 11, 13, 21, 26, 29, 31, 35, 37, 112, 116, 117, 118, 119, 120, 124, 125, 127, 129, 130, 131, 132, 139, 142, 145, 147, 151, 152, 156, 159, 170, 171, 172, 173, 174, 175, 176, 177, 182, 183, 191, 192, 193, 199, 200, 334, 342, 687, 688, 692, 697, 699, 706, 710, 711, 712, 713, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, 735, 736, 737, 738, 739, 749, 750, 752, 754, 755, 761, 786, 787, 803, 832, 842, 867, 1722, 1739, 1740, 1741, 1742, 1752, 1753, 1754, 1763, 1790, 1791, 1792, 1798, 1862, 1863, 1864, 1868, 1870, 1873, 1875, 1886, 1887, 1888, 1889, 1890, 1892, 1893, 1895, 1897, 1898, 1900, 1903, 1904, 1919, 1920, 1931, 1932, 1933, 1941, 1942, 1943, 1944, 1945, 1961, 1962, 1963, 1964, 1965, 1966, 1967, 1968, 1971, 1973, 1974, 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009, 2011, 2019, 2020, 2021, 2022, 2023, 2024, 2025, 2028, 2029, 2050, 2071, 2073], [0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 27, 28, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 52, 53, 55, 56, 58, 59, 60, 61, 63, 64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 121, 122, 123, 124, 126, 127, 128, 129, 133, 134, 135, 136, 137, 138, 140, 141, 143, 144, 146, 149, 150, 151, 154, 155, 157, 158, 160, 163, 164, 165, 166, 167, 168, 169, 170, 176, 177, 178, 179, 180, 181, 184, 185, 186, 187, 188, 189, 190, 191, 192, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, 226, 227, 228, 229, 232, 233, 238, 242, 243, 245, 249, 251, 254, 256, 257, 258, 259, 260, 262, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, 705, 707, 708, 709, 712, 714, 715, 716, 717, 721, 729, 730, 731, 732, 733, 734, 740, 741, 742, 743, 744, 745, 746, 747, 748, 751, 753, 758, 759, 760, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 773, 774, 775, 776, 777, 780, 781, 782, 783, 784, 785, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 962, 964, 965, 966, 967, 968, 969, 971, 972, 973, 974, 975, 976, 977, 979, 980, 981, 985, 986, 989, 990, 991, 992, 993, 994, 995, 996, 997, 999, 1000, 1001, 1002, 1003, 1004, 1005, 1006, 1008, 1009, 1010, 1011, 1012, 1013, 1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1101, 1102, 1103, 1104, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1138, 1139, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1153, 1154, 1155, 1156, 1157, 1158, 1159, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1170, 1171, 1172, 1173, 1174, 1175, 1176, 1177, 1178, 1179, 1180, 1181, 1182, 1183, 1184, 1185, 1186, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1196, 1197, 1198, 1199, 1200, 1201, 1202, 1203, 1204, 1205, 1206, 1207, 1208, 1209, 1210, 1211, 1212, 1213, 1214, 1215, 1216, 1217, 1218, 1219, 1220, 1221, 1222, 1223, 1224, 1225, 1226, 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277, 1278, 1279, 1280, 1281, 1282, 1283, 1284, 1285, 1286, 1287, 1288, 1289, 1290, 1291, 1292, 1293, 1294, 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1302, 1303, 1304, 1305, 1306, 1307, 1308, 1309, 1310, 1311, 1312, 1313, 1314, 1315, 1316, 1317, 1318, 1319, 1320, 1321, 1322, 1323, 1324, 1325, 1326, 1327, 1328, 1329, 1330, 1331, 1332, 1333, 1334, 1335, 1336, 1337, 1338, 1339, 1340, 1341, 1342, 1343, 1344, 1345, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, 1355, 1356, 1357, 1358, 1359, 1360, 1361, 1362, 1363, 1364, 1365, 1366, 1367, 1368, 1369, 1370, 1371, 1372, 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, 1383, 1384, 1385, 1386, 1387, 1388, 1389, 1390, 1391, 1392, 1393, 1394, 1395, 1396, 1397, 1398, 1399, 1400, 1401, 1402, 1403, 1404, 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1424, 1425, 1426, 1427, 1428, 1429, 1430, 1431, 1432, 1433, 1434, 1435, 1436, 1437, 1438, 1439, 1440, 1441, 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1476, 1477, 1478, 1479, 1480, 1481, 1482, 1483, 1484, 1485, 1486, 1487, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, 1563, 1564, 1565, 1566, 1567, 1568, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1598, 1599, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626, 1627, 1628, 1629, 1630, 1631, 1632, 1633, 1634, 1635, 1636, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, 1736, 1737, 1738, 1740, 1741, 1743, 1744, 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1754, 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, 1786, 1787, 1788, 1789, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, 1819, 1820, 1821, 1822, 1823, 1824, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 1860, 1861, 1862, 1865, 1866, 1867, 1869, 1871, 1872, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 1885, 1886, 1891, 1894, 1896, 1898, 1899, 1902, 1903, 1905, 1908, 1909, 1910, 1911, 1912, 1913, 1914, 1915, 1916, 1917, 1918, 1921, 1922, 1923, 1924, 1925, 1926, 1927, 1928, 1929, 1930, 1934, 1935, 1936, 1937, 1938, 1939, 1940, 1946, 1947, 1948, 1950, 1952, 1953, 1954, 1955, 1956, 1957, 1958, 1959, 1960, 1961, 1969, 1970, 1972, 1974, 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2007, 2008, 2010, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2026, 2027, 2028, 2030, 2031, 2032, 2033, 2034, 2035, 2036, 2037, 2038, 2039, 2040, 2041, 2042, 2043, 2044, 2045, 2046, 2047, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, 2075, 2076, 2079, 2080, 2081, 2082, 2083, 2084, 2085, 2086, 2087, 2088, 2089, 2090, 2091, 2092, 2093, 2094, 2096, 2097, 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118, 2119, 2122, 2125, 2126, 2127, 2128, 2129, 2130, 2131, 2132, 2133, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2142, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2163, 2164, 2165, 2166, 2167, 2169, 2170, 2171, 2172, 2173, 2174, 2175, 2176, 2177, 2178, 2179, 2182, 2183, 2184, 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2210, 2211, 2212, 2213, 2214, 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, 2225, 2226, 2227, 2228, 2229, 2230, 2231, 2232, 2233, 2234, 2235, 2236, 2237, 2239, 2240, 2241, 2242, 2243, 2244, 2245, 2246, 2247, 2248, 2249, 2250, 2251, 2252, 2255, 2257, 2258, 2259, 2260, 2261, 2262, 2263, 2264, 2265, 2266, 2267, 2268, 2270, 2274, 2275, 2280, 2281, 2282, 2283, 2284, 2285, 2286, 2288, 2289, 2290, 2291, 2292, 2293, 2294, 2295, 2296, 2297, 2298, 2299, 2300, 2301, 2302, 2303, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2312, 2313, 2314, 2315, 2316, 2317, 2318, 2319, 2320, 2321, 2322, 2323, 2324, 2325, 2326, 2327]]

================= close_mesh ================= close the largest submesh

cuted_mesh = sub_meshes[-1]
mesh_closed, nb_verts_added = stop.close_mesh(cuted_mesh)

# The closed mesh is watertight while before closing if was not
print(mesh.is_watertight)
print(mesh_closed.is_watertight)
True
True

VISUALIZATION USING EXTERNAL TOOLS

import slam.plot as splt from vispy.scene import Line from visbrain.objects import VispyObj, SourceObj

# show the result # WARNING : BrainObj should be added first before visb_sc = splt.visbrain_plot(mesh=open_mesh, caption=”open mesh”) # create points with vispy for bound in open_mesh_boundary:

points = open_mesh.vertices[bound] s_rad = SourceObj(

“rad”, points, color=”red”, symbol=”square”, radius_min=10)

visb_sc.add_to_subplot(s_rad) lines = Line(pos=open_mesh.vertices[bound], width=10, color=”b”) # wrap the vispy object using visbrain l_obj = VispyObj(“line”, lines) visb_sc.add_to_subplot(l_obj)

visb_sc.preview()

# show the result visb_sc2 = splt.visbrain_plot(mesh=eroded_mesh, caption=”eroded mesh”) # show again the boundary of original mesh which have been removed with # corresponding faces by the erosion for bound in open_mesh_boundary:

points = open_mesh.vertices[bound] s_rad = SourceObj(

“rad”, points, color=”red”, symbol=”square”, radius_min=10)

visb_sc2.add_to_subplot(s_rad) lines = Line(pos=open_mesh.vertices[bound], width=10, color=”b”) # wrap the vispy object using visbrain l_obj = VispyObj(“line”, lines) visb_sc2.add_to_subplot(l_obj)

visb_sc2.preview()

# show the results visb_sc3 = splt.visbrain_plot(

mesh=mesh, tex=tex_parcel.darray[0], caption=”texture boundary”

) cols = [“red”, “green”, “yellow”, “blue”] ind = 0 for bound in texture_bound:

points = mesh.vertices[bound] s_rad = SourceObj(

“rad”, points, color=”red”, symbol=”square”, radius_min=10)

visb_sc3.add_to_subplot(s_rad) lines = Line(pos=mesh.vertices[bound], width=10, color=cols[ind]) # wrap the vispy object using visbrain l_obj = VispyObj(“line”, lines) visb_sc3.add_to_subplot(l_obj) ind += 1 if ind == len(cols):

ind = 0

visb_sc3.preview()

# show the mesh with the cuted subparts in different colors scene_list = list() cuted_mesh = sub_meshes[-1] joint_mesh = sub_meshes[0] joint_tex = np.zeros((sub_meshes[0].vertices.shape[0],)) last_ind = sub_meshes[0].vertices.shape[0] for ind, sub_mesh in enumerate(sub_meshes[1:]):

sub_tex = np.ones((sub_mesh.vertices.shape[0],)) * (ind + 1) joint_mesh += sub_mesh joint_tex = np.hstack((joint_tex, sub_tex))

visb_sc3 = splt.visbrain_plot(

mesh=joint_mesh, tex=joint_tex, caption=”mesh parts shown in different colors”

) ind = 0 boundaries = stop.mesh_boundary(cuted_mesh) for bound in boundaries:

s_rad = SourceObj(

“rad”, cuted_mesh.vertices[bound], color=cols[ind], symbol=”square”, radius_min=10,

) visb_sc3.add_to_subplot(s_rad) lines = Line(pos=cuted_mesh.vertices[bound], color=cols[ind], width=10) # wrap the vispy object using visbrain l_obj = VispyObj(“line”, lines) visb_sc3.add_to_subplot(l_obj) ind += 1 if ind == len(cols):

ind = 0

# show the largest submesh with the boundaries of cutted parts visb_sc4 = splt.visbrain_plot(mesh=cuted_mesh, caption=”open mesh”) # create points with vispy for bound in boundaries:

points = cuted_mesh.vertices[bound] s_rad = SourceObj(

“rad”, points, color=”blue”, symbol=”square”, radius_min=10)

visb_sc4.add_to_subplot(s_rad) lines = Line(pos=cuted_mesh.vertices[bound], width=10, color=”r”) # wrap the vispy object using visbrain l_obj = VispyObj(“line”, lines) visb_sc4.add_to_subplot(l_obj)

# show the closed mesh visb_sc5 = splt.visbrain_plot(mesh=mesh_closed, caption=”closed mesh”) visb_sc5.preview()

Total running time of the script: (0 minutes 1.200 seconds)

Gallery generated by Sphinx-Gallery