Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_wireframe.c
| Show All 33 Lines | |||||
| static void initData(ModifierData *md) | static void initData(ModifierData *md) | ||||
| { | { | ||||
| WireframeModifierData *wmd = (WireframeModifierData *)md; | WireframeModifierData *wmd = (WireframeModifierData *)md; | ||||
| wmd->offset = 0.02f; | wmd->offset = 0.02f; | ||||
| wmd->flag = MOD_WIREFRAME_REPLACE | MOD_WIREFRAME_OFS_EVEN; | wmd->flag = MOD_WIREFRAME_REPLACE | MOD_WIREFRAME_OFS_EVEN; | ||||
| wmd->crease_weight = 1.0f; | wmd->crease_weight = 1.0f; | ||||
| } | } | ||||
| static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) | static void requiredDataMask(Object *UNUSED(ob), ModifierData *md, CustomData_MeshMasks *r_cddata_masks) | ||||
| { | { | ||||
| WireframeModifierData *wmd = (WireframeModifierData *)md; | WireframeModifierData *wmd = (WireframeModifierData *)md; | ||||
| CustomDataMask dataMask = 0; | |||||
| /* ask for vertexgroups if we need them */ | /* ask for vertexgroups if we need them */ | ||||
| if (wmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; | if (wmd->defgrp_name[0] != '\0') { | ||||
| r_cddata_masks->vmask |= CD_MASK_MDEFORMVERT; | |||||
| return dataMask; | } | ||||
| } | } | ||||
| static bool dependsOnNormals(ModifierData *UNUSED(md)) | static bool dependsOnNormals(ModifierData *UNUSED(md)) | ||||
| { | { | ||||
| return true; | return true; | ||||
| } | } | ||||
| static Mesh *WireframeModifier_do(WireframeModifierData *wmd, Object *ob, Mesh *mesh) | static Mesh *WireframeModifier_do(WireframeModifierData *wmd, Object *ob, Mesh *mesh) | ||||
| { | { | ||||
| Mesh *result; | Mesh *result; | ||||
| BMesh *bm; | BMesh *bm; | ||||
| const int defgrp_index = defgroup_name_index(ob, wmd->defgrp_name); | const int defgrp_index = defgroup_name_index(ob, wmd->defgrp_name); | ||||
| bm = BKE_mesh_to_bmesh_ex( | bm = BKE_mesh_to_bmesh_ex( | ||||
| mesh, | mesh, | ||||
| &(struct BMeshCreateParams){0}, | &(struct BMeshCreateParams){0}, | ||||
| &(struct BMeshFromMeshParams){ | &(struct BMeshFromMeshParams){ | ||||
| .calc_face_normal = true, | .calc_face_normal = true, | ||||
| .add_key_index = false, | .add_key_index = false, | ||||
| .use_shapekey = false, | .use_shapekey = false, | ||||
| .active_shapekey = 0, | .active_shapekey = 0, | ||||
| .cd_mask_extra = CD_MASK_ORIGINDEX, | .cd_mask_extra = {.vmask=CD_MASK_ORIGINDEX, .emask=CD_MASK_ORIGINDEX, .pmask=CD_MASK_ORIGINDEX}, | ||||
| }); | }); | ||||
| BM_mesh_wireframe( | BM_mesh_wireframe( | ||||
| bm, | bm, | ||||
| wmd->offset, wmd->offset_fac, wmd->offset_fac_vg, | wmd->offset, wmd->offset_fac, wmd->offset_fac_vg, | ||||
| (wmd->flag & MOD_WIREFRAME_REPLACE) != 0, | (wmd->flag & MOD_WIREFRAME_REPLACE) != 0, | ||||
| (wmd->flag & MOD_WIREFRAME_BOUNDARY) != 0, | (wmd->flag & MOD_WIREFRAME_BOUNDARY) != 0, | ||||
| (wmd->flag & MOD_WIREFRAME_OFS_EVEN) != 0, | (wmd->flag & MOD_WIREFRAME_OFS_EVEN) != 0, | ||||
| (wmd->flag & MOD_WIREFRAME_OFS_RELATIVE) != 0, | (wmd->flag & MOD_WIREFRAME_OFS_RELATIVE) != 0, | ||||
| (wmd->flag & MOD_WIREFRAME_CREASE) != 0, | (wmd->flag & MOD_WIREFRAME_CREASE) != 0, | ||||
| wmd->crease_weight, | wmd->crease_weight, | ||||
| defgrp_index, | defgrp_index, | ||||
| (wmd->flag & MOD_WIREFRAME_INVERT_VGROUP) != 0, | (wmd->flag & MOD_WIREFRAME_INVERT_VGROUP) != 0, | ||||
| wmd->mat_ofs, | wmd->mat_ofs, | ||||
| MAX2(ob->totcol - 1, 0), | MAX2(ob->totcol - 1, 0), | ||||
| false); | false); | ||||
| result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0); | result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); | ||||
| BM_mesh_free(bm); | BM_mesh_free(bm); | ||||
| result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; | result->runtime.cd_dirty_vert |= CD_MASK_NORMAL; | ||||
| return result; | return result; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 42 Lines • Show Last 20 Lines | |||||