digit.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /**
  2. \file digit.cpp
  3. \brief Experimental C++ interace for vector digitization used
  4. by wxPython GUI.
  5. This program is free software under the GNU General Public
  6. License (>=v2). Read the file COPYING that comes with GRASS
  7. for details.
  8. \author (C) by the GRASS Development Team
  9. Martin Landa <landa.martin gmail.com>
  10. \date 2008
  11. */
  12. #include "driver.h"
  13. #include "digit.h"
  14. /**
  15. \brief Initialize digit interface used by SWIG
  16. \param driver display driver instance
  17. \param window parent window for message dialog
  18. */
  19. Digit::Digit(DisplayDriver *ddriver, void *window)
  20. {
  21. display = ddriver;
  22. display->parentWin = (wxWindow *) window;
  23. if (display->mapInfo) {
  24. InitCats();
  25. }
  26. changesetCurrent = -1; // initial value for undo/redo
  27. display->msgCaption = _("Digitization error");
  28. // avoid GUI crash
  29. // Vect_set_fatal_error(GV_FATAL_PRINT);
  30. }
  31. /**
  32. \brief Digit class destructor
  33. Frees changeset structure
  34. */
  35. Digit::~Digit()
  36. {
  37. for(int changeset = 0; changeset < (int) changesets.size(); changeset++) {
  38. FreeChangeset(changeset);
  39. }
  40. }
  41. /**
  42. \brief Update digit settings
  43. \param breakLines break lines on intersection
  44. */
  45. void Digit::UpdateSettings(bool breakLines)
  46. {
  47. settings.breakLines = breakLines;
  48. return;
  49. }
  50. /*!
  51. \brief Register action before operation
  52. \return changeset id
  53. */
  54. int Digit::AddActionsBefore(void)
  55. {
  56. int changeset;
  57. /* register changeset */
  58. changeset = changesets.size();
  59. for (int i = 0; i < display->selected.values->n_values; i++) {
  60. int line = display->selected.values->value[i];
  61. if (Vect_line_alive(display->mapInfo, line))
  62. AddActionToChangeset(changeset, DEL, line);
  63. }
  64. return changeset;
  65. }
  66. /*!
  67. \brief Register action after operation
  68. */
  69. void Digit::AddActionsAfter(int changeset, int nlines)
  70. {
  71. for (int i = 0; i < display->selected.values->n_values; i++) {
  72. int line = display->selected.values->value[i];
  73. if (Vect_line_alive(display->mapInfo, line)) {
  74. RemoveActionFromChangeset(changeset, DEL, line);
  75. }
  76. }
  77. for (int line = nlines + 1; line <= Vect_get_num_lines(display->mapInfo); line++) {
  78. if (Vect_line_alive(display->mapInfo, line)) {
  79. AddActionToChangeset(changeset, ADD, line);
  80. }
  81. }
  82. return;
  83. }