Blender  V3.3
Functions | Variables
gpencil_modifier.c File Reference
#include <stdio.h>
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_math_geom.h"
#include "BLI_math_vector.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "DNA_armature_types.h"
#include "DNA_gpencil_modifier_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "BKE_colortools.h"
#include "BKE_deform.h"
#include "BKE_gpencil.h"
#include "BKE_gpencil_geom.h"
#include "BKE_gpencil_modifier.h"
#include "BKE_lattice.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
#include "BKE_material.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
#include "BKE_shrinkwrap.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "MOD_gpencil_lineart.h"
#include "MOD_gpencil_modifiertypes.h"
#include "BLO_read_write.h"
#include "CLG_log.h"

Go to the source code of this file.

Functions

void BKE_gpencil_cache_data_init (Depsgraph *depsgraph, Object *ob)
 
void BKE_gpencil_cache_data_clear (Object *ob)
 
GpencilModifierDataBKE_gpencil_modifiers_get_virtual_modifierlist (const Object *ob, GpencilVirtualModifierData *UNUSED(virtualModifierData))
 
bool BKE_gpencil_has_geometry_modifiers (Object *ob)
 
bool BKE_gpencil_has_time_modifiers (Object *ob)
 
bool BKE_gpencil_has_transform_modifiers (Object *ob)
 
GpencilLineartLimitInfo BKE_gpencil_get_lineart_modifier_limits (const Object *ob)
 
void BKE_gpencil_set_lineart_modifier_limits (GpencilModifierData *md, const GpencilLineartLimitInfo *info, const bool is_first_lineart)
 
bool BKE_gpencil_is_first_lineart_in_stack (const Object *ob, const GpencilModifierData *md)
 
int BKE_gpencil_time_modifier_cfra (Depsgraph *depsgraph, Scene *scene, Object *ob, bGPDlayer *gpl, const int cfra, const bool is_render)
 
void BKE_gpencil_frame_active_set (Depsgraph *depsgraph, bGPdata *gpd)
 
void BKE_gpencil_modifier_init (void)
 
GpencilModifierDataBKE_gpencil_modifier_new (int type)
 
static void modifier_free_data_id_us_cb (void *UNUSED(userData), Object *UNUSED(ob), ID **idpoin, int cb_flag)
 
void BKE_gpencil_modifier_free_ex (GpencilModifierData *md, const int flag)
 
void BKE_gpencil_modifier_free (GpencilModifierData *md)
 
bool BKE_gpencil_modifier_unique_name (ListBase *modifiers, GpencilModifierData *gmd)
 
bool BKE_gpencil_modifier_depends_ontime (GpencilModifierData *md)
 
const GpencilModifierTypeInfoBKE_gpencil_modifier_get_info (GpencilModifierType type)
 
void BKE_gpencil_modifierType_panel_id (GpencilModifierType type, char *r_idname)
 
void BKE_gpencil_modifier_panel_expand (GpencilModifierData *md)
 
void BKE_gpencil_modifier_copydata_generic (const GpencilModifierData *md_src, GpencilModifierData *md_dst)
 
static void gpencil_modifier_copy_data_id_us_cb (void *UNUSED(userData), Object *UNUSED(ob), ID **idpoin, int cb_flag)
 
void BKE_gpencil_modifier_copydata_ex (GpencilModifierData *md, GpencilModifierData *target, const int flag)
 
void BKE_gpencil_modifier_copydata (GpencilModifierData *md, GpencilModifierData *target)
 
GpencilModifierDataBKE_gpencil_modifiers_findby_type (Object *ob, GpencilModifierType type)
 
void BKE_gpencil_modifier_set_error (GpencilModifierData *md, const char *format,...)
 
bool BKE_gpencil_modifier_is_nonlocal_in_liboverride (const Object *ob, const GpencilModifierData *gmd)
 
void BKE_gpencil_modifiers_foreach_ID_link (Object *ob, GreasePencilIDWalkFunc walk, void *userData)
 
