1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
|
/* +------------------------------------------------------------------------+
| Mobile Robot Programming Toolkit (MRPT) |
| https://www.mrpt.org/ |
| |
| Copyright (c) 2005-2023, Individual contributors, see AUTHORS file |
| See: https://www.mrpt.org/Authors - All rights reserved. |
| Released under BSD License. See: https://www.mrpt.org/License |
+------------------------------------------------------------------------+ */
#include <mrpt/maps/CSimplePointsMap.h>
#include <mrpt/obs/CObservation2DRangeScan.h>
#include <mrpt/obs/stock_observations.h>
#include <mrpt/system/CObserver.h>
#include <iostream>
using namespace mrpt::obs;
using namespace mrpt::maps;
using namespace mrpt::poses;
using namespace mrpt::system;
using namespace std;
// Load a example laser scan:
CObservation2DRangeScan getScan()
{
CObservation2DRangeScan scan1;
stock_observations::example2DRangeScan(scan1);
return scan1;
}
class MyObserver : public mrpt::system::CObserver
{
protected:
void OnEvent(const mrptEvent& e) override
{
if (e.isOfType<mrptEventMetricMapClear>())
cout << "[MyObserver] Event received: mrptEventMetricMapClear\n";
else if (e.isOfType<mrptEventMetricMapInsert>())
cout << "[MyObserver] Event received: mrptEventMetricMapInsert\n";
else if (e.isOfType<mrptEventOnDestroy>())
cout << "[MyObserver] Event received: mrptEventOnDestroy\n";
else
cout << "[MyObserver] Event received: Generic mrptEvent \n";
}
};
// ------------------------------------------------------
// TestObserverPattern
// ------------------------------------------------------
void TestObserverPattern()
{
CSimplePointsMap::Ptr map1 = CSimplePointsMap::Create();
CObservation2DRangeScan obs = getScan();
// Start observer:
MyObserver observer;
observer.observeBegin(*map1);
// Insert:
for (int i = 0; i < 3; i++)
map1->insertObservation(obs);
// Clear:
map1->clear();
// Insert again:
map1->insertObservation(obs);
// Destroy
map1.reset();
}
int main()
{
try
{
TestObserverPattern();
return 0;
}
catch (exception& e)
{
cout << "MRPT exception caught: " << e.what() << endl;
return -1;
}
catch (...)
{
printf("Another exception!!");
return -1;
}
}
|