// This file is part of libigl, a simple c++ geometry processing library. // // Copyright (C) 2016 Alec Jacobson // // 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 "combine.h" #include template < typename DerivedVV, typename DerivedFF, typename DerivedV, typename DerivedF, typename DerivedVsizes, typename DerivedFsizes> IGL_INLINE void igl::combine( const std::vector & VV, const std::vector & FF, Eigen::PlainObjectBase & V, Eigen::PlainObjectBase & F, Eigen::PlainObjectBase & Vsizes, Eigen::PlainObjectBase & Fsizes) { assert(VV.size() == FF.size() && "Lists of verex lists and face lists should be same size"); Vsizes.resize(VV.size()); Fsizes.resize(FF.size()); // Dimension of vertex positions const int dim = VV.size() > 0 ? VV[0].cols() : 0; // Simplex/element size const int ss = FF.size() > 0 ? FF[0].cols() : 0; int n = 0; int m = 0; for(int i = 0;i0) { F.block(kf,0,mi,ss) = Fi.array()+kv; } kf+=mi; if(Vi.size() >0) { V.block(kv,0,ni,dim) = Vi; } kv+=ni; } assert(kv == V.rows()); assert(kf == F.rows()); } } template < typename DerivedVV, typename DerivedFF, typename DerivedV, typename DerivedF> IGL_INLINE void igl::combine( const std::vector & VV, const std::vector & FF, Eigen::PlainObjectBase & V, Eigen::PlainObjectBase & F) { Eigen::VectorXi Vsizes,Fsizes; return igl::combine(VV,FF,V,F,Vsizes,Fsizes); } #ifdef IGL_STATIC_LIBRARY // Explicit template instantiation template void igl::combine, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix >(std::vector, std::allocator > > const&, std::vector, std::allocator > > const&, Eigen::PlainObjectBase >&, Eigen::PlainObjectBase >&, Eigen::PlainObjectBase >&, Eigen::PlainObjectBase >&); template void igl::combine, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix >(std::vector, std::allocator > > const&, std::vector, std::allocator > > const&, Eigen::PlainObjectBase >&, Eigen::PlainObjectBase >&); template void igl::combine, Eigen::Matrix, Eigen::Matrix, Eigen::Matrix >(std::vector, std::allocator > > const&, std::vector, std::allocator > > const&, Eigen::PlainObjectBase >&, Eigen::PlainObjectBase >&); #ifdef WIN32 template void igl::combine, Eigen::Matrix,Eigen::Matrix,Eigen::Matrix,Eigen::Matrix,Eigen::Matrix >(class std::vector,class std::allocator > > const &,class std::vector,class std::allocator > > const &,Eigen::PlainObjectBase > &,Eigen::PlainObjectBase > &,Eigen::PlainObjectBase > &,Eigen::PlainObjectBase > &); template void igl::combine, Eigen::Matrix,Eigen::Matrix,Eigen::Matrix,Eigen::Matrix,Eigen::Matrix >(class std::vector,class std::allocator > > const &,class std::vector,class std::allocator > > const &,Eigen::PlainObjectBase > &,Eigen::PlainObjectBase > &,Eigen::PlainObjectBase > &,Eigen::PlainObjectBase > &); #endif #endif