Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/gpencil_modifier.c
| Show All 27 Lines | |||||
| #include "BLI_blenlib.h" | #include "BLI_blenlib.h" | ||||
| #include "BLI_math_geom.h" | #include "BLI_math_geom.h" | ||||
| #include "BLI_math_vector.h" | #include "BLI_math_vector.h" | ||||
| #include "BLI_string_utils.h" | #include "BLI_string_utils.h" | ||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "BLT_translation.h" | #include "BLT_translation.h" | ||||
| #include "DNA_armature_types.h" | |||||
| #include "DNA_gpencil_modifier_types.h" | #include "DNA_gpencil_modifier_types.h" | ||||
| #include "DNA_gpencil_types.h" | #include "DNA_gpencil_types.h" | ||||
| #include "DNA_meshdata_types.h" | #include "DNA_meshdata_types.h" | ||||
| #include "DNA_object_types.h" | #include "DNA_object_types.h" | ||||
| #include "DNA_scene_types.h" | #include "DNA_scene_types.h" | ||||
| #include "BKE_gpencil.h" | #include "BKE_gpencil.h" | ||||
| #include "BKE_gpencil_geom.h" | #include "BKE_gpencil_geom.h" | ||||
| #include "BKE_gpencil_modifier.h" | #include "BKE_gpencil_modifier.h" | ||||
| #include "BKE_lattice.h" | #include "BKE_lattice.h" | ||||
| #include "BKE_lib_id.h" | #include "BKE_lib_id.h" | ||||
| #include "BKE_lib_query.h" | #include "BKE_lib_query.h" | ||||
| #include "BKE_material.h" | #include "BKE_material.h" | ||||
| #include "BKE_object.h" | #include "BKE_object.h" | ||||
| #include "DEG_depsgraph.h" | #include "DEG_depsgraph.h" | ||||
| #include "DEG_depsgraph_query.h" | #include "DEG_depsgraph_query.h" | ||||
| #include "MOD_gpencil_modifiertypes.h" | #include "MOD_gpencil_modifiertypes.h" | ||||
| #include "CLG_log.h" | #include "CLG_log.h" | ||||
| static CLG_LogRef LOG = {"bke.gpencil_modifier"}; | static CLG_LogRef LOG = {"bke.gpencil_modifier"}; | ||||
| static GpencilModifierTypeInfo *modifier_gpencil_types[NUM_GREASEPENCIL_MODIFIER_TYPES] = {NULL}; | static GpencilModifierTypeInfo *modifier_gpencil_types[NUM_GREASEPENCIL_MODIFIER_TYPES] = {NULL}; | ||||
| static GpencilVirtualModifierData virtualModifierCommonData; | |||||
| /* Lattice Modifier ---------------------------------- */ | /* Lattice Modifier ---------------------------------- */ | ||||
| /* Usually, evaluation of the lattice modifier is self-contained. | /* Usually, evaluation of the lattice modifier is self-contained. | ||||
| * However, since GP's modifiers operate on a per-stroke basis, | * However, since GP's modifiers operate on a per-stroke basis, | ||||
| * we need to these two extra functions that called before/after | * we need to these two extra functions that called before/after | ||||
| * each loop over all the geometry being evaluated. | * each loop over all the geometry being evaluated. | ||||
| */ | */ | ||||
| Show All 37 Lines | if (md->type == eGpencilModifierType_Lattice) { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* *************************************************** */ | /* *************************************************** */ | ||||
| /* Modifier Methods - Evaluation Loops, etc. */ | /* Modifier Methods - Evaluation Loops, etc. */ | ||||
| /* This is to include things that are not modifiers in the evaluation of the modifier stack, for | |||||
| * example parenting to an armature. */ | |||||
| GpencilModifierData *BKE_gpencil_modifiers_get_virtual_modifierlist( | |||||
| const Object *ob, GpencilVirtualModifierData *virtualModifierData) | |||||
| { | |||||
| GpencilModifierData *md = ob->greasepencil_modifiers.first; | |||||
| *virtualModifierData = virtualModifierCommonData; | |||||
| if (ob->parent) { | |||||
| if (ob->parent->type == OB_ARMATURE && ob->partype == PARSKEL) { | |||||
| virtualModifierData->amd.object = ob->parent; | |||||
| virtualModifierData->amd.modifier.next = md; | |||||
| virtualModifierData->amd.deformflag = ((bArmature *)(ob->parent->data))->deformflag; | |||||
| md = &virtualModifierData->amd.modifier; | |||||
| } | |||||
| else if (ob->parent->type == OB_LATTICE && ob->partype == PARSKEL) { | |||||
| virtualModifierData->lmd.object = ob->parent; | |||||
| virtualModifierData->lmd.modifier.next = md; | |||||
| md = &virtualModifierData->lmd.modifier; | |||||
| } | |||||
| } | |||||
| return md; | |||||
| } | |||||
| /** | /** | ||||
| * Check if object has grease pencil Geometry modifiers. | * Check if object has grease pencil Geometry modifiers. | ||||
| * \param ob: Grease pencil object | * \param ob: Grease pencil object | ||||
| * \return True if exist | * \return True if exist | ||||
| */ | */ | ||||
| bool BKE_gpencil_has_geometry_modifiers(Object *ob) | bool BKE_gpencil_has_geometry_modifiers(Object *ob) | ||||
| { | { | ||||
| LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) { | LISTBASE_FOREACH (GpencilModifierData *, md, &ob->greasepencil_modifiers) { | ||||
| ▲ Show 20 Lines • Show All 101 Lines • ▼ Show 20 Lines | void BKE_gpencil_frame_active_set(Depsgraph *depsgraph, bGPdata *gpd) | ||||
| } | } | ||||
| } | } | ||||
| /** | /** | ||||
| * Initialize grease pencil modifier. | * Initialize grease pencil modifier. | ||||
| */ | */ | ||||
| void BKE_gpencil_modifier_init(void) | void BKE_gpencil_modifier_init(void) | ||||
| { | { | ||||
| GpencilModifierData *md; | |||||
| /* Initialize modifier types */ | /* Initialize modifier types */ | ||||
| gpencil_modifier_type_init(modifier_gpencil_types); /* MOD_gpencil_util.c */ | gpencil_modifier_type_init(modifier_gpencil_types); /* MOD_gpencil_util.c */ | ||||
| /* Initialize global cmmon storage used for virtual modifier list */ | |||||
| md = BKE_gpencil_modifier_new(eGpencilModifierType_Armature); | |||||
| virtualModifierCommonData.amd = *((ArmatureGpencilModifierData *)md); | |||||
| BKE_gpencil_modifier_free(md); | |||||
| md = BKE_gpencil_modifier_new(eGpencilModifierType_Lattice); | |||||
| virtualModifierCommonData.lmd = *((LatticeGpencilModifierData *)md); | |||||
| BKE_gpencil_modifier_free(md); | |||||
| virtualModifierCommonData.amd.modifier.mode |= eGpencilModifierMode_Virtual; | |||||
| virtualModifierCommonData.lmd.modifier.mode |= eGpencilModifierMode_Virtual; | |||||
| } | } | ||||
| /** | /** | ||||
| * Create new grease pencil modifier. | * Create new grease pencil modifier. | ||||
| * \param type: Type of modifier | * \param type: Type of modifier | ||||
| * \return New modifier pointer | * \return New modifier pointer | ||||
| */ | */ | ||||
| GpencilModifierData *BKE_gpencil_modifier_new(int type) | GpencilModifierData *BKE_gpencil_modifier_new(int type) | ||||
| ▲ Show 20 Lines • Show All 499 Lines • Show Last 20 Lines | |||||