Blender V4.3
grease_pencil.cc File Reference
#include <iostream>
#include <optional>
#include "BKE_action.hh"
#include "BKE_anim_data.hh"
#include "BKE_animsys.h"
#include "BKE_bake_data_block_id.hh"
#include "BKE_curves.hh"
#include "BKE_customdata.hh"
#include "BKE_deform.hh"
#include "BKE_geometry_set.hh"
#include "BKE_grease_pencil.h"
#include "BKE_grease_pencil.hh"
#include "BKE_idtype.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_query.hh"
#include "BKE_main.hh"
#include "BKE_material.h"
#include "BKE_modifier.hh"
#include "BKE_object.hh"
#include "BKE_object_types.hh"
#include "BLI_bounds.hh"
#include "BLI_enumerable_thread_specific.hh"
#include "BLI_map.hh"
#include "BLI_math_euler_types.hh"
#include "BLI_math_geom.h"
#include "BLI_math_matrix.h"
#include "BLI_math_matrix.hh"
#include "BLI_math_matrix_types.hh"
#include "BLI_math_vector_types.hh"
#include "BLI_memarena.h"
#include "BLI_memory_utils.hh"
#include "BLI_polyfill_2d.h"
#include "BLI_span.hh"
#include "BLI_stack.hh"
#include "BLI_string.h"
#include "BLI_string_ref.hh"
#include "BLI_string_utils.hh"
#include "BLI_utildefines.h"
#include "BLI_vector_set.hh"
#include "BLI_virtual_array.hh"
#include "BLO_read_write.hh"
#include "BLT_translation.hh"
#include "DNA_ID.h"
#include "DNA_ID_enums.h"
#include "DNA_brush_types.h"
#include "DNA_defaults.h"
#include "DNA_gpencil_modifier_types.h"
#include "DNA_grease_pencil_types.h"
#include "DNA_material_types.h"
#include "DNA_modifier_types.h"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_query.hh"
#include "MEM_guardedalloc.h"

Go to the source code of this file.

Namespaces

namespace  blender
 
namespace  blender::bke
 
namespace  blender::bke::greasepencil
 

Functions

static void grease_pencil_init_data (ID *id)
 
