remesh_intersections.cpp 56 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396
  1. // This file is part of libigl, a simple c++ geometry processing library.
  2. //
  3. // Copyright (C) 2015 Qingnan Zhou <qnzhou@gmail.com>
  4. //
  5. // This Source Code Form is subject to the terms of the Mozilla Public License
  6. // v. 2.0. If a copy of the MPL was not distributed with this file, You can
  7. // obtain one at http://mozilla.org/MPL/2.0/.
  8. //
  9. #include "remesh_intersections.h"
  10. #include "assign_scalar.h"
  11. #include <vector>
  12. #include <map>
  13. #include <queue>
  14. #include <unordered_map>
  15. #include <iostream>
  16. template <
  17. typename DerivedV,
  18. typename DerivedF,
  19. typename Kernel,
  20. typename DerivedVV,
  21. typename DerivedFF,
  22. typename DerivedJ,
  23. typename DerivedIM>
  24. IGL_INLINE void igl::copyleft::cgal::remesh_intersections(
  25. const Eigen::PlainObjectBase<DerivedV> & V,
  26. const Eigen::PlainObjectBase<DerivedF> & F,
  27. const std::vector<CGAL::Triangle_3<Kernel> > & T,
  28. const std::map<
  29. typename DerivedF::Index,
  30. std::vector<
  31. std::pair<typename DerivedF::Index, CGAL::Object> > > & offending,
  32. const std::map<
  33. std::pair<typename DerivedF::Index,typename DerivedF::Index>,
  34. std::vector<typename DerivedF::Index> > & /*edge2faces*/,
  35. Eigen::PlainObjectBase<DerivedVV> & VV,
  36. Eigen::PlainObjectBase<DerivedFF> & FF,
  37. Eigen::PlainObjectBase<DerivedJ> & J,
  38. Eigen::PlainObjectBase<DerivedIM> & IM) {
  39. typedef CGAL::Point_3<Kernel> Point_3;
  40. typedef CGAL::Segment_3<Kernel> Segment_3;
  41. typedef CGAL::Triangle_3<Kernel> Triangle_3;
  42. typedef CGAL::Plane_3<Kernel> Plane_3;
  43. typedef CGAL::Triangulation_vertex_base_2<Kernel> TVB_2;
  44. typedef CGAL::Constrained_triangulation_face_base_2<Kernel> CTFB_2;
  45. typedef CGAL::Triangulation_data_structure_2<TVB_2,CTFB_2> TDS_2;
  46. typedef CGAL::Exact_intersections_tag Itag;
  47. typedef CGAL::Constrained_Delaunay_triangulation_2<Kernel,TDS_2,Itag>
  48. CDT_2;
  49. typedef CGAL::Constrained_triangulation_plus_2<CDT_2> CDT_plus_2;
  50. typedef typename DerivedF::Index Index;
  51. typedef std::pair<Index, Index> Edge;
  52. struct EdgeHash {
  53. size_t operator()(const Edge& e) const {
  54. return (e.first * 805306457) ^ (e.second * 201326611);
  55. }
  56. };
  57. typedef std::unordered_map<Edge, std::vector<Index>, EdgeHash > EdgeMap;
  58. auto normalize_plane_coeff = [](const Plane_3& P) ->
  59. std::vector<typename Kernel::FT> {
  60. std::vector<typename Kernel::FT> coeffs = {
  61. P.a(), P.b(), P.c(), P.d()
  62. };
  63. const auto max_itr = std::max_element(coeffs.begin(), coeffs.end());
  64. const auto min_itr = std::min_element(coeffs.begin(), coeffs.end());
  65. typename Kernel::FT max_coeff;
  66. if (*max_itr < -1 * *min_itr) {
  67. max_coeff = *min_itr;
  68. } else {
  69. max_coeff = *max_itr;
  70. }
  71. std::transform(coeffs.begin(), coeffs.end(), coeffs.begin(),
  72. [&](const typename Kernel::FT& val)
  73. {return val / max_coeff; } );
  74. return coeffs;
  75. };
  76. auto plane_comp = [&](const Plane_3& p1, const Plane_3& p2) -> bool{
  77. const auto p1_coeffs = normalize_plane_coeff(p1);
  78. const auto p2_coeffs = normalize_plane_coeff(p2);
  79. if (p1_coeffs[0] != p2_coeffs[0])
  80. return p1_coeffs[0] < p2_coeffs[0];
  81. if (p1_coeffs[1] != p2_coeffs[1])
  82. return p1_coeffs[1] < p2_coeffs[1];
  83. if (p1_coeffs[2] != p2_coeffs[2])
  84. return p1_coeffs[2] < p2_coeffs[2];
  85. if (p1_coeffs[3] != p2_coeffs[3])
  86. return p1_coeffs[3] < p2_coeffs[3];
  87. return false;
  88. };
  89. const size_t num_faces = F.rows();
  90. const size_t num_base_vertices = V.rows();
  91. assert(num_faces == T.size());
  92. std::vector<bool> is_offending(num_faces, false);
  93. for (const auto itr : offending) {
  94. const auto& fid = itr.first;
  95. is_offending[fid] = true;
  96. }
  97. std::unordered_map<Index, std::vector<Index> > intersecting_and_coplanar;
  98. for (const auto itr : offending) {
  99. const auto& fi = itr.first;
  100. const auto P = T[fi].supporting_plane();
  101. assert(!P.is_degenerate());
  102. for (const auto jtr : itr.second) {
  103. const auto& fj = jtr.first;
  104. const auto& tj = T[fj];
  105. if (P.has_on(tj[0]) && P.has_on(tj[1]) && P.has_on(tj[2])) {
  106. auto loc = intersecting_and_coplanar.find(fi);
  107. if (loc == intersecting_and_coplanar.end()) {
  108. intersecting_and_coplanar[fi] = {fj};
  109. } else {
  110. loc->second.push_back(fj);
  111. }
  112. }
  113. }
  114. }
  115. std::vector<std::vector<Index> > resolved_faces;
  116. std::vector<Index> source_faces;
  117. std::vector<Point_3> new_vertices;
  118. EdgeMap edge_vertices;
  119. /**
  120. * Run constraint Delaunay triangulation on the plane.
  121. */
  122. auto run_delaunay_triangulation = [&](const Plane_3& P,
  123. const std::vector<Index>& involved_faces,
  124. std::vector<Point_3>& vertices,
  125. std::vector<std::vector<Index> >& faces) -> void {
  126. CDT_plus_2 cdt;
  127. for (const auto& fid : involved_faces) {
  128. const auto itr = offending.find(fid);
  129. const auto& triangle = T[fid];
  130. cdt.insert_constraint(P.to_2d(triangle[0]), P.to_2d(triangle[1]));
  131. cdt.insert_constraint(P.to_2d(triangle[1]), P.to_2d(triangle[2]));
  132. cdt.insert_constraint(P.to_2d(triangle[2]), P.to_2d(triangle[0]));
  133. if (itr == offending.end()) continue;
  134. for (const auto& index_obj : itr->second) {
  135. const auto& ofid = index_obj.first;
  136. const auto& obj = index_obj.second;
  137. if(const Segment_3 *iseg = CGAL::object_cast<Segment_3 >(&obj)) {
  138. // Add segment constraint
  139. cdt.insert_constraint(
  140. P.to_2d(iseg->vertex(0)),P.to_2d(iseg->vertex(1)));
  141. }else if(const Point_3 *ipoint = CGAL::object_cast<Point_3 >(&obj)) {
  142. // Add point
  143. cdt.insert(P.to_2d(*ipoint));
  144. } else if(const Triangle_3 *itri = CGAL::object_cast<Triangle_3 >(&obj)) {
  145. // Add 3 segment constraints
  146. cdt.insert_constraint(
  147. P.to_2d(itri->vertex(0)),P.to_2d(itri->vertex(1)));
  148. cdt.insert_constraint(
  149. P.to_2d(itri->vertex(1)),P.to_2d(itri->vertex(2)));
  150. cdt.insert_constraint(
  151. P.to_2d(itri->vertex(2)),P.to_2d(itri->vertex(0)));
  152. } else if(const std::vector<Point_3 > *polyp =
  153. CGAL::object_cast< std::vector<Point_3 > >(&obj)) {
  154. //cerr<<REDRUM("Poly...")<<endl;
  155. const std::vector<Point_3 > & poly = *polyp;
  156. const Index m = poly.size();
  157. assert(m>=2);
  158. for(Index p = 0;p<m;p++)
  159. {
  160. const Index np = (p+1)%m;
  161. cdt.insert_constraint(P.to_2d(poly[p]),P.to_2d(poly[np]));
  162. }
  163. }else {
  164. throw std::runtime_error("Unknown intersection object!");
  165. }
  166. }
  167. }
  168. std::map<typename CDT_plus_2::Vertex_handle,Index> v2i;
  169. size_t count=0;
  170. for (auto itr = cdt.finite_vertices_begin();
  171. itr != cdt.finite_vertices_end(); itr++) {
  172. vertices.push_back(P.to_3d(itr->point()));
  173. v2i[itr] = count;
  174. count++;
  175. }
  176. for (auto itr = cdt.finite_faces_begin();
  177. itr != cdt.finite_faces_end(); itr++) {
  178. faces.push_back( {
  179. v2i[itr->vertex(0)],
  180. v2i[itr->vertex(1)],
  181. v2i[itr->vertex(2)] });
  182. }
  183. };
  184. /**
  185. * Given p on triangle indexed by ori_f, determine the index of p.
  186. */
  187. auto determine_point_index = [&](
  188. const Point_3& p, const size_t ori_f) -> Index {
  189. const auto& triangle = T[ori_f];
  190. const auto& f = F.row(ori_f).eval();
  191. // Check if p is one of the triangle corners.
  192. for (size_t i=0; i<3; i++) {
  193. if (p == triangle[i]) return f[i];
  194. }
  195. // Check if p is on one of the edges.
  196. for (size_t i=0; i<3; i++) {
  197. const Point_3 curr_corner = triangle[i];
  198. const Point_3 next_corner = triangle[(i+1)%3];
  199. const Segment_3 edge(curr_corner, next_corner);
  200. if (edge.has_on(p)) {
  201. const Index curr = f[i];
  202. const Index next = f[(i+1)%3];
  203. Edge key;
  204. key.first = curr<next?curr:next;
  205. key.second = curr<next?next:curr;
  206. auto itr = edge_vertices.find(key);
  207. if (itr == edge_vertices.end()) {
  208. const Index index =
  209. num_base_vertices + new_vertices.size();
  210. edge_vertices.insert({key, {index}});
  211. new_vertices.push_back(p);
  212. return index;
  213. } else {
  214. for (const auto vid : itr->second) {
  215. if (p == new_vertices[vid - num_base_vertices]) {
  216. return vid;
  217. }
  218. }
  219. const size_t index = num_base_vertices + new_vertices.size();
  220. new_vertices.push_back(p);
  221. itr->second.push_back(index);
  222. return index;
  223. }
  224. }
  225. }
  226. // p must be in the middle of the triangle.
  227. const size_t index = num_base_vertices + new_vertices.size();
  228. new_vertices.push_back(p);
  229. return index;
  230. };
  231. /**
  232. * Determine the vertex indices for each corner of each output triangle.
  233. */
  234. auto post_triangulation_process = [&](
  235. const std::vector<Point_3>& vertices,
  236. const std::vector<std::vector<Index> >& faces,
  237. const std::vector<Index>& involved_faces) -> void {
  238. for (const auto& f : faces) {
  239. const Point_3& v0 = vertices[f[0]];
  240. const Point_3& v1 = vertices[f[1]];
  241. const Point_3& v2 = vertices[f[2]];
  242. Point_3 center(
  243. (v0[0] + v1[0] + v2[0]) / 3.0,
  244. (v0[1] + v1[1] + v2[1]) / 3.0,
  245. (v0[2] + v1[2] + v2[2]) / 3.0);
  246. for (const auto& ori_f : involved_faces) {
  247. const auto& triangle = T[ori_f];
  248. const Plane_3 P = triangle.supporting_plane();
  249. if (triangle.has_on(center)) {
  250. std::vector<Index> corners(3);
  251. corners[0] = determine_point_index(v0, ori_f);
  252. corners[1] = determine_point_index(v1, ori_f);
  253. corners[2] = determine_point_index(v2, ori_f);
  254. if (CGAL::orientation(
  255. P.to_2d(v0), P.to_2d(v1), P.to_2d(v2))
  256. == CGAL::RIGHT_TURN) {
  257. std::swap(corners[0], corners[1]);
  258. }
  259. resolved_faces.emplace_back(corners);
  260. source_faces.push_back(ori_f);
  261. }
  262. }
  263. }
  264. };
  265. // Process un-touched faces.
  266. for (size_t i=0; i<num_faces; i++) {
  267. if (!is_offending[i] && !T[i].is_degenerate()) {
  268. resolved_faces.push_back(
  269. { F(i,0), F(i,1), F(i,2) } );
  270. source_faces.push_back(i);
  271. }
  272. }
  273. // Process self-intersecting faces.
  274. std::vector<bool> processed(num_faces, false);
  275. for (const auto itr : offending) {
  276. const auto fid = itr.first;
  277. if (processed[fid]) continue;
  278. processed[fid] = true;
  279. const auto loc = intersecting_and_coplanar.find(fid);
  280. std::vector<Index> involved_faces;
  281. if (loc == intersecting_and_coplanar.end()) {
  282. involved_faces.push_back(fid);
  283. } else {
  284. std::queue<Index> Q;
  285. Q.push(fid);
  286. while (!Q.empty()) {
  287. const auto index = Q.front();
  288. involved_faces.push_back(index);
  289. Q.pop();
  290. const auto overlapping_faces =
  291. intersecting_and_coplanar.find(index);
  292. assert(overlapping_faces != intersecting_and_coplanar.end());
  293. for (const auto other_index : overlapping_faces->second) {
  294. if (processed[other_index]) continue;
  295. processed[other_index] = true;
  296. Q.push(other_index);
  297. }
  298. }
  299. }
  300. Plane_3 P = T[fid].supporting_plane();
  301. std::vector<Point_3> vertices;
  302. std::vector<std::vector<Index> > faces;
  303. run_delaunay_triangulation(P, involved_faces, vertices, faces);
  304. post_triangulation_process(vertices, faces, involved_faces);
  305. }
  306. // Output resolved mesh.
  307. const size_t num_out_vertices = new_vertices.size() + num_base_vertices;
  308. VV.resize(num_out_vertices, 3);
  309. for (size_t i=0; i<num_base_vertices; i++) {
  310. assign_scalar(V(i,0), VV(i,0));
  311. assign_scalar(V(i,1), VV(i,1));
  312. assign_scalar(V(i,2), VV(i,2));
  313. }
  314. for (size_t i=num_base_vertices; i<num_out_vertices; i++) {
  315. assign_scalar(new_vertices[i-num_base_vertices][0], VV(i,0));
  316. assign_scalar(new_vertices[i-num_base_vertices][1], VV(i,1));
  317. assign_scalar(new_vertices[i-num_base_vertices][2], VV(i,2));
  318. }
  319. const size_t num_out_faces = resolved_faces.size();
  320. FF.resize(num_out_faces, 3);
  321. for (size_t i=0; i<num_out_faces; i++) {
  322. FF(i,0) = resolved_faces[i][0];
  323. FF(i,1) = resolved_faces[i][1];
  324. FF(i,2) = resolved_faces[i][2];
  325. }
  326. J.resize(num_out_faces);
  327. std::copy(source_faces.begin(), source_faces.end(), J.data());
  328. // Extract unique vertex indices.
  329. IM.resize(VV.rows(),1);
  330. std::map<Point_3,Index> vv2i;
  331. // Safe to check for duplicates using double for original vertices: if
  332. // incoming reps are different then the points are unique.
  333. for(Index v = 0;v<VV.rows();v++) {
  334. typename Kernel::FT p0,p1,p2;
  335. assign_scalar(VV(v,0),p0);
  336. assign_scalar(VV(v,1),p1);
  337. assign_scalar(VV(v,2),p2);
  338. const Point_3 p(p0,p1,p2);
  339. if(vv2i.count(p)==0) {
  340. vv2i[p] = v;
  341. }
  342. assert(vv2i.count(p) == 1);
  343. IM(v) = vv2i[p];
  344. }
  345. }
  346. #ifdef IGL_STATIC_LIBRARY
  347. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epeck, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index,CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  348. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epick, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int , -1, 1, 0, -1, 1> >&);
  349. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, CGAL::Epeck, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1 > >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  350. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, CGAL::Epick, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  351. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epeck, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0,-1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1,3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  352. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epeck, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  353. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epeck, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<long, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1,3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&);
  354. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epeck, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  355. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epeck, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  356. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epick, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  357. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epick, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1,3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  358. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epick, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<long, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&);
  359. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epick, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  360. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, CGAL::Epick, Eigen::Matrix<double, -1, 3, 0, -1, 3>, Eigen::Matrix<int, -1, 3, 0, -1, 3>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index>, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index, std::__1::allocator<Eigen::Matrix<int, -1, 3, 0, -1, 3>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 3, 0, -1, 3> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  361. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, CGAL::Epeck, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -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> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  362. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, CGAL::Epeck, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  363. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, CGAL::Epeck, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epeck>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epeck> > > const&, std::__1::map<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> > > > > const&, 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> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  364. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, CGAL::Epick, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -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> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  365. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, CGAL::Epick, Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> > > > > const&, Eigen::PlainObjectBase<Eigen::Matrix<CGAL::Lazy_exact_nt<CGAL::Gmpq>, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  366. template void igl::copyleft::cgal::remesh_intersections<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, CGAL::Epick, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&, std::__1::vector<CGAL::Triangle_3<CGAL::Epick>, std::__1::allocator<CGAL::Triangle_3<CGAL::Epick> > > const&, std::__1::map<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > >, std::__1::less<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index const, std::__1::vector<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object>, std::__1::allocator<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, CGAL::Object> > > > > > const&, std::__1::map<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index>, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::less<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> >, std::__1::allocator<std::__1::pair<std::__1::pair<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> const, std::__1::vector<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index, std::__1::allocator<Eigen::Matrix<int, -1, -1, 0, -1, -1>::Index> > > > > const&, 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> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&);
  367. #endif