static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob), DerivedMesh *dm, ModifierApplyFlag UNUSED(flag)) { RemeshModifierData *rmd; DualConOutput *output; DualConInput input; DerivedMesh *result; DualConFlags flags = 0; DualConMode mode = 0; DM_ensure_tessface(dm); /* BMESH - UNTIL MODIFIER IS UPDATED FOR MPoly */ rmd = (RemeshModifierData *)md; init_dualcon_mesh(&input, dm); if (rmd->flag & MOD_REMESH_FLOOD_FILL) flags |= DUALCON_FLOOD_FILL; switch (rmd->mode) { case MOD_REMESH_CENTROID: mode = DUALCON_CENTROID; break; case MOD_REMESH_MASS_POINT: mode = DUALCON_MASS_POINT; break; case MOD_REMESH_SHARP_FEATURES: mode = DUALCON_SHARP_FEATURES; break; } output = dualcon(&input, dualcon_alloc_output, dualcon_add_vert, dualcon_add_quad, flags, mode, rmd->threshold, rmd->hermite_num, rmd->scale, rmd->depth); result = output->dm; MEM_freeN(output); if (rmd->flag & MOD_REMESH_SMOOTH_SHADING) { MPoly *mpoly = CDDM_get_polys(result); int i, totpoly = result->getNumPolys(result); /* Apply smooth shading to output faces */ for (i = 0; i < totpoly; i++) { mpoly[i].flag |= ME_SMOOTH; } } CDDM_calc_edges(result); result->dirty |= DM_DIRTY_NORMALS; return result; }
static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *UNUSED(ctx), Mesh *mesh) { RemeshModifierData *rmd; DualConOutput *output; DualConInput input; Mesh *result; DualConFlags flags = 0; DualConMode mode = 0; rmd = (RemeshModifierData *)md; init_dualcon_mesh(&input, mesh); if (rmd->flag & MOD_REMESH_FLOOD_FILL) flags |= DUALCON_FLOOD_FILL; switch (rmd->mode) { case MOD_REMESH_CENTROID: mode = DUALCON_CENTROID; break; case MOD_REMESH_MASS_POINT: mode = DUALCON_MASS_POINT; break; case MOD_REMESH_SHARP_FEATURES: mode = DUALCON_SHARP_FEATURES; break; } output = dualcon(&input, dualcon_alloc_output, dualcon_add_vert, dualcon_add_quad, flags, mode, rmd->threshold, rmd->hermite_num, rmd->scale, rmd->depth); result = output->mesh; MEM_freeN(output); if (rmd->flag & MOD_REMESH_SMOOTH_SHADING) { MPoly *mpoly = result->mpoly; int i, totpoly = result->totpoly; /* Apply smooth shading to output faces */ for (i = 0; i < totpoly; i++) { mpoly[i].flag |= ME_SMOOTH; } } BKE_mesh_calc_edges(result, true, false); result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; return result; }
static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob), DerivedMesh *dm, ModifierApplyFlag UNUSED(flag)) { RemeshModifierData *rmd; DualConOutput *output; DualConInput input; DerivedMesh *result; DualConFlags flags = 0; DualConMode mode = 0; DM_ensure_tessface(dm); /* BMESH - UNTIL MODIFIER IS UPDATED FOR MPoly */ rmd = (RemeshModifierData *)md; init_dualcon_mesh(&input, dm); if (rmd->flag & MOD_REMESH_FLOOD_FILL) flags |= DUALCON_FLOOD_FILL; switch (rmd->mode) { case MOD_REMESH_CENTROID: mode = DUALCON_CENTROID; break; case MOD_REMESH_MASS_POINT: mode = DUALCON_MASS_POINT; break; case MOD_REMESH_SHARP_FEATURES: mode = DUALCON_SHARP_FEATURES; break; } output = dualcon(&input, dualcon_alloc_output, dualcon_add_vert, dualcon_add_quad, flags, mode, rmd->threshold, rmd->hermite_num, rmd->scale, rmd->depth); result = output->dm; MEM_freeN(output); CDDM_calc_edges(result); CDDM_calc_normals(result); return result; }