187
187
em->bm->elem_index_dirty |= BM_VERT;
189
189
MEM_freeN(vert_table);
191
BMEditVert *eve, *prev;
194
float *v1, *v2, *v3, *v4, *co1, *co2, *co3, *co4;
197
/* two abused locations in vertices */
198
for (eve = em->verts.first; eve; eve = eve->next, index++) {
200
eve->prev = (EditVert *)index;
203
/* first store two sets of tangent vectors in vertices, we derive it just from the face-edges */
204
for (efa = em->faces.first; efa; efa = efa->next) {
206
/* retrieve mapped coordinates */
207
v1 = mappedcos + 3 * (intptr_t)(efa->v1->prev);
208
v2 = mappedcos + 3 * (intptr_t)(efa->v2->prev);
209
v3 = mappedcos + 3 * (intptr_t)(efa->v3->prev);
211
co1 = (origcos) ? origcos + 3 * (intptr_t)(efa->v1->prev) : efa->v1->co;
212
co2 = (origcos) ? origcos + 3 * (intptr_t)(efa->v2->prev) : efa->v2->co;
213
co3 = (origcos) ? origcos + 3 * (intptr_t)(efa->v3->prev) : efa->v3->co;
215
if (efa->v2->tmp.p == NULL && efa->v2->f1) {
216
set_crazy_vertex_quat(quats, co2, co3, co1, v2, v3, v1);
217
efa->v2->tmp.p = (void *)quats;
222
v4 = mappedcos + 3 * (intptr_t)(efa->v4->prev);
223
co4 = (origcos) ? origcos + 3 * (intptr_t)(efa->v4->prev) : efa->v4->co;
225
if (efa->v1->tmp.p == NULL && efa->v1->f1) {
226
set_crazy_vertex_quat(quats, co1, co2, co4, v1, v2, v4);
227
efa->v1->tmp.p = (void *)quats;
230
if (efa->v3->tmp.p == NULL && efa->v3->f1) {
231
set_crazy_vertex_quat(quats, co3, co4, co2, v3, v4, v2);
232
efa->v3->tmp.p = (void *)quats;
235
if (efa->v4->tmp.p == NULL && efa->v4->f1) {
236
set_crazy_vertex_quat(quats, co4, co1, co3, v4, v1, v3);
237
efa->v4->tmp.p = (void *)quats;
242
if (efa->v1->tmp.p == NULL && efa->v1->f1) {
243
set_crazy_vertex_quat(quats, co1, co2, co3, v1, v2, v3);
244
efa->v1->tmp.p = (void *)quats;
247
if (efa->v3->tmp.p == NULL && efa->v3->f1) {
248
set_crazy_vertex_quat(quats, co3, co1, co2, v3, v1, v2);
249
efa->v3->tmp.p = (void *)quats;
255
/* restore abused prev pointer */
256
for (prev = NULL, eve = em->verts.first; eve; prev = eve, eve = eve->next)
261
192
/* BMESH_TODO - use MPolys over MFace's */