Program Listing for File flat.hxx

Return to documentation for file (src/enve/flat.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_FLAT_HXX
#define INCLUDE_ENVE_FLAT_HXX

namespace enve
{

  namespace ground
  {

    /*\
     |    __ _       _
     |   / _| | __ _| |_
     |  | |_| |/ _` | __|
     |  |  _| | (_| | |_
     |  |_| |_|\__,_|\__|
     |
    \*/

    class flat : public plane
    {
    private:
      real m_friction;

    public:
      flat(flat const &) = delete;

      flat(flat &&) = delete;

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

      flat & operator=(flat &&) = delete;

      ~flat(void) override = default;

      flat(void);

      flat(
        real friction,
        real origin_x,
        real origin_y,
        real origin_z,
        real normal_x,
        real normal_y,
        real normal_z
      );

      flat(
        real          friction,
        point const & origin,
        vec3  const & normal
      );

      flat(
        real          friction,
        plane const & plane_obj
      );

      void
      copy(
        flat const & flat_obj
      );

      bool
      isApprox(
        flat const & flat_obj,
        real         tolerance = EPSILON_LOW
      ) const;

      real const &
      friction(void)
      const;

      real &
      friction(void);

      plane const &
      layingPlane(void)
      const;

      plane &
      layingPlane(void);

      void
      print(
        out_stream & os
      ) const;
    };

  } // namespace ground

} // namespace enve

#endif