(surf, spacing)
| 1343 | |
| 1344 | |
| 1345 | def _decimate_surface_spacing(surf, spacing): |
| 1346 | assert isinstance(spacing, int) |
| 1347 | assert spacing > 0 |
| 1348 | logger.info(" Decimating...") |
| 1349 | d = np.full(surf["np"], 10000, int) |
| 1350 | |
| 1351 | # A mysterious algorithm follows |
| 1352 | for k in range(surf["np"]): |
| 1353 | neigh = surf["neighbor_vert"][k] |
| 1354 | d[k] = min(np.min(d[neigh]) + 1, d[k]) |
| 1355 | if d[k] >= spacing: |
| 1356 | d[k] = 0 |
| 1357 | d[neigh] = np.minimum(d[neigh], d[k] + 1) |
| 1358 | |
| 1359 | if spacing == 2.0: |
| 1360 | for k in range(surf["np"] - 1, -1, -1): |
| 1361 | for n in surf["neighbor_vert"][k]: |
| 1362 | d[k] = min(d[k], d[n] + 1) |
| 1363 | d[n] = min(d[n], d[k] + 1) |
| 1364 | for k in range(surf["np"]): |
| 1365 | if d[k] > 0: |
| 1366 | neigh = surf["neighbor_vert"][k] |
| 1367 | n = np.sum(d[neigh] == 0) |
| 1368 | if n <= 2: |
| 1369 | d[k] = 0 |
| 1370 | d[neigh] = np.minimum(d[neigh], d[k] + 1) |
| 1371 | |
| 1372 | surf["inuse"] = np.zeros(surf["np"], int) |
| 1373 | surf["inuse"][d == 0] = 1 |
| 1374 | return surf |
| 1375 | |
| 1376 | |
| 1377 | @verbose |
no test coverage detected