OpenABF 2.1.0
Loading...
Searching...
No Matches
Namespaces | Classes | Functions | Variables
OpenABF::detail Namespace Reference

Implementation details. More...

Namespaces

namespace  ABF
 ABF and ABF++ implementation details
 
namespace  hlscm
 Implementation details for HierarchicalLSCM.
 

Classes

class  FilteringIterator
 Input iterator that skips elements not matching a predicate. More...
 
struct  Range
 Lightweight non-owning range adapter holding begin/end iterators. More...
 

Functions

template<typename T >
auto vec_to_string (const T &v) -> std::string
 
template<class ForwardContainer , class UnaryPred >
auto remove_if (ForwardContainer v, UnaryPred p)
 
template<class SparseMatrix , class DenseMatrix , class Solver , std::enable_if_t<!is_instance_of_v< Solver, Eigen::LeastSquaresConjugateGradient >, bool > = false>
auto SolveLeastSquares (SparseMatrix A, SparseMatrix b) -> DenseMatrix
 
template<typename MeshType >
void MinimizeChartBoundingBox (const typename MeshType::Pointer &chart)
 Rotate a chart within its UV plane so its axis-aligned bounding box has minimum area, with the larger extent vertical.
 

Variables

template<class T , template< class... > class U>
constexpr bool is_instance_of_v = std::false_type{}
 
template<template< class... > class U, class... Vs>
constexpr bool is_instance_of_v< U< Vs... >, U > = std::true_type{}
 

Detailed Description

Implementation details.

Function Documentation

◆ MinimizeChartBoundingBox()

template<typename MeshType >
void OpenABF::detail::MinimizeChartBoundingBox ( const typename MeshType::Pointer &  chart)
private

Rotate a chart within its UV plane so its axis-aligned bounding box has minimum area, with the larger extent vertical.

The minimum-area enclosing rectangle of a planar point set always has one edge collinear with an edge of the set's convex hull, so it suffices to test the orientation induced by each hull edge. The chart is then stood on its long axis (larger extent vertical) so it aligns with PackCharts's tallest-first shelf strategy. Vertex positions are rotated in place about the origin; only the first two components are touched. Rotation preserves topology and vertex identity, so any back-maps remain valid.

Template Parameters
MeshTypeA HalfEdgeMesh specialization

◆ remove_if()

auto OpenABF::detail::remove_if ( ForwardContainer  v,
UnaryPred  p 
)

Returns a copy of v with every element matching p removed. Naming matches std::remove_if (predicate selects elements to drop), NOT the conventional filter semantic where the predicate selects what to keep.

◆ SolveLeastSquares()

template<class SparseMatrix , class DenseMatrix , class Solver , std::enable_if_t<!is_instance_of_v< Solver, Eigen::LeastSquaresConjugateGradient >, bool > = false>
auto OpenABF::detail::SolveLeastSquares ( SparseMatrix  A,
SparseMatrix  b 
) -> DenseMatrix

Solve least squares using A'Ab

Solve least squares with LeastSquaresConjugateGradient

◆ vec_to_string()

template<typename T >
auto OpenABF::detail::vec_to_string ( const T &  v) -> std::string

Debug: Print a vector of elements to a string

Variable Documentation

◆ is_instance_of_v

template<class T , template< class... > class U>
constexpr bool OpenABF::detail::is_instance_of_v = std::false_type{}
constexpr

Check if type is an instance of a template type: False

◆ is_instance_of_v< U< Vs... >, U >

template<template< class... > class U, class... Vs>
constexpr bool OpenABF::detail::is_instance_of_v< U< Vs... >, U > = std::true_type{}
constexpr

Check if type is an instance of a template type: True