remesh_intersections.cpp 56 KB

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