void BKE_gpencil_modifiers_foreach_tex_link (Object *ob, GreasePencilTexWalkFunc walk, void *userData)
 
GpencilModifierDataBKE_gpencil_modifiers_findby_name (Object *ob, const char *name)
 
static int gpencil_remap_time_get (Depsgraph *depsgraph, Scene *scene, Object *ob, bGPDlayer *gpl)
 
bGPDframeBKE_gpencil_frame_retime_get (Depsgraph *depsgraph, Scene *scene, Object *ob, bGPDlayer *gpl)
 
static void gpencil_assign_object_eval (Object *object)
 
static bGPdatagpencil_copy_structure_for_eval (bGPdata *gpd)
 
static void copy_frame_to_eval_ex (bGPDframe *gpf_orig, bGPDframe *gpf_eval)
 
static void copy_frame_to_eval_cb (bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *UNUSED(gps), void *UNUSED(thunk))
 
static void gpencil_copy_visible_frames_to_eval (Depsgraph *depsgraph, Scene *scene, Object *ob)
 
void BKE_gpencil_prepare_eval_data (Depsgraph *depsgraph, Scene *scene, Object *ob)
 
void BKE_gpencil_modifiers_calc (Depsgraph *depsgraph, Scene *scene, Object *ob)
 
void BKE_gpencil_modifier_blend_write (BlendWriter *writer, ListBase *modbase)
 
void BKE_gpencil_modifier_blend_read_data (BlendDataReader *reader, ListBase *lb)
 
void BKE_gpencil_modifier_blend_read_lib (BlendLibReader *reader, Object *ob)
 

Variables

static CLG_LogRef LOG = {"bke.gpencil_modifier"}
 
static GpencilModifierTypeInfomodifier_gpencil_types [NUM_GREASEPENCIL_MODIFIER_TYPES] = {NULL}
 

Function Documentation

◆ BKE_gpencil_cache_data_clear()

void BKE_gpencil_cache_data_clear ( struct Object ob)

◆ BKE_gpencil_cache_data_init()

void BKE_gpencil_cache_data_init ( struct Depsgraph depsgraph,
struct Object ob 
)

◆ BKE_gpencil_frame_active_set()

void BKE_gpencil_frame_active_set ( struct Depsgraph depsgraph,
struct bGPdata gpd 
)

Set current grease pencil active frame.

Parameters
depsgraphCurrent depsgraph
gpdGrease pencil data-block.

Definition at line 306 of file gpencil_modifier.c.

References BKE_gpencil_layer_frame_get(), DEG_debug_print_eval(), DEG_get_ctime(), DEG_get_original_id(), DEG_is_active(), depsgraph, GP_GETFRAME_USE_PREV, bGPdata::id, bGPdata::layers, LISTBASE_FOREACH, and ID::name.

Referenced by blender::deg::DepsgraphNodeBuilder::build_object_data_geometry_datablock(), and generateStrokes().

◆ BKE_gpencil_frame_retime_get()

bGPDframe* BKE_gpencil_frame_retime_get ( struct Depsgraph depsgraph,
struct Scene scene,
struct Object ob,
struct bGPDlayer gpl 
)

Get the current frame re-timed with time modifiers.

Parameters
depsgraphCurrent depsgraph.
sceneCurrent scene.
obGrease pencil object.
gplGrease pencil layer.
Returns
New frame number.

Definition at line 607 of file gpencil_modifier.c.

References BKE_gpencil_layer_frame_get(), depsgraph, GP_GETFRAME_USE_PREV, gpencil_remap_time_get(), and scene.

Referenced by BKE_gpencil_modifiers_calc(), generateStrokes(), and GPENCIL_cache_populate().

◆ BKE_gpencil_get_lineart_modifier_limits()

GpencilLineartLimitInfo BKE_gpencil_get_lineart_modifier_limits ( const Object ob)

