209
209
scolmain = MEM_callocN(4 * sizeof(short) * me->totvert, "colmain");
212
211
mface = me->mface;
213
212
mcol = (char *)me->mcol;
214
213
for (a = me->totface; a > 0; a--, mface++, mcol += 16) {
215
if ((tface && tface->mode & TF_SHAREDCOL) || (me->editflag & ME_EDIT_PAINT_MASK) == 0) {
214
if ((use_face_sel == FALSE) || (mface->flag & ME_FACE_SEL)) {
216
215
scol = scolmain + 4 * mface->v1;
217
216
scol[0]++; scol[1] += mcol[1]; scol[2] += mcol[2]; scol[3] += mcol[3];
218
217
scol = scolmain + 4 * mface->v2;
242
239
mface = me->mface;
243
240
mcol = (char *)me->mcol;
244
241
for (a = me->totface; a > 0; a--, mface++, mcol += 16) {
245
if ((tface && tface->mode & TF_SHAREDCOL) || (me->editflag & ME_EDIT_PAINT_MASK) == 0) {
242
if ((use_face_sel == FALSE)|| (mface->flag & ME_FACE_SEL)) {
246
243
scol = scolmain + 4 * mface->v1;
247
244
mcol[1] = scol[1]; mcol[2] = scol[2]; mcol[3] = scol[3];
248
245
scol = scolmain + 4 * mface->v2;
263
259
void do_shared_vertexcol(Mesh *me, int do_tessface)
261
const int use_face_sel = (me->editflag & ME_EDIT_PAINT_MASK);
265
262
MLoop *ml = me->mloop;
266
263
MLoopCol *lcol = me->mloopcol;
267
MTexPoly *mtp = me->mtpoly;
268
MPoly *mp = me->mpoly;
270
int i, has_shared = 0;
266
int i, j, has_shared = 0;
272
268
/* if no mloopcol: do not do */
273
269
/* if mtexpoly: only the involved faces, otherwise all */
277
273
scol = MEM_callocN(sizeof(float) * me->totvert * 5, "scol");
279
for (i = 0; i < me->totloop; i++, ml++, lcol++) {
280
if (i >= mp->loopstart + mp->totloop) {
275
for (i = 0, mp = me->mpoly; i < me->totpoly; i++, mp++) {
276
if ((use_face_sel == FALSE) || (mp->flag & ME_FACE_SEL)) {
277
ml = me->mloop + mp->loopstart;
278
lcol = me->mloopcol + mp->loopstart;
279
for (j = 0; j < mp->totloop; j++, ml++, lcol++) {
280
scol[ml->v][0] += lcol->r;
281
scol[ml->v][1] += lcol->g;
282
scol[ml->v][2] += lcol->b;
283
scol[ml->v][3] += 1.0f;
285
if (!(mtp && (mtp->mode & TF_SHAREDCOL)) && (me->editflag & ME_EDIT_PAINT_MASK) != 0)
288
scol[ml->v][0] += lcol->r;
289
scol[ml->v][1] += lcol->g;
290
scol[ml->v][2] += lcol->b;
291
scol[ml->v][3] += lcol->a;
292
scol[ml->v][4] += 1.0;
296
289
if (has_shared) {
297
290
for (i = 0; i < me->totvert; i++) {
298
if (!scol[i][4]) continue;
300
scol[i][0] /= scol[i][4];
301
scol[i][1] /= scol[i][4];
302
scol[i][2] /= scol[i][4];
303
scol[i][3] /= scol[i][4];
291
if (scol[i][3] != 0.0f) {
292
mul_v3_fl(scol[i], 1.0f / scol[i][3]);
308
for (i = 0; i < me->totloop; i++, ml++, lcol++) {
309
if (!scol[ml->v][4]) continue;
311
lcol->r = scol[ml->v][0];
312
lcol->g = scol[ml->v][1];
313
lcol->b = scol[ml->v][2];
314
lcol->a = scol[ml->v][3];
296
for (i = 0, mp = me->mpoly; i < me->totpoly; i++, mp++) {
297
if ((use_face_sel == FALSE) || (mp->flag & ME_FACE_SEL)) {
298
ml = me->mloop + mp->loopstart;
299
lcol = me->mloopcol + mp->loopstart;
300
for (j = 0; j < mp->totloop; j++, ml++, lcol++) {
301
lcol->r = scol[ml->v][0];
302
lcol->g = scol[ml->v][1];
303
lcol->b = scol[ml->v][2];