#pragma once

#include <other/core/mesh/TriangleMesh.h>
#include <other/core/vector/Vector3d.h>
#include <other/core/array/forward.h>
#include <other/core/geometry/forward.h>
#include <other/core/python/module.h>
#include <other/core/python/Object.h>
#include <other/core/array/Array.h>

namespace other{
  typedef real T;
  typedef Vector<T,3> TV;

  double p_len(Array<const TV>& p);
  double p_len_array(Array<const TV>& p, const int start, const int stride);
  double r_len(Array<const TV>& r);

  const Ref<TriangleMesh> compute_loft(Array<const TV> p1, Array<const TV> p2);
  const Ref<TriangleMesh> compute_lofts_circ(Array<const TV> p, const int st, bool align=false) OTHER_EXPORT;
  const Ref<TriangleMesh> compute_rail(Array<const TV> r1, Array<const TV> r2);
}