◆ BKE_gpencil_has_geometry_modifiers()

bool BKE_gpencil_has_geometry_modifiers ( struct Object ob)

Check if object has grease pencil Geometry modifiers.

Parameters
obGrease pencil object.
Returns
True if exist.

Definition at line 171 of file gpencil_modifier.c.

References BKE_gpencil_modifier_get_info(), GpencilModifierTypeInfo::generateStrokes, Object::greasepencil_modifiers, and LISTBASE_FOREACH.

◆ BKE_gpencil_has_time_modifiers()

bool BKE_gpencil_has_time_modifiers ( struct Object ob)

Check if object has grease pencil Time modifiers.

Parameters
obGrease pencil object.
Returns
True if exist.

Definition at line 183 of file gpencil_modifier.c.

References BKE_gpencil_modifier_get_info(), Object::greasepencil_modifiers, LISTBASE_FOREACH, and GpencilModifierTypeInfo::remapTime.

Referenced by BKE_gpencil_modifiers_calc(), GPENCIL_cache_populate(), and gpencil_remap_time_get().

◆ BKE_gpencil_has_transform_modifiers()

bool BKE_gpencil_has_transform_modifiers ( struct Object ob)

Check if object has grease pencil transform stroke modifiers.

Parameters
obGrease pencil object.
Returns
True if exist.

Definition at line 195 of file gpencil_modifier.c.

References eGpencilModifierType_Armature, eGpencilModifierType_Hook, eGpencilModifierType_Lattice, eGpencilModifierType_Offset, ELEM, GPENCIL_MODIFIER_ACTIVE, GPENCIL_MODIFIER_EDIT, Object::greasepencil_modifiers, and LISTBASE_FOREACH.

Referenced by gpencil_sculpt_brush_init().

◆ BKE_gpencil_is_first_lineart_in_stack()

bool BKE_gpencil_is_first_lineart_in_stack ( const Object ob,
const GpencilModifierData md 
)

◆ BKE_gpencil_modifier_blend_read_data()

void BKE_gpencil_modifier_blend_read_data ( BlendDataReader reader,
ListBase lb 
)

◆ BKE_gpencil_modifier_blend_read_lib()

void BKE_gpencil_modifier_blend_read_lib ( BlendLibReader reader,
Object ob 
)

◆ BKE_gpencil_modifier_blend_write()

void BKE_gpencil_modifier_blend_write ( BlendWriter writer,
ListBase modbase 
)

◆ BKE_gpencil_modifier_copydata()

void BKE_gpencil_modifier_copydata ( struct GpencilModifierData md,
struct GpencilModifierData target 
)

Copy grease pencil modifier data.

Parameters
mdSource modifier data.
targetTarget modifier data.

Definition at line 507 of file gpencil_modifier.c.

References BKE_gpencil_modifier_copydata_ex().

Referenced by ED_object_gpencil_modifier_copy().

◆ BKE_gpencil_modifier_copydata_ex()

void BKE_gpencil_modifier_copydata_ex ( struct GpencilModifierData md,
struct GpencilModifierData target,
int  flag 
)

◆ BKE_gpencil_modifier_copydata_generic()

void BKE_gpencil_modifier_copydata_generic ( const GpencilModifierData md_src,
GpencilModifierData md_dst 
)

◆ BKE_gpencil_modifier_depends_ontime()

bool BKE_gpencil_modifier_depends_ontime ( struct GpencilModifierData md)

Check if grease pencil modifier depends on time.

Parameters
mdModifier data.
Returns
True if depends on time.

Definition at line 426 of file gpencil_modifier.c.

References BKE_gpencil_modifier_get_info(), GpencilModifierTypeInfo::dependsOnTime, and GpencilModifierData::type.

Referenced by blender::deg::DepsgraphRelationBuilder::build_object_data_geometry().

◆ BKE_gpencil_modifier_free()

void BKE_gpencil_modifier_free ( struct GpencilModifierData md)

