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

« back to all changes in this revision

Viewing changes to source/blender/modifiers/intern/MOD_boolean.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:
52
52
 
53
53
static void copyData(ModifierData *md, ModifierData *target)
54
54
{
55
 
        BooleanModifierData *bmd = (BooleanModifierData*) md;
56
 
        BooleanModifierData *tbmd = (BooleanModifierData*) target;
 
55
        BooleanModifierData *bmd = (BooleanModifierData *) md;
 
56
        BooleanModifierData *tbmd = (BooleanModifierData *) target;
57
57
 
58
58
        tbmd->object = bmd->object;
59
59
        tbmd->operation = bmd->operation;
61
61
 
62
62
static int isDisabled(ModifierData *md, int UNUSED(useRenderParams))
63
63
{
64
 
        BooleanModifierData *bmd = (BooleanModifierData*) md;
 
64
        BooleanModifierData *bmd = (BooleanModifierData *) md;
65
65
 
66
66
        return !bmd->object;
67
67
}
68
68
 
69
69
static void foreachObjectLink(
70
 
                                                  ModifierData *md, Object *ob,
71
 
           void (*walk)(void *userData, Object *ob, Object **obpoin),
72
 
                  void *userData)
 
70
        ModifierData *md, Object *ob,
 
71
        void (*walk)(void *userData, Object *ob, Object **obpoin),
 
72
        void *userData)
73
73
{
74
 
        BooleanModifierData *bmd = (BooleanModifierData*) md;
 
74
        BooleanModifierData *bmd = (BooleanModifierData *) md;
75
75
 
76
76
        walk(userData, ob, &bmd->object);
77
77
}
78
78
 
79
79
static void updateDepgraph(ModifierData *md, DagForest *forest,
80
 
                                                struct Scene *UNUSED(scene),
81
 
                                                Object *UNUSED(ob),
82
 
                                                DagNode *obNode)
 
80
                           struct Scene *UNUSED(scene),
 
81
                           Object *UNUSED(ob),
 
82
                           DagNode *obNode)
83
83
{
84
 
        BooleanModifierData *bmd = (BooleanModifierData*) md;
 
84
        BooleanModifierData *bmd = (BooleanModifierData *) md;
85
85
 
86
86
        if (bmd->object) {
87
87
                DagNode *curNode = dag_get_node(forest, bmd->object);
97
97
        DerivedMesh *result = NULL;
98
98
 
99
99
        if (derivedData->getNumPolys(derivedData) == 0 || dm->getNumPolys(dm) == 0) {
100
 
                switch(operation) {
 
100
                switch (operation) {
101
101
                        case eBooleanModifierOp_Intersect:
102
102
                                result = CDDM_new(0, 0, 0, 0, 0);
103
103
                                break;
118
118
}
119
119
 
120
120
static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
121
 
                                                DerivedMesh *derivedData,
122
 
                                                int UNUSED(useRenderParams),
123
 
                                                int UNUSED(isFinalCalc))
 
121
                                  DerivedMesh *derivedData,
 
122
                                  ModifierApplyFlag UNUSED(flag))
124
123
{
125
 
        BooleanModifierData *bmd = (BooleanModifierData*) md;
 
124
        BooleanModifierData *bmd = (BooleanModifierData *) md;
126
125
        DerivedMesh *dm;
127
126
 
128
127
        if (!bmd->object)
129
128
                return derivedData;
130
129
 
131
 
        dm = bmd->object->derivedFinal;
 
130
 
 
131
        /* 2.63 used this... */
 
132
        /* dm = bmd->object->derivedFinal; */
 
133
 
 
134
        /* but we want to make sure we can get the object
 
135
         * in some cases the depsgraph fails us - especially for objects
 
136
         * in other scenes when compositing */
 
137
        if (bmd->object != ob) {
 
138
                /* weak! - but we can too easy end up with circular dep crash otherwise */
 
139
                if (modifiers_findByType(bmd->object, eModifierType_Boolean) == NULL) {
 
140
                        dm = mesh_get_derived_final(md->scene, bmd->object, CD_MASK_MESH);
 
141
                }
 
142
                else {
 
143
                        dm = bmd->object->derivedFinal;
 
144
                }
 
145
        }
 
146
        else {
 
147
                dm = NULL;
 
148
        }
132
149
 
133
150
        if (dm) {
134
151
                DerivedMesh *result;
146
163
                        // TIMEIT_START(NewBooleanDerivedMesh)
147
164
 
148
165
                        result = NewBooleanDerivedMesh(dm, bmd->object, derivedData, ob,
149
 
                                        1 + bmd->operation);
 
166
                                                       1 + bmd->operation);
150
167
 
151
168
                        // TIMEIT_END(NewBooleanDerivedMesh)
152
169
                }
156
173
                if (result)
157
174
                        return result;
158
175
                else
159
 
                        modifier_setError(md, "%s", TIP_("Can't execute boolean operation."));
 
176
                        modifier_setError(md, "Cannot execute boolean operation");
160
177
        }
161
178
        
162
179
        return derivedData;
163
180
}
164
181
#else // WITH_MOD_BOOLEAN
165
182
static DerivedMesh *applyModifier(ModifierData *UNUSED(md), Object *UNUSED(ob),
166
 
                                                DerivedMesh *derivedData,
167
 
                                                int UNUSED(useRenderParams),
168
 
                                                int UNUSED(isFinalCalc))
 
183
                                  DerivedMesh *derivedData,
 
184
                                  ModifierApplyFlag UNUSED(flag))
169
185
{
170
186
        return derivedData;
171
187
}
186
202
        /* structName */        "BooleanModifierData",
187
203
        /* structSize */        sizeof(BooleanModifierData),
188
204
        /* type */              eModifierTypeType_Nonconstructive,
189
 
        /* flags */             eModifierTypeFlag_AcceptsMesh
190
 
                                                        | eModifierTypeFlag_UsesPointCache,
 
205
        /* flags */             eModifierTypeFlag_AcceptsMesh |
 
206
                                eModifierTypeFlag_UsesPointCache,
191
207
 
192
208
        /* copyData */          copyData,
193
209
        /* deformVerts */       NULL,
202
218
        /* isDisabled */        isDisabled,
203
219
        /* updateDepgraph */    updateDepgraph,
204
220
        /* dependsOnTime */     NULL,
205
 
        /* dependsOnNormals */  NULL,
 
221
        /* dependsOnNormals */  NULL,
206
222
        /* foreachObjectLink */ foreachObjectLink,
207
223
        /* foreachIDLink */     NULL,
208
224
        /* foreachTexLink */    NULL,