Skip to content

Commit 3f70c9b

Browse files
author
xiangqian
committed
[BUG]fix bugs in make_sdf function
1 parent 5d3b388 commit 3f70c9b

1 file changed

Lines changed: 25 additions & 31 deletions

File tree

ppsci/geometry/mesh.py

Lines changed: 25 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1360,44 +1360,38 @@ def sample_in_triangle(v0, v1, v2, n, random="pseudo", criteria=None):
13601360

13611361

13621362
def make_sdf(vectors: np.ndarray):
1363+
verts = vectors.reshape(-1, 3)
1364+
v_min = verts.min(axis=0)
1365+
v_max = verts.max(axis=0)
1366+
max_dis = np.max(v_max - v_min)
1367+
norm_mesh = (verts - v_min) / max_dis
1368+
1369+
mesh_vertices = [tuple(v) for v in norm_mesh.tolist()]
1370+
mesh_indices = np.arange(len(mesh_vertices), dtype=np.int32)
1371+
13631372
def sdf_func(points: np.ndarray, compute_sdf_derivatives=False):
1364-
points = points.copy()
1365-
x_min, y_min, z_min = np.min(points, axis=0)
1366-
x_max, y_max, z_max = np.max(points, axis=0)
1367-
max_dis = max(max((x_max - x_min), (y_max - y_min)), (z_max - z_min))
1368-
store_triangles = vectors.copy()
1369-
store_triangles[:, :, 0] -= x_min
1370-
store_triangles[:, :, 1] -= y_min
1371-
store_triangles[:, :, 2] -= z_min
1372-
store_triangles *= 1 / max_dis
1373-
store_triangles = store_triangles.reshape([-1, 3])
1374-
points[:, 0] -= x_min
1375-
points[:, 1] -= y_min
1376-
points[:, 2] -= z_min
1377-
points *= 1 / max_dis
1378-
points = points.astype(np.float64).ravel()
1373+
pts = (points - v_min) / max_dis
13791374

1380-
# compute sdf values
1381-
sdf = sdf_module.signed_distance_field(
1382-
store_triangles,
1383-
np.arange((store_triangles.shape[0])),
1384-
points,
1375+
input_points = [tuple(p) for p in pts.tolist()]
1376+
1377+
ret = sdf_module.signed_distance_field(
1378+
mesh_vertices,
1379+
mesh_indices,
1380+
input_points,
13851381
include_hit_points=compute_sdf_derivatives,
13861382
)
1383+
13871384
if compute_sdf_derivatives:
1388-
sdf, sdf_derives = sdf
1385+
sdf, grad = ret
1386+
else:
1387+
sdf = ret
1388+
grad = None
13891389

1390-
sdf = sdf.numpy()
1391-
sdf = np.expand_dims(max_dis * sdf, axis=1)
1390+
sdf = sdf.numpy().reshape(-1, 1) * max_dis
13921391

1393-
if compute_sdf_derivatives:
1394-
sdf_derives = sdf_derives.numpy().reshape(-1)
1395-
sdf_derives = -(sdf_derives - points)
1396-
sdf_derives = np.reshape(sdf_derives, (sdf_derives.shape[0] // 3, 3))
1397-
sdf_derives = sdf_derives / np.linalg.norm(
1398-
sdf_derives, axis=1, keepdims=True
1399-
)
1400-
return sdf, sdf_derives
1392+
if grad is not None:
1393+
grad = grad.numpy().reshape(-1, 3)
1394+
return sdf, grad
14011395

14021396
return sdf
14031397

0 commit comments

Comments
 (0)