Program Listing for File shape.hxx

Return to documentation for file (src/enve/shape.hxx)

/*
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *                                                                     *
 * The ENVE project                                                    *
 *                                                                     *
 * Copyright (c) 2020, Davide Stocco and Enrico Bertolazzi.            *
 *                                                                     *
 * The ENVE project and its components are supplied under the terms of *
 * the open source BSD 3-Clause License. The contents of the ENVE      *
 * project and its components may not be copied or disclosed except in *
 * accordance with the terms of the BSD 3-Clause License.              *
 *                                                                     *
 * URL: https://opensource.org/licenses/BSD-3-Clause                   *
 *                                                                     *
 *    Davide Stocco                                                    *
 *    Department of Industrial Engineering                             *
 *    University of Trento                                             *
 *    e-mail: davide.stocco@unitn.it                                   *
 *                                                                     *
 *    Enrico Bertolazzi                                                *
 *    Department of Industrial Engineering                             *
 *    University of Trento                                             *
 *    e-mail: enrico.bertolazzi@unitn.it                               *
 *                                                                     *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/


#ifndef INCLUDE_ENVE_SHAPE_HXX
#define INCLUDE_ENVE_SHAPE_HXX

namespace enve
{

  /*\
   |       _
   |   ___| |__   __ _ _ __   ___
   |  / __| '_ \ / _` | '_ \ / _ \
   |  \__ \ | | | (_| | |_) |  __/
   |  |___/_| |_|\__,_| .__/ \___|
   |                  |_|
  \*/

  class shape
  {
  private:
    real m_r_x;
    real m_m_x;
    real m_r_y;
    real m_m_y;
    real m_l_y;

  public:
    shape(shape const &) = default;

    shape(shape &&) = default;

    shape & operator=(const shape &) = delete;

    shape & operator=(shape &&) = delete;

    ~shape(void) = default;

    shape(void);

    shape(
      real r_x,
      real m_x,
      real r_y,
      real m_y,
      real l_y
    );

    void
    copy(
      shape const & shape_obj
    );

    bool
    isApprox(
      shape const & shape_obj,
      real          tolerance = EPSILON_LOW
    ) const;

    real const &
    Rx(void)
    const;

    real const &
    Mx(void)
    const;

    real const &
    Ry(void)
    const;

    real const &
    My(void)
    const;

    real const &
    Ly(void)
    const;

    real &
    Rx(void);

    real &
    Mx(void);

    real &
    Ry(void);

    real &
    My(void);

    real &
    Ly(void);

    real const &
    surfaceMaxRadius(void)
    const;

    real const &
    surfaceMaxWidth(void)
    const;

    bool
    checkWidthBound(
      real y
    ) const;

    real
    surfaceRadius(
      real y
    ) const;

    real const &
    surfaceWidth(void)
    const;

    real
    surfaceDerivative(
      real y,
      real tolerance = EPSILON_MEDIUM
    ) const;

    real
    surfaceAngle(
      real y,
      real tolerance = EPSILON_MEDIUM
    ) const;

    void
    print(
      out_stream & os
    ) const;

  }; // class shape

} // namespace enve

#endif