py_doc.cpp 55 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183
  1. const char *__doc_igl_active_set = R"igl_Qu8mg5v7(// Known Bugs: rows of [Aeq;Aieq] **must** be linearly independent. Should be
  2. // using QR decomposition otherwise:
  3. // http://www.okstate.edu/sas/v8/sashtml/ormp/chap5/sect32.htm
  4. //
  5. // ACTIVE_SET Minimize quadratic energy
  6. //
  7. // 0.5*Z'*A*Z + Z'*B + C with constraints
  8. //
  9. // that Z(known) = Y, optionally also subject to the constraints Aeq*Z = Beq,
  10. // and further optionally subject to the linear inequality constraints that
  11. // Aieq*Z <= Bieq and constant inequality constraints lx <= x <= ux
  12. //
  13. // Inputs:
  14. // A n by n matrix of quadratic coefficients
  15. // B n by 1 column of linear coefficients
  16. // known list of indices to known rows in Z
  17. // Y list of fixed values corresponding to known rows in Z
  18. // Aeq meq by n list of linear equality constraint coefficients
  19. // Beq meq by 1 list of linear equality constraint constant values
  20. // Aieq mieq by n list of linear inequality constraint coefficients
  21. // Bieq mieq by 1 list of linear inequality constraint constant values
  22. // lx n by 1 list of lower bounds [] implies -Inf
  23. // ux n by 1 list of upper bounds [] implies Inf
  24. // params struct of additional parameters (see below)
  25. // Z if not empty, is taken to be an n by 1 list of initial guess values
  26. // (see output)
  27. // Outputs:
  28. // Z n by 1 list of solution values
  29. // Returns true on success, false on error
  30. //
  31. // Benchmark: For a harmonic solve on a mesh with 325K facets, matlab 2.2
  32. // secs, igl/min_quad_with_fixed.h 7.1 secs
  33. //)igl_Qu8mg5v7";
  34. const char *__doc_igl_arap_precomputation = R"igl_Qu8mg5v7(// Compute necessary information to start using an ARAP deformation
  35. //
  36. // Inputs:
  37. // V #V by dim list of mesh positions
  38. // F #F by simplex-size list of triangle|tet indices into V
  39. // dim dimension being used at solve time. For deformation usually dim =
  40. // V.cols(), for surface parameterization V.cols() = 3 and dim = 2
  41. // b #b list of "boundary" fixed vertex indices into V
  42. // Outputs:
  43. // data struct containing necessary precomputation)igl_Qu8mg5v7";
  44. const char *__doc_igl_arap_solve = R"igl_Qu8mg5v7(// Inputs:
  45. // bc #b by dim list of boundary conditions
  46. // data struct containing necessary precomputation and parameters
  47. // U #V by dim initial guess)igl_Qu8mg5v7";
  48. const char *__doc_igl_avg_edge_length = R"igl_Qu8mg5v7(// Compute the average edge length for the given triangle mesh
  49. // Templates:
  50. // DerivedV derived from vertex positions matrix type: i.e. MatrixXd
  51. // DerivedF derived from face indices matrix type: i.e. MatrixXi
  52. // DerivedL derived from edge lengths matrix type: i.e. MatrixXd
  53. // Inputs:
  54. // V eigen matrix #V by 3
  55. // F #F by simplex-size list of mesh faces (must be simplex)
  56. // Outputs:
  57. // l average edge length
  58. //
  59. // See also: adjacency_matrix)igl_Qu8mg5v7";
  60. const char *__doc_igl_barycenter = R"igl_Qu8mg5v7(// Computes the barycenter of every simplex
  61. //
  62. // Inputs:
  63. // V #V x dim matrix of vertex coordinates
  64. // F #F x simplex_size matrix of indices of simplex corners into V
  65. // Output:
  66. // BC #F x dim matrix of 3d vertices
  67. //)igl_Qu8mg5v7";
  68. const char *__doc_igl_barycentric_coordinates = R"igl_Qu8mg5v7(// Compute barycentric coordinates in a tet
  69. //
  70. // Inputs:
  71. // P #P by 3 Query points in 3d
  72. // A #P by 3 Tet corners in 3d
  73. // B #P by 3 Tet corners in 3d
  74. // C #P by 3 Tet corners in 3d
  75. // D #P by 3 Tet corners in 3d
  76. // Outputs:
  77. // L #P by 4 list of barycentric coordinates
  78. // )igl_Qu8mg5v7";
  79. const char *__doc_igl_boundary_facets = R"igl_Qu8mg5v7(// BOUNDARY_FACETS Determine boundary faces (edges) of tetrahedra (triangles)
  80. // stored in T (analogous to qptoolbox's `outline` and `boundary_faces`).
  81. //
  82. // Templates:
  83. // IntegerT integer-value: e.g. int
  84. // IntegerF integer-value: e.g. int
  85. // Input:
  86. // T tetrahedron (triangle) index list, m by 4 (3), where m is the number of tetrahedra
  87. // Output:
  88. // F list of boundary faces, n by 3 (2), where n is the number of boundary faces
  89. //
  90. //)igl_Qu8mg5v7";
  91. const char *__doc_igl_boundary_loop = R"igl_Qu8mg5v7(// Compute list of ordered boundary loops for a manifold mesh.
  92. //
  93. // Templates:
  94. // Index index type
  95. // Inputs:
  96. // F #V by dim list of mesh faces
  97. // Outputs:
  98. // L list of loops where L[i] = ordered list of boundary vertices in loop i
  99. //)igl_Qu8mg5v7";
  100. const char *__doc_igl_cat = R"igl_Qu8mg5v7(// Perform concatenation of a two matrices along a single dimension
  101. // If dim == 1, then C = [A;B]. If dim == 2 then C = [A B]
  102. //
  103. // Template:
  104. // Scalar scalar data type for sparse matrices like double or int
  105. // Mat matrix type for all matrices (e.g. MatrixXd, SparseMatrix)
  106. // MatC matrix type for ouput matrix (e.g. MatrixXd) needs to support
  107. // resize
  108. // Inputs:
  109. // A first input matrix
  110. // B second input matrix
  111. // dim dimension along which to concatenate, 0 or 1
  112. // Outputs:
  113. // C output matrix
  114. // )igl_Qu8mg5v7";
  115. const char *__doc_igl_collapse_edge = R"igl_Qu8mg5v7(See collapse_edge for the documentation.)igl_Qu8mg5v7";
  116. const char *__doc_igl_colon = R"igl_Qu8mg5v7(// Colon operator like matlab's colon operator. Enumerats values between low
  117. // and hi with step step.
  118. // Templates:
  119. // L should be a eigen matrix primitive type like int or double
  120. // S should be a eigen matrix primitive type like int or double
  121. // H should be a eigen matrix primitive type like int or double
  122. // T should be a eigen matrix primitive type like int or double
  123. // Inputs:
  124. // low starting value if step is valid then this is *always* the first
  125. // element of I
  126. // step step difference between sequential elements returned in I,
  127. // remember this will be cast to template T at compile time. If low<hi
  128. // then step must be positive. If low>hi then step must be negative.
  129. // Otherwise I will be set to empty.
  130. // hi ending value, if (hi-low)%step is zero then this will be the last
  131. // element in I. If step is positive there will be no elements greater
  132. // than hi, vice versa if hi<low
  133. // Output:
  134. // I list of values from low to hi with step size step)igl_Qu8mg5v7";
  135. const char *__doc_igl_comb_cross_field = R"igl_Qu8mg5v7(// Inputs:
  136. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  137. // F #F by 4 eigen Matrix of face (quad) indices
  138. // PD1in #F by 3 eigen Matrix of the first per face cross field vector
  139. // PD2in #F by 3 eigen Matrix of the second per face cross field vector
  140. // Output:
  141. // PD1out #F by 3 eigen Matrix of the first combed cross field vector
  142. // PD2out #F by 3 eigen Matrix of the second combed cross field vector
  143. //)igl_Qu8mg5v7";
  144. const char *__doc_igl_comb_frame_field = R"igl_Qu8mg5v7(// Inputs:
  145. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  146. // F #F by 4 eigen Matrix of face (quad) indices
  147. // PD1 #F by 3 eigen Matrix of the first per face cross field vector
  148. // PD2 #F by 3 eigen Matrix of the second per face cross field vector
  149. // BIS1_combed #F by 3 eigen Matrix of the first combed bisector field vector
  150. // BIS2_combed #F by 3 eigen Matrix of the second combed bisector field vector
  151. // Output:
  152. // PD1_combed #F by 3 eigen Matrix of the first combed cross field vector
  153. // PD2_combed #F by 3 eigen Matrix of the second combed cross field vector
  154. //)igl_Qu8mg5v7";
  155. const char *__doc_igl_compute_frame_field_bisectors = R"igl_Qu8mg5v7(// Compute bisectors of a frame field defined on mesh faces
  156. // Inputs:
  157. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  158. // F #F by 3 eigen Matrix of face (triangle) indices
  159. // B1 #F by 3 eigen Matrix of face (triangle) base vector 1
  160. // B2 #F by 3 eigen Matrix of face (triangle) base vector 2
  161. // PD1 #F by 3 eigen Matrix of the first per face frame field vector
  162. // PD2 #F by 3 eigen Matrix of the second per face frame field vector
  163. // Output:
  164. // BIS1 #F by 3 eigen Matrix of the first per face frame field bisector
  165. // BIS2 #F by 3 eigen Matrix of the second per face frame field bisector
  166. //)igl_Qu8mg5v7";
  167. const char *__doc_igl_copyleft_cgal_mesh_boolean = R"igl_Qu8mg5v7(// MESH_BOOLEAN Compute boolean csg operations on "solid", consistently
  168. // oriented meshes.
  169. //
  170. // Inputs:
  171. // VA #VA by 3 list of vertex positions of first mesh
  172. // FA #FA by 3 list of triangle indices into VA
  173. // VB #VB by 3 list of vertex positions of second mesh
  174. // FB #FB by 3 list of triangle indices into VB
  175. // type type of boolean operation
  176. // Outputs:
  177. // VC #VC by 3 list of vertex positions of boolean result mesh
  178. // FC #FC by 3 list of triangle indices into VC
  179. // J #FC list of indices into [FA;FA.rows()+FB] revealing "birth" facet
  180. // Returns true if inputs induce a piecewise constant winding number
  181. // field and type is valid
  182. //
  183. // See also: mesh_boolean_cork, intersect_other,
  184. // remesh_self_intersections)igl_Qu8mg5v7";
  185. 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
  186. // as (V,F) except that any self-intersecting triangles in (V,F) have been
  187. // subdivided (new vertices and face created) so that the self-intersection
  188. // contour lies exactly on edges in (VV,FF). New vertices will appear in
  189. // original faces or on original edges. New vertices on edges are "merged"
  190. // only across original faces sharing that edge. This means that if the input
  191. // triangle mesh is a closed manifold the output will be too.
  192. //
  193. // Inputs:
  194. // V #V by 3 list of vertex positions
  195. // F #F by 3 list of triangle indices into V
  196. // params struct of optional parameters
  197. // Outputs:
  198. // VV #VV by 3 list of vertex positions
  199. // FF #FF by 3 list of triangle indices into VV
  200. // IF #intersecting face pairs by 2 list of intersecting face pairs,
  201. // indexing F
  202. // J #FF list of indices into F denoting birth triangle
  203. // IM #VV list of indices into VV of unique vertices.
  204. //
  205. // Known bugs: If an existing edge in (V,F) lies exactly on another face then
  206. // any resulting additional vertices along that edge may not get properly
  207. // connected so that the output mesh has the same global topology. This is
  208. // because
  209. //
  210. // Example:
  211. // // resolve intersections
  212. // igl::copyleft::cgal::remesh_self_intersections(V,F,params,VV,FF,IF,J,IM);
  213. // // _apply_ duplicate vertex mapping IM to FF
  214. // for_each(FF.data(),FF.data()+FF.size(),[&IM](int & a){a=IM(a);});
  215. // // remove any vertices now unreferenced after duplicate mapping.
  216. // igl::remove_unreferenced(VV,FF,SV,SF,UIM);
  217. // // Now (SV,SF) is ready to extract outer hull
  218. // igl::copyleft::cgal::outer_hull(SV,SF,G,J,flip);igl_Qu8mg5v7";
  219. const char *__doc_igl_copyleft_comiso_miq = R"igl_Qu8mg5v7(// Inputs:
  220. // V #V by 3 list of mesh vertex 3D positions
  221. // F #F by 3 list of faces indices in V
  222. // PD1 #V by 3 first line of the Jacobian per triangle
  223. // PD2 #V by 3 second line of the Jacobian per triangle
  224. // (optional, if empty it will be a vector in the tangent plane orthogonal to PD1)
  225. // scale global scaling for the gradient (controls the quads resolution)
  226. // stiffness weight for the stiffness iterations
  227. // direct_round greedily round all integer variables at once (greatly improves optimization speed but lowers quality)
  228. // iter stiffness iterations (0 = no stiffness)
  229. // local_iter number of local iterations for the integer rounding
  230. // do_round enables the integer rounding (disabling it could be useful for debugging)
  231. // round_vertices id of additional vertices that should be snapped to integer coordinates
  232. // hard_features #H by 2 list of pairs of vertices that belongs to edges that should be snapped to integer coordinates
  233. //
  234. // Output:
  235. // UV #UV by 2 list of vertices in 2D
  236. // FUV #FUV by 3 list of face indices in UV
  237. //
  238. // TODO: rename the parameters name in the cpp consistenly
  239. // improve the handling of hard_features, right now it might fail in difficult cases)igl_Qu8mg5v7";
  240. const char *__doc_igl_copyleft_comiso_nrosy = R"igl_Qu8mg5v7(// Generate a N-RoSy field from a sparse set of constraints
  241. //
  242. // Inputs:
  243. // V #V by 3 list of mesh vertex coordinates
  244. // F #F by 3 list of mesh faces (must be triangles)
  245. // b #B by 1 list of constrained face indices
  246. // bc #B by 3 list of representative vectors for the constrained
  247. // faces
  248. // b_soft #S by 1 b for soft constraints
  249. // w_soft #S by 1 weight for the soft constraints (0-1)
  250. // bc_soft #S by 3 bc for soft constraints
  251. // N the degree of the N-RoSy vector field
  252. // soft the strenght of the soft contraints w.r.t. smoothness
  253. // (0 -> smoothness only, 1->constraints only)
  254. // Outputs:
  255. // R #F by 3 the representative vectors of the interpolated field
  256. // S #V by 1 the singularity index for each vertex (0 = regular))igl_Qu8mg5v7";
  257. const char *__doc_igl_copyleft_marching_cubes = R"igl_Qu8mg5v7(// marching_cubes( values, points, x_res, y_res, z_res, vertices, faces )
  258. //
  259. // performs marching cubes reconstruction on the grid defined by values, and
  260. // points, and generates vertices and faces
  261. //
  262. // Input:
  263. // values #number_of_grid_points x 1 array -- the scalar values of an
  264. // implicit function defined on the grid points (<0 in the inside of the
  265. // surface, 0 on the border, >0 outside)
  266. // points #number_of_grid_points x 3 array -- 3-D positions of the grid
  267. // points, ordered in x,y,z order:
  268. // points[index] = the point at (x,y,z) where :
  269. // x = (index % (xres -1),
  270. // y = (index / (xres-1)) %(yres-1),
  271. // z = index / (xres -1) / (yres -1) ).
  272. // where x,y,z index x, y, z dimensions
  273. // i.e. index = x + y*xres + z*xres*yres
  274. // xres resolutions of the grid in x dimension
  275. // yres resolutions of the grid in y dimension
  276. // zres resolutions of the grid in z dimension
  277. // Output:
  278. // vertices #V by 3 list of mesh vertex positions
  279. // faces #F by 3 list of mesh triangle indices
  280. //)igl_Qu8mg5v7";
  281. const char *__doc_igl_copyleft_swept_volume = R"igl_Qu8mg5v7(// Compute the surface of the swept volume of a solid object with surface
  282. // (V,F) mesh under going rigid motion.
  283. //
  284. // Inputs:
  285. // V #V by 3 list of mesh positions in reference pose
  286. // F #F by 3 list of mesh indices into V
  287. // transform function handle so that transform(t) returns the rigid
  288. // transformation at time t∈[0,1]
  289. // steps number of time steps: steps=3 --> t∈{0,0.5,1}
  290. // grid_res number of grid cells on the longest side containing the
  291. // motion (isolevel+1 cells will also be added on each side as padding)
  292. // isolevel distance level to be contoured as swept volume
  293. // Outputs:
  294. // SV #SV by 3 list of mesh positions of the swept surface
  295. // SF #SF by 3 list of mesh faces into SV)igl_Qu8mg5v7";
  296. const char *__doc_igl_copyleft_tetgen_tetrahedralize = R"igl_Qu8mg5v7(// Mesh the interior of a surface mesh (V,F) using tetgen
  297. //
  298. // Inputs:
  299. // V #V by 3 vertex position list
  300. // F #F list of polygon face indices into V (0-indexed)
  301. // switches string of tetgen options (See tetgen documentation) e.g.
  302. // "pq1.414a0.01" tries to mesh the interior of a given surface with
  303. // quality and area constraints
  304. // "" will mesh the convex hull constrained to pass through V (ignores F)
  305. // Outputs:
  306. // TV #V by 3 vertex position list
  307. // TT #T by 4 list of tet face indices
  308. // TF #F by 3 list of triangle face indices
  309. // Returns status:
  310. // 0 success
  311. // 1 tetgen threw exception
  312. // 2 tetgen did not crash but could not create any tets (probably there are
  313. // holes, duplicate faces etc.)
  314. // -1 other error)igl_Qu8mg5v7";
  315. const char *__doc_igl_cotmatrix = R"igl_Qu8mg5v7(// Constructs the cotangent stiffness matrix (discrete laplacian) for a given
  316. // mesh (V,F).
  317. //
  318. // Templates:
  319. // DerivedV derived type of eigen matrix for V (e.g. derived from
  320. // MatrixXd)
  321. // DerivedF derived type of eigen matrix for F (e.g. derived from
  322. // MatrixXi)
  323. // Scalar scalar type for eigen sparse matrix (e.g. double)
  324. // Inputs:
  325. // V #V by dim list of mesh vertex positions
  326. // F #F by simplex_size list of mesh faces (must be triangles)
  327. // Outputs:
  328. // L #V by #V cotangent matrix, each row i corresponding to V(i,:)
  329. //
  330. // See also: adjacency_matrix
  331. //
  332. // Note: This Laplacian uses the convention that diagonal entries are
  333. // **minus** the sum of off-diagonal entries. The diagonal entries are
  334. // therefore in general negative and the matrix is **negative** semi-definite
  335. // (immediately, -L is **positive** semi-definite)
  336. //
  337. // Known bugs: off by 1e-16 on regular grid. I think its a problem of
  338. // arithmetic order in cotmatrix_entries.h: C(i,e) = (arithmetic)/dblA/4)igl_Qu8mg5v7";
  339. const char *__doc_igl_covariance_scatter_matrix = R"igl_Qu8mg5v7(// Construct the covariance scatter matrix for a given arap energy
  340. // Inputs:
  341. // V #V by Vdim list of initial domain positions
  342. // F #F by 3 list of triangle indices into V
  343. // energy ARAPEnergyType enum value defining which energy is being used.
  344. // See ARAPEnergyType.h for valid options and explanations.
  345. // Outputs:
  346. // CSM dim*#V/#F by dim*#V sparse matrix containing special laplacians along
  347. // the diagonal so that when multiplied by V gives covariance matrix
  348. // elements, can be used to speed up covariance matrix computation)igl_Qu8mg5v7";
  349. const char *__doc_igl_cross_field_missmatch = R"igl_Qu8mg5v7(// Inputs:
  350. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  351. // F #F by 3 eigen Matrix of face (quad) indices
  352. // PD1 #F by 3 eigen Matrix of the first per face cross field vector
  353. // PD2 #F by 3 eigen Matrix of the second per face cross field vector
  354. // isCombed boolean, specifying whether the field is combed (i.e. matching has been precomputed.
  355. // If not, the field is combed first.
  356. // Output:
  357. // Handle_MMatch #F by 3 eigen Matrix containing the integer missmatch of the cross field
  358. // across all face edges
  359. //)igl_Qu8mg5v7";
  360. 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
  361. // (MMatch), finds the cut_graph connecting the singularities (seams) and the
  362. // degree of the singularities singularity_index
  363. //
  364. // Input:
  365. // V #V by 3 list of mesh vertex positions
  366. // F #F by 3 list of faces
  367. // MMatch #F by 3 list of per corner integer mismatch
  368. // Outputs:
  369. // seams #F by 3 list of per corner booleans that denotes if an edge is a
  370. // seam or not
  371. //)igl_Qu8mg5v7";
  372. const char *__doc_igl_doublearea = R"igl_Qu8mg5v7(// DOUBLEAREA computes twice the area for each input triangle[quad]
  373. //
  374. // Templates:
  375. // DerivedV derived type of eigen matrix for V (e.g. derived from
  376. // MatrixXd)
  377. // DerivedF derived type of eigen matrix for F (e.g. derived from
  378. // MatrixXi)
  379. // DeriveddblA derived type of eigen matrix for dblA (e.g. derived from
  380. // MatrixXd)
  381. // Inputs:
  382. // V #V by dim list of mesh vertex positions
  383. // F #F by simplex_size list of mesh faces (must be triangles or quads)
  384. // Outputs:
  385. // dblA #F list of triangle[quad] double areas (SIGNED only for 2D input)
  386. //
  387. // Known bug: For dim==3 complexity is O(#V + #F)!! Not just O(#F). This is a big deal
  388. // if you have 1million unreferenced vertices and 1 face)igl_Qu8mg5v7";
  389. const char *__doc_igl_doublearea_single = R"igl_Qu8mg5v7(// Single triangle in 2D!
  390. //
  391. // This should handle streams of corners not just single corners)igl_Qu8mg5v7";
  392. const char *__doc_igl_doublearea_quad = R"igl_Qu8mg5v7(// DOUBLEAREA_QUAD computes twice the area for each input quadrilateral
  393. //
  394. // Inputs:
  395. // V #V by dim list of mesh vertex positions
  396. // F #F by simplex_size list of mesh faces (must be quadrilaterals)
  397. // Outputs:
  398. // dblA #F list of quadrilateral double areas
  399. //)igl_Qu8mg5v7";
  400. const char *__doc_igl_edge_lengths = R"igl_Qu8mg5v7(// Constructs a list of lengths of edges opposite each index in a face
  401. // (triangle/tet) list
  402. //
  403. // Templates:
  404. // DerivedV derived from vertex positions matrix type: i.e. MatrixXd
  405. // DerivedF derived from face indices matrix type: i.e. MatrixXi
  406. // DerivedL derived from edge lengths matrix type: i.e. MatrixXd
  407. // Inputs:
  408. // V eigen matrix #V by 3
  409. // F #F by 2 list of mesh edges
  410. // or
  411. // F #F by 3 list of mesh faces (must be triangles)
  412. // or
  413. // T #T by 4 list of mesh elements (must be tets)
  414. // Outputs:
  415. // L #F by {1|3|6} list of edge lengths
  416. // for edges, column of lengths
  417. // for triangles, columns correspond to edges [1,2],[2,0],[0,1]
  418. // for tets, columns correspond to edges
  419. // [3 0],[3 1],[3 2],[1 2],[2 0],[0 1]
  420. //)igl_Qu8mg5v7";
  421. const char *__doc_igl_edge_topology = R"igl_Qu8mg5v7(// Initialize Edges and their topological relations
  422. //
  423. // Output:
  424. // EV : #Ex2, Stores the edge description as pair of indices to vertices
  425. // FE : #Fx3, Stores the Triangle-Edge relation
  426. // EF : #Ex2: Stores the Edge-Triangle relation
  427. //)igl_Qu8mg5v7";
  428. const char *__doc_igl_eigs = R"igl_Qu8mg5v7(See eigs for the documentation.)igl_Qu8mg5v7";
  429. const char *__doc_igl_embree_ambient_occlusion = R"igl_Qu8mg5v7(// Compute ambient occlusion per given point
  430. //
  431. // Inputs:
  432. // ei EmbreeIntersector containing (V,F)
  433. // P #P by 3 list of origin points
  434. // N #P by 3 list of origin normals
  435. // Outputs:
  436. // S #P list of ambient occlusion values between 1 (fully occluded) and
  437. // 0 (not occluded)
  438. //)igl_Qu8mg5v7";
  439. const char *__doc_igl_embree_reorient_facets_raycast = R"igl_Qu8mg5v7(// Orient each component (identified by C) of a mesh (V,F) using ambient
  440. // occlusion such that the front side is less occluded than back side, as
  441. // described in "A Simple Method for Correcting Facet Orientations in
  442. // Polygon Meshes Based on Ray Casting" [Takayama et al. 2014].
  443. //
  444. // Inputs:
  445. // V #V by 3 list of vertex positions
  446. // F #F by 3 list of triangle indices
  447. // rays_total Total number of rays that will be shot
  448. // rays_minimum Minimum number of rays that each patch should receive
  449. // facet_wise Decision made for each face independently, no use of patches
  450. // (i.e., each face is treated as a patch)
  451. // use_parity Use parity mode
  452. // is_verbose Verbose output to cout
  453. // Outputs:
  454. // I #F list of whether face has been flipped
  455. // C #F list of patch ID (output of bfs_orient > manifold patches))igl_Qu8mg5v7";
  456. const char *__doc_igl_find_cross_field_singularities = R"igl_Qu8mg5v7(// Inputs:
  457. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  458. // F #F by 3 eigen Matrix of face (quad) indices
  459. // Handle_MMatch #F by 3 eigen Matrix containing the integer missmatch of the cross field
  460. // across all face edges
  461. // Output:
  462. // isSingularity #V by 1 boolean eigen Vector indicating the presence of a singularity on a vertex
  463. // singularityIndex #V by 1 integer eigen Vector containing the singularity indices
  464. //)igl_Qu8mg5v7";
  465. const char *__doc_igl_fit_rotations = R"igl_Qu8mg5v7(// Known issues: This seems to be implemented in Eigen/Geometry:
  466. // Eigen::umeyama
  467. //
  468. // FIT_ROTATIONS Given an input mesh and new positions find rotations for
  469. // every covariance matrix in a stack of covariance matrices
  470. //
  471. // Inputs:
  472. // S nr*dim by dim stack of covariance matrices
  473. // single_precision whether to use single precision (faster)
  474. // Outputs:
  475. // R dim by dim * nr list of rotations
  476. //)igl_Qu8mg5v7";
  477. const char *__doc_igl_fit_rotations_planar = R"igl_Qu8mg5v7(// FIT_ROTATIONS Given an input mesh and new positions find 2D rotations for
  478. // every vertex that best maps its one ring to the new one ring
  479. //
  480. // Inputs:
  481. // S nr*dim by dim stack of covariance matrices, third column and every
  482. // third row will be ignored
  483. // Outputs:
  484. // R dim by dim * nr list of rotations, third row and third column of each
  485. // rotation will just be identity
  486. //)igl_Qu8mg5v7";
  487. const char *__doc_igl_fit_rotations_SSE = R"igl_Qu8mg5v7(See fit_rotations_SSE for the documentation.)igl_Qu8mg5v7";
  488. const char *__doc_igl_floor = R"igl_Qu8mg5v7(// Floor a given matrix to nearest integers
  489. //
  490. // Inputs:
  491. // X m by n matrix of scalars
  492. // Outputs:
  493. // Y m by n matrix of floored integers)igl_Qu8mg5v7";
  494. const char *__doc_igl_gaussian_curvature = R"igl_Qu8mg5v7(// Compute discrete local integral gaussian curvature (angle deficit, without
  495. // averaging by local area).
  496. //
  497. // Inputs:
  498. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  499. // F #F by 3 eigen Matrix of face (triangle) indices
  500. // Output:
  501. // K #V by 1 eigen Matrix of discrete gaussian curvature values
  502. //)igl_Qu8mg5v7";
  503. const char *__doc_igl_get_seconds = R"igl_Qu8mg5v7(// Return the current time in seconds since program start
  504. //
  505. // Example:
  506. // const auto & tictoc = []()
  507. // {
  508. // static double t_start = igl::get_seconds();
  509. // double diff = igl::get_seconds()-t_start;
  510. // t_start += diff;
  511. // return diff;
  512. // };
  513. // tictoc();
  514. // ... // part 1
  515. // cout<<"part 1: "<<tictoc()<<endl;
  516. // ... // part 2
  517. // cout<<"part 2: "<<tictoc()<<endl;
  518. // ... // etc)igl_Qu8mg5v7";
  519. const char *__doc_igl_grad = R"igl_Qu8mg5v7(// Gradient of a scalar function defined on piecewise linear elements (mesh)
  520. // is constant on each triangle i,j,k:
  521. // grad(Xijk) = (Xj-Xi) * (Vi - Vk)^R90 / 2A + (Xk-Xi) * (Vj - Vi)^R90 / 2A
  522. // where Xi is the scalar value at vertex i, Vi is the 3D position of vertex
  523. // i, and A is the area of triangle (i,j,k). ^R90 represent a rotation of
  524. // 90 degrees
  525. //)igl_Qu8mg5v7";
  526. const char *__doc_igl_harmonic = R"igl_Qu8mg5v7(// Compute k-harmonic weight functions "coordinates".
  527. //
  528. //
  529. // Inputs:
  530. // V #V by dim vertex positions
  531. // F #F by simplex-size list of element indices
  532. // b #b boundary indices into V
  533. // bc #b by #W list of boundary values
  534. // k power of harmonic operation (1: harmonic, 2: biharmonic, etc)
  535. // Outputs:
  536. // W #V by #W list of weights
  537. //)igl_Qu8mg5v7";
  538. const char *__doc_igl_hsv_to_rgb = R"igl_Qu8mg5v7(// Convert RGB to HSV
  539. //
  540. // Inputs:
  541. // h hue value (degrees: [0,360])
  542. // s saturation value ([0,1])
  543. // v value value ([0,1])
  544. // Outputs:
  545. // r red value ([0,1])
  546. // g green value ([0,1])
  547. // b blue value ([0,1]))igl_Qu8mg5v7";
  548. const char *__doc_igl_internal_angles = R"igl_Qu8mg5v7(// Compute internal angles for a triangle mesh
  549. //
  550. // Inputs:
  551. // V #V by dim eigen Matrix of mesh vertex nD positions
  552. // F #F by poly-size eigen Matrix of face (triangle) indices
  553. // Output:
  554. // K #F by poly-size eigen Matrix of internal angles
  555. // for triangles, columns correspond to edges [1,2],[2,0],[0,1]
  556. //
  557. // Known Issues:
  558. // if poly-size ≠ 3 then dim must equal 3.)igl_Qu8mg5v7";
  559. const char *__doc_igl_invert_diag = R"igl_Qu8mg5v7(// Templates:
  560. // T should be a eigen sparse matrix primitive type like int or double
  561. // Inputs:
  562. // X an m by n sparse matrix
  563. // Outputs:
  564. // Y an m by n sparse matrix)igl_Qu8mg5v7";
  565. const char *__doc_igl_is_irregular_vertex = R"igl_Qu8mg5v7(// Determine if a vertex is irregular, i.e. it has more than 6 (triangles)
  566. // or 4 (quads) incident edges. Vertices on the boundary are ignored.
  567. //
  568. // Inputs:
  569. // V #V by dim list of vertex positions
  570. // F #F by 3[4] list of triangle[quads] indices
  571. // Returns #V vector of bools revealing whether vertices are singular
  572. //)igl_Qu8mg5v7";
  573. const char *__doc_igl_jet = R"igl_Qu8mg5v7(// JET like MATLAB's jet
  574. //
  575. // Inputs:
  576. // m number of colors
  577. // Outputs:
  578. // J m by list of RGB colors between 0 and 1
  579. //
  580. //#ifndef IGL_NO_EIGEN
  581. // void jet(const int m, Eigen::MatrixXd & J);
  582. //#endif
  583. // Wrapper for directly computing [r,g,b] values for a given factor f between
  584. // 0 and 1
  585. //
  586. // Inputs:
  587. // f factor determining color value as if 0 was min and 1 was max
  588. // Outputs:
  589. // r red value
  590. // g green value
  591. // b blue value)igl_Qu8mg5v7";
  592. const char *__doc_igl_local_basis = R"igl_Qu8mg5v7(// Compute a local orthogonal reference system for each triangle in the given mesh
  593. // Templates:
  594. // DerivedV derived from vertex positions matrix type: i.e. MatrixXd
  595. // DerivedF derived from face indices matrix type: i.e. MatrixXi
  596. // Inputs:
  597. // V eigen matrix #V by 3
  598. // F #F by 3 list of mesh faces (must be triangles)
  599. // Outputs:
  600. // B1 eigen matrix #F by 3, each vector is tangent to the triangle
  601. // B2 eigen matrix #F by 3, each vector is tangent to the triangle and perpendicular to B1
  602. // B3 eigen matrix #F by 3, normal of the triangle
  603. //
  604. // See also: adjacency_matrix)igl_Qu8mg5v7";
  605. const char *__doc_igl_lscm = R"igl_Qu8mg5v7(// Compute a Least-squares conformal map parametrization (equivalently
  606. // derived in "Intrinsic Parameterizations of Surface Meshes" [Desbrun et al.
  607. // 2002] and "Least Squares Conformal Maps for Automatic Texture Atlas
  608. // Generation" [Lévy et al. 2002]), though this implementation follows the
  609. // derivation in: "Spectral Conformal Parameterization" [Mullen et al. 2008]
  610. // (note, this does **not** implement the Eigen-decomposition based method in
  611. // [Mullen et al. 2008], which is not equivalent). Input should be a manifold
  612. // mesh (also no unreferenced vertices) and "boundary" (fixed vertices) `b`
  613. // should contain at least two vertices per connected component.
  614. //
  615. // Inputs:
  616. // V #V by 3 list of mesh vertex positions
  617. // F #F by 3 list of mesh faces (must be triangles)
  618. // b #b boundary indices into V
  619. // bc #b by 3 list of boundary values
  620. // Outputs:
  621. // UV #V by 2 list of 2D mesh vertex positions in UV space
  622. // Returns true only on solver success.
  623. //)igl_Qu8mg5v7";
  624. 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
  625. // unit circle with spacing proportional to the original boundary edge
  626. // lengths.
  627. //
  628. // Inputs:
  629. // V #V by dim list of mesh vertex positions
  630. // b #W list of vertex ids
  631. // Outputs:
  632. // UV #W by 2 list of 2D position on the unit circle for the vertices in b)igl_Qu8mg5v7";
  633. const char *__doc_igl_massmatrix = R"igl_Qu8mg5v7(// Constructs the mass (area) matrix for a given mesh (V,F).
  634. //
  635. // Templates:
  636. // DerivedV derived type of eigen matrix for V (e.g. derived from
  637. // MatrixXd)
  638. // DerivedF derived type of eigen matrix for F (e.g. derived from
  639. // MatrixXi)
  640. // Scalar scalar type for eigen sparse matrix (e.g. double)
  641. // Inputs:
  642. // V #V by dim list of mesh vertex positions
  643. // F #F by simplex_size list of mesh faces (must be triangles)
  644. // type one of the following ints:
  645. // MASSMATRIX_TYPE_BARYCENTRIC barycentric
  646. // MASSMATRIX_TYPE_VORONOI voronoi-hybrid {default}
  647. // MASSMATRIX_TYPE_FULL full {not implemented}
  648. // Outputs:
  649. // M #V by #V mass matrix
  650. //
  651. // See also: adjacency_matrix
  652. //)igl_Qu8mg5v7";
  653. const char *__doc_igl_min_quad_with_fixed_precompute = R"igl_Qu8mg5v7(// Known Bugs: rows of Aeq **should probably** be linearly independent.
  654. // During precomputation, the rows of a Aeq are checked via QR. But in case
  655. // they're not then resulting probably will no longer be sparse: it will be
  656. // slow.
  657. //
  658. // MIN_QUAD_WITH_FIXED Minimize quadratic energy
  659. //
  660. // 0.5*Z'*A*Z + Z'*B + C with
  661. //
  662. // constraints that Z(known) = Y, optionally also subject to the constraints
  663. // Aeq*Z = Beq
  664. //
  665. // Templates:
  666. // T should be a eigen matrix primitive type like int or double
  667. // Inputs:
  668. // A n by n matrix of quadratic coefficients
  669. // known list of indices to known rows in Z
  670. // Y list of fixed values corresponding to known rows in Z
  671. // Aeq m by n list of linear equality constraint coefficients
  672. // pd flag specifying whether A(unknown,unknown) is positive definite
  673. // Outputs:
  674. // data factorization struct with all necessary information to solve
  675. // using min_quad_with_fixed_solve
  676. // Returns true on success, false on error
  677. //
  678. // Benchmark: For a harmonic solve on a mesh with 325K facets, matlab 2.2
  679. // secs, igl/min_quad_with_fixed.h 7.1 secs
  680. //)igl_Qu8mg5v7";
  681. const char *__doc_igl_min_quad_with_fixed_solve = R"igl_Qu8mg5v7(// Solves a system previously factored using min_quad_with_fixed_precompute
  682. //
  683. // Template:
  684. // T type of sparse matrix (e.g. double)
  685. // DerivedY type of Y (e.g. derived from VectorXd or MatrixXd)
  686. // DerivedZ type of Z (e.g. derived from VectorXd or MatrixXd)
  687. // Inputs:
  688. // data factorization struct with all necessary precomputation to solve
  689. // B n by 1 column of linear coefficients
  690. // Y b by 1 list of constant fixed values
  691. // Beq m by 1 list of linear equality constraint constant values
  692. // Outputs:
  693. // Z n by cols solution
  694. // sol #unknowns+#lagrange by cols solution to linear system
  695. // Returns true on success, false on error)igl_Qu8mg5v7";
  696. const char *__doc_igl_min_quad_with_fixed = R"igl_Qu8mg5v7(See min_quad_with_fixed for the documentation.)igl_Qu8mg5v7";
  697. const char *__doc_igl_n_polyvector = R"igl_Qu8mg5v7(// Inputs:
  698. // v0, v1 the two #3 by 1 vectors
  699. // normalized boolean, if false, then the vectors are normalized prior to the calculation
  700. // Output:
  701. // 3 by 3 rotation matrix that takes v0 to v1
  702. //)igl_Qu8mg5v7";
  703. const char *__doc_igl_parula = R"igl_Qu8mg5v7(// PARULA like MATLAB's parula
  704. //
  705. // Inputs:
  706. // m number of colors
  707. // Outputs:
  708. // J m by list of RGB colors between 0 and 1
  709. //
  710. // Wrapper for directly computing [r,g,b] values for a given factor f between
  711. // 0 and 1
  712. //
  713. // Inputs:
  714. // f factor determining color value as if 0 was min and 1 was max
  715. // Outputs:
  716. // r red value
  717. // g green value
  718. // b blue value)igl_Qu8mg5v7";
  719. const char *__doc_igl_per_corner_normals = R"igl_Qu8mg5v7(// Compute vertex normals via vertex position list, face list
  720. // Inputs:
  721. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  722. // F #F by 3 eigne Matrix of face (triangle) indices
  723. // corner_threshold threshold in degrees on sharp angles
  724. // Output:
  725. // CN #F*3 by 3 eigen Matrix of mesh vertex 3D normals, where the normal
  726. // for corner F(i,j) is at CN(i*3+j,:) )igl_Qu8mg5v7";
  727. const char *__doc_igl_per_edge_normals = R"igl_Qu8mg5v7(// Compute face normals via vertex position list, face list
  728. // Inputs:
  729. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  730. // F #F by 3 eigen Matrix of face (triangle) indices
  731. // weight weighting type
  732. // FN #F by 3 matrix of 3D face normals per face
  733. // Output:
  734. // N #2 by 3 matrix of mesh edge 3D normals per row
  735. // E #E by 2 matrix of edge indices per row
  736. // EMAP #E by 1 matrix of indices from all edges to E
  737. //)igl_Qu8mg5v7";
  738. const char *__doc_igl_per_face_normals = R"igl_Qu8mg5v7(// Compute face normals via vertex position list, face list
  739. // Inputs:
  740. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  741. // F #F by 3 eigen Matrix of face (triangle) indices
  742. // Z 3 vector normal given to faces with degenerate normal.
  743. // Output:
  744. // N #F by 3 eigen Matrix of mesh face (triangle) 3D normals
  745. //
  746. // Example:
  747. // // Give degenerate faces (1/3,1/3,1/3)^0.5
  748. // per_face_normals(V,F,Vector3d(1,1,1).normalized(),N);)igl_Qu8mg5v7";
  749. const char *__doc_igl_per_face_normals_stable = R"igl_Qu8mg5v7(// Special version where order of face indices is guaranteed not to effect
  750. // output.)igl_Qu8mg5v7";
  751. const char *__doc_igl_per_vertex_normals = R"igl_Qu8mg5v7(// Compute vertex normals via vertex position list, face list
  752. // Inputs:
  753. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  754. // F #F by 3 eigne Matrix of face (triangle) indices
  755. // weighting Weighting type
  756. // Output:
  757. // N #V by 3 eigen Matrix of mesh vertex 3D normals)igl_Qu8mg5v7";
  758. const char *__doc_igl_planarize_quad_mesh = R"igl_Qu8mg5v7(// Inputs:
  759. // Vin #V by 3 eigen Matrix of mesh vertex 3D positions
  760. // F #F by 4 eigen Matrix of face (quad) indices
  761. // maxIter maximum numbers of iterations
  762. // threshold minimum allowed threshold for non-planarity
  763. // Output:
  764. // Vout #V by 3 eigen Matrix of planar mesh vertex 3D positions
  765. //)igl_Qu8mg5v7";
  766. const char *__doc_igl_png_readPNG = R"igl_Qu8mg5v7(// Read an image from a .png file into 4 memory buffers
  767. //
  768. // Input:
  769. // png_file path to .png file
  770. // Output:
  771. // R,G,B,A texture channels
  772. // Returns true on success, false on failure
  773. //)igl_Qu8mg5v7";
  774. const char *__doc_igl_png_writePNG = R"igl_Qu8mg5v7(// Writes an image to a png file
  775. //
  776. // Input:
  777. // R,G,B,A texture channels
  778. // Output:
  779. // png_file path to .png file
  780. // Returns true on success, false on failure
  781. //)igl_Qu8mg5v7";
  782. 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)
  783. //
  784. // Inputs:
  785. // P #P by 3 list of query point positions
  786. // V #V by 3 list of vertex positions
  787. // Ele #Ele by (3|2|1) list of (triangle|edge|point) indices
  788. // Outputs:
  789. // sqrD #P list of smallest squared distances
  790. // I #P list of primitive indices corresponding to smallest distances
  791. // C #P by 3 list of closest points
  792. //
  793. // Known bugs: This only computes distances to given primitivess. So
  794. // unreferenced vertices are ignored. However, degenerate primitives are
  795. // handled correctly: triangle [1 2 2] is treated as a segment [1 2], and
  796. // triangle [1 1 1] is treated as a point. So one _could_ add extra
  797. // combinatorially degenerate rows to Ele for all unreferenced vertices to
  798. // also get distances to points.)igl_Qu8mg5v7";
  799. const char *__doc_igl_polar_svd = R"igl_Qu8mg5v7(// Computes the polar decomposition (R,T) of a matrix A using SVD singular
  800. // value decomposition
  801. //
  802. // Inputs:
  803. // A 3 by 3 matrix to be decomposed
  804. // Outputs:
  805. // R 3 by 3 rotation matrix part of decomposition (**always rotataion**)
  806. // T 3 by 3 stretch matrix part of decomposition
  807. // U 3 by 3 left-singular vectors
  808. // S 3 by 1 singular values
  809. // V 3 by 3 right-singular vectors
  810. //
  811. //)igl_Qu8mg5v7";
  812. const char *__doc_igl_principal_curvature = R"igl_Qu8mg5v7(// Compute the principal curvature directions and magnitude of the given triangle mesh
  813. // DerivedV derived from vertex positions matrix type: i.e. MatrixXd
  814. // DerivedF derived from face indices matrix type: i.e. MatrixXi
  815. // Inputs:
  816. // V eigen matrix #V by 3
  817. // F #F by 3 list of mesh faces (must be triangles)
  818. // radius controls the size of the neighbourhood used, 1 = average edge lenght
  819. //
  820. // Outputs:
  821. // PD1 #V by 3 maximal curvature direction for each vertex.
  822. // PD2 #V by 3 minimal curvature direction for each vertex.
  823. // PV1 #V by 1 maximal curvature value for each vertex.
  824. // PV2 #V by 1 minimal curvature value for each vertex.
  825. //
  826. // See also: average_onto_faces, average_onto_vertices
  827. //
  828. // This function has been developed by: Nikolas De Giorgis, Luigi Rocca and Enrico Puppo.
  829. // The algorithm is based on:
  830. // Efficient Multi-scale Curvature and Crease Estimation
  831. // Daniele Panozzo, Enrico Puppo, Luigi Rocca
  832. // GraVisMa, 2010)igl_Qu8mg5v7";
  833. const char *__doc_igl_quad_planarity = R"igl_Qu8mg5v7(// Compute planarity of the faces of a quad mesh
  834. // Inputs:
  835. // V #V by 3 eigen Matrix of mesh vertex 3D positions
  836. // F #F by 4 eigen Matrix of face (quad) indices
  837. // Output:
  838. // P #F by 1 eigen Matrix of mesh face (quad) planarities
  839. //)igl_Qu8mg5v7";
  840. const char *__doc_igl_randperm = R"igl_Qu8mg5v7(// Like matlab's randperm(n) but minus 1
  841. //
  842. // Inputs:
  843. // n number of elements
  844. // Outputs:
  845. // I n list of rand permutation of 0:n-1)igl_Qu8mg5v7";
  846. const char *__doc_igl_readDMAT = R"igl_Qu8mg5v7(See readDMAT for the documentation.)igl_Qu8mg5v7";
  847. const char *__doc_igl_readMESH = R"igl_Qu8mg5v7(// load a tetrahedral volume mesh from a .mesh file
  848. //
  849. // Templates:
  850. // Scalar type for positions and vectors (will be read as double and cast
  851. // to Scalar)
  852. // Index type for indices (will be read as int and cast to Index)
  853. // Input:
  854. // mesh_file_name path of .mesh file
  855. // Outputs:
  856. // V double matrix of vertex positions #V by 3
  857. // T #T list of tet indices into vertex positions
  858. // F #F list of face indices into vertex positions
  859. //
  860. // Known bugs: Holes and regions are not supported)igl_Qu8mg5v7";
  861. const char *__doc_igl_readOBJ = R"igl_Qu8mg5v7(// Read a mesh from an ascii obj file, filling in vertex positions, normals
  862. // and texture coordinates. Mesh may have faces of any number of degree
  863. //
  864. // Templates:
  865. // Scalar type for positions and vectors (will be read as double and cast
  866. // to Scalar)
  867. // Index type for indices (will be read as int and cast to Index)
  868. // Inputs:
  869. // str path to .obj file
  870. // Outputs:
  871. // V double matrix of vertex positions #V by 3
  872. // TC double matrix of texture coordinats #TC by 2
  873. // N double matrix of corner normals #N by 3
  874. // F #F list of face indices into vertex positions
  875. // FTC #F list of face indices into vertex texture coordinates
  876. // FN #F list of face indices into vertex normals
  877. // Returns true on success, false on errors)igl_Qu8mg5v7";
  878. const char *__doc_igl_readOFF = R"igl_Qu8mg5v7(// Read a mesh from an ascii obj file, filling in vertex positions, normals
  879. // and texture coordinates. Mesh may have faces of any number of degree
  880. //
  881. // Templates:
  882. // Scalar type for positions and vectors (will be read as double and cast
  883. // to Scalar)
  884. // Index type for indices (will be read as int and cast to Index)
  885. // Inputs:
  886. // str path to .obj file
  887. // Outputs:
  888. // V double matrix of vertex positions #V by 3
  889. // F #F list of face indices into vertex positions
  890. // TC double matrix of texture coordinats #TC by 2
  891. // FTC #F list of face indices into vertex texture coordinates
  892. // N double matrix of corner normals #N by 3
  893. // FN #F list of face indices into vertex normals
  894. // Returns true on success, false on errors)igl_Qu8mg5v7";
  895. const char *__doc_igl_read_triangle_mesh = R"igl_Qu8mg5v7(// read mesh from an ascii file with automatic detection of file format.
  896. // supported: obj, off, stl, wrl, ply, mesh)
  897. //
  898. // Templates:
  899. // Scalar type for positions and vectors (will be read as double and cast
  900. // to Scalar)
  901. // Index type for indices (will be read as int and cast to Index)
  902. // Inputs:
  903. // str path to file
  904. // Outputs:
  905. // V eigen double matrix #V by 3
  906. // F eigen int matrix #F by 3
  907. // Returns true iff success)igl_Qu8mg5v7";
  908. const char *__doc_igl_rotate_vectors = R"igl_Qu8mg5v7(// Rotate the vectors V by A radiants on the tangent plane spanned by B1 and
  909. // B2
  910. //
  911. // Inputs:
  912. // V #V by 3 eigen Matrix of vectors
  913. // A #V eigen vector of rotation angles or a single angle to be applied
  914. // to all vectors
  915. // B1 #V by 3 eigen Matrix of base vector 1
  916. // B2 #V by 3 eigen Matrix of base vector 2
  917. //
  918. // Output:
  919. // Returns the rotated vectors
  920. //)igl_Qu8mg5v7";
  921. const char *__doc_igl_setdiff = R"igl_Qu8mg5v7(// Set difference of elements of matrices
  922. //
  923. // Inputs:
  924. // A m-long vector of indices
  925. // B n-long vector of indices
  926. // Outputs:
  927. // C (k<=m)-long vector of unique elements appearing in A but not in B
  928. // IA (k<=m)-long list of indices into A so that C = A(IA)
  929. //)igl_Qu8mg5v7";
  930. const char *__doc_igl_signed_distance = R"igl_Qu8mg5v7(// Computes signed distance to a mesh
  931. //
  932. // Inputs:
  933. // P #P by 3 list of query point positions
  934. // V #V by 3 list of vertex positions
  935. // F #F by ss list of triangle indices, ss should be 3 unless sign_type ==
  936. // SIGNED_DISTANCE_TYPE_UNSIGNED
  937. // sign_type method for computing distance _sign_ S
  938. // Outputs:
  939. // S #P list of smallest signed distances
  940. // I #P list of facet indices corresponding to smallest distances
  941. // C #P by 3 list of closest points
  942. // N #P by 3 list of closest normals (only set if
  943. // sign_type=SIGNED_DISTANCE_TYPE_PSEUDONORMAL)
  944. //
  945. // Known bugs: This only computes distances to triangles. So unreferenced
  946. // vertices and degenerate triangles are ignored.)igl_Qu8mg5v7";
  947. const char *__doc_igl_signed_distance_pseudonormal = R"igl_Qu8mg5v7(// Computes signed distance to mesh
  948. //
  949. // Inputs:
  950. // tree AABB acceleration tree (see AABB.h)
  951. // F #F by 3 list of triangle indices
  952. // FN #F by 3 list of triangle normals
  953. // VN #V by 3 list of vertex normals (ANGLE WEIGHTING)
  954. // EN #E by 3 list of edge normals (UNIFORM WEIGHTING)
  955. // EMAP #F*3 mapping edges in F to E
  956. // q Query point
  957. // Returns signed distance to mesh
  958. //)igl_Qu8mg5v7";
  959. const char *__doc_igl_signed_distance_winding_number = R"igl_Qu8mg5v7(// Inputs:
  960. // tree AABB acceleration tree (see cgal/point_mesh_squared_distance.h)
  961. // hier Winding number evaluation hierarchy
  962. // q Query point
  963. // Returns signed distance to mesh)igl_Qu8mg5v7";
  964. const char *__doc_igl_slice = R"igl_Qu8mg5v7(// Act like the matlab X(row_indices,col_indices) operator, where
  965. // row_indices, col_indices are non-negative integer indices.
  966. //
  967. // Inputs:
  968. // X m by n matrix
  969. // R list of row indices
  970. // C list of column indices
  971. // Output:
  972. // Y #R by #C matrix
  973. //
  974. // See also: slice_mask)igl_Qu8mg5v7";
  975. const char *__doc_igl_slice_into = R"igl_Qu8mg5v7(// Act like the matlab Y(row_indices,col_indices) = X
  976. //
  977. // Inputs:
  978. // X xm by xn rhs matrix
  979. // R list of row indices
  980. // C list of column indices
  981. // Y ym by yn lhs matrix
  982. // Output:
  983. // Y ym by yn lhs matrix, same as input but Y(R,C) = X)igl_Qu8mg5v7";
  984. const char *__doc_igl_slice_mask = R"igl_Qu8mg5v7(// Act like the matlab X(row_mask,col_mask) operator, where
  985. // row_mask, col_mask are non-negative integer indices.
  986. //
  987. // Inputs:
  988. // X m by n matrix
  989. // R m list of row bools
  990. // C n list of column bools
  991. // Output:
  992. // Y #trues-in-R by #trues-in-C matrix
  993. //
  994. // See also: slice_mask)igl_Qu8mg5v7";
  995. const char *__doc_igl_slice_tets = R"igl_Qu8mg5v7(// SLICE_TETS Slice through a tet mesh (V,T) along a given plane (via its
  996. // implicit equation).
  997. //
  998. // Inputs:
  999. // V #V by 3 list of tet mesh vertices
  1000. // T #T by 4 list of tet indices into V
  1001. // plane list of 4 coefficients in the plane equation: [x y z 1]'*plane = 0
  1002. // Optional:
  1003. // 'Manifold' followed by whether to stitch together triangles into a
  1004. // manifold mesh {true}: results in more compact U but slightly slower.
  1005. // Outputs:
  1006. // U #U by 3 list of triangle mesh vertices along slice
  1007. // G #G by 3 list of triangles indices into U
  1008. // J #G list of indices into T revealing from which tet each faces comes
  1009. // BC #U by #V list of barycentric coordinates (or more generally: linear
  1010. // interpolation coordinates) so that U = BC*V
  1011. // )igl_Qu8mg5v7";
  1012. const char *__doc_igl_sortrows = R"igl_Qu8mg5v7(// Act like matlab's [Y,I] = sortrows(X)
  1013. //
  1014. // Templates:
  1015. // DerivedX derived scalar type, e.g. MatrixXi or MatrixXd
  1016. // DerivedI derived integer type, e.g. MatrixXi
  1017. // Inputs:
  1018. // X m by n matrix whose entries are to be sorted
  1019. // ascending sort ascending (true, matlab default) or descending (false)
  1020. // Outputs:
  1021. // Y m by n matrix whose entries are sorted (**should not** be same
  1022. // reference as X)
  1023. // I m list of indices so that
  1024. // Y = X(I,:);)igl_Qu8mg5v7";
  1025. 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'
  1026. // streamlines, and creates the initial /state/ for the tracing.
  1027. // Inputs:
  1028. // V #V by 3 list of mesh vertex coordinates
  1029. // F #F by 3 list of mesh faces
  1030. // temp_field #F by 3n list of the 3D coordinates of the per-face vectors
  1031. // (n-degrees stacked horizontally for each triangle)
  1032. // treat_as_symmetric
  1033. // if true, adds n symmetry directions to the field (N = 2n). Else N = n
  1034. // percentage [0-1] percentage of faces sampled
  1035. // Outputs:
  1036. // data struct containing topology information of the mesh and field
  1037. // state struct containing the state of the tracing )igl_Qu8mg5v7";
  1038. const char *__doc_igl_streamlines_next = R"igl_Qu8mg5v7( // The function computes the next state for each point in the sample
  1039. // V #V by 3 list of mesh vertex coordinates
  1040. // F #F by 3 list of mesh faces
  1041. // data struct containing topology information
  1042. // state struct containing the state of the tracing )igl_Qu8mg5v7";
  1043. const char *__doc_igl_triangle_triangle_adjacency = R"igl_Qu8mg5v7(// Constructs the triangle-triangle adjacency matrix for a given
  1044. // mesh (V,F).
  1045. //
  1046. // Templates:
  1047. // Scalar derived type of eigen matrix for V (e.g. derived from
  1048. // MatrixXd)
  1049. // Index derived type of eigen matrix for F (e.g. derived from
  1050. // MatrixXi)
  1051. // Inputs:
  1052. // F #F by simplex_size list of mesh faces (must be triangles)
  1053. // Outputs:
  1054. // TT #F by #3 adjacent matrix, the element i,j is the id of the triangle adjacent to the j edge of triangle i
  1055. // 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
  1056. // NOTE: the first edge of a triangle is [0,1] the second [1,2] and the third [2,3].
  1057. // this convention is DIFFERENT from cotmatrix_entries.h
  1058. // Known bug: this should not need to take V as input.)igl_Qu8mg5v7";
  1059. const char *__doc_igl_triangle_triangulate = R"igl_Qu8mg5v7(// Triangulate the interior of a polygon using the triangle library.
  1060. //
  1061. // Inputs:
  1062. // V #V by 2 list of 2D vertex positions
  1063. // E #E by 2 list of vertex ids forming unoriented edges of the boundary of the polygon
  1064. // H #H by 2 coordinates of points contained inside holes of the polygon
  1065. // flags string of options pass to triangle (see triangle documentation)
  1066. // Outputs:
  1067. // V2 #V2 by 2 coordinates of the vertives of the generated triangulation
  1068. // F2 #F2 by 3 list of indices forming the faces of the generated triangulation
  1069. //
  1070. // TODO: expose the option to prevent Steiner points on the boundary
  1071. //)igl_Qu8mg5v7";
  1072. const char *__doc_igl_unique = R"igl_Qu8mg5v7(// Act like matlab's [C,IA,IC] = unique(X)
  1073. //
  1074. // Templates:
  1075. // T comparable type T
  1076. // Inputs:
  1077. // A #A vector of type T
  1078. // Outputs:
  1079. // C #C vector of unique entries in A
  1080. // IA #C index vector so that C = A(IA);
  1081. // IC #A index vector so that A = C(IC);)igl_Qu8mg5v7";
  1082. const char *__doc_igl_unique_rows = R"igl_Qu8mg5v7(// Act like matlab's [C,IA,IC] = unique(X,'rows')
  1083. //
  1084. // Templates:
  1085. // DerivedA derived scalar type, e.g. MatrixXi or MatrixXd
  1086. // DerivedIA derived integer type, e.g. MatrixXi
  1087. // DerivedIC derived integer type, e.g. MatrixXi
  1088. // Inputs:
  1089. // A m by n matrix whose entries are to unique'd according to rows
  1090. // Outputs:
  1091. // C #C vector of unique rows in A
  1092. // IA #C index vector so that C = A(IA,:);
  1093. // IC #A index vector so that A = C(IC,:);)igl_Qu8mg5v7";
  1094. const char *__doc_igl_unproject_onto_mesh = R"igl_Qu8mg5v7(// Unproject a screen location (using current opengl viewport, projection, and
  1095. // model view) to a 3D position _onto_ a given mesh, if the ray through the
  1096. // given screen location (x,y) _hits_ the mesh.
  1097. //
  1098. // Inputs:
  1099. // pos screen space coordinates
  1100. // model model matrix
  1101. // proj projection matrix
  1102. // viewport vieweport vector
  1103. // V #V by 3 list of mesh vertex positions
  1104. // F #F by 3 list of mesh triangle indices into V
  1105. // Outputs:
  1106. // fid id of the first face hit
  1107. // bc barycentric coordinates of hit
  1108. // Returns true if there's a hit)igl_Qu8mg5v7";
  1109. const char *__doc_igl_upsample = R"igl_Qu8mg5v7(// Subdivide a mesh without moving vertices: loop subdivision but odd
  1110. // vertices stay put and even vertices are just edge midpoints
  1111. //
  1112. // Templates:
  1113. // MatV matrix for vertex positions, e.g. MatrixXd
  1114. // MatF matrix for vertex positions, e.g. MatrixXi
  1115. // Inputs:
  1116. // V #V by dim mesh vertices
  1117. // F #F by 3 mesh triangles
  1118. // Outputs:
  1119. // NV new vertex positions, V is guaranteed to be at top
  1120. // NF new list of face indices
  1121. //
  1122. // NOTE: V should not be the same as NV,
  1123. // NOTE: F should not be the same as NF, use other proto
  1124. //
  1125. // Known issues:
  1126. // - assumes (V,F) is edge-manifold.)igl_Qu8mg5v7";
  1127. const char *__doc_igl_winding_number = R"igl_Qu8mg5v7(// WINDING_NUMBER Compute the sum of solid angles of a triangle/tetrahedron
  1128. // described by points (vectors) V
  1129. //
  1130. // Templates:
  1131. // dim dimension of input
  1132. // Inputs:
  1133. // V n by 3 list of vertex positions
  1134. // F #F by 3 list of triangle indices, minimum index is 0
  1135. // O no by 3 list of origin positions
  1136. // Outputs:
  1137. // S no by 1 list of winding numbers
  1138. //
  1139. // 3d)igl_Qu8mg5v7";
  1140. const char *__doc_igl_winding_number_3 = R"igl_Qu8mg5v7(// Inputs:
  1141. // V pointer to array containing #V by 3 vertex positions along rows,
  1142. // given in column major order
  1143. // n number of mesh vertices
  1144. // F pointer to array containing #F by 3 face indices along rows,
  1145. // given in column major order
  1146. // m number of faces
  1147. // O pointer to array containing #O by 3 query positions along rows,
  1148. // given in column major order
  1149. // no number of origins
  1150. // Outputs:
  1151. // S no by 1 list of winding numbers)igl_Qu8mg5v7";
  1152. const char *__doc_igl_winding_number_2 = R"igl_Qu8mg5v7(//// Only one evaluation origin
  1153. //template <typename DerivedF>
  1154. //IGL_INLINE void winding_number_3(
  1155. // const double * V,
  1156. // const int n,
  1157. // const DerivedF * F,
  1158. // const int m,
  1159. // const double * O,
  1160. // double * S);
  1161. // 2d)igl_Qu8mg5v7";
  1162. const char *__doc_igl_writeMESH = R"igl_Qu8mg5v7(// save a tetrahedral volume mesh to a .mesh file
  1163. //
  1164. // Templates:
  1165. // Scalar type for positions and vectors (will be cast as double)
  1166. // Index type for indices (will be cast to int)
  1167. // Input:
  1168. // mesh_file_name path of .mesh file
  1169. // V double matrix of vertex positions #V by 3
  1170. // T #T list of tet indices into vertex positions
  1171. // F #F list of face indices into vertex positions
  1172. //
  1173. // Known bugs: Holes and regions are not supported)igl_Qu8mg5v7";
  1174. const char *__doc_igl_writeOBJ = R"igl_Qu8mg5v7(// Write a mesh in an ascii obj file
  1175. // Inputs:
  1176. // str path to outputfile
  1177. // V #V by 3 mesh vertex positions
  1178. // F #F by 3|4 mesh indices into V
  1179. // CN #CN by 3 normal vectors
  1180. // FN #F by 3|4 corner normal indices into CN
  1181. // TC #TC by 2|3 texture coordinates
  1182. // FTC #F by 3|4 corner texture coord indices into TC
  1183. // Returns true on success, false on error)igl_Qu8mg5v7";