static void grease_pencil_copy_data (Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
 
static void grease_pencil_free_data (ID *id)
 
static void grease_pencil_foreach_id (ID *id, LibraryForeachIDData *data)
 
static void grease_pencil_blend_write (BlendWriter *writer, ID *id, const void *id_address)
 
static void grease_pencil_blend_read_data (BlendDataReader *reader, ID *id)
 
static int blender::bke::greasepencil::domain_num (const CurvesGeometry &curves, const AttrDomain domain)
 
static CustomDatablender::bke::greasepencil::domain_custom_data (CurvesGeometry &curves, const AttrDomain domain)
 
template<typename T >
static MutableSpan< Tblender::bke::greasepencil::get_mutable_attribute (CurvesGeometry &curves, const AttrDomain domain, const StringRef name, const T default_value=T())
 
static void blender::bke::greasepencil::update_triangle_cache (const Span< float3 > positions, const Span< float3 > normals, const OffsetIndices< int > points_by_curve, const OffsetIndices< int > triangle_offsets, const IndexMask &curve_mask, MutableSpan< uint3 > triangles)
 
static void blender::bke::greasepencil::update_curve_plane_normal_cache (const Span< float3 > positions, const OffsetIndices< int > points_by_curve, const IndexMask &curve_mask, MutableSpan< float3 > normals)
 
static float4x2 blender::bke::greasepencil::get_local_to_stroke_matrix (const Span< float3 > positions, const float3 normal)
 
static float3x2 blender::bke::greasepencil::get_stroke_to_texture_matrix (const float uv_rotation, const float2 uv_translation, const float2 uv_scale)
 
static float4x3 blender::bke::greasepencil::expand_4x2_mat (float4x2 strokemat)
 
void blender::bke::greasepencil::copy_drawing_array (Span< const GreasePencilDrawingBase * > src_drawings, MutableSpan< GreasePencilDrawingBase * > dst_drawings)
 
Drawing array read/write functions
static void read_drawing_array (GreasePencil &grease_pencil, BlendDataReader *reader)
 
static void write_drawing_array (GreasePencil &grease_pencil, BlendWriter *writer)
 
static void free_drawing_array (GreasePencil &grease_pencil)
 
Layer tree read/write functions
static void read_layer_tree (GreasePencil &grease_pencil, BlendDataReader *reader)
 
static void write_layer_tree (GreasePencil &grease_pencil, BlendWriter *writer)
 
static void read_layer (BlendDataReader *reader, GreasePencilLayer *node, GreasePencilLayerTreeGroup *parent)
 
static void read_layer_tree_group (BlendDataReader *reader, GreasePencilLayerTreeGroup *node, GreasePencilLayerTreeGroup *parent)
 
static void write_layer (BlendWriter *writer, GreasePencilLayer *node)
 
static void write_layer_tree_group (BlendWriter *writer, GreasePencilLayerTreeGroup *node)
 
Grease Pencil kernel functions
bool BKE_grease_pencil_drawing_attribute_required (const GreasePencilDrawing *, const char *name)
 
void * BKE_grease_pencil_add (Main *bmain, const char *name)
 
GreasePencilBKE_grease_pencil_new_nomain ()
 
GreasePencilBKE_grease_pencil_copy_for_eval (const GreasePencil *grease_pencil_src)
 
void BKE_grease_pencil_copy_parameters (const GreasePencil &src, GreasePencil &dst)
 
void BKE_grease_pencil_copy_layer_parameters (const blender::bke::greasepencil::Layer &src, blender::bke::greasepencil::Layer &dst)
 
void BKE_grease_pencil_copy_layer_group_parameters (const blender::bke::greasepencil::LayerGroup &src, blender::bke::greasepencil::LayerGroup &dst)
 
void BKE_grease_pencil_nomain_to_grease_pencil (GreasePencil *grease_pencil_src, GreasePencil *grease_pencil_dst)
 
void BKE_grease_pencil_vgroup_name_update (Object *ob, const char *old_name, const char *new_name)
 
static void grease_pencil_evaluate_modifiers (Depsgraph *depsgraph, Scene *scene, Object *object, blender::bke::GeometrySet &geometry_set)
 
static void grease_pencil_do_layer_adjustments (GreasePencil &grease_pencil)
 
void BKE_grease_pencil_data_update (Depsgraph *depsgraph, Scene *scene, Object *object)
 
void BKE_grease_pencil_duplicate_drawing_array (const GreasePencil *grease_pencil_src, GreasePencil *grease_pencil_dst)
 
Grease Pencil origin functions
Note
Used for "move only origins" in object_data_transform.cc.
int BKE_grease_pencil_stroke_point_count (const GreasePencil &grease_pencil)
 
void BKE_grease_pencil_point_coords_get (const GreasePencil &grease_pencil, GreasePencilPointCoordinates *elem_data)
 
void BKE_grease_pencil_point_coords_apply (GreasePencil &grease_pencil, GreasePencilPointCoordinates *elem_data)
 
void BKE_grease_pencil_point_coords_apply_with_mat4 (GreasePencil &grease_pencil, GreasePencilPointCoordinates *elem_data, const blender::float4x4 &mat)
 
Grease Pencil material functions
int BKE_grease_pencil_object_material_index_get_by_name (Object *ob, const char *name)
 
MaterialBKE_grease_pencil_object_material_new (Main *bmain, Object *ob, const char *name, int *r_index)
 
MaterialBKE_grease_pencil_object_material_from_brush_get (Object *ob, Brush *brush)
 
MaterialBKE_grease_pencil_object_material_ensure_by_name (Main *bmain, Object *ob, const char *name, int *r_index)
 
MaterialBKE_grease_pencil_brush_material_get (Brush *brush)
 
MaterialBKE_grease_pencil_object_material_ensure_from_brush (Main *bmain, Object *ob, Brush *brush)
 
MaterialBKE_grease_pencil_object_material_ensure_from_active_input_brush (Main *bmain, Object *ob, Brush *brush)
 
MaterialBKE_grease_pencil_object_material_ensure_from_active_input_material (Object *ob)
 
MaterialBKE_grease_pencil_object_material_ensure_active (Object *ob)
 
void BKE_grease_pencil_material_remap (GreasePencil *grease_pencil, const uint *remap, int totcol)
 
void BKE_grease_pencil_material_index_remove (GreasePencil *grease_pencil, const int index)
 
bool BKE_grease_pencil_material_index_used (GreasePencil *grease_pencil, int index)
 
Grease Pencil reference functions
static bool grease_pencil_references_cyclic_check_internal (const GreasePencil *id_reference, const GreasePencil *grease_pencil)
 
bool BKE_grease_pencil_references_cyclic_check (const GreasePencil *id_reference, const GreasePencil *grease_pencil)
 
Grease Pencil data-block API
template<typename T >
static void grow_array (T **array, int *num, const int add_num)
 
template<typename T >
static void shrink_array (T **array, int *num, const int shrink_num)
 
static void delete_drawing (GreasePencilDrawingBase *drawing_base)
 
static void transform_positions (const Span< blender::float3 > src, const blender::float4x4 &transform, blender::MutableSpan< blender::float3 > dst)
 
static blender::VectorSet< blender::StringRefNullget_node_names (const GreasePencil &grease_pencil)
 
static bool check_unique_node_cb (void *arg, const char *name)
 
static void unique_node_name_ex (VectorSet< blender::StringRefNull > &names, const char *default_name, char *name)
 
static std::string unique_node_name (const GreasePencil &grease_pencil, const char *default_name, blender::StringRef name)
 
static std::string unique_layer_group_name (const GreasePencil &grease_pencil, blender::StringRefNull name)
 
static void reorder_customdata (CustomData &data, const Span< int > new_by_old_map)
 
static void reorder_layer_data (GreasePencil &grease_pencil, const blender::FunctionRef< void()> do_layer_order_changes)
 
static GreasePencilModifierInfluenceDatainfluence_data_from_modifier (ModifierData *md)
 
static void shrink_customdata (CustomData &data, const int index_to_remove, const int size)
 
static void update_active_node_from_node_to_remove (GreasePencil &grease_pencil, const blender::bke::greasepencil::TreeNode &node)
 

Variables

static const char * ATTR_POSITION = "position"
 
IDTypeInfo IDType_ID_GP
 
static const std::string blender::bke::greasepencil::ATTR_RADIUS = "radius"
 
static const std::string blender::bke::greasepencil::ATTR_OPACITY = "opacity"
 
static const std::string blender::bke::greasepencil::ATTR_VERTEX_COLOR = "vertex_color"
 
static const std::string blender::bke::greasepencil::ATTR_FILL_COLOR = "fill_color"
 

Draw Cache

void(* BKE_grease_pencil_batch_cache_dirty_tag_cb )(GreasePencil *grease_pencil, int mode) = nullptr
 
void(* BKE_grease_pencil_batch_cache_free_cb )(GreasePencil *grease_pencil) = nullptr
 
void BKE_grease_pencil_batch_cache_dirty_tag (GreasePencil *grease_pencil, int mode)
 
void BKE_grease_pencil_batch_cache_free (GreasePencil *grease_pencil)
 

Function Documentation

◆ BKE_grease_pencil_add()

void * BKE_grease_pencil_add ( Main * bmain,
const char * name )

◆ BKE_grease_pencil_batch_cache_dirty_tag()

void BKE_grease_pencil_batch_cache_dirty_tag ( GreasePencil * grease_pencil,
int mode )

◆ BKE_grease_pencil_batch_cache_free()

void BKE_grease_pencil_batch_cache_free ( GreasePencil * grease_pencil)

◆ BKE_grease_pencil_brush_material_get()

◆ BKE_grease_pencil_copy_for_eval()

◆ BKE_grease_pencil_copy_layer_group_parameters()

◆ BKE_grease_pencil_copy_layer_parameters()

◆ BKE_grease_pencil_copy_parameters()

◆ BKE_grease_pencil_data_update()

◆ BKE_grease_pencil_drawing_attribute_required()

bool BKE_grease_pencil_drawing_attribute_required ( const GreasePencilDrawing * ,
const char * name )

Definition at line 1895 of file grease_pencil.cc.

References ATTR_POSITION, and STREQ.

Referenced by BKE_attribute_required().

◆ BKE_grease_pencil_duplicate_drawing_array()

void BKE_grease_pencil_duplicate_drawing_array ( const GreasePencil * grease_pencil_src,
GreasePencil * grease_pencil_dst )

◆ BKE_grease_pencil_material_index_remove()

◆ BKE_grease_pencil_material_index_used()

bool BKE_grease_pencil_material_index_used ( GreasePencil * grease_pencil,
int index )

◆ BKE_grease_pencil_material_remap()

◆ BKE_grease_pencil_new_nomain()

◆ BKE_grease_pencil_nomain_to_grease_pencil()

void BKE_grease_pencil_nomain_to_grease_pencil ( GreasePencil * grease_pencil_src,
GreasePencil * grease_pencil_dst )

◆ BKE_grease_pencil_object_material_ensure_active()

Material * BKE_grease_pencil_object_material_ensure_active ( Object * ob)

◆ BKE_grease_pencil_object_material_ensure_by_name()

Material * BKE_grease_pencil_object_material_ensure_by_name ( Main * bmain,
Object * ob,
const char * name,
int * r_index )

◆ BKE_grease_pencil_object_material_ensure_from_active_input_brush()

◆ BKE_grease_pencil_object_material_ensure_from_active_input_material()

Material * BKE_grease_pencil_object_material_ensure_from_active_input_material ( Object * ob)

◆ BKE_grease_pencil_object_material_ensure_from_brush()

◆ BKE_grease_pencil_object_material_from_brush_get()

◆ BKE_grease_pencil_object_material_index_get_by_name()

int BKE_grease_pencil_object_material_index_get_by_name ( Object * ob,
const char * name )

◆ BKE_grease_pencil_object_material_new()

◆ BKE_grease_pencil_point_coords_apply()

◆ BKE_grease_pencil_point_coords_apply_with_mat4()

◆ BKE_grease_pencil_point_coords_get()

◆ BKE_grease_pencil_references_cyclic_check()

bool BKE_grease_pencil_references_cyclic_check ( const GreasePencil * id_reference,
const GreasePencil * grease_pencil )

◆ BKE_grease_pencil_stroke_point_count()

◆ BKE_grease_pencil_vgroup_name_update()

void BKE_grease_pencil_vgroup_name_update ( Object * ob,
const char * old_name,
const char * new_name )

◆ check_unique_node_cb()

static bool check_unique_node_cb ( void * arg,
const char * name )
static

◆ delete_drawing()

static void delete_drawing ( GreasePencilDrawingBase * drawing_base)
static

◆ free_drawing_array()

static void free_drawing_array ( GreasePencil & grease_pencil)
static

◆ get_node_names()

static blender::VectorSet< blender::StringRefNull > get_node_names ( const GreasePencil & grease_pencil)
static

◆ grease_pencil_blend_read_data()

◆ grease_pencil_blend_write()

◆ grease_pencil_copy_data()

◆ grease_pencil_do_layer_adjustments()

◆ grease_pencil_evaluate_modifiers()

◆ grease_pencil_foreach_id()

◆ grease_pencil_free_data()

◆ grease_pencil_init_data()

◆ grease_pencil_references_cyclic_check_internal()

static bool grease_pencil_references_cyclic_check_internal ( const GreasePencil * id_reference,
const GreasePencil * grease_pencil )
static

◆ grow_array()

template<typename T >
static void grow_array ( T ** array,
int * num,
const int add_num )
static

Definition at line 2612 of file grease_pencil.cc.

References BLI_assert, MEM_freeN(), and blender::uninitialized_relocate_n().

◆ influence_data_from_modifier()

static GreasePencilModifierInfluenceData * influence_data_from_modifier ( ModifierData * md)
static

Definition at line 3653 of file grease_pencil.cc.

References ATTR_FALLTHROUGH, eModifierType_GreasePencilArmature, eModifierType_GreasePencilArray, eModifierType_GreasePencilBuild, eModifierType_GreasePencilColor, eModifierType_GreasePencilDash, eModifierType_GreasePencilEnvelope, eModifierType_GreasePencilHook, eModifierType_GreasePencilLattice, eModifierType_GreasePencilLength, eModifierType_GreasePencilLineart, eModifierType_GreasePencilMirror, eModifierType_GreasePencilMultiply, eModifierType_GreasePencilNoise, eModifierType_GreasePencilOffset, eModifierType_GreasePencilOpacity, eModifierType_GreasePencilOutline, eModifierType_GreasePencilShrinkwrap, eModifierType_GreasePencilSimplify, eModifierType_GreasePencilSmooth, eModifierType_GreasePencilSubdiv, eModifierType_GreasePencilTexture, eModifierType_GreasePencilThickness, eModifierType_GreasePencilTime, eModifierType_GreasePencilTint, eModifierType_GreasePencilWeightAngle, eModifierType_GreasePencilWeightProximity, GreasePencilArmatureModifierData::influence, GreasePencilArrayModifierData::influence, GreasePencilBuildModifierData::influence, GreasePencilColorModifierData::influence, GreasePencilDashModifierData::influence, GreasePencilEnvelopeModifierData::influence, GreasePencilHookModifierData::influence, GreasePencilLatticeModifierData::influence, GreasePencilLengthModifierData::influence, GreasePencilMirrorModifierData::influence, GreasePencilMultiModifierData::influence, GreasePencilNoiseModifierData::influence, GreasePencilOffsetModifierData::influence, GreasePencilOpacityModifierData::influence, GreasePencilOutlineModifierData::influence, GreasePencilShrinkwrapModifierData::influence, GreasePencilSimplifyModifierData::influence, GreasePencilSmoothModifierData::influence, GreasePencilSubdivModifierData::influence, GreasePencilTextureModifierData::influence, GreasePencilThickModifierData::influence, GreasePencilTimeModifierData::influence, GreasePencilTintModifierData::influence, GreasePencilWeightAngleModifierData::influence, GreasePencilWeightProximityModifierData::influence, and ModifierData::type.

◆ read_drawing_array()

◆ read_layer()

static void read_layer ( BlendDataReader * reader,
GreasePencilLayer * node,
GreasePencilLayerTreeGroup * parent )
static

◆ read_layer_tree()

static void read_layer_tree ( GreasePencil & grease_pencil,
BlendDataReader * reader )
static

◆ read_layer_tree_group()

◆ reorder_customdata()

static void reorder_customdata ( CustomData & data,
const Span< int > new_by_old_map )
static

◆ reorder_layer_data()

static void reorder_layer_data ( GreasePencil & grease_pencil,
const blender::FunctionRef< void()> do_layer_order_changes )
static

Definition at line 3511 of file grease_pencil.cc.

References BLI_assert, GreasePencil::layers_data, and reorder_customdata().

◆ shrink_array()

template<typename T >
static void shrink_array ( T ** array,
int * num,
const int shrink_num )
static

Definition at line 2626 of file grease_pencil.cc.

References BLI_assert, MEM_freeN(), and blender::uninitialized_move_n().

◆ shrink_customdata()

◆ transform_positions()

◆ unique_layer_group_name()

static std::string unique_layer_group_name ( const GreasePencil & grease_pencil,
blender::StringRefNull name )
static

Definition at line 3387 of file grease_pencil.cc.

References DATA_, and unique_node_name().

◆ unique_node_name()

static std::string unique_node_name ( const GreasePencil & grease_pencil,
const char * default_name,
blender::StringRef name )
static

◆ unique_node_name_ex()

static void unique_node_name_ex ( VectorSet< blender::StringRefNull > & names,
const char * default_name,
char * name )
static

Definition at line 3363 of file grease_pencil.cc.

References BLI_uniquename_cb(), check_unique_node_cb(), and MAX_NAME.

Referenced by unique_node_name().

◆ update_active_node_from_node_to_remove()

static void update_active_node_from_node_to_remove ( GreasePencil & grease_pencil,
const blender::bke::greasepencil::TreeNode & node )
static

Definition at line 3847 of file grease_pencil.cc.

References GreasePencil::root_group_ptr.

◆ write_drawing_array()

◆ write_layer()

static void write_layer ( BlendWriter * writer,
GreasePencilLayer * node )
static

◆ write_layer_tree()

static void write_layer_tree ( GreasePencil & grease_pencil,
BlendWriter * writer )
static

Definition at line 4121 of file grease_pencil.cc.

References GreasePencil::root_group_ptr, and write_layer_tree_group().

Referenced by grease_pencil_blend_write().

◆ write_layer_tree_group()

Variable Documentation

◆ ATTR_POSITION

const char* ATTR_POSITION = "position"
static

Definition at line 75 of file grease_pencil.cc.

◆ BKE_grease_pencil_batch_cache_dirty_tag_cb

void(* BKE_grease_pencil_batch_cache_dirty_tag_cb) (GreasePencil *grease_pencil, int mode) ( GreasePencil * grease_pencil,
int mode ) = nullptr

◆ BKE_grease_pencil_batch_cache_free_cb

void(* BKE_grease_pencil_batch_cache_free_cb) (GreasePencil *grease_pencil) ( GreasePencil * grease_pencil) = nullptr

Definition at line 2590 of file grease_pencil.cc.

Referenced by BKE_grease_pencil_batch_cache_free(), and DRW_engines_register().

◆ IDType_ID_GP

IDTypeInfo IDType_ID_GP
Initial value:
= {
sizeof(GreasePencil),
"GreasePencil",
N_("grease_pencils_v3"),
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
}
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition BKE_idtype.hh:39
#define BLT_I18NCONTEXT_ID_GPENCIL
#define FILTER_ID_MA
Definition DNA_ID.h:1175
@ INDEX_ID_GP
Definition DNA_ID.h:1304
#define FILTER_ID_GP
Definition DNA_ID.h:1203
@ ID_GP
struct GreasePencil GreasePencil
static void grease_pencil_free_data(ID *id)
static void grease_pencil_copy_data(Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
static void grease_pencil_blend_read_data(BlendDataReader *reader, ID *id)
static void grease_pencil_foreach_id(ID *id, LibraryForeachIDData *data)
static void grease_pencil_blend_write(BlendWriter *writer, ID *id, const void *id_address)
static void grease_pencil_init_data(ID *id)
#define N_(msgid)

Definition at line 240 of file grease_pencil.cc.