Free grease pencil modifier data

Parameters
mdModifier data.

Definition at line 407 of file gpencil_modifier.c.

References BKE_gpencil_modifier_free_ex().

Referenced by BKE_gpencil_modifier_init(), ED_object_gpencil_modifier_apply(), and gpencil_object_modifier_remove().

◆ BKE_gpencil_modifier_free_ex()

void BKE_gpencil_modifier_free_ex ( struct GpencilModifierData md,
int  flag 
)

◆ BKE_gpencil_modifier_get_info()

const GpencilModifierTypeInfo* BKE_gpencil_modifier_get_info ( GpencilModifierType  type)

◆ BKE_gpencil_modifier_init()

void BKE_gpencil_modifier_init ( void  )

◆ BKE_gpencil_modifier_is_nonlocal_in_liboverride()

bool BKE_gpencil_modifier_is_nonlocal_in_liboverride ( const Object ob,
const GpencilModifierData gmd 
)

◆ BKE_gpencil_modifier_new()

GpencilModifierData* BKE_gpencil_modifier_new ( int  type)

◆ BKE_gpencil_modifier_panel_expand()

void BKE_gpencil_modifier_panel_expand ( GpencilModifierData md)

◆ BKE_gpencil_modifier_set_error()

void BKE_gpencil_modifier_set_error ( GpencilModifierData md,
const char *  format,
  ... 
)

◆ BKE_gpencil_modifier_unique_name()

bool BKE_gpencil_modifier_unique_name ( ListBase modifiers,
GpencilModifierData gmd 
)

◆ BKE_gpencil_modifiers_calc()

void BKE_gpencil_modifiers_calc ( struct Depsgraph depsgraph,
struct Scene scene,
struct Object ob 
)

◆ BKE_gpencil_modifiers_findby_name()

GpencilModifierData* BKE_gpencil_modifiers_findby_name ( struct Object ob,
const char *  name 
)

Find grease pencil modifier by name.

Parameters
obGrease pencil object.
nameName to find.
Returns
Pointer to modifier.

Definition at line 580 of file gpencil_modifier.c.

References BLI_findstring(), and Object::greasepencil_modifiers.

Referenced by gpencil_edit_modifier_property_get().

◆ BKE_gpencil_modifiers_findby_type()

GpencilModifierData* BKE_gpencil_modifiers_findby_type ( Object ob,
GpencilModifierType  type 
)

◆ BKE_gpencil_modifiers_foreach_ID_link()

void BKE_gpencil_modifiers_foreach_ID_link ( struct Object ob,
GreasePencilIDWalkFunc  walk,
void userData 
)

◆ BKE_gpencil_modifiers_foreach_tex_link()

void BKE_gpencil_modifiers_foreach_tex_link ( struct Object ob,
GreasePencilTexWalkFunc  walk,
void userData 
)

Link grease pencil modifier related Texts.

Parameters
obGrease pencil object.
walkWalk option.
userDataUser data.

Definition at line 565 of file gpencil_modifier.c.

References BKE_gpencil_modifier_get_info(), ListBase::first, GpencilModifierTypeInfo::foreachTexLink, Object::greasepencil_modifiers, GpencilModifierData::next, and GpencilModifierData::type.

Referenced by buttons_texture_users_from_context().

◆ BKE_gpencil_modifiers_get_virtual_modifierlist()

GpencilModifierData* BKE_gpencil_modifiers_get_virtual_modifierlist ( const Object ob,
GpencilVirtualModifierData UNUSEDvirtualModifierData 
)

◆ BKE_gpencil_modifierType_panel_id()

void BKE_gpencil_modifierType_panel_id ( GpencilModifierType  type,
char *  r_idname 
)

Get the idname of the modifier type's panel, which was defined in the panelRegister callback.

Parameters
typeType of modifier.
r_idnameID name.

Definition at line 444 of file gpencil_modifier.c.

