Exemplo n.º 1
0
    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;
    }
Exemplo n.º 2
0
 carve::geom3d::AABB Polyline::aabb() const {
   return carve::geom3d::AABB(vbegin(), vend(), vec_adapt_vertex_ptr());
 }
Exemplo n.º 3
0
 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;
 }