Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/displist.c
| Show First 20 Lines • Show All 764 Lines • ▼ Show 20 Lines | else if (md->mode & eModifierMode_ApplyOnSpline) { | ||||
| pretessellatePoint = md; | pretessellatePoint = md; | ||||
| } | } | ||||
| } | } | ||||
| return pretessellatePoint; | return pretessellatePoint; | ||||
| } | } | ||||
| /* Return true if any modifier was applied. */ | /* Return true if any modifier was applied. */ | ||||
| static bool curve_calc_modifiers_pre( | bool BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph, | ||||
| Depsgraph *depsgraph, Scene *scene, Object *ob, ListBase *nurb, const bool for_render) | Scene *scene, | ||||
| Object *ob, | |||||
| ListBase *source_nurb, | |||||
| ListBase *target_nurb, | |||||
| const bool for_render) | |||||
| { | { | ||||
| VirtualModifierData virtualModifierData; | VirtualModifierData virtualModifierData; | ||||
| ModifierData *md = BKE_modifiers_get_virtual_modifierlist(ob, &virtualModifierData); | ModifierData *md = BKE_modifiers_get_virtual_modifierlist(ob, &virtualModifierData); | ||||
| ModifierData *pretessellatePoint; | ModifierData *pretessellatePoint; | ||||
| Curve *cu = ob->data; | Curve *cu = ob->data; | ||||
| int numElems = 0, numVerts = 0; | int numElems = 0, numVerts = 0; | ||||
| const bool editmode = (!for_render && (cu->editnurb || cu->editfont)); | const bool editmode = (!for_render && (cu->editnurb || cu->editfont)); | ||||
| ModifierApplyFlag apply_flag = 0; | ModifierApplyFlag apply_flag = 0; | ||||
| Show All 22 Lines | bool BKE_curve_calc_modifiers_pre(Depsgraph *depsgraph, | ||||
| if (editmode) { | if (editmode) { | ||||
| required_mode |= eModifierMode_Editmode; | required_mode |= eModifierMode_Editmode; | ||||
| } | } | ||||
| if (!editmode) { | if (!editmode) { | ||||
| keyVerts = BKE_key_evaluate_object(ob, &numElems); | keyVerts = BKE_key_evaluate_object(ob, &numElems); | ||||
| if (keyVerts) { | if (keyVerts) { | ||||
| BLI_assert(BKE_keyblock_curve_element_count(nurb) == numElems); | BLI_assert(BKE_keyblock_curve_element_count(source_nurb) == numElems); | ||||
| /* split coords from key data, the latter also includes | /* split coords from key data, the latter also includes | ||||
| * tilts, which is passed through in the modifier stack. | * tilts, which is passed through in the modifier stack. | ||||
| * this is also the reason curves do not use a virtual | * this is also the reason curves do not use a virtual | ||||
| * shape key modifier yet. */ | * shape key modifier yet. */ | ||||
| deformedVerts = BKE_curve_nurbs_key_vert_coords_alloc(nurb, keyVerts, &numVerts); | deformedVerts = BKE_curve_nurbs_key_vert_coords_alloc(source_nurb, keyVerts, &numVerts); | ||||
| } | } | ||||
| } | } | ||||
| if (pretessellatePoint) { | if (pretessellatePoint) { | ||||
| for (; md; md = md->next) { | for (; md; md = md->next) { | ||||
| const ModifierTypeInfo *mti = BKE_modifier_get_info(md->type); | const ModifierTypeInfo *mti = BKE_modifier_get_info(md->type); | ||||
| if (!BKE_modifier_is_enabled(scene, md, required_mode)) { | if (!BKE_modifier_is_enabled(scene, md, required_mode)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| if (mti->type != eModifierTypeType_OnlyDeform) { | if (mti->type != eModifierTypeType_OnlyDeform) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| if (!deformedVerts) { | if (!deformedVerts) { | ||||
| deformedVerts = BKE_curve_nurbs_vert_coords_alloc(nurb, &numVerts); | deformedVerts = BKE_curve_nurbs_vert_coords_alloc(source_nurb, &numVerts); | ||||
| } | } | ||||
| mti->deformVerts(md, &mectx, NULL, deformedVerts, numVerts); | mti->deformVerts(md, &mectx, NULL, deformedVerts, numVerts); | ||||
| modified = true; | modified = true; | ||||
| if (md == pretessellatePoint) { | if (md == pretessellatePoint) { | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (deformedVerts) { | if (deformedVerts) { | ||||
| BKE_curve_nurbs_vert_coords_apply(nurb, deformedVerts, false); | BKE_curve_nurbs_vert_coords_apply(target_nurb, deformedVerts, false); | ||||
| MEM_freeN(deformedVerts); | MEM_freeN(deformedVerts); | ||||
| } | } | ||||
| if (keyVerts) { /* these are not passed through modifier stack */ | if (keyVerts) { /* these are not passed through modifier stack */ | ||||
| BKE_curve_nurbs_key_vert_tilts_apply(nurb, keyVerts); | BKE_curve_nurbs_key_vert_tilts_apply(target_nurb, keyVerts); | ||||
| } | } | ||||
| if (keyVerts) { | if (keyVerts) { | ||||
| MEM_freeN(keyVerts); | MEM_freeN(keyVerts); | ||||
| } | } | ||||
| return modified; | return modified; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 285 Lines • ▼ Show 20 Lines | void BKE_displist_make_surf(Depsgraph *depsgraph, | ||||
| if (!for_render && cu->editnurb) { | if (!for_render && cu->editnurb) { | ||||
| BKE_nurbList_duplicate(&nubase, BKE_curve_editNurbs_get(cu)); | BKE_nurbList_duplicate(&nubase, BKE_curve_editNurbs_get(cu)); | ||||
| } | } | ||||
| else { | else { | ||||
| BKE_nurbList_duplicate(&nubase, &cu->nurb); | BKE_nurbList_duplicate(&nubase, &cu->nurb); | ||||
| } | } | ||||
| if (!for_orco) { | if (!for_orco) { | ||||
| force_mesh_conversion = curve_calc_modifiers_pre(depsgraph, scene, ob, &nubase, for_render); | force_mesh_conversion = BKE_curve_calc_modifiers_pre( | ||||
| depsgraph, scene, ob, &nubase, &nubase, for_render); | |||||
| } | } | ||||
| LISTBASE_FOREACH (Nurb *, nu, &nubase) { | LISTBASE_FOREACH (Nurb *, nu, &nubase) { | ||||
| if (!(for_render || nu->hide == 0) || !BKE_nurb_check_valid_uv(nu)) { | if (!(for_render || nu->hide == 0) || !BKE_nurb_check_valid_uv(nu)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| int resolu = nu->resolu, resolv = nu->resolv; | int resolu = nu->resolu, resolv = nu->resolv; | ||||
| ▲ Show 20 Lines • Show All 333 Lines • ▼ Show 20 Lines | else if (ELEM(ob->type, OB_CURVE, OB_FONT)) { | ||||
| if (ob->type == OB_FONT) { | if (ob->type == OB_FONT) { | ||||
| BKE_vfont_to_curve_nubase(ob, FO_EDIT, &nubase); | BKE_vfont_to_curve_nubase(ob, FO_EDIT, &nubase); | ||||
| } | } | ||||
| else { | else { | ||||
| BKE_nurbList_duplicate(&nubase, BKE_curve_nurbs_get(cu)); | BKE_nurbList_duplicate(&nubase, BKE_curve_nurbs_get(cu)); | ||||
| } | } | ||||
| if (!for_orco) { | if (!for_orco) { | ||||
| force_mesh_conversion = curve_calc_modifiers_pre(depsgraph, scene, ob, &nubase, for_render); | force_mesh_conversion = BKE_curve_calc_modifiers_pre( | ||||
| depsgraph, scene, ob, &nubase, &nubase, for_render); | |||||
| } | } | ||||
| BKE_curve_bevelList_make(ob, &nubase, for_render); | BKE_curve_bevelList_make(ob, &nubase, for_render); | ||||
| /* If curve has no bevel will return nothing */ | /* If curve has no bevel will return nothing */ | ||||
| BKE_curve_bevel_make(ob, &dlbev); | BKE_curve_bevel_make(ob, &dlbev); | ||||
| /* no bevel or extrude, and no width correction? */ | /* no bevel or extrude, and no width correction? */ | ||||
| ▲ Show 20 Lines • Show All 297 Lines • Show Last 20 Lines | |||||