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
|
#pragma once
#include <set>
#include "iselectiontest.h"
#include "math/Plane3.h"
namespace selection
{
namespace detail
{
class PlaneLess
{
public:
bool operator()(const Plane3& plane, const Plane3& other) const
{
if (plane.normal().x() < other.normal().x()) {
return true;
}
if (other.normal().x() < plane.normal().x()) {
return false;
}
if (plane.normal().y() < other.normal().y()) {
return true;
}
if (other.normal().y() < plane.normal().y()) {
return false;
}
if (plane.normal().z() < other.normal().z()) {
return true;
}
if (other.normal().z() < plane.normal().z()) {
return false;
}
if (plane.dist() < other.dist()) {
return true;
}
if (other.dist() < plane.dist()) {
return false;
}
return false;
}
};
}
class SelectedPlaneSet final :
public SelectedPlanes
{
private:
typedef std::set<Plane3, detail::PlaneLess> PlaneSet;
PlaneSet _selectedPlanes;
public:
bool empty() const
{
return _selectedPlanes.empty();
}
void insert(const Plane3& plane)
{
_selectedPlanes.insert(plane);
}
bool contains(const Plane3& plane) const override
{
return _selectedPlanes.find(plane) != _selectedPlanes.end();
}
};
}
|