Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/gpencil_geom.cc
| Show First 20 Lines • Show All 92 Lines • ▼ Show 20 Lines | |||||
| bGPdata *gpd = (bGPdata *)ob_gp->data; | bGPdata *gpd = (bGPdata *)ob_gp->data; | ||||
| /* Use evaluated data to get mesh with all modifiers on top. */ | /* Use evaluated data to get mesh with all modifiers on top. */ | ||||
| Object *ob_eval = (Object *)DEG_get_evaluated_object(depsgraph, ob_mesh); | Object *ob_eval = (Object *)DEG_get_evaluated_object(depsgraph, ob_mesh); | ||||
| const Mesh *me_eval = BKE_object_get_evaluated_mesh(ob_eval); | const Mesh *me_eval = BKE_object_get_evaluated_mesh(ob_eval); | ||||
| const Span<float3> positions = me_eval->vert_positions(); | const Span<float3> positions = me_eval->vert_positions(); | ||||
| const Span<MPoly> polys = me_eval->polys(); | const Span<MPoly> polys = me_eval->polys(); | ||||
| const Span<MLoop> loops = me_eval->loops(); | const Span<int> corner_verts = me_eval->corner_verts(); | ||||
| int mpoly_len = me_eval->totpoly; | int mpoly_len = me_eval->totpoly; | ||||
| char element_name[200]; | char element_name[200]; | ||||
| /* Need at least an edge. */ | /* Need at least an edge. */ | ||||
| if (me_eval->totedge < 1) { | if (me_eval->totedge < 1) { | ||||
| return false; | return false; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | |||||
| const Span<MDeformVert> dverts = me_eval->deform_verts(); | const Span<MDeformVert> dverts = me_eval->deform_verts(); | ||||
| if (use_vgroups && !dverts.is_empty()) { | if (use_vgroups && !dverts.is_empty()) { | ||||
| gps_fill->dvert = (MDeformVert *)MEM_callocN(sizeof(MDeformVert) * mp->totloop, | gps_fill->dvert = (MDeformVert *)MEM_callocN(sizeof(MDeformVert) * mp->totloop, | ||||
| "gp_fill_dverts"); | "gp_fill_dverts"); | ||||
| } | } | ||||
| /* Add points to strokes. */ | /* Add points to strokes. */ | ||||
| for (int j = 0; j < mp->totloop; j++) { | for (int j = 0; j < mp->totloop; j++) { | ||||
| const MLoop *ml = &loops[mp->loopstart + j]; | const int vert_i = corner_verts[mp->loopstart + j]; | ||||
| bGPDspoint *pt = &gps_fill->points[j]; | bGPDspoint *pt = &gps_fill->points[j]; | ||||
| copy_v3_v3(&pt->x, positions[ml->v]); | copy_v3_v3(&pt->x, positions[vert_i]); | ||||
| mul_m4_v3(matrix, &pt->x); | mul_m4_v3(matrix, &pt->x); | ||||
| pt->pressure = 1.0f; | pt->pressure = 1.0f; | ||||
| pt->strength = 1.0f; | pt->strength = 1.0f; | ||||
| /* Copy vertex groups from mesh. Assuming they already exist in the same order. */ | /* Copy vertex groups from mesh. Assuming they already exist in the same order. */ | ||||
| if (use_vgroups && !dverts.is_empty()) { | if (use_vgroups && !dverts.is_empty()) { | ||||
| MDeformVert *dv = &gps_fill->dvert[j]; | MDeformVert *dv = &gps_fill->dvert[j]; | ||||
| const MDeformVert *src_dv = &dverts[ml->v]; | const MDeformVert *src_dv = &dverts[vert_i]; | ||||
| dv->totweight = src_dv->totweight; | dv->totweight = src_dv->totweight; | ||||
| dv->dw = (MDeformWeight *)MEM_callocN(sizeof(MDeformWeight) * dv->totweight, | dv->dw = (MDeformWeight *)MEM_callocN(sizeof(MDeformWeight) * dv->totweight, | ||||
| "gp_fill_dverts_dw"); | "gp_fill_dverts_dw"); | ||||
| for (int k = 0; k < dv->totweight; k++) { | for (int k = 0; k < dv->totweight; k++) { | ||||
| dv->dw[k].weight = src_dv->dw[k].weight; | dv->dw[k].weight = src_dv->dw[k].weight; | ||||
| dv->dw[k].def_nr = src_dv->dw[k].def_nr; | dv->dw[k].def_nr = src_dv->dw[k].def_nr; | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 92 Lines • Show Last 20 Lines | |||||