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