Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_decimate.c
| Show All 39 Lines | |||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "MEM_guardedalloc.h" | #include "MEM_guardedalloc.h" | ||||
| #include "BKE_deform.h" | #include "BKE_deform.h" | ||||
| #include "BKE_mesh.h" | #include "BKE_mesh.h" | ||||
| #include "BKE_library.h" | #include "BKE_library.h" | ||||
| #include "DEG_depsgraph_query.h" | |||||
| #include "bmesh.h" | #include "bmesh.h" | ||||
| #include "bmesh_tools.h" | #include "bmesh_tools.h" | ||||
| // #define USE_TIMEIT | // #define USE_TIMEIT | ||||
| #ifdef USE_TIMEIT | #ifdef USE_TIMEIT | ||||
| # include "PIL_time.h" | # include "PIL_time.h" | ||||
| # include "PIL_time_utildefines.h" | # include "PIL_time_utildefines.h" | ||||
| Show All 18 Lines | static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) | ||||
| /* ask for vertexgroups if we need them */ | /* ask for vertexgroups if we need them */ | ||||
| if (dmd->defgrp_name[0] && (dmd->defgrp_factor > 0.0f)) { | if (dmd->defgrp_name[0] && (dmd->defgrp_factor > 0.0f)) { | ||||
| dataMask |= CD_MASK_MDEFORMVERT; | dataMask |= CD_MASK_MDEFORMVERT; | ||||
| } | } | ||||
| return dataMask; | return dataMask; | ||||
| } | } | ||||
| static DecimateModifierData *getOriginalModifierData( | |||||
| const DecimateModifierData *dmd, const ModifierEvalContext *ctx) | |||||
| { | |||||
| Object *ob_orig = DEG_get_original_object(ctx->object); | |||||
| return (DecimateModifierData *)modifiers_findByName(ob_orig, dmd->modifier.name); | |||||
| } | |||||
| static Mesh *applyModifier( | static Mesh *applyModifier( | ||||
| ModifierData *md, const ModifierEvalContext *ctx, | ModifierData *md, const ModifierEvalContext *ctx, | ||||
| Mesh *meshData) | Mesh *meshData) | ||||
| { | { | ||||
| DecimateModifierData *dmd = (DecimateModifierData *) md; | DecimateModifierData *dmd = (DecimateModifierData *) md; | ||||
| Mesh *mesh = meshData, *result = NULL; | Mesh *mesh = meshData, *result = NULL; | ||||
| BMesh *bm; | BMesh *bm; | ||||
| bool calc_face_normal; | bool calc_face_normal; | ||||
| ▲ Show 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | case MOD_DECIM_MODE_DISSOLVE: | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| if (vweights) { | if (vweights) { | ||||
| MEM_freeN(vweights); | MEM_freeN(vweights); | ||||
| } | } | ||||
| if (DEG_is_active(ctx->depsgraph)) { | |||||
| /* update for display only */ | /* update for display only */ | ||||
| dmd->face_count = bm->totface; | DecimateModifierData *dmd_orig = getOriginalModifierData(dmd, ctx); | ||||
| dmd_orig->face_count = bm->totface; | |||||
| } | |||||
| result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); | result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); | ||||
| BLI_assert(bm->vtoolflagpool == NULL && | BLI_assert(bm->vtoolflagpool == NULL && | ||||
| bm->etoolflagpool == NULL && | bm->etoolflagpool == NULL && | ||||
| bm->ftoolflagpool == NULL); /* make sure we never alloc'd these */ | bm->ftoolflagpool == NULL); /* make sure we never alloc'd these */ | ||||
| BLI_assert(bm->vtable == NULL && | BLI_assert(bm->vtable == NULL && | ||||
| bm->etable == NULL && | bm->etable == NULL && | ||||
| bm->ftable == NULL); | bm->ftable == NULL); | ||||
| ▲ Show 20 Lines • Show All 44 Lines • Show Last 20 Lines | |||||