File Triangle.h
File List > src > Triangle.h
Go to the documentation of this file
// Copyright (c) 2012-2013, IGN France.
// Copyright (c) 2012-2022, Oslandia.
// SPDX-License-Identifier: LGPL-2.0-or-later
#ifndef _SFCGAL_TRIANGLE_H_
#define _SFCGAL_TRIANGLE_H_
#include <boost/shared_ptr.hpp>
#include <boost/serialization/base_object.hpp>
#include "SFCGAL/Point.h"
#include "SFCGAL/Surface.h"
#include "SFCGAL/detail/TypeForDimension.h"
#include <CGAL/Triangle_2.h>
#include <CGAL/Triangle_3.h>
namespace SFCGAL {
class SFCGAL_API Triangle : public Surface {
public:
Triangle();
Triangle(const Kernel::Triangle_2 &triangle);
Triangle(const Kernel::Triangle_3 &triangle);
Triangle(const Point &p, const Point &q, const Point &r);
Triangle(const Triangle &other);
Triangle &
operator=(const Triangle &other);
~Triangle();
//-- SFCGAL::Geometry
virtual Triangle *
clone() const;
//-- SFCGAL::Geometry
virtual std::string
geometryType() const;
//-- SFCGAL::Geometry
virtual GeometryType
geometryTypeId() const;
//-- SFCGAL::Geometry
virtual int
coordinateDimension() const;
//-- SFCGAL::Geometry
virtual bool
isEmpty() const;
//-- SFCGAL::Geometry
virtual bool
is3D() const;
//-- SFCGAL::Geometry
virtual bool
isMeasured() const;
void
reverse();
Polygon
toPolygon() const;
inline const Point &
vertex(const int &i) const
{
return _vertices[i % 3];
}
inline Point &
vertex(const int &i)
{
return _vertices[i % 3];
}
inline Kernel::Triangle_2
toTriangle_2() const
{
return Kernel::Triangle_2(vertex(0).toPoint_2(), vertex(1).toPoint_2(),
vertex(2).toPoint_2());
}
inline Kernel::Triangle_3
toTriangle_3() const
{
return Kernel::Triangle_3(vertex(0).toPoint_3(), vertex(1).toPoint_3(),
vertex(2).toPoint_3());
}
template <int D>
inline typename detail::TypeForDimension<D>::Triangle
toTriangle_d() const
{
return typename detail::TypeForDimension<D>::Triangle(
vertex(0).toPoint_d<D>(), vertex(1).toPoint_d<D>(),
vertex(2).toPoint_d<D>());
}
//-- visitors
//-- SFCGAL::Geometry
virtual void
accept(GeometryVisitor &visitor);
//-- SFCGAL::Geometry
virtual void
accept(ConstGeometryVisitor &visitor) const;
template <class Archive>
void
serialize(Archive &ar, const unsigned int /*version*/)
{
ar &boost::serialization::base_object<Geometry>(*this);
ar &_vertices[0] & _vertices[1] & _vertices[2];
}
private:
Point _vertices[3];
};
} // namespace SFCGAL
#endif