Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
agg::trans_affine Struct Reference

#include <src/agg/agg_trans_affine.h>

+ Inheritance diagram for agg::trans_affine:

Public Member Functions

 trans_affine ()
 
 trans_affine (double v0, double v1, double v2, double v3, double v4, double v5)
 
 trans_affine (const double *m)
 
 trans_affine (double x1, double y1, double x2, double y2, const double *parl)
 
 trans_affine (const double *parl, double x1, double y1, double x2, double y2)
 
 trans_affine (const double *src, const double *dst)
 
const trans_affineparl_to_parl (const double *src, const double *dst)
 
const trans_affinerect_to_parl (double x1, double y1, double x2, double y2, const double *parl)
 
const trans_affineparl_to_rect (const double *parl, double x1, double y1, double x2, double y2)
 
const trans_affinereset ()
 
const trans_affinetranslate (double x, double y)
 
const trans_affinerotate (double a)
 
const trans_affinescale (double s)
 
const trans_affinescale (double x, double y)
 
const trans_affinemultiply (const trans_affine &m)
 
const trans_affinepremultiply (const trans_affine &m)
 
const trans_affinemultiply_inv (const trans_affine &m)
 
const trans_affinepremultiply_inv (const trans_affine &m)
 
const trans_affineinvert ()
 
const trans_affineflip_x ()
 
const trans_affineflip_y ()
 
void store_to (double *m) const
 
const trans_affineload_from (const double *m)
 
const trans_affineoperator*= (const trans_affine &m)
 
const trans_affineoperator/= (const trans_affine &m)
 
trans_affine operator* (const trans_affine &m) const
 
trans_affine operator/ (const trans_affine &m) const
 
trans_affine operator~ () const
 
bool operator== (const trans_affine &m) const
 
bool operator!= (const trans_affine &m) const
 
void transform (double *x, double *y) const
 
void transform_2x2 (double *x, double *y) const
 
void inverse_transform (double *x, double *y) const
 
double determinant () const
 
double determinant_reciprocal () const
 
double scale () const
 
bool is_valid (double epsilon=affine_epsilon) const
 
bool is_identity (double epsilon=affine_epsilon) const
 
bool is_equal (const trans_affine &m, double epsilon=affine_epsilon) const
 
double rotation () const
 
void translation (double *dx, double *dy) const
 
void scaling (double *x, double *y) const
 
void scaling_abs (double *x, double *y) const
 

Public Attributes

double sx
 
double shy
 
double shx
 
double sy
 
double tx
 
double ty
 

Detailed Description

Constructor & Destructor Documentation

◆ trans_affine() [1/6]

agg::trans_affine::trans_affine ( )
inline
93 :
94 sx(1.0), shy(0.0), shx(0.0), sy(1.0), tx(0.0), ty(0.0)
95 {}
double sx
Definition agg_trans_affine.h:89
double sy
Definition agg_trans_affine.h:89
double ty
Definition agg_trans_affine.h:89
double tx
Definition agg_trans_affine.h:89
double shx
Definition agg_trans_affine.h:89
double shy
Definition agg_trans_affine.h:89

Referenced by operator*(), and operator/().

+ Here is the caller graph for this function:

◆ trans_affine() [2/6]

agg::trans_affine::trans_affine ( double  v0,
double  v1,
double  v2,
double  v3,
double  v4,
double  v5 
)
inline
99 :
100 sx(v0), shy(v1), shx(v2), sy(v3), tx(v4), ty(v5)
101 {}

◆ trans_affine() [3/6]

agg::trans_affine::trans_affine ( const double *  m)
inlineexplicit
104 :
105 sx(m[0]), shy(m[1]), shx(m[2]), sy(m[3]), tx(m[4]), ty(m[5])
106 {}

◆ trans_affine() [4/6]

agg::trans_affine::trans_affine ( double  x1,
double  y1,
double  x2,
double  y2,
const double *  parl 
)
inline
111 {
112 rect_to_parl(x1, y1, x2, y2, parl);
113 }
const trans_affine & rect_to_parl(double x1, double y1, double x2, double y2, const double *parl)

References rect_to_parl().

+ Here is the call graph for this function:

◆ trans_affine() [5/6]

agg::trans_affine::trans_affine ( const double *  parl,
double  x1,
double  y1,
double  x2,
double  y2 
)
inline
118 {
119 parl_to_rect(parl, x1, y1, x2, y2);
120 }
const trans_affine & parl_to_rect(const double *parl, double x1, double y1, double x2, double y2)

References parl_to_rect().

+ Here is the call graph for this function:

◆ trans_affine() [6/6]

agg::trans_affine::trans_affine ( const double *  src,
const double *  dst 
)
inline
124 {
125 parl_to_parl(src, dst);
126 }
const trans_affine & parl_to_parl(const double *src, const double *dst)

References parl_to_parl().

+ Here is the call graph for this function:

Member Function Documentation

◆ determinant()

double agg::trans_affine::determinant ( ) const
inline
260 {
261 return sx * sy - shy * shx;
262 }

References shx, shy, sx, and sy.

