69
69
!ELEM7(falloff_type, MOD_WVG_MAPPING_CURVE, MOD_WVG_MAPPING_SHARP, MOD_WVG_MAPPING_SMOOTH,
70
70
MOD_WVG_MAPPING_ROOT, MOD_WVG_MAPPING_SPHERE, MOD_WVG_MAPPING_RANDOM,
71
71
MOD_WVG_MAPPING_STEP))
76
if (cmap && falloff_type == MOD_WVG_MAPPING_CURVE) {
77
curvemapping_initialize(cmap);
74
80
/* Map each weight (vertex) to its new value, accordingly to the chosen mode. */
75
81
for (i = 0; i < num; ++i) {
78
84
/* Code borrowed from the warp modifier. */
79
85
/* Closely matches PROP_SMOOTH and similar. */
80
switch(falloff_type) {
81
case MOD_WVG_MAPPING_CURVE:
82
fac = curvemapping_evaluateF(cmap, 0, fac);
84
case MOD_WVG_MAPPING_SHARP:
87
case MOD_WVG_MAPPING_SMOOTH:
88
fac = 3.0f*fac*fac - 2.0f*fac*fac*fac;
90
case MOD_WVG_MAPPING_ROOT:
91
fac = (float)sqrt(fac);
93
case MOD_WVG_MAPPING_SPHERE:
94
fac = (float)sqrt(2*fac - fac * fac);
96
case MOD_WVG_MAPPING_RANDOM:
97
BLI_srand(BLI_rand()); /* random seed */
98
fac = BLI_frand()*fac;
100
case MOD_WVG_MAPPING_STEP:
101
fac = (fac >= 0.5f)?1.0f:0.0f;
86
switch (falloff_type) {
87
case MOD_WVG_MAPPING_CURVE:
88
fac = curvemapping_evaluateF(cmap, 0, fac);
90
case MOD_WVG_MAPPING_SHARP:
93
case MOD_WVG_MAPPING_SMOOTH:
94
fac = 3.0f * fac * fac - 2.0f * fac * fac * fac;
96
case MOD_WVG_MAPPING_ROOT:
97
fac = (float)sqrt(fac);
99
case MOD_WVG_MAPPING_SPHERE:
100
fac = (float)sqrt(2 * fac - fac * fac);
102
case MOD_WVG_MAPPING_RANDOM:
103
BLI_srand(BLI_rand()); /* random seed */
104
fac = BLI_frand() * fac;
106
case MOD_WVG_MAPPING_STEP:
107
fac = (fac >= 0.5f) ? 1.0f : 0.0f;
152
158
for (i = 0; i < num; ++i) {
153
159
int idx = indices ? indices[i] : i;
154
160
TexResult texres;
155
float h, s, v; /* For HSV color space. */
161
float hsv[3]; /* For HSV color space. */
157
163
texres.nor = NULL;
158
164
get_texture_value(texture, tex_co[idx], &texres);
159
165
/* Get the good channel value... */
160
switch(tex_use_channel) {
161
case MOD_WVG_MASK_TEX_USE_INT:
162
org_w[i] = (new_w[i] * texres.tin * fact) + (org_w[i] * (1.0f - (texres.tin*fact)));
164
case MOD_WVG_MASK_TEX_USE_RED:
165
org_w[i] = (new_w[i] * texres.tr * fact) + (org_w[i] * (1.0f - (texres.tr*fact)));
167
case MOD_WVG_MASK_TEX_USE_GREEN:
168
org_w[i] = (new_w[i] * texres.tg * fact) + (org_w[i] * (1.0f - (texres.tg*fact)));
170
case MOD_WVG_MASK_TEX_USE_BLUE:
171
org_w[i] = (new_w[i] * texres.tb * fact) + (org_w[i] * (1.0f - (texres.tb*fact)));
173
case MOD_WVG_MASK_TEX_USE_HUE:
174
rgb_to_hsv(texres.tr, texres.tg, texres.tb, &h, &s, &v);
175
org_w[i] = (new_w[i] * h * fact) + (org_w[i] * (1.0f - (h*fact)));
177
case MOD_WVG_MASK_TEX_USE_SAT:
178
rgb_to_hsv(texres.tr, texres.tg, texres.tb, &h, &s, &v);
179
org_w[i] = (new_w[i] * s * fact) + (org_w[i] * (1.0f - (s*fact)));
181
case MOD_WVG_MASK_TEX_USE_VAL:
182
rgb_to_hsv(texres.tr, texres.tg, texres.tb, &h, &s, &v);
183
org_w[i] = (new_w[i] * v * fact) + (org_w[i] * (1.0f - (v*fact)));
185
case MOD_WVG_MASK_TEX_USE_ALPHA:
186
org_w[i] = (new_w[i] * texres.ta * fact) + (org_w[i] * (1.0f - (texres.ta*fact)));
189
org_w[i] = (new_w[i] * texres.tin * fact) + (org_w[i] * (1.0f - (texres.tin*fact)));
166
switch (tex_use_channel) {
167
case MOD_WVG_MASK_TEX_USE_INT:
168
org_w[i] = (new_w[i] * texres.tin * fact) + (org_w[i] * (1.0f - (texres.tin * fact)));
170
case MOD_WVG_MASK_TEX_USE_RED:
171
org_w[i] = (new_w[i] * texres.tr * fact) + (org_w[i] * (1.0f - (texres.tr * fact)));
173
case MOD_WVG_MASK_TEX_USE_GREEN:
174
org_w[i] = (new_w[i] * texres.tg * fact) + (org_w[i] * (1.0f - (texres.tg * fact)));
176
case MOD_WVG_MASK_TEX_USE_BLUE:
177
org_w[i] = (new_w[i] * texres.tb * fact) + (org_w[i] * (1.0f - (texres.tb * fact)));
179
case MOD_WVG_MASK_TEX_USE_HUE:
180
rgb_to_hsv_v(&texres.tr, hsv);
181
org_w[i] = (new_w[i] * hsv[0] * fact) + (org_w[i] * (1.0f - (hsv[0] * fact)));
183
case MOD_WVG_MASK_TEX_USE_SAT:
184
rgb_to_hsv_v(&texres.tr, hsv);
185
org_w[i] = (new_w[i] * hsv[1] * fact) + (org_w[i] * (1.0f - (hsv[1] * fact)));
187
case MOD_WVG_MASK_TEX_USE_VAL:
188
rgb_to_hsv_v(&texres.tr, hsv);
189
org_w[i] = (new_w[i] * hsv[2] * fact) + (org_w[i] * (1.0f - (hsv[2] * fact)));
191
case MOD_WVG_MASK_TEX_USE_ALPHA:
192
org_w[i] = (new_w[i] * texres.ta * fact) + (org_w[i] * (1.0f - (texres.ta * fact)));
195
org_w[i] = (new_w[i] * texres.tin * fact) + (org_w[i] * (1.0f - (texres.tin * fact)));