References BKE_gpencil_modifier_get_info(), GPENCIL_MODIFIER_TYPE_PANEL_PREFIX, GpencilModifierTypeInfo::name, and type.

Referenced by gpencil_modifier_panel_id(), and gpencil_modifier_panel_register().

◆ BKE_gpencil_prepare_eval_data()

void BKE_gpencil_prepare_eval_data ( struct Depsgraph depsgraph,
struct Scene scene,
struct Object ob 
)

◆ BKE_gpencil_set_lineart_modifier_limits()

void BKE_gpencil_set_lineart_modifier_limits ( GpencilModifierData md,
const GpencilLineartLimitInfo info,
const bool  is_first_lineart 
)

◆ BKE_gpencil_time_modifier_cfra()

int BKE_gpencil_time_modifier_cfra ( struct Depsgraph depsgraph,
struct Scene scene,
struct Object ob,
struct bGPDlayer gpl,
int  cfra,
bool  is_render 
)

◆ copy_frame_to_eval_cb()

static void copy_frame_to_eval_cb ( bGPDlayer gpl,
bGPDframe gpf,
bGPDstroke UNUSEDgps,
void UNUSEDthunk 
)
static

◆ copy_frame_to_eval_ex()

static void copy_frame_to_eval_ex ( bGPDframe gpf_orig,
bGPDframe gpf_eval 
)
static

◆ gpencil_assign_object_eval()

static void gpencil_assign_object_eval ( Object object)
static

◆ gpencil_copy_structure_for_eval()

static bGPdata* gpencil_copy_structure_for_eval ( bGPdata gpd)
static

◆ gpencil_copy_visible_frames_to_eval()

static void gpencil_copy_visible_frames_to_eval ( Depsgraph depsgraph,
Scene scene,
Object ob 
)
static

◆ gpencil_modifier_copy_data_id_us_cb()

static void gpencil_modifier_copy_data_id_us_cb ( void UNUSEDuserData,
Object UNUSEDob,
ID **  idpoin,
int  cb_flag 
)
static

Definition at line 475 of file gpencil_modifier.c.

References id_us_plus(), IDWALK_CB_USER, and NULL.

Referenced by BKE_gpencil_modifier_copydata_ex().

◆ gpencil_remap_time_get()

static int gpencil_remap_time_get ( Depsgraph depsgraph,
Scene scene,
Object ob,
bGPDlayer gpl 
)
static

Remap grease pencil frame (Time modifier)

Parameters
depsgraphCurrent depsgraph
sceneCurrent scene
obGrease pencil object
gplGrease pencil layer
Returns
New frame number

Definition at line 593 of file gpencil_modifier.c.

References BKE_gpencil_has_time_modifiers(), BKE_gpencil_time_modifier_cfra(), bool, DAG_EVAL_RENDER, DEG_get_ctime(), DEG_get_mode(), depsgraph, and scene.

Referenced by BKE_gpencil_frame_retime_get(), and gpencil_copy_visible_frames_to_eval().

◆ modifier_free_data_id_us_cb()

static void modifier_free_data_id_us_cb ( void UNUSEDuserData,
Object UNUSEDob,
ID **  idpoin,
int  cb_flag 
)
static

Definition at line 376 of file gpencil_modifier.c.

References id_us_min(), IDWALK_CB_USER, and NULL.

Referenced by BKE_gpencil_modifier_free_ex().

Variable Documentation

◆ LOG

CLG_LogRef LOG = {"bke.gpencil_modifier"}
static

Definition at line 53 of file gpencil_modifier.c.

Referenced by BKE_gpencil_modifier_set_error().

◆ modifier_gpencil_types

GpencilModifierTypeInfo* modifier_gpencil_types[NUM_GREASEPENCIL_MODIFIER_TYPES] = {NULL}
static

Definition at line 54 of file gpencil_modifier.c.

Referenced by BKE_gpencil_modifier_get_info(), and BKE_gpencil_modifier_init().