Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/mesh/meshtools.c
| Show First 20 Lines • Show All 91 Lines • ▼ Show 20 Lines | static void join_mesh_single( | ||||
| MLoop *mloop = *mloop_pp; | MLoop *mloop = *mloop_pp; | ||||
| MPoly *mpoly = *mpoly_pp; | MPoly *mpoly = *mpoly_pp; | ||||
| if (me->totvert) { | if (me->totvert) { | ||||
| /* merge customdata flag */ | /* merge customdata flag */ | ||||
| ((Mesh *)ob_dst->data)->cd_flag |= me->cd_flag; | ((Mesh *)ob_dst->data)->cd_flag |= me->cd_flag; | ||||
| /* standard data */ | /* standard data */ | ||||
| CustomData_merge(&me->vdata, vdata, CD_MASK_MESH, CD_DEFAULT, totvert); | CustomData_merge(&me->vdata, vdata, CD_MASK_MESH.vmask, CD_DEFAULT, totvert); | ||||
| CustomData_copy_data_named(&me->vdata, vdata, 0, *vertofs, me->totvert); | CustomData_copy_data_named(&me->vdata, vdata, 0, *vertofs, me->totvert); | ||||
| /* vertex groups */ | /* vertex groups */ | ||||
| MDeformVert *dvert = CustomData_get(vdata, *vertofs, CD_MDEFORMVERT); | MDeformVert *dvert = CustomData_get(vdata, *vertofs, CD_MDEFORMVERT); | ||||
| MDeformVert *dvert_src = CustomData_get(&me->vdata, 0, CD_MDEFORMVERT); | MDeformVert *dvert_src = CustomData_get(&me->vdata, 0, CD_MDEFORMVERT); | ||||
| /* Remap to correct new vgroup indices, if needed. */ | /* Remap to correct new vgroup indices, if needed. */ | ||||
| if (dvert_src) { | if (dvert_src) { | ||||
| ▲ Show 20 Lines • Show All 77 Lines • ▼ Show 20 Lines | else { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (me->totedge) { | if (me->totedge) { | ||||
| CustomData_merge(&me->edata, edata, CD_MASK_MESH, CD_DEFAULT, totedge); | CustomData_merge(&me->edata, edata, CD_MASK_MESH.emask, CD_DEFAULT, totedge); | ||||
| CustomData_copy_data_named(&me->edata, edata, 0, *edgeofs, me->totedge); | CustomData_copy_data_named(&me->edata, edata, 0, *edgeofs, me->totedge); | ||||
| for (a = 0; a < me->totedge; a++, medge++) { | for (a = 0; a < me->totedge; a++, medge++) { | ||||
| medge->v1 += *vertofs; | medge->v1 += *vertofs; | ||||
| medge->v2 += *vertofs; | medge->v2 += *vertofs; | ||||
| } | } | ||||
| } | } | ||||
| if (me->totloop) { | if (me->totloop) { | ||||
| if (ob_src != ob_dst) { | if (ob_src != ob_dst) { | ||||
| MultiresModifierData *mmd; | MultiresModifierData *mmd; | ||||
| multiresModifier_prepare_join(depsgraph, scene, ob_src, ob_dst); | multiresModifier_prepare_join(depsgraph, scene, ob_src, ob_dst); | ||||
| if ((mmd = get_multires_modifier(scene, ob_src, true))) { | if ((mmd = get_multires_modifier(scene, ob_src, true))) { | ||||
| ED_object_iter_other(bmain, ob_src, true, | ED_object_iter_other(bmain, ob_src, true, | ||||
| ED_object_multires_update_totlevels_cb, | ED_object_multires_update_totlevels_cb, | ||||
| &mmd->totlvl); | &mmd->totlvl); | ||||
| } | } | ||||
| } | } | ||||
| CustomData_merge(&me->ldata, ldata, CD_MASK_MESH, CD_DEFAULT, totloop); | CustomData_merge(&me->ldata, ldata, CD_MASK_MESH.lmask, CD_DEFAULT, totloop); | ||||
| CustomData_copy_data_named(&me->ldata, ldata, 0, *loopofs, me->totloop); | CustomData_copy_data_named(&me->ldata, ldata, 0, *loopofs, me->totloop); | ||||
| for (a = 0; a < me->totloop; a++, mloop++) { | for (a = 0; a < me->totloop; a++, mloop++) { | ||||
| mloop->v += *vertofs; | mloop->v += *vertofs; | ||||
| mloop->e += *edgeofs; | mloop->e += *edgeofs; | ||||
| } | } | ||||
| } | } | ||||
| if (me->totpoly) { | if (me->totpoly) { | ||||
| if (matmap) { | if (matmap) { | ||||
| /* make mapping for materials */ | /* make mapping for materials */ | ||||
| for (a = 1; a <= ob_src->totcol; a++) { | for (a = 1; a <= ob_src->totcol; a++) { | ||||
| Material *ma = give_current_material(ob_src, a); | Material *ma = give_current_material(ob_src, a); | ||||
| for (b = 0; b < totcol; b++) { | for (b = 0; b < totcol; b++) { | ||||
| if (ma == matar[b]) { | if (ma == matar[b]) { | ||||
| matmap[a - 1] = b; | matmap[a - 1] = b; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| CustomData_merge(&me->pdata, pdata, CD_MASK_MESH, CD_DEFAULT, totpoly); | CustomData_merge(&me->pdata, pdata, CD_MASK_MESH.pmask, CD_DEFAULT, totpoly); | ||||
| CustomData_copy_data_named(&me->pdata, pdata, 0, *polyofs, me->totpoly); | CustomData_copy_data_named(&me->pdata, pdata, 0, *polyofs, me->totpoly); | ||||
| for (a = 0; a < me->totpoly; a++, mpoly++) { | for (a = 0; a < me->totpoly; a++, mpoly++) { | ||||
| mpoly->loopstart += *loopofs; | mpoly->loopstart += *loopofs; | ||||
| mpoly->mat_nr = matmap ? matmap[mpoly->mat_nr] : 0; | mpoly->mat_nr = matmap ? matmap[mpoly->mat_nr] : 0; | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 833 Lines • ▼ Show 20 Lines | bool ED_mesh_pick_face_vert(bContext *C, Object *ob, const int mval[2], unsigned int *index, int size) | ||||
| BLI_assert(me && GS(me->id.name) == ID_ME); | BLI_assert(me && GS(me->id.name) == ID_ME); | ||||
| if (ED_mesh_pick_face(C, ob, mval, &poly_index, size)) { | if (ED_mesh_pick_face(C, ob, mval, &poly_index, size)) { | ||||
| Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); | ||||
| Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob); | Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob); | ||||
| struct ARegion *ar = CTX_wm_region(C); | struct ARegion *ar = CTX_wm_region(C); | ||||
| /* derived mesh to find deformed locations */ | /* derived mesh to find deformed locations */ | ||||
| Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, CD_MASK_BAREMESH | CD_MASK_ORIGINDEX); | CustomData_Masks cddata_masks = CD_MASK_BAREMESH_ORIGINDEX; | ||||
| Mesh *me_eval = mesh_get_eval_final(depsgraph, scene_eval, ob_eval, cddata_masks); | |||||
| int v_idx_best = ORIGINDEX_NONE; | int v_idx_best = ORIGINDEX_NONE; | ||||
| /* find the vert closest to 'mval' */ | /* find the vert closest to 'mval' */ | ||||
| const float mval_f[2] = {UNPACK2(mval)}; | const float mval_f[2] = {UNPACK2(mval)}; | ||||
| float len_best = FLT_MAX; | float len_best = FLT_MAX; | ||||
| MPoly *me_eval_mpoly; | MPoly *me_eval_mpoly; | ||||
| ▲ Show 20 Lines • Show All 248 Lines • Show Last 20 Lines | |||||