Nothing
################################################################################
#' Adding or removing a margin to a volume
#' @description The \code{add.margin} function adds or subtracts a margin of the
#' rectangular parallelepiped circumscribed by a volume.
#' @param vol "volume" class object.
#' @param xyz.margin Vector of the 3 positive or negative x, y and z margins in
#' mm, in the frame of reference of volume cutting planes.
#' @param alias Character string, \code{$alias} of the created object
#' @param description Character string, describing the created object.
#' If \code{description = NULL} (default value), it will be set to \code{vol$description}
#' @return Returns a "volume" class object (see \link[espadon]{espadon.class}
#' for class definitions), in which 3D volume is restricted or increased by the
#' requested margins.
#' If the created volume exceeds the initial volume, new voxels are set to \code{NA}.
#' @seealso \link[espadon]{nesting.cube}, \link[espadon]{nesting.roi} and
#' \link[espadon]{nesting.bin}.
#' @examples
#' # loading of toy-patient objects (decrease dxyz for better result)
#' step <- 4
#' patient <- toy.load.patient(modality = "ct", roi.name = "",
#' dxyz = rep (step, 3))
#' CT <- patient$ct[[1]]
#'
#' # Calculation of new volumes decreased by 10 mm in all directions.
#' new.CT <- add.margin(CT, xyz.margin = c (-10, -10, 10), alias = "new CT")
#' # display of the CT before and after, in the middle cutting plane
#' z.mid <- apply(get.extreme.pt (CT), 1, mean)[3]
#' display.plane(bottom = CT, view.coord = z.mid, bottom.col = pal.RVV(1000),
#' bg = "#00ffff", interpolate = FALSE)
#' display.plane(bottom = new.CT, view.coord = z.mid, bottom.col = pal.RVV(1000),
#' bg = "#00ffff", interpolate = FALSE)
#'
#' @export
#' @importFrom methods is
add.margin <- function(vol, xyz.margin, alias = "", description = NULL) {
if (is.null(vol)) return(NULL)
if (!is(vol, "volume")) stop("vol should be a volume class object.")
if (is.null(vol$vol3D.data)) stop("empty vol$vol3D.data.")
if (length(xyz.margin) < 3) stop("xyz.margin must have a length of 3.")
if (!is.null(vol$local.gridx)) {
vol$local.gridx <- NULL
vol$local.gridy <- NULL
}
t.mat <- ref.cutplane.add(vol)
vol_ <- vol.in.new.ref(vol, new.ref.pseudo = paste0(vol$ref.pseudo,"m"), t.mat)
vol.pt <- vol_$xyz.from.ijk %*% vol_$cube.idx[,c(1, 7)]
pt.min <- c(min(vol.pt[1,]) - xyz.margin[1] , min(vol.pt[2,]) - xyz.margin[2], min(vol.pt[3,]) - xyz.margin[3])
pt.max <- c(max(vol.pt[1,]) + xyz.margin[1] , max(vol.pt[2,]) + xyz.margin[2], max(vol.pt[3,]) + xyz.margin[3])
if ((pt.min[1] <= pt.max[1]) & (pt.min[2] <= pt.max[2]) & (pt.min[3] <= pt.max[3])) {
if (is.null(description))
description <- paste(vol$description, "restricted to xyz.margin", paste(xyz.margin, collapse = "|"))
new.vol <- nesting.cube(vol_, pt.min, pt.max, alias, description )
new.vol$object.alias <- vol$object.alias
new.vol$object.info <- vol$object.info
return(vol.in.new.ref(new.vol, new.ref.pseudo = vol$ref.pseudo, t.mat,
alias = alias, description = description))
}
return(NULL)
}
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.