(mesh, cc, end_pts, global_mesh, input_edge, mask, valid_map, inpaint_id, npath_map=None, fpath_map=None)
| 339 | return fpath_map, npath_map, False, npaths, fpaths, invalid_edge_ids |
| 340 | |
| 341 | def plan_path_e2e(mesh, cc, end_pts, global_mesh, input_edge, mask, valid_map, inpaint_id, npath_map=None, fpath_map=None): |
| 342 | my_npath_map = np.zeros_like(input_edge) - 1 |
| 343 | my_fpath_map = np.zeros_like(input_edge) - 1 |
| 344 | sub_mesh = mesh.subgraph(list(cc)).copy() |
| 345 | ends_1, ends_2 = end_pts[0], end_pts[1] |
| 346 | edge_id = global_mesh.nodes[ends_1]['edge_id'] |
| 347 | npath = [*netx.shortest_path(sub_mesh, (ends_1[0], ends_1[1]), (ends_2[0], ends_2[1]), weight='length')] |
| 348 | for np_node in npath: |
| 349 | my_npath_map[np_node[0], np_node[1]] = edge_id |
| 350 | fpath = [] |
| 351 | if global_mesh.nodes[ends_1].get('far') is None: |
| 352 | print("None far") |
| 353 | else: |
| 354 | fnodes = global_mesh.nodes[ends_1].get('far') |
| 355 | dmask = mask + 0 |
| 356 | while True: |
| 357 | dmask = cv2.dilate(dmask, np.ones((3, 3)), iterations=1) |
| 358 | ffnode = [fnode for fnode in fnodes if (dmask[fnode[0], fnode[1]] > 0 and mask[fnode[0], fnode[1]] == 0 and\ |
| 359 | global_mesh.nodes[fnode].get('inpaint_id') != inpaint_id + 1)] |
| 360 | if len(ffnode) > 0: |
| 361 | fnode = ffnode[0] |
| 362 | break |
| 363 | e_fnodes = global_mesh.nodes[ends_2].get('far') |
| 364 | dmask = mask + 0 |
| 365 | while True: |
| 366 | dmask = cv2.dilate(dmask, np.ones((3, 3)), iterations=1) |
| 367 | e_ffnode = [e_fnode for e_fnode in e_fnodes if (dmask[e_fnode[0], e_fnode[1]] > 0 and mask[e_fnode[0], e_fnode[1]] == 0 and\ |
| 368 | global_mesh.nodes[e_fnode].get('inpaint_id') != inpaint_id + 1)] |
| 369 | if len(e_ffnode) > 0: |
| 370 | e_fnode = e_ffnode[0] |
| 371 | break |
| 372 | fpath.append((fnode[0], fnode[1])) |
| 373 | if len(e_ffnode) == 0 or len(ffnode) == 0: |
| 374 | return my_npath_map, my_fpath_map, [], [] |
| 375 | barrel_dir = np.array([[1, 0], [1, 1], [0, 1], [-1, 1], [-1, 0], [-1, -1], [0, -1], [1, -1]]) |
| 376 | n2f_dir = (int(fnode[0] - npath[0][0]), int(fnode[1] - npath[0][1])) |
| 377 | while True: |
| 378 | if barrel_dir[0, 0] == n2f_dir[0] and barrel_dir[0, 1] == n2f_dir[1]: |
| 379 | n2f_barrel = barrel_dir.copy() |
| 380 | break |
| 381 | barrel_dir = np.roll(barrel_dir, 1, axis=0) |
| 382 | for step in range(0, len(npath)): |
| 383 | if step == 0: |
| 384 | continue |
| 385 | elif step == 1: |
| 386 | next_dir = (npath[step][0] - npath[step - 1][0], npath[step][1] - npath[step - 1][1]) |
| 387 | while True: |
| 388 | if barrel_dir[0, 0] == next_dir[0] and barrel_dir[0, 1] == next_dir[1]: |
| 389 | next_barrel = barrel_dir.copy() |
| 390 | break |
| 391 | barrel_dir = np.roll(barrel_dir, 1, axis=0) |
| 392 | barrel_pair = np.stack((n2f_barrel, next_barrel), axis=0) |
| 393 | n2f_dir = (barrel_pair[0, 0, 0], barrel_pair[0, 0, 1]) |
| 394 | elif step > 1: |
| 395 | next_dir = (npath[step][0] - npath[step - 1][0], npath[step][1] - npath[step - 1][1]) |
| 396 | while True: |
| 397 | if barrel_pair[1, 0, 0] == next_dir[0] and barrel_pair[1, 0, 1] == next_dir[1]: |
| 398 | next_barrel = barrel_pair.copy() |
no test coverage detected