Program Listing for File MultiPoint.h

Return to documentation for file (include/fields2cover/types/MultiPoint.h)

//=============================================================================
//    Copyright (C) 2021-2024 Wageningen University - All Rights Reserved
//                     Author: Gonzalo Mier
//                        BSD-3 License
//=============================================================================

#pragma once
#ifndef FIELDS2COVER_TYPES_MULTIPOINT_H_
#define FIELDS2COVER_TYPES_MULTIPOINT_H_

#include <gdal/ogr_geometry.h>
#include <vector>
#include "fields2cover/types/Geometries.h"
#include "fields2cover/types/Point.h"

namespace f2c::types {

struct MultiPoint :
  public Geometries<MultiPoint, OGRMultiPoint, wkbMultiPoint, Point> {
 public:
  using Geometries<MultiPoint, OGRMultiPoint, wkbMultiPoint, Point>::Geometries;
  MultiPoint();
  explicit MultiPoint(const std::vector<Point>& ps);
  explicit MultiPoint(const std::initializer_list<Point>& ps);

  size_t size() const;

  void getGeometry(size_t i, Point& point);

  void getGeometry(size_t i, Point& point) const;

  Point getGeometry(size_t i);
  const Point getGeometry(size_t i) const;
  const Point getFirstPoint() const;
  const Point getLastPoint() const;

  void setGeometry(size_t i, const Point& p);

  void addGeometry(const Point& p);
  void addPoint(const Point& p);
  void addPoint(double x, double y, double z = 0);
  void addPoints(const MultiPoint& ps);

  double getInAngle(size_t i) const;
  double getOutAngle(size_t i) const;
  double getPointAngle(size_t i) const;

  void operator*=(double b);
};

}  // namespace f2c::types

#endif  // FIELDS2COVER_TYPES_MULTIPOINT_H_