◆ determinant_reciprocal()

double agg::trans_affine::determinant_reciprocal ( ) const
inline
266 {
267 return 1.0 / (sx * sy - shy * shx);
268 }

References shx, shy, sx, and sy.

Referenced by inverse_transform().

+ Here is the caller graph for this function:

◆ flip_x()

const trans_affine & agg::trans_affine::flip_x ( )

◆ flip_y()

const trans_affine & agg::trans_affine::flip_y ( )

◆ inverse_transform()

void agg::trans_affine::inverse_transform ( double *  x,
double *  y 
) const
inline
310 {
311 double d = determinant_reciprocal();
312 double a = (*x - tx) * d;
313 double b = (*y - ty) * d;
314 *x = a * sy - b * shx;
315 *y = b * sx - a * shy;
316 }
const Scalar & y
Definition MathFunctions.h:552
TCoord< P > x(const P &p)
Definition geometry_traits.hpp:297
double determinant_reciprocal() const
Definition agg_trans_affine.h:265

References determinant_reciprocal(), shx, shy, sx, sy, tx, and ty.

+ Here is the call graph for this function:

◆ invert()

const trans_affine & agg::trans_affine::invert ( )

Referenced by multiply_inv(), operator~(), and premultiply_inv().

+ Here is the caller graph for this function:

◆ is_equal()

bool agg::trans_affine::is_equal ( const trans_affine m,
double  epsilon = affine_epsilon 
) const

Referenced by operator!=(), and operator==().

+ Here is the caller graph for this function:

◆ is_identity()

bool agg::trans_affine::is_identity ( double  epsilon = affine_epsilon) const

◆ is_valid()

bool agg::trans_affine::is_valid ( double  epsilon = affine_epsilon) const

◆ load_from()

const trans_affine & agg::trans_affine::load_from ( const double *  m)
inline
193 {
194 sx = *m++; shy = *m++; shx = *m++; sy = *m++; tx = *m++; ty = *m++;
195 return *this;
196 }

References shx, shy, sx, sy, tx, and ty.

◆ multiply()

const trans_affine & agg::trans_affine::multiply ( const trans_affine m)

Referenced by agg::trans_affine_line_segment::trans_affine_line_segment(), multiply_inv(), operator*=(), premultiply(), and premultiply_inv().

+ Here is the caller graph for this function:

◆ multiply_inv()

const trans_affine & agg::trans_affine::multiply_inv ( const trans_affine m)
inline
387 {
388 trans_affine t = m;
389 t.invert();
390 return multiply(t);
391 }
trans_affine()
Definition agg_trans_affine.h:93
const trans_affine & multiply(const trans_affine &m)

References invert(), and multiply().

Referenced by operator/=().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ operator!=()

bool agg::trans_affine::operator!= ( const trans_affine m) const
inline
241 {
242 return !is_equal(m, affine_epsilon);
243 }
const double affine_epsilon
Definition agg_trans_affine.h:27
bool is_equal(const trans_affine &m, double epsilon=affine_epsilon) const

References agg::affine_epsilon, and is_equal().

+ Here is the call graph for this function:

◆ operator*()

trans_affine agg::trans_affine::operator* ( const trans_affine m) const
inline
215 {
216 return trans_affine(*this).multiply(m);
217 }

References trans_affine().

+ Here is the call graph for this function:

◆ operator*=()

const trans_affine & agg::trans_affine::operator*= ( const trans_affine m)
inline
202 {
203 return multiply(m);
204 }

References multiply().

+ Here is the call graph for this function:

◆ operator/()

trans_affine agg::trans_affine::operator/ ( const trans_affine m) const
inline
222 {
223 return trans_affine(*this).multiply_inv(m);
224 }

References trans_affine().

+ Here is the call graph for this function:

◆ operator/=()

const trans_affine & agg::trans_affine::operator/= ( const trans_affine m)
inline
208 {
209 return multiply_inv(m);
210 }
const trans_affine & multiply_inv(const trans_affine &m)
Definition agg_trans_affine.h:386

References multiply_inv().

+ Here is the call graph for this function:

◆ operator==()

bool agg::trans_affine::operator== ( const trans_affine m) const
inline
235 {
236 return is_equal(m, affine_epsilon);
237 }

References agg::affine_epsilon, and is_equal().

+ Here is the call graph for this function:

◆ operator~()

trans_affine agg::trans_affine::operator~ ( ) const
inline
228 {
229 trans_affine ret = *this;
230 return ret.invert();
231 }

References invert().

+ Here is the call graph for this function:

◆ parl_to_parl()

const trans_affine & agg::trans_affine::parl_to_parl ( const double *  src,
const double *  dst 
)

Referenced by trans_affine().

+ Here is the caller graph for this function:

◆ parl_to_rect()

const trans_affine & agg::trans_affine::parl_to_rect ( const double *  parl,
double  x1,
double  y1,
double  x2,
double  y2 
)

Referenced by trans_affine().

+ Here is the caller graph for this function:

◆ premultiply()

