InsightSoftwareConsortium / InsightSoftwareConsortium/ITK-Wasm

support shape by 3 for output mesh, polydata points

Open
#1,008 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
235
Forks
61
Avg merge
4d 19h
Merged PRs (30d)
4

Description

WIP patch:

```
diff --git a/packages/core/python/itkwasm/itkwasm/pipeline.py b/packages/core/python/itkwasm/itkwasm/pipeline.py
index 1424b68b..417a31a0 100644
--- a/packages/core/python/itkwasm/itkwasm/pipeline.py
+++ b/packages/core/python/itkwasm/itkwasm/pipeline.py
@@ -345,7 +345,7 @@ class Pipeline:
if mesh.numberOfPoints > 0:
data_ptr = ri.get_output_array_address(0, index, 0)
data_size = ri.get_output_array_size(0, index, 0)
- mesh.points = _to_numpy_array(mesh.meshType.pointComponentType, ri.wasmtime_lift(data_ptr, data_size))
+ mesh.points = _to_numpy_array(mesh.meshType.pointComponentType, ri.wasmtime_lift(data_ptr, data_size)).reshape((-1, mesh.meshType.dimension))
else:
mesh.points = _to_numpy_array(mesh.meshType.pointComponentType, bytes([]))

@@ -377,7 +377,7 @@ class Pipeline:
if polydata.numberOfPoints > 0:
data_ptr = ri.get_output_array_address(0, index, 0)
data_size = ri.get_output_array_size(0, index, 0)
- polydata.points = _to_numpy_array(FloatTypes.Float32, ri.wasmtime_lift(data_ptr, data_size))
+ polydata.points = _to_numpy_array(FloatTypes.Float32, ri.wasmtime_lift(data_ptr, data_size)).reshape((-1, 3))
else:
polydata.points = _to_numpy_array(FloatTypes.Float32, bytes([]))

diff --git a/packages/core/python/itkwasm/test/test_pipeline.py b/packages/core/python/itkwasm/test/test_pipeline.py
index 666ed5ef..e83e548f 100644
--- a/packages/core/python/itkwasm/test/test_pipeline.py
+++ b/packages/core/python/itkwasm/test/test_pipeline.py
@@ -167,6 +167,9 @@ def test_pipeline_write_read_mesh():

outputs = pipeline.run(args, pipeline_outputs, pipeline_inputs)

+ print(outputs[0].data)
+ print(outputs[0].data.points.shape)
+
out_mesh_dict = asdict(outputs[0].data)
# Native ITK Python binaries require uint64
out_mesh_dict['cells'] = out_mesh_dict['cells'].astype(np.uint64)
```

But the following needs to be addressed in `itk` Python:

```
test/test_pipeline.py:177:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/home/matt/bin/micromamba/envs/itk-wasm/lib/python3.11/site-packages/itk/support/extras.py:828: in me
sh_from_dict
points = itk.vector_container_from_array(points)
/home/matt/bin/micromamba/envs/itk-wasm/lib/python3.11/site-packages/itk/support/extras.py:561: in ve
ctor_container_from_array
return itk.PyVectorContainer[keys[0]].vector_container_from_array(arr)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
ndarr = array([[3.71636 , 2.34339 , 0. ], [4.12656 , 0.642027, 0. ],
[3.45497 , 2.16988 , 0. ],
...16 , 2.12093 , 1.17252 ],
[4.13317 , 2.17523 , 1.25932 ],
[4.23234 , 1.90308 , 0.534362]], dtype=float32)

def vector_container_from_array(ndarr):
"""Get an itk.VectorContainer from a NumPy array.

This is a deep copy of the NumPy array buffer and is completely safe without potential
side effects.
"""

> assert ndarr.ndim == 1 , "Only arrays of 1 dimension are supported."
E AssertionError: Only arrays of 1 dimension are supported.

```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.