=== Custom Transform Orientation ===
[blender.git] / source / blender / src / parametrizer.h
1
2 #ifndef __PARAMETRIZER_H__
3 #define __PARAMETRIZER_H__
4
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8
9 typedef void ParamHandle;       /* handle to a set of charts */
10 typedef long ParamKey;          /* (hash) key for identifying verts and faces */
11 typedef enum ParamBool {
12         PARAM_TRUE = 1,
13         PARAM_FALSE = 0
14 } ParamBool;
15
16 /* Chart construction:
17    -------------------
18    - faces and seams may only be added between construct_{begin|end}
19    - the pointers to co and uv are stored, rather than being copied
20    - vertices are implicitly created
21    - in construct_end the mesh will be split up according to the seams
22    - the resulting charts must be:
23       - manifold, connected, open (at least one boundary loop)
24    - output will be written to the uv pointers
25 */
26
27 ParamHandle *param_construct_begin();
28
29 void param_face_add(ParamHandle *handle,
30                     ParamKey key,
31                     int nverts, 
32                     ParamKey *vkeys,
33                     float **co,
34                     float **uv,
35                                         ParamBool *pin,
36                                         ParamBool *select);
37
38 void param_edge_set_seam(ParamHandle *handle,
39                          ParamKey *vkeys);
40
41 void param_construct_end(ParamHandle *handle, ParamBool fill, ParamBool impl);
42 void param_delete(ParamHandle *chart);
43
44 /* Least Squares Conformal Maps:
45    -----------------------------
46    - charts with less than two pinned vertices are assigned 2 pins
47    - lscm is divided in three steps:
48       - begin: compute matrix and it's factorization (expensive)
49       - solve using pinned coordinates (cheap)
50           - end: clean up 
51         - uv coordinates are allowed to change within begin/end, for
52           quick re-solving
53 */
54
55 void param_lscm_begin(ParamHandle *handle, ParamBool live, ParamBool abf);
56 void param_lscm_solve(ParamHandle *handle);
57 void param_lscm_end(ParamHandle *handle);
58
59 /* Stretch */
60
61 void param_stretch_begin(ParamHandle *handle);
62 void param_stretch_blend(ParamHandle *handle, float blend);
63 void param_stretch_iter(ParamHandle *handle);
64 void param_stretch_end(ParamHandle *handle);
65
66 /* Area Smooth */
67
68 void param_smooth_area(ParamHandle *handle);
69
70 /* Packing */
71
72 void param_pack(ParamHandle *handle);
73
74 /* Flushing */
75
76 void param_flush(ParamHandle *handle);
77 void param_flush_restore(ParamHandle *handle);
78
79
80 #ifdef __cplusplus
81 }
82 #endif
83
84 #endif /*__PARAMETRIZER_H__*/
85