const trans_affine & agg::trans_affine::premultiply ( const trans_affine m)
inline
380 {
381 trans_affine t = m;
382 return *this = t.multiply(*this);
383 }

References multiply().

+ Here is the call graph for this function:

◆ premultiply_inv()

const trans_affine & agg::trans_affine::premultiply_inv ( const trans_affine m)
inline
395 {
396 trans_affine t = m;
397 t.invert();
398 return *this = t.multiply(*this);
399 }

References invert(), and multiply().

+ Here is the call graph for this function:

◆ rect_to_parl()

const trans_affine & agg::trans_affine::rect_to_parl ( double  x1,
double  y1,
double  x2,
double  y2,
const double *  parl 
)

Referenced by trans_affine().

+ Here is the caller graph for this function:

◆ reset()

const trans_affine & agg::trans_affine::reset ( )

◆ rotate()

const trans_affine & agg::trans_affine::rotate ( double  a)
inline
336 {
337 double ca = cos(a);
338 double sa = sin(a);
339 double t0 = sx * ca - shy * sa;
340 double t2 = shx * ca - sy * sa;
341 double t4 = tx * ca - ty * sa;
342 shy = sx * sa + shy * ca;
343 sy = shx * sa + sy * ca;
344 ty = tx * sa + ty * ca;
345 sx = t0;
346 shx = t2;
347 tx = t4;
348 return *this;
349 }
EIGEN_DEVICE_FUNC const CosReturnType cos() const
Definition ArrayCwiseUnaryOps.h:202
EIGEN_DEVICE_FUNC const SinReturnType sin() const
Definition ArrayCwiseUnaryOps.h:220

References cos(), shx, shy, sin(), sx, sy, tx, and ty.

+ Here is the call graph for this function:

◆ rotation()

double agg::trans_affine::rotation ( ) const

◆ scale() [1/3]

double agg::trans_affine::scale ( ) const
inline
320 {
321 double x = 0.707106781 * sx + 0.707106781 * shx;
322 double y = 0.707106781 * shy + 0.707106781 * sy;
323 return sqrt(x*x + y*y);
324 }
EIGEN_DEVICE_FUNC const SqrtReturnType sqrt() const
Definition ArrayCwiseUnaryOps.h:152

References shx, shy, sqrt(), sx, and sy.

+ Here is the call graph for this function:

◆ scale() [2/3]

const trans_affine & agg::trans_affine::scale ( double  s)
inline
367 {
368 double m = s; // Possible hint for the optimizer
369 sx *= m;
370 shx *= m;
371 tx *= m;
372 shy *= m;
373 sy *= m;
374 ty *= m;
375 return *this;
376 }

References shx, shy, sx, sy, tx, and ty.

◆ scale() [3/3]

const trans_affine & agg::trans_affine::scale ( double  x,
double  y 
)
inline
353 {
354 double mm0 = x; // Possible hint for the optimizer
355 double mm3 = y;
356 sx *= mm0;
357 shx *= mm0;
358 tx *= mm0;
359 shy *= mm3;
360 sy *= mm3;
361 ty *= mm3;
362 return *this;
363 }

References shx, shy, sx, sy, tx, and ty.

◆ scaling()

void agg::trans_affine::scaling ( double *  x,
double *  y 
) const

◆ scaling_abs()

void agg::trans_affine::scaling_abs ( double *  x,
double *  y 
) const
inline
403 {
404 // Used to calculate scaling coefficients in image resampling.
405 // When there is considerable shear this method gives us much
406 // better estimation than just sx, sy.
407 *x = sqrt(sx * sx + shx * shx);
408 *y = sqrt(shy * shy + sy * sy);
409 }

References shx, shy, sqrt(), sx, and sy.

+ Here is the call graph for this function:

◆ store_to()

void agg::trans_affine::store_to ( double *  m) const
inline
187 {
188 *m++ = sx; *m++ = shy; *m++ = shx; *m++ = sy; *m++ = tx; *m++ = ty;
189 }

References shx, shy, sx, sy, tx, and ty.

◆ transform()

void agg::trans_affine::transform ( double *  x,
double *  y 
) const
inline
294 {
295 double tmp = *x;
296 *x = tmp * sx + *y * shx + tx;
297 *y = tmp * shy + *y * sy + ty;
298 }

References shx, shy, sx, sy, tx, and ty.

◆ transform_2x2()

void agg::trans_affine::transform_2x2 ( double *  x,
double *  y 
) const
inline
302 {
303 double tmp = *x;
304 *x = tmp * sx + *y * shx;
305 *y = tmp * shy + *y * sy;
306 }

References shx, shy, sx, and sy.

◆ translate()

const trans_affine & agg::trans_affine::translate ( double  x,
double  y 
)
inline
328 {
329 tx += x;
330 ty += y;
331 return *this;
332 }

References tx, and ty.

◆ translation()

void agg::trans_affine::translation ( double *  dx,
double *  dy 
) const

Member Data Documentation

◆ shx

◆ shy

◆ sx

◆ sy

◆ tx

double agg::trans_affine::tx

◆ ty

double agg::trans_affine::ty

The documentation for this struct was generated from the following file: