py_doc.cpp 65 KB

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