~ubuntu-branches/ubuntu/trusty/blender/trusty

« back to all changes in this revision

Viewing changes to source/blender/modifiers/intern/MOD_mirror.c

  • Committer: Package Import Robot
  • Author(s): Jeremy Bicha
  • Date: 2013-03-06 12:08:47 UTC
  • mfrom: (1.5.1) (14.1.8 experimental)
  • Revision ID: package-import@ubuntu.com-20130306120847-frjfaryb2zrotwcg
Tags: 2.66a-1ubuntu1
* Resynchronize with Debian (LP: #1076930, #1089256, #1052743, #999024,
  #1122888, #1147084)
* debian/control:
  - Lower build-depends on libavcodec-dev since we're not
    doing the libav9 transition in Ubuntu yet

Show diffs side-by-side

added added

removed removed

Lines of Context:
43
43
#include "BKE_mesh.h"
44
44
#include "BKE_modifier.h"
45
45
#include "BKE_deform.h"
46
 
#include "BKE_utildefines.h"
47
 
#include "BKE_tessmesh.h"
 
46
 
 
47
#include "bmesh.h"
48
48
 
49
49
#include "MEM_guardedalloc.h"
50
50
#include "depsgraph_private.h"
51
51
 
52
52
static void initData(ModifierData *md)
53
53
{
54
 
        MirrorModifierData *mmd = (MirrorModifierData*) md;
 
54
        MirrorModifierData *mmd = (MirrorModifierData *) md;
55
55
 
56
56
        mmd->flag |= (MOD_MIR_AXIS_X | MOD_MIR_VGROUP);
57
57
        mmd->tolerance = 0.001;
60
60
 
61
61
static void copyData(ModifierData *md, ModifierData *target)
62
62
{
63
 
        MirrorModifierData *mmd = (MirrorModifierData*) md;
64
 
        MirrorModifierData *tmmd = (MirrorModifierData*) target;
 
63
        MirrorModifierData *mmd = (MirrorModifierData *) md;
 
64
        MirrorModifierData *tmmd = (MirrorModifierData *) target;
65
65
 
66
66
        tmmd->flag = mmd->flag;
67
67
        tmmd->tolerance = mmd->tolerance;
72
72
                              void (*walk)(void *userData, Object *ob, Object **obpoin),
73
73
                              void *userData)
74
74
{
75
 
        MirrorModifierData *mmd = (MirrorModifierData*) md;
 
75
        MirrorModifierData *mmd = (MirrorModifierData *) md;
76
76
 
77
77
        walk(userData, ob, &mmd->mirror_ob);
78
78
}
82
82
                           Object *UNUSED(ob),
83
83
                           DagNode *obNode)
84
84
{
85
 
        MirrorModifierData *mmd = (MirrorModifierData*) md;
 
85
        MirrorModifierData *mmd = (MirrorModifierData *) md;
86
86
 
87
87
        if (mmd->mirror_ob) {
88
88
                DagNode *latNode = dag_get_node(forest, mmd->mirror_ob);
138
138
                mult_m4_m4m4(mtx, itmp, mtx);
139
139
        }
140
140
 
141
 
        result = CDDM_from_template(dm, maxVerts*2, maxEdges*2, 0, maxLoops*2, maxPolys*2);
 
141
        result = CDDM_from_template(dm, maxVerts * 2, maxEdges * 2, 0, maxLoops * 2, maxPolys * 2);
142
142
 
143
143
        /*copy customdata to original geometry*/
144
144
        DM_copy_vert_data(dm, result, 0, 0, maxVerts);
231
231
 
232
232
                ml2 = ml + mp->loopstart + maxLoops;
233
233
                e = ml2[0].e;
234
 
                for (j = 0; j < mp->totloop-1; j++) {
235
 
                        ml2[j].e = ml2[j+1].e;
 
234
                for (j = 0; j < mp->totloop - 1; j++) {
 
235
                        ml2[j].e = ml2[j + 1].e;
236
236
                }
237
 
                ml2[mp->totloop-1].e = e;
 
237
                ml2[mp->totloop - 1].e = e;
238
238
                
239
239
                mp->loopstart += maxLoops;
240
240
        }
249
249
        /* handle uvs,
250
250
         * let tessface recalc handle updating the MTFace data */
251
251
        if (mmd->flag & (MOD_MIR_MIRROR_U | MOD_MIR_MIRROR_V)) {
252
 
                const int do_mirr_u= (mmd->flag & MOD_MIR_MIRROR_U) != 0;
253
 
                const int do_mirr_v= (mmd->flag & MOD_MIR_MIRROR_V) != 0;
 
252
                const int do_mirr_u = (mmd->flag & MOD_MIR_MIRROR_U) != 0;
 
253
                const int do_mirr_v = (mmd->flag & MOD_MIR_MIRROR_V) != 0;
254
254
 
255
255
                const int totuv = CustomData_number_of_layers(&result->loopData, CD_MLOOPUV);
256
256
 
258
258
                        MLoopUV *dmloopuv = CustomData_get_layer_n(&result->loopData, CD_MLOOPUV, a);
259
259
                        int j = maxLoops;
260
260
                        dmloopuv += j; /* second set of loops only */
261
 
                        for ( ; i-- > 0; dmloopuv++) {
 
261
                        for (; j-- > 0; dmloopuv++) {
262
262
                                if (do_mirr_u) dmloopuv->uv[0] = 1.0f - dmloopuv->uv[0];
263
263
                                if (do_mirr_v) dmloopuv->uv[1] = 1.0f - dmloopuv->uv[1];
264
264
                        }
268
268
        /* handle vgroup stuff */
269
269
        if ((mmd->flag & MOD_MIR_VGROUP) && CustomData_has_layer(&result->vertData, CD_MDEFORMVERT)) {
270
270
                MDeformVert *dvert = (MDeformVert *) CustomData_get_layer(&result->vertData, CD_MDEFORMVERT) + maxVerts;
271
 
                int *flip_map= NULL, flip_map_len= 0;
 
271
                int *flip_map = NULL, flip_map_len = 0;
272
272
 
273
 
                flip_map= defgroup_flip_map(ob, &flip_map_len, FALSE);
 
273
                flip_map = defgroup_flip_map(ob, &flip_map_len, FALSE);
274
274
                
275
275
                if (flip_map) {
276
276
                        for (i = 0; i < maxVerts; dvert++, i++) {
309
309
        if (mmd->flag & MOD_MIR_AXIS_Y) {
310
310
                DerivedMesh *tmp = result;
311
311
                result = doMirrorOnAxis(mmd, ob, result, 1);
312
 
                if (tmp != dm) tmp->release(tmp); /* free intermediate results */
 
312
                if (tmp != dm) tmp->release(tmp);  /* free intermediate results */
313
313
        }
314
314
        if (mmd->flag & MOD_MIR_AXIS_Z) {
315
315
                DerivedMesh *tmp = result;
316
316
                result = doMirrorOnAxis(mmd, ob, result, 2);
317
 
                if (tmp != dm) tmp->release(tmp); /* free intermediate results */
 
317
                if (tmp != dm) tmp->release(tmp);  /* free intermediate results */
318
318
        }
319
319
 
320
320
        return result;
322
322
 
323
323
static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
324
324
                                  DerivedMesh *derivedData,
325
 
                                  int UNUSED(useRenderParams),
326
 
                                  int UNUSED(isFinalCalc))
 
325
                                  ModifierApplyFlag UNUSED(flag))
327
326
{
328
327
        DerivedMesh *result;
329
 
        MirrorModifierData *mmd = (MirrorModifierData*) md;
 
328
        MirrorModifierData *mmd = (MirrorModifierData *) md;
330
329
 
331
330
        result = mirrorModifier__doMirror(mmd, ob, derivedData);
332
331
 
340
339
                                    struct BMEditMesh *UNUSED(editData),
341
340
                                    DerivedMesh *derivedData)
342
341
{
343
 
        return applyModifier(md, ob, derivedData, 0, 1);
 
342
        return applyModifier(md, ob, derivedData, MOD_APPLY_USECACHE);
344
343
}
345
344
 
346
345
 
349
348
        /* structName */        "MirrorModifierData",
350
349
        /* structSize */        sizeof(MirrorModifierData),
351
350
        /* type */              eModifierTypeType_Constructive,
352
 
        /* flags */             eModifierTypeFlag_AcceptsMesh
353
 
                                                        | eModifierTypeFlag_SupportsMapping
354
 
                                                        | eModifierTypeFlag_SupportsEditmode
355
 
                                                        | eModifierTypeFlag_EnableInEditmode
356
 
                                                        | eModifierTypeFlag_AcceptsCVs,
 
351
        /* flags */             eModifierTypeFlag_AcceptsMesh |
 
352
                                eModifierTypeFlag_SupportsMapping |
 
353
                                eModifierTypeFlag_SupportsEditmode |
 
354
                                eModifierTypeFlag_EnableInEditmode |
 
355
                                eModifierTypeFlag_AcceptsCVs,
357
356
 
358
357
        /* copyData */          copyData,
359
358
        /* deformVerts */       NULL,