I’d like to extract septal surface from left (LV) or right (RV) ventricle model. I am able to convert models points to numpy arrays and get its distance using numpy.linalg.norm. Then I can select part of points with minimal distance. However I don’t know how to create new model based on selected points - see picture.
You don’t need to mess with computing distances in numpy, but instead use vtkDistancePolyDataFilter. You can then use vtkThreshold to extract a piece of a mesh based on the computed distance that is stored in point scalars.
An alternative, potentially simpler and more robust method is to use the Segment Editor:
Create a segment “septum” that contains LV RV and septal wall, by combining LV and RV into one segment using Logical operators effect (allow overlap in masking settings to be able to preserve the original LV and RB segments).
Fill the gap between the LV and RV in the “septum” segment by using Smoothing effect (Closing operation, with a sufficiently large kernel).
Subtract the original LV and RV segments from the “septum” segment using Logical operators. What remains is the septal wall.
If the serial wall can be up to 15mm and voxel size is about 0.5mm then indeed the smoothing may take long. You can try Margin effect instead (grow then shrink by 15mm), or use Wrap Solidify effect (provided by SurfaceWrapSolidify extension).