| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- // This file is part of libigl, a simple c++ geometry processing library.
- //
- // Copyright (C) 2019 Alec Jacobson <[email protected]>
- //
- // This Source Code Form is subject to the terms of the Mozilla Public License
- // v. 2.0. If a copy of the MPL was not distributed with this file, You can
- // obtain one at http://mozilla.org/MPL/2.0/.
- #include "quad_grid.h"
- #include "grid.h"
- template<
- typename DerivedV,
- typename DerivedQ,
- typename DerivedE>
- IGL_INLINE void igl::quad_grid(
- const int nx,
- const int ny,
- Eigen::PlainObjectBase<DerivedV> & V,
- Eigen::PlainObjectBase<DerivedQ> & Q,
- Eigen::PlainObjectBase<DerivedE> & E)
- {
- grid(Eigen::Vector2i(nx,ny),V);
- return igl::quad_grid(nx,ny,Q,E);
- }
- template<
- typename DerivedQ,
- typename DerivedE>
- IGL_INLINE void igl::quad_grid(
- const int nx,
- const int ny,
- Eigen::PlainObjectBase<DerivedQ> & Q,
- Eigen::PlainObjectBase<DerivedE> & E)
- {
- Eigen::MatrixXi I(nx,ny);
- Q.resize( (nx-1)*(ny-1),4);
- E.resize((nx-1)*ny + (ny-1)*nx,2);
- {
- int v = 0;
- int q = 0;
- int e = 0;
- // Ordered to match igl::grid
- for(int y = 0;y<ny;y++)
- {
- for(int x = 0;x<nx;x++)
- {
- //// Add a vertex
- //V(v,0) = (-1.0) + double(x)/double(nx-1) * (1.0 - (-1.0));
- //V(v,2) = (-1.0) + double(y)/double(ny-1) * (1.0 - (-1.0));
- I(x,y) = v;
- v++;
- // Add a verical edge
- if(y>0)
- {
- E(e,0) = I(x,y);
- E(e,1) = I(x,y-1);
- e++;
- }
- // Add a horizontal edge
- if(x>0)
- {
- E(e,0) = I(x,y);
- E(e,1) = I(x-1,y);
- e++;
- }
- // Add two triangles
- if(x>0 && y>0)
- {
- // -1,0----0,0
- // | / |
- // | / |
- // | / |
- // | / |
- // -1,-1---0,-1
- Q(q,0) = I(x-0,y-0);
- Q(q,1) = I(x-1,y-0);
- Q(q,2) = I(x-1,y-1);
- Q(q,3) = I(x-0,y-1);
- q++;
- //F(f,2) = I(x-0,y-0);
- //F(f,1) = I(x-1,y-0);
- //F(f,0) = I(x-1,y-1);
- //f++;
- //F(f,2) = I(x-0,y-0);
- //F(f,1) = I(x-1,y-1);
- //F(f,0) = I(x-0,y-1);
- //f++;
- }
- }
- }
- }
- }
- #ifdef IGL_STATIC_LIBRARY
- // Explicit template instantiation
- template void igl::quad_grid<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(int, int, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&);
- #endif
|