Create equidistant curves on a given surface

Hello Slicer developers,

I am doing research about HDR brachytherapy for skin (plesiotherapy) and intraoperative applications.

For planning purposes, I would like to generate a series of equidistant curves (for example 1 cm away) on a given surface (for example, a model of the patient’s skin or a tumor) that would simulate the trajectories of the catheters to be placed for treatment.

Is there any module or extension that could do this?

What I’ve seen until now is that I could define two points on the mentioned surface and that “Open Curve Markup” from Slicer 4.11 could generate a path connecting them. The problem here is that I do not know if I can constrain the different curves to be separated a certain distance.

Here is an example with two curves:

Moreover, I would like to obtain a model/segmentation of these curves, so when using “Open Curve Markup” and “Markups to Model” I have the same problem as in this topic: Use Open Curve Markup as input node in "Markups To Model" extension.

I would like to underline that this should be done preoperatively, so neither “PathReconstruction” nor “SlicerIGT” extensions would help.

Thank you very much in advance,


Others may chime in more.

To me, you have two conflicting requirements, you want to curves to be equidistant and yet you want each to follow the surface topography of the model. This may not be always possible, in fact it is probably never possible on something as complex as the region you highlight above.

If 1cm is a soft constraint (e.g., an average), you can draw your 1st curve using a number of tools available (including following the shortest path on the surface) within the Curve Markup annotation (look under the Curve Settings option). Then you can clone this node, and move it away 1 cm in whichever direction you want. It is almost guaranteed that the control point of this cloned curve will NOT be on the surface (they may be below the surface). You can then use the Resample option with the constrain to the surface option set, which will make the curve follow the surface topography, but then the control points of two curves are not going to be equidistant anymore.

1 Like

We have implemented a module for 3D-printed HDR brachytherapy catheter guide for skin cancer treatment a couple of years ago. Is that something similar to what you would like to accomplish?

You can find detailed description in this paper (full text available at links near the bottom). Full source code of the module is available here, but since it was written 5 years ago, you probably need to update it a bit to run on current Slicer version (and it could be simplified significantly, because now Slicer supports curves and has many other features that could be utilized). If you have any questions then we are happy to help.


Hello Murat Maga,

thank you for the answer and the suggestion, that was more or less what I figured out initially with the Open Curve Markup tool.

However, I think that said curves can meet both requirements. I don’t need them to have same shape/trajectory or be in equidistant planes (as the ones in Andras’s screenshot), I would understand that in such case they could not be equidistant due to the complex surface.

In my problem, I am trying to find the set of points that, laying on same surface and following a certain direction, are 1 cm away for example. I hope I’ve explained myself better now.

Hello Andras Lasso,

thank you very much for all the information regarding that module, I did not know it existed. I will read the paper in detail, I think it could help me in the skin brachytherapy part of the problem.

Unfortunately, I do not have experience with Python or testing code within Slicer.

¿Could you please tell me how can I test the module in Slicer? ¿Do I need an older release?

Thank you again in advance for the attention.

If you use an older Slicer version where this module works (around Slicer-4.6) then you cannot benefit from all those fixes and improvements that we implemented in the past 5 years Slicer. That would be a huge setback for you.

Can you find a computing student or a medical physicist who is interested in Python programming that would be ready to work on this project with you? I could then help you to get started with Python scripting in Slicer so that you can update the module to work with the latest Slicer version and fine-tune it to meet your requirements.

1 Like

Thank you very much Andras, I’ll check how the module works in such older Slicer version and see if my team and I could work in the code updating for latest version.

Could you please give me some references on how to load a module which is not preinstalled in Slicer like that one?