tornavis/source/blender/blenlib/BLI_bounds_types.hh

68 lines
1.8 KiB
C++

/* SPDX-FileCopyrightText: 2023 Blender Authors
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
/** \file
* \ingroup bli
*/
namespace blender {
template<typename T> struct Bounds {
T min;
T max;
Bounds() = default;
Bounds(const T &value) : min(value), max(value) {}
Bounds(const T &min, const T &max) : min(min), max(max) {}
/**
* Returns true when the size of the bounds is zero (or negative).
* This matches the behavior of #BLI_rcti_is_empty/#BLI_rctf_is_empty.
*/
bool is_empty() const;
/**
* Return the center (i.e. the midpoint) of the bounds.
* This matches the behavior of #BLI_rctf_cent/#BLI_rcti_cent.
*/
T center() const;
/**
* Return the size of the bounds.
* E.g. for a Bounds<float3> this would return the dimensions of bounding box as a float3.
* This matches the behavior of #BLI_rctf_size/#BLI_rcti_size.
*/
T size() const;
/**
* Translate the bounds by #offset.
* This matches the behavior of #BLI_rctf_translate/#BLI_rcti_translate.
*/
void translate(const T &offset);
/**
* Scale the bounds from the center.
* This matches the behavior of #BLI_rctf_scale/#BLI_rcti_scale.
*/
void scale_from_center(const T &scale);
/**
* Resize the bounds in-place to ensure their size is #new_size.
* The center of the bounds doesn't change.
* This matches the behavior of #BLI_rctf_resize/#BLI_rcti_resize.
*/
void resize(const T &new_size);
/**
* Translate the bounds such that their center is #new_center.
* This matches the behavior of #BLI_rctf_recenter/#BLI_rcti_recenter.
*/
void recenter(const T &new_center);
/**
* Adds some padding to the bounds.
* This matches the behavior of #BLI_rcti_pad/#BLI_rctf_pad.
*/
template<typename PaddingT> void pad(const PaddingT &padding);
};
} // namespace blender