You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.2 KiB

  1. /*
  2. * This program source code file is part of KiCad, a free EDA CAD application.
  3. *
  4. * Copyright (C) 2017 KiCad Developers, see AUTHORS.txt for contributors.
  5. *
  6. * This program is free software; you can redistribute it and/or
  7. * modify it under the terms of the GNU General Public License
  8. * as published by the Free Software Foundation; either version 2
  9. * of the License, or (at your option) any later version.
  10. *
  11. * This program is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14. * GNU General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program; if not, you may find one here:
  18. * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
  19. * or you may search the http://www.gnu.org website for the version 2 license,
  20. * or you may write to the Free Software Foundation, Inc.,
  21. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
  22. */
  23. #ifndef PREVIEW_ITEMS_TWO_POINT_GEOMETRY_MANAGER_H
  24. #define PREVIEW_ITEMS_TWO_POINT_GEOMETRY_MANAGER_H
  25. #include <math/vector2d.h>
  26. #include <geometry/geometry_utils.h>
  27. namespace KIGFX
  28. {
  29. class GAL;
  30. namespace PREVIEW
  31. {
  32. /**
  33. * Class TWO_POINT_GEOMETRY_MANAGER
  34. *
  35. * Represents a very simple geometry manager for items that have
  36. * a start and end point.
  37. */
  38. class TWO_POINT_GEOMETRY_MANAGER
  39. {
  40. public:
  41. ///> Set the origin of the ruler (the fixed end)
  42. void SetOrigin( const VECTOR2I& aOrigin )
  43. {
  44. m_origin = aOrigin;
  45. }
  46. VECTOR2I GetOrigin() const
  47. {
  48. return m_origin;
  49. }
  50. /**
  51. * Set the current end of the rectangle (the end that moves
  52. * with the cursor.
  53. */
  54. void SetEnd( const VECTOR2I& aEnd )
  55. {
  56. if( m_angleSnap )
  57. {
  58. m_end = GetVectorSnapped45( aEnd - m_origin ) + m_origin;
  59. }
  60. else
  61. {
  62. m_end = aEnd;
  63. }
  64. }
  65. VECTOR2I GetEnd() const
  66. {
  67. return m_end;
  68. }
  69. void SetAngleSnap( bool aSnap )
  70. {
  71. m_angleSnap = aSnap;
  72. }
  73. private:
  74. VECTOR2I m_origin, m_end;
  75. bool m_angleSnap = false;
  76. };
  77. } // PREVIEW
  78. } // KIGFX
  79. #endif // PREVIEW_ITEMS_TWO_POINT_GEOMETRY_MANAGER_H