38#ifndef DRAIN_ALIGNMENT1
39#define DRAIN_ALIGNMENT1
41#include <drain/Enum.h>
90 return UNDEFINED_AXIS;
125template <
typename AX = AlignBase::Axis, AlignBase::Axis A = AlignBase::Axis::UNDEFINED_AXIS>
152 template <
typename AX2, AlignBase::Axis A2>
164 const AlignBase::Axis & get(
const AlignBase::Axis & defaultValue)
const {
165 if (axis != AlignBase::Axis::UNDEFINED_AXIS){
175 if (pos != AlignBase::Pos::UNDEFINED_POS){
186 axis = AlignBase::Axis::UNDEFINED_AXIS;
187 pos = AlignBase::Pos::UNDEFINED_POS;
191 template <
typename AX2, AlignBase::Axis A2>
193 bool operator==(
const Alignment<AX2,A2> & align)
const {
194 return (align.axis == axis) && (align.pos == pos);
244template <
typename AX = AlignBase::Axis, AlignBase::Axis A = AlignBase::Axis::UNDEFINED_AXIS>
247 MutualAlign::Topol topol = MutualAlign::Topol::INSIDE;
250 template <
class ...TT>
260 return (this->axis != AlignBase::Axis::UNDEFINED_AXIS) &&
261 (this->pos != AlignBase::Pos::UNDEFINED_POS) &&
262 (topol != MutualAlign::Topol::UNDEFINED_TOPOL);
267 const MutualAlign::Topol & getOrDefault(
const MutualAlign::Topol & defaultValue)
const {
268 if (topol != MutualAlign::Topol::UNDEFINED_TOPOL){
280 Alignment<AX,A>::reset();
281 topol = MutualAlign::Topol::UNDEFINED_TOPOL;
291 template <
class ...TT>
294 this->pos = align.pos;
299 template <
typename AX2, AlignBase::Axis A2,
class ...TT>
301 this->axis = align.axis;
302 this->pos = align.pos;
308 template <
class ...TT>
309 void set(MutualAlign::Topol topol,
const TT... args){
314 template <
class ...TT>
315 void set(AlignBase::Axis axis,
const TT... args){
320 template <
class ...TT>
326 template <
class ...TT>
327 void set(
const std::string & key,
const TT... args){
331 else if (Enum<Alignment<> >::setValue(key, *
this)){
348 template <
class ...TT>
349 void set(
const char *key,
const TT... args){
350 set(std::string(key), args...);
364typedef CompleteAlignment<const AlignBase::Axis, AlignBase::Axis::HORZ> CompleteHorzAlign;
365typedef CompleteAlignment<const AlignBase::Axis, AlignBase::Axis::VERT> CompleteVertAlign;
370DRAIN_ENUM_DICT(image::AlignBase::Axis);
373DRAIN_ENUM_DICT(image::MutualAlign::Topol);
375DRAIN_ENUM_OSTREAM(drain::image::AlignBase::Axis)
379template <
typename AX, drain::image::AlignBase::Axis A>
383 return ostr << align.axis <<
'_' << align.pos;
388DRAIN_ENUM_OSTREAM(drain::image::MutualAlign::Topol)
390template <
typename AX, drain::image::AlignBase::Axis A>
392 return ostr << ad.topol <<
'_' << ad.axis <<
':' << ad.pos;
Definition StringBuilder.h:58
std::ostream & operator<<(std::ostream &ostr, const PlainData< DT > &d)
Definition Data.h:631
static bool setValue(const std::string &key, E &value)
Assign string values to an enumeration type.
Definition Enum.h:78
Low level alignment instructions.
Definition Alignment.h:50
static Axis flip(Axis axis)
supporting simultaneous HORZ|VERT
Definition Alignment.h:83
Pos
Reference position at Axis (HORZ or VERT)
Definition Alignment.h:55
Container for Axis and Pos.
Definition Alignment.h:126
Alignment(const Alignment &ac)
Copy constructor.
Definition Alignment.h:142
Alignment(AlignBase::Pos pos=AlignBase::Pos::UNDEFINED_POS)
Default constructor.
Definition Alignment.h:137
virtual ~Alignment()
Destructor.
Definition Alignment.h:160
"Alternative" partial alignment configuration for single object. Partial means that either OBJECT its...
Definition Alignment.h:245
void set(const Alignment< AX2, A2 > &align, const TT... args)
Variant for non-const axis AX2.
Definition Alignment.h:300
void set(const Alignment< AX, A > &align, const TT... args)
Variant for same-AX-type, HORZ or VERT.
Definition Alignment.h:292
CompleteAlignment(const TT... args)
Constructor not setting Axis.
Definition Alignment.h:251
Definition Alignment.h:215