## Copyright (c) Aslak W. Bergersen, Henrik A. Kjeldsberg. All rights reserved.
## See LICENSE file for details.
## This software is distributed WITHOUT ANY WARRANTY; without even
## the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
## PURPOSE. See the above copyright notices for more information.
from argparse import ArgumentTypeError
[docs]def str2bool(boolean):
"""Convert a string to boolean.
Args:
boolean (str): Input string.
Returns:
return (bool): Converted string.
"""
if boolean.lower() in ('yes', 'true', 't', 'y', '1'):
return True
elif boolean.lower() in ('no', 'false', 'f', 'n', '0'):
return False
else:
raise ValueError('Boolean value expected.')
[docs]def restricted_float(x):
x = float(x)
if x <= 0.0 or x >= 1.0:
raise ArgumentTypeError("{} not in range [0.0, 1.0]".format(x))
return x
[docs]def add_common_arguments(parser, required=True):
# Required arguments
if required:
required = parser.add_argument_group('Required arguments')
else:
required = parser
required.add_argument('-i', '--ifile', type=str, default=None, required=True,
help="Path to the surface model")
required.add_argument("-o", "--ofile", type=str, default=None, required=True,
help="Relative path to the output surface. The default folder is" +
" the same as the input file, and a name with a combination of the" +
" parameters.")
# General arguments
parser.add_argument('-s', '--smooth', type=str2bool, default=True,
help="Smooth the voronoi diagram, default is False")
parser.add_argument('-f', '--smooth-factor', type=float, default=0.25,
help="If smooth option is true then each voronoi point" +
" that has a radius less then MISR*(1-smooth_factor) at" +
" the closest centerline point is removed.")
parser.add_argument("-n", "--no-smooth", type=str2bool, default=False,
help="If true and smooth is true the user, if no-smooth-point is" +
" not given, the user can provide points where the surface not will" +
" be smoothed.")
parser.add_argument("--no-smooth-point", nargs="+", type=float, default=None,
help="If model is smoothed the user can manually select points on" +
" the surface that will not be smoothed. A centerline will be" +
" created to the extra point, and the section were the centerline" +
" differ from the other centerlines will be kept un-smoothed. This" +
" can be particle for instance when manipulating geometries" +
" with aneurysms")
parser.add_argument("-b", "--poly-ball-size", nargs=3, type=int, default=[120, 120, 120],
help="The size of the poly balls that will envelope the new" +
" surface. The default value is 120, 120, 120. If two tubular" +
" structures are very close compared to the bounds, the poly ball" +
" size should be adjusted. For quick proto typing we" +
" recommend ~100 in all directions, but >250 for a final " +
" surface.", metavar="size")
parser.add_argument("--resampling-step", type=float, default=0.1,
help="Resampling step in centerlines.")