Blender  V2.93
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_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_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_object.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.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_lattice_init (Object *ob)
 
void BKE_gpencil_lattice_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)
 
static int gpencil_time_modifier (Depsgraph *depsgraph, Scene *scene, Object *ob, bGPDlayer *gpl, int cfra, 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 void gpencil_copy_activeframe_to_eval (Depsgraph *depsgraph, Scene *scene, Object *ob, bGPdata *gpd_orig, bGPdata *gpd_eval)
 
static bGPdatagpencil_copy_for_eval (bGPdata *gpd)
 
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_frame_active_set()

void BKE_gpencil_frame_active_set ( Depsgraph depsgraph,
bGPdata gpd 
)

Set current grease pencil active frame.

Parameters
depsgraphCurrent depsgraph
gpdGrease pencil data-block.

Definition at line 240 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 ( Depsgraph depsgraph,
Scene scene,
Object ob,
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 627 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_has_geometry_modifiers()

bool BKE_gpencil_has_geometry_modifiers ( Object ob)

Check if object has grease pencil Geometry modifiers.

Parameters
obGrease pencil object
Returns
True if exist

Definition at line 156 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 ( Object ob)

Check if object has grease pencil Time modifiers.

Parameters
obGrease pencil object
Returns
True if exist

Definition at line 173 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 ( Object ob)

Check if object has grease pencil transform stroke modifiers.

Parameters
obGrease pencil object
Returns
True if exist

Definition at line 190 of file gpencil_modifier.c.

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

Referenced by gpencil_sculpt_brush_init().

◆ BKE_gpencil_lattice_clear()

void BKE_gpencil_lattice_clear ( Object ob)

Clear grease pencil lattice deform data.

Parameters
obGrease pencil object

Definition at line 107 of file gpencil_modifier.c.

References BKE_lattice_deform_data_destroy(), LatticeGpencilModifierData::cache_data, eGpencilModifierType_Lattice, Object::greasepencil_modifiers, LISTBASE_FOREACH, and NULL.

Referenced by BKE_gpencil_modifiers_calc().

◆ BKE_gpencil_lattice_init()

void BKE_gpencil_lattice_init ( Object ob)

◆ 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 ( GpencilModifierData md,
GpencilModifierData target 
)

Copy grease pencil modifier data.

Parameters
mdSource modifier data
targetTarget modifier data

Definition at line 490 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 ( GpencilModifierData md,
GpencilModifierData target,
const int  flag 
)

◆ BKE_gpencil_modifier_copydata_generic()

void BKE_gpencil_modifier_copydata_generic ( const GpencilModifierData md_src,
GpencilModifierData md_dst 
)

Generic grease pencil modifier copy data.

Parameters
md_srcSource modifier data
md_dstTarget modifier data

Definition at line 429 of file gpencil_modifier.c.

References BKE_gpencil_modifier_get_info(), BLI_assert, GpencilModifierTypeInfo::freeData, GpencilModifierTypeInfo::struct_size, and GpencilModifierData::type.

◆ BKE_gpencil_modifier_depends_ontime()

bool BKE_gpencil_modifier_depends_ontime ( GpencilModifierData md)

Check if grease pencil modifier depends on time.

Parameters
mdModifier data
Returns
True if depends on time

Definition at line 382 of file gpencil_modifier.c.

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

Referenced by BKE_object_modifier_gpencil_use_time().

◆ BKE_gpencil_modifier_free()

void BKE_gpencil_modifier_free ( GpencilModifierData md)

Free grease pencil modifier data

Parameters
mdModifier data

Definition at line 357 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 ( GpencilModifierData md,
const 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 
)

Check whether given modifier is not local (i.e. from linked data) when the object is a library override.

Parameters
gmdMay be NULL, in which case we consider it as a non-local modifier case.

Definition at line 539 of file gpencil_modifier.c.

References eGpencilModifierFlag_OverrideLibrary_Local, GpencilModifierData::flag, ID_IS_OVERRIDE_LIBRARY, and NULL.

◆ 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,
  ... 
)

Set grease pencil modifier error.

Parameters
mdModifier data
_formatFormat

Definition at line 513 of file gpencil_modifier.c.

References BLI_strdup(), buffer, CLOG_STR_ERROR, GpencilModifierData::error, LOG, MEM_freeN, and TIP_.

◆ BKE_gpencil_modifier_unique_name()

bool BKE_gpencil_modifier_unique_name ( ListBase modifiers,
GpencilModifierData gmd 
)

◆ BKE_gpencil_modifiers_calc()

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

◆ BKE_gpencil_modifiers_findby_name()

GpencilModifierData* BKE_gpencil_modifiers_findby_name ( 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 592 of file gpencil_modifier.c.

References BLI_findstring(), and Object::greasepencil_modifiers.

Referenced by bakeModifier(), and 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 ( Object ob,
GreasePencilIDWalkFunc  walk,
void *  userData 
)

◆ BKE_gpencil_modifiers_foreach_tex_link()

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

Link grease pencil modifier related Texts.

Parameters
obGrease pencil object
walkWalk option
userDataUser data

Definition at line 571 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 411 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 ( Depsgraph depsgraph,
Scene scene,
Object ob 
)

◆ gpencil_assign_object_eval()

static void gpencil_assign_object_eval ( Object object)
static

◆ gpencil_copy_activeframe_to_eval()

static void gpencil_copy_activeframe_to_eval ( Depsgraph depsgraph,
Scene scene,
Object ob,
bGPdata gpd_orig,
bGPdata gpd_eval 
)
static

◆ gpencil_copy_for_eval()

static bGPdata* gpencil_copy_for_eval ( bGPdata gpd)
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 447 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 605 of file gpencil_modifier.c.

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

Referenced by BKE_gpencil_frame_retime_get(), and gpencil_copy_activeframe_to_eval().

◆ gpencil_time_modifier()

static int gpencil_time_modifier ( Depsgraph depsgraph,
Scene scene,
Object ob,
bGPDlayer gpl,
int  cfra,
bool  is_render 
)
static

◆ 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 317 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 64 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 65 of file gpencil_modifier.c.

Referenced by BKE_gpencil_modifier_get_info(), and BKE_gpencil_modifier_init().