Face<ndim> *Face<ndim>::init(const Face<ndim> *base, iter_t vbegin, iter_t vend, bool flipped) { CARVE_ASSERT(vbegin < vend); vertices.reserve((size_t)std::distance(vbegin, vend)); if (flipped) { std::reverse_copy(vbegin, vend, std::back_inserter(vertices)); plane_eqn = -base->plane_eqn; } else { std::copy(vbegin, vend, std::back_inserter(vertices)); plane_eqn = base->plane_eqn; } edges.clear(); edges.resize(nVertices(), NULL); aabb.fit(vertices.begin(), vertices.end(), vec_adapt_vertex_ptr()); untag(); int da = carve::geom::largestAxis(plane_eqn.N); project = getProjector(plane_eqn.N.v[da] > 0, da); unproject = getUnprojector(plane_eqn.N.v[da] > 0, da); return this; }
carve::geom3d::AABB Polyline::aabb() const { return carve::geom3d::AABB(vbegin(), vend(), vec_adapt_vertex_ptr()); }
typename Face<ndim>::vector_t Face<ndim>::centroid() const { vector_t c; carve::geom::centroid(vertices.begin(), vertices.end(), vec_adapt_vertex_ptr(), c); return c; }