Hello all,
How can I use the markup module to draw closed shapes with specific dimensions? Such as a circle with a specific radius, or a rectangle with a specific width/height?
Thanks in advance.
There are many different approaches to implement this (use Create Models module in SlicerIGT extension, write a few lines of Python code, constrain markups ROI size, etc.). What would you like to achieve?
Thanks for your response @lassoan. Create Models module is for creating models, however, I want some closed curves, not models.
I want to use these curves to assign a different label to a specific part of my model as I mentioned here.
However, I want my curve to have a specific shape with exact dimensions.
You can certainly use markups to place labels on a model, but those would be just markups fiducials. How do you plan to use a closed curve for labeling?
In fact, I want to choose a specific region ( that is a closed region such as a circle with a specific radius or a rectangle with a specific width/height) on my surface model, so that I can assign a label to that region in the next step.
Cutting out a region from a surface using closed curve should work well and (in recent Slicer Preview releases) you can enable display of the node name on the curve. So, I think you should be all set.
By “drawing closed shapes with specific dimensions” do you mean you would like to set an absolute size for the markup control point? You can do that by clicking the “absolute” button in Markups module / Display / Glyph size.
Thanks for your response @lassoan.
Yes, I can cut the surface as you mentioned and I am OK with it. My only problem now is the closed curve that I create in the Markups module. I want that closed curve to have a specific shape with a specific dimension (such as a circle with a specific radius).
So my main question is this:
How can I draw a circle with a specific radius using the Markup module?
I changed the glyph size that you mentioned, however, it seems that it only changes the size of the marker which is not what I want.
If you want to cut with a specific shape then it is probably better to create that shape as a model with known dimensions, use transforms widget to move/rotate it, and cut with that (using Combine models module or Segment Editor).
Thanks for your response @lassoan. It is a good suggestion, however, I cannot use the segment editor for this aim. Because as I mentioned my current model is a surface (not a volume) and I found that segment editor cannot deal with intersecting a volumetric mode (such as a cube) with a surface. I am trying to Combine Models module that you mentioned, however, I cannot find it. Is it under another module?
Combine models is available if you install Sandbox extension.
Thanks for your response @lassoan. I installed the Combine Models module. Also, I created a cube model with the Create Models module (green cube in the picture) and I want to find its intersection with my own model (which is a surface model and is the yellow model in the picture). However, when I do it in the Combine Models modules, the created model is empty. Do you have any suggestions on how to solve the problem?
Combine models module is for combining closed surfaces. Is the yellow model a closed surface?
Boolean operations are only feasible if the inputs do not have any non-manifold edges. How was they yellow model generated?
Create models module creates a cube with minimum number of triangles, which may result in extremely complex computations. You would probably get better results by subdividing the green model.
Thanks for your response @lassoan. The yellow model is a surface that was cut from another model.
As far as I understood, I should use Combine Models module to find the intersection before I cut that surface. Is this correct?
If yes, when I find the intersection before cutting the surface, there will be some other intersections of the green cube with other parts of the model that are not my interest. How can I delete those parts and only keep the part the lays on the yellow surface?
Combine models module is for combining closed surfaces. Is the yellow model a closed surface (a watertight surface that encloses non-zero-volume region inside)?
No, the yellow model is not a closed surface. I cut it from another closed surface model. However, the resulted surface (that is the yellow surface) is not a closed surface.
Combine models is for Boolean operations on closed surfaces, so it is not applicable.
You can cut out a rectangular region from an open surface using Dynamic modeler module’s Clip with ROI tool. This tool is available in recent Slicer Preview Releases and you need to use Markups ROI as input.
Thanks for your response @lassoan. The dynamic Modeler module was the first thing I tried, however, the problem with it is that I cannot create specific closed curves with a specific dimension (such as a circle with a specific radius) with the markup module so that I can use it in the Dynamic modeler module.
You only use the ROI for markups module. You can create the model using Markups to Model, Create Models, etc. modules or directly using VTK filters.
Sorry, @lassoan. I think did not completely understand your explanation. I already use the Markups modules for creating the closed curve and (I am not sure whether I use ROI or not). Is it possible to draw the shapes that I want in the Markups module?
You can use Markups module for specifying the clipping ROI box (specify size numerically and/or modify the size/position/orientation in viewers).
You can also use markups to draw shapes (line, curve, plane, box) and by using Markups to Model module you can also draw a curved closed surface. You can also bring in Create models, Segment Editor, etc. - there are many tools and you can use them in many combinations.
Please describe your complete modeling workflow and then we may be able to provide more specific advice.