py_doc.cpp 71 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510
  1. // This file is part of libigl, a simple c++ geometry processing library.
  2. //
  3. // Copyright (C) 2017 Sebastian Koch <s.koch@tu-berlin.de> and Daniele Panozzo <daniele.panozzo@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. const char *__doc_igl_active_set = R"igl_Qu8mg5v7(// Known Bugs: rows of [Aeq;Aieq] **must** be linearly independent. Should be
  9. // using QR decomposition otherwise:
  10. // http://www.okstate.edu/sas/v8/sashtml/ormp/chap5/sect32.htm
  11. //
  12. // ACTIVE_SET Minimize quadratic energy
  13. //
  14. // 0.5*Z'*A*Z + Z'*B + C with constraints
  15. //
  16. // that Z(known) = Y, optionally also subject to the constraints Aeq*Z = Beq,
  17. // and further optionally subject to the linear inequality constraints that
  18. // Aieq*Z <= Bieq and constant inequality constraints lx <= x <= ux
  19. //
  20. // Inputs:
  21. // A n by n matrix of quadratic coefficients
  22. // B n by 1 column of linear coefficients
  23. // known list of indices to known rows in Z
  24. // Y list of fixed values corresponding to known rows in Z
  25. // Aeq meq by n list of linear equality constraint coefficients
  26. // Beq meq by 1 list of linear equality constraint constant values
  27. // Aieq mieq by n list of linear inequality constraint coefficients
  28. // Bieq mieq by 1 list of linear inequality constraint constant values
  29. // lx n by 1 list of lower bounds [] implies -Inf
  30. // ux n by 1 list of upper bounds [] implies Inf
  31. // params struct of additional parameters (see below)
  32. // Z if not empty, is taken to be an n by 1 list of initial guess values
  33. // (see output)
  34. // Outputs:
  35. // Z n by 1 list of solution values
  36. // Returns true on success, false on error
  37. //
  38. // Benchmark: For a harmonic solve on a mesh with 325K facets, matlab 2.2
  39. // secs, igl/min_quad_with_fixed.h 7.1 secs
  40. //)igl_Qu8mg5v7";
  41. const char *__doc_igl_adjacency_list = R"igl_Qu8mg5v7(// Constructs the graph adjacency list of a given mesh (V,F)
  42. // Templates:
  43. // T should be a eigen sparse matrix primitive type like int or double
  44. // Inputs:
  45. // F #F by dim list of mesh faces (must be triangles)
  46. // sorted flag that indicates if the list should be sorted counter-clockwise
  47. // Outputs:
  48. // A vector<vector<T> > containing at row i the adjacent vertices of vertex i
  49. //
  50. // Example:
  51. // // Mesh in (V,F)
  52. // vector<vector<double> > A;
  53. // adjacency_list(F,A);
  54. //
  55. // See also: edges, cotmatrix, diag)igl_Qu8mg5v7";
  56. const char *__doc_igl_arap_precomputation = R"igl_Qu8mg5v7(// Compute necessary information to start using an ARAP deformation
  57. //
  58. // Inputs:
  59. // V #V by dim list of mesh positions
  60. // F #F by simplex-size list of triangle|tet indices into V
  61. // dim dimension being used at solve time. For deformation usually dim =
  62. // V.cols(), for surface parameterization V.cols() = 3 and dim = 2
  63. // b #b list of "boundary" fixed vertex indices into V
  64. // Outputs:
  65. // data struct containing necessary precomputation)igl_Qu8mg5v7";
  66. const char *__doc_igl_arap_solve = R"igl_Qu8mg5v7(// Inputs:
  67. // bc #b by dim list of boundary conditions
  68. // data struct containing necessary precomputation and parameters
  69. // U #V by dim initial guess)igl_Qu8mg5v7";
  70. const char *__doc_igl_avg_edge_length = R"igl_Qu8mg5v7(// Compute the average edge length for the given triangle mesh
  71. // Templates:
  72. // DerivedV derived from vertex positions matrix type: i.e. MatrixXd
  73. // DerivedF derived from face indices matrix type: i.e. MatrixXi
  74. // DerivedL derived from edge lengths matrix type: i.e. MatrixXd
  75. // Inputs:
  76. // V eigen matrix #V by 3
  77. // F #F by simplex-size list of mesh faces (must be simplex)
  78. // Outputs:
  79. // l average edge length
  80. //
  81. // See also: adjacency_matrix)igl_Qu8mg5v7";
  82. const char *__doc_igl_barycenter = R"igl_Qu8mg5v7(// Computes the barycenter of every simplex
  83. //
  84. // Inputs:
  85. // V #V x dim matrix of vertex coordinates
  86. // F #F x simplex_size matrix of indices of simplex corners into V
  87. // Output:
  88. // BC #F x dim matrix of 3d vertices
  89. //)igl_Qu8mg5v7";
  90. const char *__doc_igl_barycentric_coordinates = R"igl_Qu8mg5v7(// Compute barycentric coordinates in a tet
  91. //
  92. // Inputs:
  93. // P #P by 3 Query points in 3d
  94. // A #P by 3 Tet corners in 3d
  95. // B #P by 3 Tet corners in 3d
  96. // C #P by 3 Tet corners in 3d
  97. // D #P by 3 Tet corners in 3d
  98. // Outputs:
  99. // L #P by 4 list of barycentric coordinates
  100. // )igl_Qu8mg5v7";
  101. const char *__doc_igl_barycentric_to_global = R"igl_Qu8mg5v7(// Converts barycentric coordinates in the embree form to 3D coordinates
  102. // Embree stores barycentric coordinates as triples: fid, bc1, bc2
  103. // fid is the id of a face, bc1 is the displacement of the point wrt the
  104. // first vertex v0 and the edge v1-v0. Similarly, bc2 is the displacement
  105. // wrt v2-v0.
  106. //
  107. // Input:
  108. // V: #Vx3 Vertices of the mesh
  109. // F: #Fxe Faces of the mesh
  110. // bc: #Xx3 Barycentric coordinates, one row per point
  111. //
  112. // Output:
  113. // #X: #Xx3 3D coordinates of all points in bc)igl_Qu8mg5v7";
  114. const char *__doc_igl_bbw = R"igl_Qu8mg5v7(// Compute Bounded Biharmonic Weights on a given domain (V,Ele) with a given
  115. // set of boundary conditions
  116. //
  117. // Templates
  118. // DerivedV derived type of eigen matrix for V (e.g. MatrixXd)
  119. // DerivedF derived type of eigen matrix for F (e.g. MatrixXi)
  120. // Derivedb derived type of eigen matrix for b (e.g. VectorXi)
  121. // Derivedbc derived type of eigen matrix for bc (e.g. MatrixXd)
  122. // DerivedW derived type of eigen matrix for W (e.g. MatrixXd)
  123. // Inputs:
  124. // V #V by dim vertex positions
  125. // Ele #Elements by simplex-size list of element indices
  126. // b #b boundary indices into V
  127. // bc #b by #W list of boundary values
  128. // data object containing options, initial guess --> solution and results
  129. // Outputs:
  130. // W #V by #W list of *unnormalized* weights to normalize use
  131. // igl::normalize_row_sums(W,W);
  132. // Returns true on success, false on failure)igl_Qu8mg5v7";
  133. const char *__doc_igl_boundary_conditions = R"igl_Qu8mg5v7(// Compute boundary conditions for automatic weights computation. This
  134. // function expects that the given mesh (V,Ele) has sufficient samples
  135. // (vertices) exactly at point handle locations and exactly along bone and
  136. // cage edges.
  137. //
  138. // Inputs:
  139. // V #V by dim list of domain vertices
  140. // Ele #Ele by simplex-size list of simplex indices
  141. // C #C by dim list of handle positions
  142. // P #P by 1 list of point handle indices into C
  143. // BE #BE by 2 list of bone edge indices into C
  144. // CE #CE by 2 list of cage edge indices into *P*
  145. // Outputs:
  146. // b #b list of boundary indices (indices into V of vertices which have
  147. // known, fixed values)
  148. // bc #b by #weights list of known/fixed values for boundary vertices
  149. // (notice the #b != #weights in general because #b will include all the
  150. // intermediary samples along each bone, etc.. The ordering of the
  151. // weights corresponds to [P;BE]
  152. // Returns false if boundary conditions are suspicious:
  153. // P and BE are empty
  154. // bc is empty
  155. // some column of bc doesn't have a 0 (assuming bc has >1 columns)
  156. // some column of bc doesn't have a 1 (assuming bc has >1 columns))igl_Qu8mg5v7";
  157. const char *__doc_igl_boundary_facets = R"igl_Qu8mg5v7(// BOUNDARY_FACETS Determine boundary faces (edges) of tetrahedra (triangles)
  158. // stored in T (analogous to qptoolbox's `outline` and `boundary_faces`).
  159. //
  160. // Templates:
  161. // IntegerT integer-value: e.g. int
  162. // IntegerF integer-value: e.g. int
  163. // Input:
  164. // T tetrahedron (triangle) index list, m by 4 (3), where m is the number of tetrahedra
  165. // Output:
  166. // F list of boundary faces, n by 3 (2), where n is the number of boundary faces
  167. //
  168. //)igl_Qu8mg5v7";
  169. const char *__doc_igl_boundary_loop = R"igl_Qu8mg5v7(// Compute list of ordered boundary loops for a manifold mesh.
  170. //
  171. // Templates:
  172. // Index index type
  173. // Inputs:
  174. // F #V by dim list of mesh faces
  175. // Outputs:
  176. // L list of loops where L[i] = ordered list of boundary vertices in loop i
  177. //)igl_Qu8mg5v7";
  178. const char *__doc_igl_cat = R"igl_Qu8mg5v7(// Perform concatenation of a two matrices along a single dimension
  179. // If dim == 1, then C = [A;B]. If dim == 2 then C = [A B]
  180. //
  181. // Template:
  182. // Scalar scalar data type for sparse matrices like double or int
  183. // Mat matrix type for all matrices (e.g. MatrixXd, SparseMatrix)
  184. // MatC matrix type for output matrix (e.g. MatrixXd) needs to support
  185. // resize
  186. // Inputs:
  187. // A first input matrix
  188. // B second input matrix
  189. // dim dimension along which to concatenate, 1 or 2
  190. // Outputs:
  191. // C output matrix
  192. // )igl_Qu8mg5v7";
  193. const char *__doc_igl_collapse_edge = R"igl_Qu8mg5v7(See collapse_edge for the documentation.)igl_Qu8mg5v7";
  194. const char *__doc_igl_colon = R"igl_Qu8mg5v7(// Colon operator like matlab's colon operator. Enumerats values between low
  195. // and hi with step step.
  196. // Templates:
  197. // L should be a eigen matrix primitive type like int or double
  198. // S should be a eigen matrix primitive type like int or double
  199. // H should be a eigen matrix primitive type like int or double
  200. // T should be a eigen matrix primitive type like int or double
  201. // Inputs:
  202. // low starting value if step is valid then this is *always* the first
  203. // element of I
  204. // step step difference between sequential elements returned in I,
  205. // remember this will be cast to template T at compile time. If low<hi
  206. // then step must be positive. If low>hi then step must be negative.
  207. // Otherwise I will be set to empty.
  208. // hi ending value, if (hi-low)%step is zero then this will be the last
  209. // element in I. If step is positive there will be no elements greater
  210. // than hi, vice versa if hi<low
  211. // Output:
  212. // I list of values from low to hi with step size step)igl_Qu8mg5v7";
  213. const char *__doc_igl_column_to_quats = R"igl_Qu8mg5v7(// "Columnize" a list of quaternions (q1x,q1y,q1z,q1w,q2x,q2y,q2z,q2w,...)
  214. //
  215. // Inputs:
  216. // Q n*4-long list of coefficients
  217. // Outputs:
  218. // vQ n-long list of quaternions
  219. // Returns false if n%4!=0)igl_Qu8mg5v7";
  220. const char *__doc_igl_comb_cross_field = R"igl_Qu8mg5v7(// Inputs:
  221. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  222. // F #F by 4 eigen Matrix of face (quad) indices
  223. // PD1in #F by 3 eigen Matrix of the first per face cross field vector
  224. // PD2in #F by 3 eigen Matrix of the second per face cross field vector
  225. // Output:
  226. // PD1out #F by 3 eigen Matrix of the first combed cross field vector
  227. // PD2out #F by 3 eigen Matrix of the second combed cross field vector
  228. //)igl_Qu8mg5v7";
  229. const char *__doc_igl_comb_frame_field = R"igl_Qu8mg5v7(// Inputs:
  230. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  231. // F #F by 4 eigen Matrix of face (quad) indices
  232. // PD1 #F by 3 eigen Matrix of the first per face cross field vector
  233. // PD2 #F by 3 eigen Matrix of the second per face cross field vector
  234. // BIS1_combed #F by 3 eigen Matrix of the first combed bisector field vector
  235. // BIS2_combed #F by 3 eigen Matrix of the second combed bisector field vector
  236. // Output:
  237. // PD1_combed #F by 3 eigen Matrix of the first combed cross field vector
  238. // PD2_combed #F by 3 eigen Matrix of the second combed cross field vector
  239. //)igl_Qu8mg5v7";
  240. const char *__doc_igl_compute_frame_field_bisectors = R"igl_Qu8mg5v7(// Compute bisectors of a frame field defined on mesh faces
  241. // Inputs:
  242. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  243. // F #F by 3 eigen Matrix of face (triangle) indices
  244. // B1 #F by 3 eigen Matrix of face (triangle) base vector 1
  245. // B2 #F by 3 eigen Matrix of face (triangle) base vector 2
  246. // PD1 #F by 3 eigen Matrix of the first per face frame field vector
  247. // PD2 #F by 3 eigen Matrix of the second per face frame field vector
  248. // Output:
  249. // BIS1 #F by 3 eigen Matrix of the first per face frame field bisector
  250. // BIS2 #F by 3 eigen Matrix of the second per face frame field bisector
  251. //)igl_Qu8mg5v7";
  252. const char *__doc_igl_copyleft_cgal_mesh_boolean = R"igl_Qu8mg5v7(// MESH_BOOLEAN Compute boolean csg operations on "solid", consistently
  253. // oriented meshes.
  254. //
  255. // Inputs:
  256. // VA #VA by 3 list of vertex positions of first mesh
  257. // FA #FA by 3 list of triangle indices into VA
  258. // VB #VB by 3 list of vertex positions of second mesh
  259. // FB #FB by 3 list of triangle indices into VB
  260. // type type of boolean operation
  261. // Outputs:
  262. // VC #VC by 3 list of vertex positions of boolean result mesh
  263. // FC #FC by 3 list of triangle indices into VC
  264. // J #FC list of indices into [FA;FA.rows()+FB] revealing "birth" facet
  265. // Returns true if inputs induce a piecewise constant winding number
  266. // field and type is valid
  267. //
  268. // See also: mesh_boolean_cork, intersect_other,
  269. // remesh_self_intersections)igl_Qu8mg5v7";
  270. const char *__doc_igl_copyleft_cgal_remesh_self_intersections = R"igl_Qu8mg5v7(// Given a triangle mesh (V,F) compute a new mesh (VV,FF) which is the same
  271. // as (V,F) except that any self-intersecting triangles in (V,F) have been
  272. // subdivided (new vertices and face created) so that the self-intersection
  273. // contour lies exactly on edges in (VV,FF). New vertices will appear in
  274. // original faces or on original edges. New vertices on edges are "merged"
  275. // only across original faces sharing that edge. This means that if the input
  276. // triangle mesh is a closed manifold the output will be too.
  277. //
  278. // Inputs:
  279. // V #V by 3 list of vertex positions
  280. // F #F by 3 list of triangle indices into V
  281. // params struct of optional parameters
  282. // Outputs:
  283. // VV #VV by 3 list of vertex positions
  284. // FF #FF by 3 list of triangle indices into VV
  285. // IF #intersecting face pairs by 2 list of intersecting face pairs,
  286. // indexing F
  287. // J #FF list of indices into F denoting birth triangle
  288. // IM #VV list of indices into VV of unique vertices.
  289. //
  290. // Known bugs: If an existing edge in (V,F) lies exactly on another face then
  291. // any resulting additional vertices along that edge may not get properly
  292. // connected so that the output mesh has the same global topology. This is
  293. // because
  294. //
  295. // Example:
  296. // // resolve intersections
  297. // igl::copyleft::cgal::remesh_self_intersections(V,F,params,VV,FF,IF,J,IM);
  298. // // _apply_ duplicate vertex mapping IM to FF
  299. // for_each(FF.data(),FF.data()+FF.size(),[&IM](int & a){a=IM(a);});
  300. // // remove any vertices now unreferenced after duplicate mapping.
  301. // igl::remove_unreferenced(VV,FF,SV,SF,UIM);
  302. // // Now (SV,SF) is ready to extract outer hull
  303. // igl::copyleft::cgal::outer_hull(SV,SF,G,J,flip);
  304. //)igl_Qu8mg5v7";
  305. const char *__doc_igl_copyleft_comiso_miq = R"igl_Qu8mg5v7(// Inputs:
  306. // V #V by 3 list of mesh vertex 3D positions
  307. // F #F by 3 list of faces indices in V
  308. // PD1 #V by 3 first line of the Jacobian per triangle
  309. // PD2 #V by 3 second line of the Jacobian per triangle
  310. // (optional, if empty it will be a vector in the tangent plane orthogonal to PD1)
  311. // scale global scaling for the gradient (controls the quads resolution)
  312. // stiffness weight for the stiffness iterations
  313. // direct_round greedily round all integer variables at once (greatly improves optimization speed but lowers quality)
  314. // iter stiffness iterations (0 = no stiffness)
  315. // local_iter number of local iterations for the integer rounding
  316. // do_round enables the integer rounding (disabling it could be useful for debugging)
  317. // round_vertices id of additional vertices that should be snapped to integer coordinates
  318. // hard_features #H by 2 list of pairs of vertices that belongs to edges that should be snapped to integer coordinates
  319. //
  320. // Output:
  321. // UV #UV by 2 list of vertices in 2D
  322. // FUV #FUV by 3 list of face indices in UV
  323. //
  324. // TODO: rename the parameters name in the cpp consistently
  325. // improve the handling of hard_features, right now it might fail in difficult cases)igl_Qu8mg5v7";
  326. const char *__doc_igl_copyleft_comiso_nrosy = R"igl_Qu8mg5v7(// Generate a N-RoSy field from a sparse set of constraints
  327. //
  328. // Inputs:
  329. // V #V by 3 list of mesh vertex coordinates
  330. // F #F by 3 list of mesh faces (must be triangles)
  331. // b #B by 1 list of constrained face indices
  332. // bc #B by 3 list of representative vectors for the constrained
  333. // faces
  334. // b_soft #S by 1 b for soft constraints
  335. // w_soft #S by 1 weight for the soft constraints (0-1)
  336. // bc_soft #S by 3 bc for soft constraints
  337. // N the degree of the N-RoSy vector field
  338. // soft the strength of the soft constraints w.r.t. smoothness
  339. // (0 -> smoothness only, 1->constraints only)
  340. // Outputs:
  341. // R #F by 3 the representative vectors of the interpolated field
  342. // S #V by 1 the singularity index for each vertex (0 = regular))igl_Qu8mg5v7";
  343. const char *__doc_igl_copyleft_marching_cubes = R"igl_Qu8mg5v7(// marching_cubes( values, points, x_res, y_res, z_res, vertices, faces )
  344. //
  345. // performs marching cubes reconstruction on the grid defined by values, and
  346. // points, and generates vertices and faces
  347. //
  348. // Input:
  349. // values #number_of_grid_points x 1 array -- the scalar values of an
  350. // implicit function defined on the grid points (<0 in the inside of the
  351. // surface, 0 on the border, >0 outside)
  352. // points #number_of_grid_points x 3 array -- 3-D positions of the grid
  353. // points, ordered in x,y,z order:
  354. // points[index] = the point at (x,y,z) where :
  355. // x = (index % (xres -1),
  356. // y = (index / (xres-1)) %(yres-1),
  357. // z = index / (xres -1) / (yres -1) ).
  358. // where x,y,z index x, y, z dimensions
  359. // i.e. index = x + y*xres + z*xres*yres
  360. // xres resolutions of the grid in x dimension
  361. // yres resolutions of the grid in y dimension
  362. // zres resolutions of the grid in z dimension
  363. // Output:
  364. // vertices #V by 3 list of mesh vertex positions
  365. // faces #F by 3 list of mesh triangle indices
  366. //)igl_Qu8mg5v7";
  367. const char *__doc_igl_copyleft_swept_volume = R"igl_Qu8mg5v7(// Compute the surface of the swept volume of a solid object with surface
  368. // (V,F) mesh under going rigid motion.
  369. //
  370. // Inputs:
  371. // V #V by 3 list of mesh positions in reference pose
  372. // F #F by 3 list of mesh indices into V
  373. // transform function handle so that transform(t) returns the rigid
  374. // transformation at time t∈[0,1]
  375. // steps number of time steps: steps=3 --> t∈{0,0.5,1}
  376. // grid_res number of grid cells on the longest side containing the
  377. // motion (isolevel+1 cells will also be added on each side as padding)
  378. // isolevel distance level to be contoured as swept volume
  379. // Outputs:
  380. // SV #SV by 3 list of mesh positions of the swept surface
  381. // SF #SF by 3 list of mesh faces into SV)igl_Qu8mg5v7";
  382. const char *__doc_igl_copyleft_tetgen_tetrahedralize = R"igl_Qu8mg5v7(// Mesh the interior of a surface mesh (V,F) using tetgen
  383. //
  384. // Inputs:
  385. // V #V by 3 vertex position list
  386. // F #F list of polygon face indices into V (0-indexed)
  387. // switches string of tetgen options (See tetgen documentation) e.g.
  388. // "pq1.414a0.01" tries to mesh the interior of a given surface with
  389. // quality and area constraints
  390. // "" will mesh the convex hull constrained to pass through V (ignores F)
  391. // Outputs:
  392. // TV #V by 3 vertex position list
  393. // TT #T by 4 list of tet face indices
  394. // TF #F by 3 list of triangle face indices
  395. // Returns status:
  396. // 0 success
  397. // 1 tetgen threw exception
  398. // 2 tetgen did not crash but could not create any tets (probably there are
  399. // holes, duplicate faces etc.)
  400. // -1 other error)igl_Qu8mg5v7";
  401. const char *__doc_igl_cotmatrix = R"igl_Qu8mg5v7(// Constructs the cotangent stiffness matrix (discrete laplacian) for a given
  402. // mesh (V,F).
  403. //
  404. // Templates:
  405. // DerivedV derived type of eigen matrix for V (e.g. derived from
  406. // MatrixXd)
  407. // DerivedF derived type of eigen matrix for F (e.g. derived from
  408. // MatrixXi)
  409. // Scalar scalar type for eigen sparse matrix (e.g. double)
  410. // Inputs:
  411. // V #V by dim list of mesh vertex positions
  412. // F #F by simplex_size list of mesh faces (must be triangles)
  413. // Outputs:
  414. // L #V by #V cotangent matrix, each row i corresponding to V(i,:)
  415. //
  416. // See also: adjacency_matrix
  417. //
  418. // Note: This Laplacian uses the convention that diagonal entries are
  419. // **minus** the sum of off-diagonal entries. The diagonal entries are
  420. // therefore in general negative and the matrix is **negative** semi-definite
  421. // (immediately, -L is **positive** semi-definite)
  422. //)igl_Qu8mg5v7";
  423. const char *__doc_igl_covariance_scatter_matrix = R"igl_Qu8mg5v7(// Construct the covariance scatter matrix for a given arap energy
  424. // Inputs:
  425. // V #V by Vdim list of initial domain positions
  426. // F #F by 3 list of triangle indices into V
  427. // energy ARAPEnergyType enum value defining which energy is being used.
  428. // See ARAPEnergyType.h for valid options and explanations.
  429. // Outputs:
  430. // CSM dim*#V/#F by dim*#V sparse matrix containing special laplacians along
  431. // the diagonal so that when multiplied by V gives covariance matrix
  432. // elements, can be used to speed up covariance matrix computation)igl_Qu8mg5v7";
  433. const char *__doc_igl_cross_field_missmatch = R"igl_Qu8mg5v7(// Inputs:
  434. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  435. // F #F by 3 eigen Matrix of face (quad) indices
  436. // PD1 #F by 3 eigen Matrix of the first per face cross field vector
  437. // PD2 #F by 3 eigen Matrix of the second per face cross field vector
  438. // isCombed boolean, specifying whether the field is combed (i.e. matching has been precomputed.
  439. // If not, the field is combed first.
  440. // Output:
  441. // Handle_MMatch #F by 3 eigen Matrix containing the integer missmatch of the cross field
  442. // across all face edges
  443. //)igl_Qu8mg5v7";
  444. const char *__doc_igl_cut_mesh_from_singularities = R"igl_Qu8mg5v7(// Given a mesh (V,F) and the integer mismatch of a cross field per edge
  445. // (MMatch), finds the cut_graph connecting the singularities (seams) and the
  446. // degree of the singularities singularity_index
  447. //
  448. // Input:
  449. // V #V by 3 list of mesh vertex positions
  450. // F #F by 3 list of faces
  451. // MMatch #F by 3 list of per corner integer mismatch
  452. // Outputs:
  453. // seams #F by 3 list of per corner booleans that denotes if an edge is a
  454. // seam or not
  455. //)igl_Qu8mg5v7";
  456. const char *__doc_igl_deform_skeleton = R"igl_Qu8mg5v7(// Deform a skeleton.
  457. //
  458. // Inputs:
  459. // C #C by 3 list of joint positions
  460. // BE #BE by 2 list of bone edge indices
  461. // vA #BE list of bone transformations
  462. // Outputs
  463. // CT #BE*2 by 3 list of deformed joint positions
  464. // BET #BE by 2 list of bone edge indices (maintains order)
  465. //)igl_Qu8mg5v7";
  466. const char *__doc_igl_directed_edge_orientations = R"igl_Qu8mg5v7(// Determine rotations that take each edge from the x-axis to its given rest
  467. // orientation.
  468. //
  469. // Inputs:
  470. // C #C by 3 list of edge vertex positions
  471. // E #E by 2 list of directed edges
  472. // Outputs:
  473. // Q #E list of quaternions
  474. //)igl_Qu8mg5v7";
  475. const char *__doc_igl_directed_edge_parents = R"igl_Qu8mg5v7(// Recover "parents" (preceding edges) in a tree given just directed edges.
  476. //
  477. // Inputs:
  478. // E #E by 2 list of directed edges
  479. // Outputs:
  480. // P #E list of parent indices into E (-1) means root
  481. //)igl_Qu8mg5v7";
  482. const char *__doc_igl_doublearea = R"igl_Qu8mg5v7(// DOUBLEAREA computes twice the area for each input triangle[quad]
  483. //
  484. // Templates:
  485. // DerivedV derived type of eigen matrix for V (e.g. derived from
  486. // MatrixXd)
  487. // DerivedF derived type of eigen matrix for F (e.g. derived from
  488. // MatrixXi)
  489. // DeriveddblA derived type of eigen matrix for dblA (e.g. derived from
  490. // MatrixXd)
  491. // Inputs:
  492. // V #V by dim list of mesh vertex positions
  493. // F #F by simplex_size list of mesh faces (must be triangles or quads)
  494. // Outputs:
  495. // dblA #F list of triangle[quad] double areas (SIGNED only for 2D input)
  496. //
  497. // Known bug: For dim==3 complexity is O(#V + #F)!! Not just O(#F). This is a big deal
  498. // if you have 1million unreferenced vertices and 1 face)igl_Qu8mg5v7";
  499. const char *__doc_igl_doublearea_single = R"igl_Qu8mg5v7(// Single triangle in 2D!
  500. //
  501. // This should handle streams of corners not just single corners)igl_Qu8mg5v7";
  502. const char *__doc_igl_doublearea_quad = R"igl_Qu8mg5v7(// DOUBLEAREA_QUAD computes twice the area for each input quadrilateral
  503. //
  504. // Inputs:
  505. // V #V by dim list of mesh vertex positions
  506. // F #F by simplex_size list of mesh faces (must be quadrilaterals)
  507. // Outputs:
  508. // dblA #F list of quadrilateral double areas
  509. //)igl_Qu8mg5v7";
  510. const char *__doc_igl_dqs = R"igl_Qu8mg5v7(// Dual quaternion skinning
  511. //
  512. // Inputs:
  513. // V #V by 3 list of rest positions
  514. // W #W by #C list of weights
  515. // vQ #C list of rotation quaternions
  516. // vT #C list of translation vectors
  517. // Outputs:
  518. // U #V by 3 list of new positions)igl_Qu8mg5v7";
  519. const char *__doc_igl_edge_lengths = R"igl_Qu8mg5v7(// Constructs a list of lengths of edges opposite each index in a face
  520. // (triangle/tet) list
  521. //
  522. // Templates:
  523. // DerivedV derived from vertex positions matrix type: i.e. MatrixXd
  524. // DerivedF derived from face indices matrix type: i.e. MatrixXi
  525. // DerivedL derived from edge lengths matrix type: i.e. MatrixXd
  526. // Inputs:
  527. // V eigen matrix #V by 3
  528. // F #F by 2 list of mesh edges
  529. // or
  530. // F #F by 3 list of mesh faces (must be triangles)
  531. // or
  532. // T #T by 4 list of mesh elements (must be tets)
  533. // Outputs:
  534. // L #F by {1|3|6} list of edge lengths
  535. // for edges, column of lengths
  536. // for triangles, columns correspond to edges [1,2],[2,0],[0,1]
  537. // for tets, columns correspond to edges
  538. // [3 0],[3 1],[3 2],[1 2],[2 0],[0 1]
  539. //)igl_Qu8mg5v7";
  540. const char *__doc_igl_edge_topology = R"igl_Qu8mg5v7(// Initialize Edges and their topological relations (assumes an edge-manifold
  541. // mesh)
  542. //
  543. // Output:
  544. // EV : #Ex2, Stores the edge description as pair of indices to vertices
  545. // FE : #Fx3, Stores the Triangle-Edge relation
  546. // EF : #Ex2: Stores the Edge-Triangle relation
  547. //
  548. // TODO: This seems to be a inferior duplicate of edge_flaps.h:
  549. // - unused input parameter V
  550. // - roughly 2x slower than edge_flaps
  551. // - outputs less information: edge_flaps reveals corner opposite edge
  552. // - FE uses non-standard and ambiguous order: FE(f,c) is merely an edge
  553. // incident on corner c of face f. In contrast, edge_flaps's EMAP(f,c) reveals
  554. // the edge _opposite_ corner c of face f)igl_Qu8mg5v7";
  555. const char *__doc_igl_eigs = R"igl_Qu8mg5v7(See eigs for the documentation.)igl_Qu8mg5v7";
  556. const char *__doc_igl_embree_ambient_occlusion = R"igl_Qu8mg5v7(// Compute ambient occlusion per given point
  557. //
  558. // Inputs:
  559. // ei EmbreeIntersector containing (V,F)
  560. // P #P by 3 list of origin points
  561. // N #P by 3 list of origin normals
  562. // Outputs:
  563. // S #P list of ambient occlusion values between 1 (fully occluded) and
  564. // 0 (not occluded)
  565. //)igl_Qu8mg5v7";
  566. const char *__doc_igl_embree_line_mesh_intersection = R"igl_Qu8mg5v7(// Project the point cloud V_source onto the triangle mesh
  567. // V_target,F_target.
  568. // A ray is casted for every vertex in the direction specified by
  569. // N_source and its opposite.
  570. //
  571. // Input:
  572. // V_source: #Vx3 Vertices of the source mesh
  573. // N_source: #Vx3 Normals of the point cloud
  574. // V_target: #V2x3 Vertices of the target mesh
  575. // F_target: #F2x3 Faces of the target mesh
  576. //
  577. // Output:
  578. // #Vx3 matrix of baricentric coordinate. Each row corresponds to
  579. // a vertex of the projected mesh and it has the following format:
  580. // id b1 b2. id is the id of a face of the source mesh. b1 and b2 are
  581. // the barycentric coordinates wrt the first two edges of the triangle
  582. // To convert to standard global coordinates, see barycentric_to_global.h)igl_Qu8mg5v7";
  583. const char *__doc_igl_embree_reorient_facets_raycast = R"igl_Qu8mg5v7(// Orient each component (identified by C) of a mesh (V,F) using ambient
  584. // occlusion such that the front side is less occluded than back side, as
  585. // described in "A Simple Method for Correcting Facet Orientations in
  586. // Polygon Meshes Based on Ray Casting" [Takayama et al. 2014].
  587. //
  588. // Inputs:
  589. // V #V by 3 list of vertex positions
  590. // F #F by 3 list of triangle indices
  591. // rays_total Total number of rays that will be shot
  592. // rays_minimum Minimum number of rays that each patch should receive
  593. // facet_wise Decision made for each face independently, no use of patches
  594. // (i.e., each face is treated as a patch)
  595. // use_parity Use parity mode
  596. // is_verbose Verbose output to cout
  597. // Outputs:
  598. // I #F list of whether face has been flipped
  599. // C #F list of patch ID (output of bfs_orient > manifold patches))igl_Qu8mg5v7";
  600. const char *__doc_igl_exact_geodesic = R"igl_Qu8mg5v7(
  601. // Exact geodesic algorithm for triangular mesh with the implementation from https://code.google.com/archive/p/geodesic/,
  602. // and the algorithm first described by Mitchell, Mount and Papadimitriou in 1987
  603. //
  604. // Inputs:
  605. // V #V by 3 list of 3D vertex positions
  606. // F #F by 3 list of mesh faces
  607. // VS #VS by 1 vector specifying indices of source vertices
  608. // FS #FS by 1 vector specifying indices of source faces
  609. // VT #VT by 1 vector specifying indices of target vertices
  610. // FT #FT by 1 vector specifying indices of target faces
  611. // Output:
  612. // D #VT+#FT by 1 vector of geodesic distances of each target w.r.t. the nearest one in the source set
  613. //
  614. // Note:
  615. // Specifying a face as target/source means its center.
  616. //)igl_Qu8mg5v7";
  617. const char *__doc_igl_find_cross_field_singularities = R"igl_Qu8mg5v7(// Inputs:
  618. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  619. // F #F by 3 eigen Matrix of face (quad) indices
  620. // Handle_MMatch #F by 3 eigen Matrix containing the integer missmatch of the cross field
  621. // across all face edges
  622. // Output:
  623. // isSingularity #V by 1 boolean eigen Vector indicating the presence of a singularity on a vertex
  624. // singularityIndex #V by 1 integer eigen Vector containing the singularity indices
  625. //)igl_Qu8mg5v7";
  626. const char *__doc_igl_fit_rotations = R"igl_Qu8mg5v7(// Known issues: This seems to be implemented in Eigen/Geometry:
  627. // Eigen::umeyama
  628. //
  629. // FIT_ROTATIONS Given an input mesh and new positions find rotations for
  630. // every covariance matrix in a stack of covariance matrices
  631. //
  632. // Inputs:
  633. // S nr*dim by dim stack of covariance matrices
  634. // single_precision whether to use single precision (faster)
  635. // Outputs:
  636. // R dim by dim * nr list of rotations
  637. //)igl_Qu8mg5v7";
  638. const char *__doc_igl_fit_rotations_planar = R"igl_Qu8mg5v7(// FIT_ROTATIONS Given an input mesh and new positions find 2D rotations for
  639. // every vertex that best maps its one ring to the new one ring
  640. //
  641. // Inputs:
  642. // S nr*dim by dim stack of covariance matrices, third column and every
  643. // third row will be ignored
  644. // Outputs:
  645. // R dim by dim * nr list of rotations, third row and third column of each
  646. // rotation will just be identity
  647. //)igl_Qu8mg5v7";
  648. const char *__doc_igl_fit_rotations_SSE = R"igl_Qu8mg5v7(See fit_rotations_SSE for the documentation.)igl_Qu8mg5v7";
  649. const char *__doc_igl_floor = R"igl_Qu8mg5v7(// Floor a given matrix to nearest integers
  650. //
  651. // Inputs:
  652. // X m by n matrix of scalars
  653. // Outputs:
  654. // Y m by n matrix of floored integers)igl_Qu8mg5v7";
  655. const char *__doc_igl_forward_kinematics = R"igl_Qu8mg5v7(// Given a skeleton and a set of relative bone rotations compute absolute
  656. // rigid transformations for each bone.
  657. //
  658. // Inputs:
  659. // C #C by dim list of joint positions
  660. // BE #BE by 2 list of bone edge indices
  661. // P #BE list of parent indices into BE
  662. // dQ #BE list of relative rotations
  663. // dT #BE list of relative translations
  664. // Outputs:
  665. // vQ #BE list of absolute rotations
  666. // vT #BE list of absolute translations)igl_Qu8mg5v7";
  667. const char *__doc_igl_gaussian_curvature = R"igl_Qu8mg5v7(// Compute discrete local integral gaussian curvature (angle deficit, without
  668. // averaging by local area).
  669. //
  670. // Inputs:
  671. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  672. // F #F by 3 eigen Matrix of face (triangle) indices
  673. // Output:
  674. // K #V by 1 eigen Matrix of discrete gaussian curvature values
  675. //)igl_Qu8mg5v7";
  676. const char *__doc_igl_get_seconds = R"igl_Qu8mg5v7(// Return the current time in seconds since program start
  677. //
  678. // Example:
  679. // const auto & tictoc = []()
  680. // {
  681. // static double t_start = igl::get_seconds();
  682. // double diff = igl::get_seconds()-t_start;
  683. // t_start += diff;
  684. // return diff;
  685. // };
  686. // tictoc();
  687. // ... // part 1
  688. // cout<<"part 1: "<<tictoc()<<endl;
  689. // ... // part 2
  690. // cout<<"part 2: "<<tictoc()<<endl;
  691. // ... // etc)igl_Qu8mg5v7";
  692. const char *__doc_igl_grad = R"igl_Qu8mg5v7(// Gradient of a scalar function defined on piecewise linear elements (mesh)
  693. // is constant on each triangle [tetrahedron] i,j,k:
  694. // grad(Xijk) = (Xj-Xi) * (Vi - Vk)^R90 / 2A + (Xk-Xi) * (Vj - Vi)^R90 / 2A
  695. // where Xi is the scalar value at vertex i, Vi is the 3D position of vertex
  696. // i, and A is the area of triangle (i,j,k). ^R90 represent a rotation of
  697. // 90 degrees
  698. //)igl_Qu8mg5v7";
  699. const char *__doc_igl_harmonic = R"igl_Qu8mg5v7(// Compute k-harmonic weight functions "coordinates".
  700. //
  701. //
  702. // Inputs:
  703. // V #V by dim vertex positions
  704. // F #F by simplex-size list of element indices
  705. // b #b boundary indices into V
  706. // bc #b by #W list of boundary values
  707. // k power of harmonic operation (1: harmonic, 2: biharmonic, etc)
  708. // Outputs:
  709. // W #V by #W list of weights
  710. //)igl_Qu8mg5v7";
  711. const char *__doc_igl_hsv_to_rgb = R"igl_Qu8mg5v7(// Convert RGB to HSV
  712. //
  713. // Inputs:
  714. // h hue value (degrees: [0,360])
  715. // s saturation value ([0,1])
  716. // v value value ([0,1])
  717. // Outputs:
  718. // r red value ([0,1])
  719. // g green value ([0,1])
  720. // b blue value ([0,1]))igl_Qu8mg5v7";
  721. const char *__doc_igl_internal_angles = R"igl_Qu8mg5v7(// Compute internal angles for a triangle mesh
  722. //
  723. // Inputs:
  724. // V #V by dim eigen Matrix of mesh vertex nD positions
  725. // F #F by poly-size eigen Matrix of face (triangle) indices
  726. // Output:
  727. // K #F by poly-size eigen Matrix of internal angles
  728. // for triangles, columns correspond to edges [1,2],[2,0],[0,1]
  729. //
  730. // Known Issues:
  731. // if poly-size ≠ 3 then dim must equal 3.)igl_Qu8mg5v7";
  732. const char *__doc_igl_internal_angles_using_squared_edge_lengths = R"igl_Qu8mg5v7(// Inputs:
  733. // L_sq #F by 3 list of squared edge lengths
  734. // Output:
  735. // K #F by poly-size eigen Matrix of internal angles
  736. // for triangles, columns correspond to edges [1,2],[2,0],[0,1]
  737. //
  738. // Note:
  739. // Usage of internal_angles_using_squared_edge_lengths is preferred to internal_angles_using_squared_edge_lengths)igl_Qu8mg5v7";
  740. const char *__doc_igl_internal_angles_using_edge_lengths = R"igl_Qu8mg5v7(// Inputs:
  741. // L #F by 3 list of edge lengths
  742. // Output:
  743. // K #F by poly-size eigen Matrix of internal angles
  744. // for triangles, columns correspond to edges [1,2],[2,0],[0,1]
  745. //
  746. // Note:
  747. // Usage of internal_angles_using_squared_edge_lengths is preferred to internal_angles_using_squared_edge_lengths
  748. // This function is deprecated and probably will be removed in future versions)igl_Qu8mg5v7";
  749. const char *__doc_igl_invert_diag = R"igl_Qu8mg5v7(// Templates:
  750. // T should be a eigen sparse matrix primitive type like int or double
  751. // Inputs:
  752. // X an m by n sparse matrix
  753. // Outputs:
  754. // Y an m by n sparse matrix)igl_Qu8mg5v7";
  755. const char *__doc_igl_is_irregular_vertex = R"igl_Qu8mg5v7(// Determine if a vertex is irregular, i.e. it has more than 6 (triangles)
  756. // or 4 (quads) incident edges. Vertices on the boundary are ignored.
  757. //
  758. // Inputs:
  759. // V #V by dim list of vertex positions
  760. // F #F by 3[4] list of triangle[quads] indices
  761. // Returns #V vector of bools revealing whether vertices are singular
  762. //)igl_Qu8mg5v7";
  763. const char *__doc_igl_jet = R"igl_Qu8mg5v7(// JET like MATLAB's jet
  764. //
  765. // Inputs:
  766. // m number of colors
  767. // Outputs:
  768. // J m by list of RGB colors between 0 and 1
  769. //
  770. //#ifndef IGL_NO_EIGEN
  771. // void jet(const int m, Eigen::MatrixXd & J);
  772. //#endif
  773. // Wrapper for directly computing [r,g,b] values for a given factor f between
  774. // 0 and 1
  775. //
  776. // Inputs:
  777. // f factor determining color value as if 0 was min and 1 was max
  778. // Outputs:
  779. // r red value
  780. // g green value
  781. // b blue value)igl_Qu8mg5v7";
  782. const char *__doc_igl_lbs_matrix = R"igl_Qu8mg5v7(// LBS_MATRIX Linear blend skinning can be expressed by V' = M * T where V' is
  783. // a #V by dim matrix of deformed vertex positions (one vertex per row), M is a
  784. // #V by (dim+1)*#T (composed of weights and rest positions) and T is a
  785. // #T*(dim+1) by dim matrix of #T stacked transposed transformation matrices.
  786. // See equations (1) and (2) in "Fast Automatic Skinning Transformations"
  787. // [Jacobson et al 2012]
  788. //
  789. // Inputs:
  790. // V #V by dim list of rest positions
  791. // W #V+ by #T list of weights
  792. // Outputs:
  793. // M #V by #T*(dim+1)
  794. //
  795. // In MATLAB:
  796. // kron(ones(1,size(W,2)),[V ones(size(V,1),1)]).*kron(W,ones(1,size(V,2)+1)))igl_Qu8mg5v7";
  797. const char *__doc_igl_lbs_matrix_column = R"igl_Qu8mg5v7(// LBS_MATRIX construct a matrix that when multiplied against a column of
  798. // affine transformation entries computes new coordinates of the vertices
  799. //
  800. // I'm not sure it makes since that the result is stored as a sparse matrix.
  801. // The number of non-zeros per row *is* dependent on the number of mesh
  802. // vertices and handles.
  803. //
  804. // Inputs:
  805. // V #V by dim list of vertex rest positions
  806. // W #V by #handles list of correspondence weights
  807. // Output:
  808. // M #V * dim by #handles * dim * (dim+1) matrix such that
  809. // new_V(:) = LBS(V,W,A) = reshape(M * A,size(V)), where A is a column
  810. // vectors formed by the entries in each handle's dim by dim+1
  811. // transformation matrix. Specifcally, A =
  812. // reshape(permute(Astack,[3 1 2]),n*dim*(dim+1),1)
  813. // or A = [Lxx;Lyx;Lxy;Lyy;tx;ty], and likewise for other dim
  814. // if Astack(:,:,i) is the dim by (dim+1) transformation at handle i)igl_Qu8mg5v7";
  815. const char *__doc_igl_local_basis = R"igl_Qu8mg5v7(// Compute a local orthogonal reference system for each triangle in the given mesh
  816. // Templates:
  817. // DerivedV derived from vertex positions matrix type: i.e. MatrixXd
  818. // DerivedF derived from face indices matrix type: i.e. MatrixXi
  819. // Inputs:
  820. // V eigen matrix #V by 3
  821. // F #F by 3 list of mesh faces (must be triangles)
  822. // Outputs:
  823. // B1 eigen matrix #F by 3, each vector is tangent to the triangle
  824. // B2 eigen matrix #F by 3, each vector is tangent to the triangle and perpendicular to B1
  825. // B3 eigen matrix #F by 3, normal of the triangle
  826. //
  827. // See also: adjacency_matrix)igl_Qu8mg5v7";
  828. const char *__doc_igl_lscm = R"igl_Qu8mg5v7(// Compute a Least-squares conformal map parametrization (equivalently
  829. // derived in "Intrinsic Parameterizations of Surface Meshes" [Desbrun et al.
  830. // 2002] and "Least Squares Conformal Maps for Automatic Texture Atlas
  831. // Generation" [Lévy et al. 2002]), though this implementation follows the
  832. // derivation in: "Spectral Conformal Parameterization" [Mullen et al. 2008]
  833. // (note, this does **not** implement the Eigen-decomposition based method in
  834. // [Mullen et al. 2008], which is not equivalent). Input should be a manifold
  835. // mesh (also no unreferenced vertices) and "boundary" (fixed vertices) `b`
  836. // should contain at least two vertices per connected component.
  837. //
  838. // Inputs:
  839. // V #V by 3 list of mesh vertex positions
  840. // F #F by 3 list of mesh faces (must be triangles)
  841. // b #b boundary indices into V
  842. // bc #b by 3 list of boundary values
  843. // Outputs:
  844. // UV #V by 2 list of 2D mesh vertex positions in UV space
  845. // Returns true only on solver success.
  846. //)igl_Qu8mg5v7";
  847. const char *__doc_igl_map_vertices_to_circle = R"igl_Qu8mg5v7(// Map the vertices whose indices are in a given boundary loop (bnd) on the
  848. // unit circle with spacing proportional to the original boundary edge
  849. // lengths.
  850. //
  851. // Inputs:
  852. // V #V by dim list of mesh vertex positions
  853. // b #W list of vertex ids
  854. // Outputs:
  855. // UV #W by 2 list of 2D position on the unit circle for the vertices in b)igl_Qu8mg5v7";
  856. const char *__doc_igl_massmatrix = R"igl_Qu8mg5v7(// Constructs the mass (area) matrix for a given mesh (V,F).
  857. //
  858. // Templates:
  859. // DerivedV derived type of eigen matrix for V (e.g. derived from
  860. // MatrixXd)
  861. // DerivedF derived type of eigen matrix for F (e.g. derived from
  862. // MatrixXi)
  863. // Scalar scalar type for eigen sparse matrix (e.g. double)
  864. // Inputs:
  865. // V #V by dim list of mesh vertex positions
  866. // F #F by simplex_size list of mesh faces (must be triangles)
  867. // type one of the following ints:
  868. // MASSMATRIX_TYPE_BARYCENTRIC barycentric
  869. // MASSMATRIX_TYPE_VORONOI voronoi-hybrid {default}
  870. // MASSMATRIX_TYPE_FULL full {not implemented}
  871. // Outputs:
  872. // M #V by #V mass matrix
  873. //
  874. // See also: adjacency_matrix
  875. //)igl_Qu8mg5v7";
  876. const char *__doc_igl_min_quad_with_fixed_precompute = R"igl_Qu8mg5v7(// Known Bugs: rows of Aeq **should probably** be linearly independent.
  877. // During precomputation, the rows of a Aeq are checked via QR. But in case
  878. // they're not then resulting probably will no longer be sparse: it will be
  879. // slow.
  880. //
  881. // MIN_QUAD_WITH_FIXED Minimize a quadratic energy of the form
  882. //
  883. // trace( 0.5*Z'*A*Z + Z'*B + constant )
  884. //
  885. // subject to
  886. //
  887. // Z(known,:) = Y, and
  888. // Aeq*Z = Beq
  889. //
  890. // Templates:
  891. // T should be a eigen matrix primitive type like int or double
  892. // Inputs:
  893. // A n by n matrix of quadratic coefficients
  894. // known list of indices to known rows in Z
  895. // Y list of fixed values corresponding to known rows in Z
  896. // Aeq m by n list of linear equality constraint coefficients
  897. // pd flag specifying whether A(unknown,unknown) is positive definite
  898. // Outputs:
  899. // data factorization struct with all necessary information to solve
  900. // using min_quad_with_fixed_solve
  901. // Returns true on success, false on error
  902. //
  903. // Benchmark: For a harmonic solve on a mesh with 325K facets, matlab 2.2
  904. // secs, igl/min_quad_with_fixed.h 7.1 secs
  905. //)igl_Qu8mg5v7";
  906. const char *__doc_igl_min_quad_with_fixed_solve = R"igl_Qu8mg5v7(// Solves a system previously factored using min_quad_with_fixed_precompute
  907. //
  908. // Template:
  909. // T type of sparse matrix (e.g. double)
  910. // DerivedY type of Y (e.g. derived from VectorXd or MatrixXd)
  911. // DerivedZ type of Z (e.g. derived from VectorXd or MatrixXd)
  912. // Inputs:
  913. // data factorization struct with all necessary precomputation to solve
  914. // B n by k column of linear coefficients
  915. // Y b by k list of constant fixed values
  916. // Beq m by k list of linear equality constraint constant values
  917. // Outputs:
  918. // Z n by k solution
  919. // sol #unknowns+#lagrange by k solution to linear system
  920. // Returns true on success, false on error)igl_Qu8mg5v7";
  921. const char *__doc_igl_min_quad_with_fixed = R"igl_Qu8mg5v7(See min_quad_with_fixed for the documentation.)igl_Qu8mg5v7";
  922. const char *__doc_igl_normalize_row_lengths = R"igl_Qu8mg5v7(// Obsolete: just use A.rowwise().normalize() or B=A.rowwise().normalized();
  923. //
  924. // Normalize the rows in A so that their lengths are each 1 and place the new
  925. // entries in B
  926. // Inputs:
  927. // A #rows by k input matrix
  928. // Outputs:
  929. // B #rows by k input matrix, can be the same as A)igl_Qu8mg5v7";
  930. const char *__doc_igl_normalize_row_sums = R"igl_Qu8mg5v7(// Normalize the rows in A so that their sums are each 1 and place the new
  931. // entries in B
  932. // Inputs:
  933. // A #rows by k input matrix
  934. // Outputs:
  935. // B #rows by k input matrix, can be the same as A
  936. //
  937. // Note: This is just calling an Eigen one-liner.)igl_Qu8mg5v7";
  938. const char *__doc_igl_parula = R"igl_Qu8mg5v7(// PARULA like MATLAB's parula
  939. //
  940. // Inputs:
  941. // m number of colors
  942. // Outputs:
  943. // J m by list of RGB colors between 0 and 1
  944. //
  945. // Wrapper for directly computing [r,g,b] values for a given factor f between
  946. // 0 and 1
  947. //
  948. // Inputs:
  949. // f factor determining color value as if 0 was min and 1 was max
  950. // Outputs:
  951. // r red value
  952. // g green value
  953. // b blue value)igl_Qu8mg5v7";
  954. const char *__doc_igl_per_corner_normals = R"igl_Qu8mg5v7(// Compute vertex normals via vertex position list, face list
  955. // Inputs:
  956. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  957. // F #F by 3 eigne Matrix of face (triangle) indices
  958. // corner_threshold threshold in degrees on sharp angles
  959. // Output:
  960. // CN #F*3 by 3 eigen Matrix of mesh vertex 3D normals, where the normal
  961. // for corner F(i,j) is at CN(i*3+j,:) )igl_Qu8mg5v7";
  962. const char *__doc_igl_per_edge_normals = R"igl_Qu8mg5v7(// Compute face normals via vertex position list, face list
  963. // Inputs:
  964. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  965. // F #F by 3 eigen Matrix of face (triangle) indices
  966. // weight weighting type
  967. // FN #F by 3 matrix of 3D face normals per face
  968. // Output:
  969. // N #2 by 3 matrix of mesh edge 3D normals per row
  970. // E #E by 2 matrix of edge indices per row
  971. // EMAP #E by 1 matrix of indices from all edges to E
  972. //)igl_Qu8mg5v7";
  973. const char *__doc_igl_per_face_normals = R"igl_Qu8mg5v7(// Compute face normals via vertex position list, face list
  974. // Inputs:
  975. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  976. // F #F by 3 eigen Matrix of face (triangle) indices
  977. // Z 3 vector normal given to faces with degenerate normal.
  978. // Output:
  979. // N #F by 3 eigen Matrix of mesh face (triangle) 3D normals
  980. //
  981. // Example:
  982. // // Give degenerate faces (1/3,1/3,1/3)^0.5
  983. // per_face_normals(V,F,Vector3d(1,1,1).normalized(),N);)igl_Qu8mg5v7";
  984. const char *__doc_igl_per_face_normals_stable = R"igl_Qu8mg5v7(// Special version where order of face indices is guaranteed not to effect
  985. // output.)igl_Qu8mg5v7";
  986. const char *__doc_igl_per_vertex_normals = R"igl_Qu8mg5v7(// Compute vertex normals via vertex position list, face list
  987. // Inputs:
  988. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  989. // F #F by 3 eigne Matrix of face (triangle) indices
  990. // weighting Weighting type
  991. // Output:
  992. // N #V by 3 eigen Matrix of mesh vertex 3D normals)igl_Qu8mg5v7";
  993. const char *__doc_igl_planarize_quad_mesh = R"igl_Qu8mg5v7(// Inputs:
  994. // Vin #V by 3 eigen Matrix of mesh vertex 3D positions
  995. // F #F by 4 eigen Matrix of face (quad) indices
  996. // maxIter maximum numbers of iterations
  997. // threshold minimum allowed threshold for non-planarity
  998. // Output:
  999. // Vout #V by 3 eigen Matrix of planar mesh vertex 3D positions
  1000. //)igl_Qu8mg5v7";
  1001. const char *__doc_igl_png_readPNG = R"igl_Qu8mg5v7(// Read an image from a .png file into 4 memory buffers
  1002. //
  1003. // Input:
  1004. // png_file path to .png file
  1005. // Output:
  1006. // R,G,B,A texture channels
  1007. // Returns true on success, false on failure
  1008. //)igl_Qu8mg5v7";
  1009. const char *__doc_igl_png_writePNG = R"igl_Qu8mg5v7(// Writes an image to a png file
  1010. //
  1011. // Input:
  1012. // R,G,B,A texture channels
  1013. // Output:
  1014. // png_file path to .png file
  1015. // Returns true on success, false on failure
  1016. //)igl_Qu8mg5v7";
  1017. const char *__doc_igl_point_mesh_squared_distance = R"igl_Qu8mg5v7(// Compute distances from a set of points P to a triangle mesh (V,F)
  1018. //
  1019. // Inputs:
  1020. // P #P by 3 list of query point positions
  1021. // V #V by 3 list of vertex positions
  1022. // Ele #Ele by (3|2|1) list of (triangle|edge|point) indices
  1023. // Outputs:
  1024. // sqrD #P list of smallest squared distances
  1025. // I #P list of primitive indices corresponding to smallest distances
  1026. // C #P by 3 list of closest points
  1027. //
  1028. // Known bugs: This only computes distances to given primitivess. So
  1029. // unreferenced vertices are ignored. However, degenerate primitives are
  1030. // handled correctly: triangle [1 2 2] is treated as a segment [1 2], and
  1031. // triangle [1 1 1] is treated as a point. So one _could_ add extra
  1032. // combinatorially degenerate rows to Ele for all unreferenced vertices to
  1033. // also get distances to points.)igl_Qu8mg5v7";
  1034. const char *__doc_igl_polar_svd = R"igl_Qu8mg5v7(// Computes the polar decomposition (R,T) of a matrix A using SVD singular
  1035. // value decomposition
  1036. //
  1037. // Inputs:
  1038. // A 3 by 3 matrix to be decomposed
  1039. // Outputs:
  1040. // R 3 by 3 rotation matrix part of decomposition (**always rotataion**)
  1041. // T 3 by 3 stretch matrix part of decomposition
  1042. // U 3 by 3 left-singular vectors
  1043. // S 3 by 1 singular values
  1044. // V 3 by 3 right-singular vectors
  1045. //
  1046. //)igl_Qu8mg5v7";
  1047. const char *__doc_igl_principal_curvature = R"igl_Qu8mg5v7(// Compute the principal curvature directions and magnitude of the given triangle mesh
  1048. // DerivedV derived from vertex positions matrix type: i.e. MatrixXd
  1049. // DerivedF derived from face indices matrix type: i.e. MatrixXi
  1050. // Inputs:
  1051. // V eigen matrix #V by 3
  1052. // F #F by 3 list of mesh faces (must be triangles)
  1053. // radius controls the size of the neighbourhood used, 1 = average edge length
  1054. //
  1055. // Outputs:
  1056. // PD1 #V by 3 maximal curvature direction for each vertex.
  1057. // PD2 #V by 3 minimal curvature direction for each vertex.
  1058. // PV1 #V by 1 maximal curvature value for each vertex.
  1059. // PV2 #V by 1 minimal curvature value for each vertex.
  1060. //
  1061. // See also: average_onto_faces, average_onto_vertices
  1062. //
  1063. // This function has been developed by: Nikolas De Giorgis, Luigi Rocca and Enrico Puppo.
  1064. // The algorithm is based on:
  1065. // Efficient Multi-scale Curvature and Crease Estimation
  1066. // Daniele Panozzo, Enrico Puppo, Luigi Rocca
  1067. // GraVisMa, 2010)igl_Qu8mg5v7";
  1068. const char *__doc_igl_quad_planarity = R"igl_Qu8mg5v7(// Compute planarity of the faces of a quad mesh
  1069. // Inputs:
  1070. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  1071. // F #F by 4 eigen Matrix of face (quad) indices
  1072. // Output:
  1073. // P #F by 1 eigen Matrix of mesh face (quad) planarities
  1074. //)igl_Qu8mg5v7";
  1075. const char *__doc_igl_randperm = R"igl_Qu8mg5v7(// Like matlab's randperm(n) but minus 1
  1076. //
  1077. // Inputs:
  1078. // n number of elements
  1079. // Outputs:
  1080. // I n list of rand permutation of 0:n-1)igl_Qu8mg5v7";
  1081. const char *__doc_igl_readDMAT = R"igl_Qu8mg5v7(See readDMAT for the documentation.)igl_Qu8mg5v7";
  1082. const char *__doc_igl_readMESH = R"igl_Qu8mg5v7(// load a tetrahedral volume mesh from a .mesh file
  1083. //
  1084. // Templates:
  1085. // Scalar type for positions and vectors (will be read as double and cast
  1086. // to Scalar)
  1087. // Index type for indices (will be read as int and cast to Index)
  1088. // Input:
  1089. // mesh_file_name path of .mesh file
  1090. // Outputs:
  1091. // V double matrix of vertex positions #V by 3
  1092. // T #T list of tet indices into vertex positions
  1093. // F #F list of face indices into vertex positions
  1094. //
  1095. // Known bugs: Holes and regions are not supported)igl_Qu8mg5v7";
  1096. const char *__doc_igl_readOBJ = R"igl_Qu8mg5v7(// Read a mesh from an ascii obj file, filling in vertex positions, normals
  1097. // and texture coordinates. Mesh may have faces of any number of degree
  1098. //
  1099. // Templates:
  1100. // Scalar type for positions and vectors (will be read as double and cast
  1101. // to Scalar)
  1102. // Index type for indices (will be read as int and cast to Index)
  1103. // Inputs:
  1104. // str path to .obj file
  1105. // Outputs:
  1106. // V double matrix of vertex positions #V by 3
  1107. // TC double matrix of texture coordinats #TC by 2
  1108. // N double matrix of corner normals #N by 3
  1109. // F #F list of face indices into vertex positions
  1110. // FTC #F list of face indices into vertex texture coordinates
  1111. // FN #F list of face indices into vertex normals
  1112. // Returns true on success, false on errors)igl_Qu8mg5v7";
  1113. const char *__doc_igl_readOFF = R"igl_Qu8mg5v7(// Read a mesh from an ascii OFF file, filling in vertex positions, normals
  1114. // and texture coordinates. Mesh may have faces of any number of degree
  1115. //
  1116. // Templates:
  1117. // Scalar type for positions and vectors (will be read as double and cast
  1118. // to Scalar)
  1119. // Index type for indices (will be read as int and cast to Index)
  1120. // Inputs:
  1121. // str path to .obj file
  1122. // Outputs:
  1123. // V double matrix of vertex positions #V by 3
  1124. // F #F list of face indices into vertex positions
  1125. // N list of vertex normals #V by 3
  1126. // C list of rgb color values per vertex #V by 3
  1127. // Returns true on success, false on errors)igl_Qu8mg5v7";
  1128. const char *__doc_igl_readTGF = R"igl_Qu8mg5v7(// READTGF
  1129. //
  1130. // [V,E,P,BE,CE,PE] = readTGF(filename)
  1131. //
  1132. // Read a graph from a .tgf file
  1133. //
  1134. // Input:
  1135. // filename .tgf file name
  1136. // Output:
  1137. // V # vertices by 3 list of vertex positions
  1138. // E # edges by 2 list of edge indices
  1139. // P # point-handles list of point handle indices
  1140. // BE # bone-edges by 2 list of bone-edge indices
  1141. // CE # cage-edges by 2 list of cage-edge indices
  1142. // PE # pseudo-edges by 2 list of pseudo-edge indices
  1143. //
  1144. // Assumes that graph vertices are 3 dimensional)igl_Qu8mg5v7";
  1145. const char *__doc_igl_read_triangle_mesh = R"igl_Qu8mg5v7(// read mesh from an ascii file with automatic detection of file format.
  1146. // supported: obj, off, stl, wrl, ply, mesh)
  1147. //
  1148. // Templates:
  1149. // Scalar type for positions and vectors (will be read as double and cast
  1150. // to Scalar)
  1151. // Index type for indices (will be read as int and cast to Index)
  1152. // Inputs:
  1153. // str path to file
  1154. // Outputs:
  1155. // V eigen double matrix #V by 3
  1156. // F eigen int matrix #F by 3
  1157. // Returns true iff success)igl_Qu8mg5v7";
  1158. const char *__doc_igl_remove_duplicate_vertices = R"igl_Qu8mg5v7(// REMOVE_DUPLICATE_VERTICES Remove duplicate vertices upto a uniqueness
  1159. // tolerance (epsilon)
  1160. //
  1161. // Inputs:
  1162. // V #V by dim list of vertex positions
  1163. // epsilon uniqueness tolerance (significant digit), can probably think of
  1164. // this as a tolerance on L1 distance
  1165. // Outputs:
  1166. // SV #SV by dim new list of vertex positions
  1167. // SVI #V by 1 list of indices so SV = V(SVI,:)
  1168. // SVJ #SV by 1 list of indices so V = SV(SVJ,:)
  1169. //
  1170. // Example:
  1171. // % Mesh in (V,F)
  1172. // [SV,SVI,SVJ] = remove_duplicate_vertices(V,1e-7);
  1173. // % remap faces
  1174. // SF = SVJ(F);
  1175. //)igl_Qu8mg5v7";
  1176. const char *__doc_igl_rotate_vectors = R"igl_Qu8mg5v7(// Rotate the vectors V by A radiants on the tangent plane spanned by B1 and
  1177. // B2
  1178. //
  1179. // Inputs:
  1180. // V #V by 3 eigen Matrix of vectors
  1181. // A #V eigen vector of rotation angles or a single angle to be applied
  1182. // to all vectors
  1183. // B1 #V by 3 eigen Matrix of base vector 1
  1184. // B2 #V by 3 eigen Matrix of base vector 2
  1185. //
  1186. // Output:
  1187. // Returns the rotated vectors
  1188. //)igl_Qu8mg5v7";
  1189. const char *__doc_igl_setdiff = R"igl_Qu8mg5v7(// Set difference of elements of matrices
  1190. //
  1191. // Inputs:
  1192. // A m-long vector of indices
  1193. // B n-long vector of indices
  1194. // Outputs:
  1195. // C (k<=m)-long vector of unique elements appearing in A but not in B
  1196. // IA (k<=m)-long list of indices into A so that C = A(IA)
  1197. //)igl_Qu8mg5v7";
  1198. const char *__doc_igl_shape_diameter_function = R"igl_Qu8mg5v7(// Compute shape diamater function per given point. In the parlence of the
  1199. // paper "Consistent Mesh Partitioning and Skeletonisation using the Shape
  1200. // Diameter Function" [Shapiro et al. 2008], this implementation uses a 180°
  1201. // cone and a _uniform_ average (_not_ a average weighted by inverse angles).
  1202. //
  1203. // Inputs:
  1204. // shoot_ray function handle that outputs hits of a given ray against a
  1205. // mesh (embedded in function handles as captured variable/data)
  1206. // P #P by 3 list of origin points
  1207. // N #P by 3 list of origin normals
  1208. // Outputs:
  1209. // S #P list of shape diamater function values between bounding box
  1210. // diagonal (perfect sphere) and 0 (perfect needle hook)
  1211. //)igl_Qu8mg5v7";
  1212. const char *__doc_igl_signed_distance = R"igl_Qu8mg5v7(// Computes signed distance to a mesh
  1213. //
  1214. // Inputs:
  1215. // P #P by 3 list of query point positions
  1216. // V #V by 3 list of vertex positions
  1217. // F #F by ss list of triangle indices, ss should be 3 unless sign_type ==
  1218. // SIGNED_DISTANCE_TYPE_UNSIGNED
  1219. // sign_type method for computing distance _sign_ S
  1220. // Outputs:
  1221. // S #P list of smallest signed distances
  1222. // I #P list of facet indices corresponding to smallest distances
  1223. // C #P by 3 list of closest points
  1224. // N #P by 3 list of closest normals (only set if
  1225. // sign_type=SIGNED_DISTANCE_TYPE_PSEUDONORMAL)
  1226. //
  1227. // Known bugs: This only computes distances to triangles. So unreferenced
  1228. // vertices and degenerate triangles are ignored.)igl_Qu8mg5v7";
  1229. const char *__doc_igl_signed_distance_pseudonormal = R"igl_Qu8mg5v7(// Computes signed distance to mesh
  1230. //
  1231. // Inputs:
  1232. // tree AABB acceleration tree (see AABB.h)
  1233. // F #F by 3 list of triangle indices
  1234. // FN #F by 3 list of triangle normals
  1235. // VN #V by 3 list of vertex normals (ANGLE WEIGHTING)
  1236. // EN #E by 3 list of edge normals (UNIFORM WEIGHTING)
  1237. // EMAP #F*3 mapping edges in F to E
  1238. // q Query point
  1239. // Returns signed distance to mesh
  1240. //)igl_Qu8mg5v7";
  1241. const char *__doc_igl_signed_distance_winding_number = R"igl_Qu8mg5v7(// Inputs:
  1242. // tree AABB acceleration tree (see cgal/point_mesh_squared_distance.h)
  1243. // hier Winding number evaluation hierarchy
  1244. // q Query point
  1245. // Returns signed distance to mesh)igl_Qu8mg5v7";
  1246. const char *__doc_igl_slice = R"igl_Qu8mg5v7(// Act like the matlab X(row_indices,col_indices) operator, where
  1247. // row_indices, col_indices are non-negative integer indices.
  1248. //
  1249. // Inputs:
  1250. // X m by n matrix
  1251. // R list of row indices
  1252. // C list of column indices
  1253. // Output:
  1254. // Y #R by #C matrix
  1255. //
  1256. // See also: slice_mask)igl_Qu8mg5v7";
  1257. const char *__doc_igl_slice_into = R"igl_Qu8mg5v7(// Act like the matlab Y(row_indices,col_indices) = X
  1258. //
  1259. // Inputs:
  1260. // X xm by xn rhs matrix
  1261. // R list of row indices
  1262. // C list of column indices
  1263. // Y ym by yn lhs matrix
  1264. // Output:
  1265. // Y ym by yn lhs matrix, same as input but Y(R,C) = X)igl_Qu8mg5v7";
  1266. const char *__doc_igl_slice_mask = R"igl_Qu8mg5v7(// Act like the matlab X(row_mask,col_mask) operator, where
  1267. // row_mask, col_mask are non-negative integer indices.
  1268. //
  1269. // Inputs:
  1270. // X m by n matrix
  1271. // R m list of row bools
  1272. // C n list of column bools
  1273. // Output:
  1274. // Y #trues-in-R by #trues-in-C matrix
  1275. //
  1276. // See also: slice_mask)igl_Qu8mg5v7";
  1277. const char *__doc_igl_marching_tets = R"igl_Qu8mg5v7(// SLICE_TETS Slice through a tet mesh (V,T) along a given plane (via its
  1278. // implicit equation).
  1279. //
  1280. // Inputs:
  1281. // V #V by 3 list of tet mesh vertices
  1282. // T #T by 4 list of tet indices into V
  1283. // plane list of 4 coefficients in the plane equation: [x y z 1]'*plane = 0
  1284. // Optional:
  1285. // 'Manifold' followed by whether to stitch together triangles into a
  1286. // manifold mesh {true}: results in more compact U but slightly slower.
  1287. // Outputs:
  1288. // U #U by 3 list of triangle mesh vertices along slice
  1289. // G #G by 3 list of triangles indices into U
  1290. // J #G list of indices into T revealing from which tet each faces comes
  1291. // BC #U by #V list of barycentric coordinates (or more generally: linear
  1292. // interpolation coordinates) so that U = BC*V
  1293. // )igl_Qu8mg5v7";
  1294. const char *__doc_igl_sortrows = R"igl_Qu8mg5v7(// Act like matlab's [Y,I] = sortrows(X)
  1295. //
  1296. // Templates:
  1297. // DerivedX derived scalar type, e.g. MatrixXi or MatrixXd
  1298. // DerivedI derived integer type, e.g. MatrixXi
  1299. // Inputs:
  1300. // X m by n matrix whose entries are to be sorted
  1301. // ascending sort ascending (true, matlab default) or descending (false)
  1302. // Outputs:
  1303. // Y m by n matrix whose entries are sorted (**should not** be same
  1304. // reference as X)
  1305. // I m list of indices so that
  1306. // Y = X(I,:);)igl_Qu8mg5v7";
  1307. const char *__doc_igl_streamlines_init = R"igl_Qu8mg5v7(// Given a mesh and a field the function computes the /data/ necessary for tracing the field'
  1308. // streamlines, and creates the initial /state/ for the tracing.
  1309. // Inputs:
  1310. // V #V by 3 list of mesh vertex coordinates
  1311. // F #F by 3 list of mesh faces
  1312. // temp_field #F by 3n list of the 3D coordinates of the per-face vectors
  1313. // (n-degrees stacked horizontally for each triangle)
  1314. // treat_as_symmetric
  1315. // if true, adds n symmetry directions to the field (N = 2n). Else N = n
  1316. // percentage [0-1] percentage of faces sampled
  1317. // Outputs:
  1318. // data struct containing topology information of the mesh and field
  1319. // state struct containing the state of the tracing)igl_Qu8mg5v7";
  1320. const char *__doc_igl_streamlines_next = R"igl_Qu8mg5v7(// The function computes the next state for each point in the sample
  1321. // V #V by 3 list of mesh vertex coordinates
  1322. // F #F by 3 list of mesh faces
  1323. // data struct containing topology information
  1324. // state struct containing the state of the tracing)igl_Qu8mg5v7";
  1325. const char *__doc_igl_triangle_triangle_adjacency = R"igl_Qu8mg5v7(// Constructs the triangle-triangle adjacency matrix for a given
  1326. // mesh (V,F).
  1327. //
  1328. // Templates:
  1329. // Scalar derived type of eigen matrix for V (e.g. derived from
  1330. // MatrixXd)
  1331. // Index derived type of eigen matrix for F (e.g. derived from
  1332. // MatrixXi)
  1333. // Inputs:
  1334. // F #F by simplex_size list of mesh faces (must be triangles)
  1335. // Outputs:
  1336. // TT #F by #3 adjacent matrix, the element i,j is the id of the triangle adjacent to the j edge of triangle i
  1337. // TTi #F by #3 adjacent matrix, the element i,j is the id of edge of the triangle TT(i,j) that is adjacent with triangle i
  1338. // NOTE: the first edge of a triangle is [0,1] the second [1,2] and the third [2,3].
  1339. // this convention is DIFFERENT from cotmatrix_entries.h
  1340. // Known bug: this should not need to take V as input.)igl_Qu8mg5v7";
  1341. const char *__doc_igl_triangle_triangle_adjacency_preprocess = R"igl_Qu8mg5v7(// Preprocessing)igl_Qu8mg5v7";
  1342. const char *__doc_igl_triangle_triangle_adjacency_extractTT = R"igl_Qu8mg5v7(// Extract the face adjacencies)igl_Qu8mg5v7";
  1343. const char *__doc_igl_triangle_triangle_adjacency_extractTTi = R"igl_Qu8mg5v7(// Extract the face adjacencies indices (needed for fast traversal))igl_Qu8mg5v7";
  1344. const char *__doc_igl_triangle_triangulate = R"igl_Qu8mg5v7(// Triangulate the interior of a polygon using the triangle library.
  1345. //
  1346. // Inputs:
  1347. // V #V by 2 list of 2D vertex positions
  1348. // E #E by 2 list of vertex ids forming unoriented edges of the boundary of the polygon
  1349. // H #H by 2 coordinates of points contained inside holes of the polygon
  1350. // flags string of options pass to triangle (see triangle documentation)
  1351. // Outputs:
  1352. // V2 #V2 by 2 coordinates of the vertives of the generated triangulation
  1353. // F2 #F2 by 3 list of indices forming the faces of the generated triangulation
  1354. //)igl_Qu8mg5v7";
  1355. const char *__doc_igl_unique = R"igl_Qu8mg5v7(// Act like matlab's [C,IA,IC] = unique(X)
  1356. //
  1357. // Templates:
  1358. // T comparable type T
  1359. // Inputs:
  1360. // A #A vector of type T
  1361. // Outputs:
  1362. // C #C vector of unique entries in A
  1363. // IA #C index vector so that C = A(IA);
  1364. // IC #A index vector so that A = C(IC);)igl_Qu8mg5v7";
  1365. const char *__doc_igl_unique_rows = R"igl_Qu8mg5v7(// Act like matlab's [C,IA,IC] = unique(X,'rows')
  1366. //
  1367. // Templates:
  1368. // DerivedA derived scalar type, e.g. MatrixXi or MatrixXd
  1369. // DerivedIA derived integer type, e.g. MatrixXi
  1370. // DerivedIC derived integer type, e.g. MatrixXi
  1371. // Inputs:
  1372. // A m by n matrix whose entries are to unique'd according to rows
  1373. // Outputs:
  1374. // C #C vector of unique rows in A
  1375. // IA #C index vector so that C = A(IA,:);
  1376. // IC #A index vector so that A = C(IC,:);)igl_Qu8mg5v7";
  1377. const char *__doc_igl_unproject_onto_mesh = R"igl_Qu8mg5v7(// Unproject a screen location (using current opengl viewport, projection, and
  1378. // model view) to a 3D position _onto_ a given mesh, if the ray through the
  1379. // given screen location (x,y) _hits_ the mesh.
  1380. //
  1381. // Inputs:
  1382. // pos screen space coordinates
  1383. // model model matrix
  1384. // proj projection matrix
  1385. // viewport vieweport vector
  1386. // V #V by 3 list of mesh vertex positions
  1387. // F #F by 3 list of mesh triangle indices into V
  1388. // Outputs:
  1389. // fid id of the first face hit
  1390. // bc barycentric coordinates of hit
  1391. // Returns true if there's a hit)igl_Qu8mg5v7";
  1392. const char *__doc_igl_upsample = R"igl_Qu8mg5v7(// Subdivide without moving vertices: Given the triangle mesh [V, F],
  1393. // where n_verts = V.rows(), computes newV and a sparse matrix S s.t.
  1394. // [newV, newF] is the subdivided mesh where newV = S*V.
  1395. //
  1396. // Inputs:
  1397. // n_verts an integer (number of mesh vertices)
  1398. // F an m by 3 matrix of integers of triangle faces
  1399. // Outputs:
  1400. // S a sparse matrix (will become the subdivision matrix)
  1401. // newF a matrix containing the new faces)igl_Qu8mg5v7";
  1402. const char *__doc_igl_winding_number = R"igl_Qu8mg5v7(// WINDING_NUMBER Compute the sum of solid angles of a triangle/tetrahedron
  1403. // described by points (vectors) V
  1404. //
  1405. // Templates:
  1406. // dim dimension of input
  1407. // Inputs:
  1408. // V n by 3 list of vertex positions
  1409. // F #F by 3 list of triangle indices, minimum index is 0
  1410. // O no by 3 list of origin positions
  1411. // Outputs:
  1412. // S no by 1 list of winding numbers
  1413. //
  1414. // 3d)igl_Qu8mg5v7";
  1415. const char *__doc_igl_winding_number_3 = R"igl_Qu8mg5v7(// Inputs:
  1416. // V pointer to array containing #V by 3 vertex positions along rows,
  1417. // given in column major order
  1418. // n number of mesh vertices
  1419. // F pointer to array containing #F by 3 face indices along rows,
  1420. // given in column major order
  1421. // m number of faces
  1422. // O pointer to array containing #O by 3 query positions along rows,
  1423. // given in column major order
  1424. // no number of origins
  1425. // Outputs:
  1426. // S no by 1 list of winding numbers)igl_Qu8mg5v7";
  1427. const char *__doc_igl_winding_number_2 = R"igl_Qu8mg5v7(//// Only one evaluation origin
  1428. //template <typename DerivedF>
  1429. //IGL_INLINE void winding_number_3(
  1430. // const double * V,
  1431. // const int n,
  1432. // const DerivedF * F,
  1433. // const int m,
  1434. // const double * O,
  1435. // double * S);
  1436. // 2d)igl_Qu8mg5v7";
  1437. const char *__doc_igl_writeMESH = R"igl_Qu8mg5v7(// save a tetrahedral volume mesh to a .mesh file
  1438. //
  1439. // Templates:
  1440. // Scalar type for positions and vectors (will be cast as double)
  1441. // Index type for indices (will be cast to int)
  1442. // Input:
  1443. // mesh_file_name path of .mesh file
  1444. // V double matrix of vertex positions #V by 3
  1445. // T #T list of tet indices into vertex positions
  1446. // F #F list of face indices into vertex positions
  1447. //
  1448. // Known bugs: Holes and regions are not supported)igl_Qu8mg5v7";
  1449. const char *__doc_igl_writeOBJ = R"igl_Qu8mg5v7(// Write a mesh in an ascii obj file
  1450. // Inputs:
  1451. // str path to outputfile
  1452. // V #V by 3 mesh vertex positions
  1453. // F #F by 3|4 mesh indices into V
  1454. // CN #CN by 3 normal vectors
  1455. // FN #F by 3|4 corner normal indices into CN
  1456. // TC #TC by 2|3 texture coordinates
  1457. // FTC #F by 3|4 corner texture coord indices into TC
  1458. // Returns true on success, false on error
  1459. //
  1460. // Known issues: Horrifyingly, this does not have the same order of
  1461. // parameters as readOBJ.)igl_Qu8mg5v7";
  1462. const char *__doc_igl_writePLY = R"igl_Qu8mg5v7(// Write a mesh in an ascii ply file
  1463. // Inputs:
  1464. // str path to outputfile
  1465. // V #V by 3 mesh vertex positions
  1466. // F #F by 3 mesh indices into V
  1467. // N #V by 3 normal vectors
  1468. // UV #V by 2 texture coordinates
  1469. // Returns true on success, false on error)igl_Qu8mg5v7";
  1470. const char *__doc_igl_readPLY= R"igl_Qu8mg5v7(// Read a mesh from an ascii ply file, filling in vertex positions,
  1471. // mesh indices, normals and texture coordinates
  1472. // Inputs:
  1473. // str path to .obj file
  1474. // Outputs:
  1475. // V double matrix of vertex positions #V by 3
  1476. // F #F list of face indices into vertex positions
  1477. // N double matrix of corner normals #N by 3
  1478. // UV #V by 2 texture coordinates
  1479. // Returns true on success, false on errors)igl_Qu8mg5v7";
  1480. const char *__doc_igl_seam_edges=R"igl_Qu8mg5v7(// Finds all UV-space boundaries of a mesh.
  1481. //
  1482. // Inputs:
  1483. // V #V by dim list of positions of the input mesh.
  1484. // TC #TC by 2 list of 2D texture coordinates of the input mesh
  1485. // F #F by 3 list of triange indices into V representing a
  1486. // manifold-with-boundary triangle mesh
  1487. // FTC #F by 3 list of indices into TC for each corner
  1488. // Outputs:
  1489. // seams Edges where the forwards and backwards directions have different
  1490. // texture coordinates, as a #seams-by-4 matrix of indices. Each row is
  1491. // organized as [ forward_face_index, forward_face_vertex_index,
  1492. // backwards_face_index, backwards_face_vertex_index ] such that one side
  1493. // of the seam is the edge:
  1494. // F[ seams( i, 0 ), seams( i, 1 ) ], F[ seams( i, 0 ), (seams( i, 1 ) + 1) % 3 ]
  1495. // and the other side is the edge:
  1496. // F[ seams( i, 2 ), seams( i, 3 ) ], F[ seams( i, 2 ), (seams( i, 3 ) + 1) % 3 ]
  1497. // boundaries Edges with only one incident triangle, as a #boundaries-by-2
  1498. // matrix of indices. Each row is organized as
  1499. // [ face_index, face_vertex_index ]
  1500. // such that the edge is:
  1501. // F[ boundaries( i, 0 ), boundaries( i, 1 ) ], F[ boundaries( i, 0 ), (boundaries( i, 1 ) + 1) % 3 ]
  1502. // foldovers Edges where the two incident triangles fold over each other
  1503. // in UV-space, as a #foldovers-by-4 matrix of indices.
  1504. // Each row is organized as [ forward_face_index, forward_face_vertex_index,
  1505. // backwards_face_index, backwards_face_vertex_index ]
  1506. // such that one side of the foldover is the edge:
  1507. // F[ foldovers( i, 0 ), foldovers( i, 1 ) ], F[ foldovers( i, 0 ), (foldovers( i, 1 ) + 1) % 3 ]
  1508. // and the other side is the edge:
  1509. // F[ foldovers( i, 2 ), foldovers( i, 3 ) ], F[ foldovers( i, 2 ), (foldovers( i, 3 ) + 1) % 3 ])igl_Qu8mg5v7";