Blender V5.0
grease_pencil.cc File Reference
#include <iostream>
#include <optional>
#include "BKE_action.hh"
#include "BKE_anim_data.hh"
#include "BKE_animsys.h"
#include "BKE_asset_edit.hh"
#include "BKE_attribute_legacy_convert.hh"
#include "BKE_attribute_storage.hh"
#include "BKE_attribute_storage_blend_write.hh"
#include "BKE_bake_data_block_id.hh"
#include "BKE_curves.hh"
#include "BKE_customdata.hh"
#include "BKE_deform.hh"
#include "BKE_fcurve.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.hh"
#include "BKE_modifier.hh"
#include "BKE_object.hh"
#include "BKE_object_types.hh"
#include "BLI_array_utils.hh"
#include "BLI_bounds.hh"
#include "BLI_color_types.hh"
#include "BLI_enumerable_thread_specific.hh"
#include "BLI_listbase.h"
#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_resource_scope.hh"
#include "BLI_span.hh"
#include "BLI_stack.hh"
#include "BLI_string.h"
#include "BLI_string_ref.hh"
#include "BLI_string_utf8.h"
#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_grease_pencil_types.h"
#include "DNA_material_types.h"
#include "DNA_modifier_types.h"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_query.hh"
#include "RNA_access.hh"
#include "RNA_path.hh"
#include "RNA_prototypes.hh"
#include "MEM_guardedalloc.h"
#include "attribute_storage_access.hh"

Go to the source code of this file.

Classes

class  VectorSet< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >

Namespaces

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

Typedefs

using float3
using int3

Functions

static void grease_pencil_init_data (ID *id)
static void grease_pencil_set_runtime_visibilities (ID &id_dst, GreasePencil &grease_pencil)
static void grease_pencil_initialize_drawing_user_counts_after_read (GreasePencil &grease_pencil)
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_foreach_working_space_color (ID *id, const IDTypeForeachColorFunctionCallback &fn)
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 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< int3 > 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 (const float4x2 &strokemat)
void blender::bke::greasepencil::copy_drawing_array (Span< const GreasePencilDrawingBase * > src_drawings, MutableSpan< GreasePencilDrawingBase * > dst_drawings)
void blender::bke::greasepencil::ensure_non_empty_layer_names (Main &bmain, GreasePencil &grease_pencil)
Drawing array read/write functions
static void read_drawing_array (GreasePencil &grease_pencil, BlendDataReader *reader)
static void write_drawing_array (GreasePencil &grease_pencil, blender::ResourceScope &scope, 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 blender::StringRef name)
GreasePencilBKE_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)
static void grease_pencil_evaluate_layers (GreasePencil &grease_pencil)
void BKE_grease_pencil_eval_geometry (Depsgraph *depsgraph, GreasePencil *grease_pencil)
void BKE_object_eval_grease_pencil (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.
bool BKE_grease_pencil_has_curve_with_type (const GreasePencil &grease_pencil, const CurveType type)
int BKE_grease_pencil_stroke_point_count (const GreasePencil &grease_pencil)
void BKE_grease_pencil_point_coords_get (const GreasePencil &grease_pencil, blender::MutableSpan< blender::float3 > all_positions, blender::MutableSpan< float > all_radii)
void BKE_grease_pencil_point_coords_apply (GreasePencil &grease_pencil, blender::Span< blender::float3 > all_positions, blender::Span< float > all_radii)
void BKE_grease_pencil_point_coords_apply_with_mat4 (GreasePencil &grease_pencil, blender::Span< blender::float3 > all_positions, blender::Span< float > all_radii, 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)
static Materialgrease_pencil_object_material_ensure_from_brush_pinned (Main *bmain, Object *ob, Brush *brush)
MaterialBKE_grease_pencil_object_material_ensure_from_brush (Main *bmain, Object *ob, Brush *brush)
MaterialBKE_grease_pencil_object_material_alt_ensure_from_brush (Main *bmain, Object *ob, Brush *brush)
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 blender::VectorSet< blender::StringRefget_node_names (const GreasePencil &grease_pencil)
static std::string unique_node_name (const GreasePencil &grease_pencil, const blender::StringRef name)
static std::string unique_layer_group_name (const GreasePencil &grease_pencil, blender::StringRef name)
static void reorder_attribute_domain (blender::bke::AttributeStorage &data, const blender::bke::AttrDomain domain, 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_attribute_storage (blender::bke::AttributeStorage &storage, 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
constexpr StringRef blender::bke::greasepencil::ATTR_RADIUS = "radius"
constexpr StringRef blender::bke::greasepencil::ATTR_OPACITY = "opacity"
constexpr StringRef blender::bke::greasepencil::ATTR_VERTEX_COLOR = "vertex_color"
constexpr StringRef 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)

Typedef Documentation

◆ float3

Definition at line 619 of file BLI_math_vector_types.hh.

◆ int3

Definition at line 602 of file BLI_math_vector_types.hh.

Function Documentation

◆ BKE_grease_pencil_add()

◆ 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_copy_for_eval()

◆ BKE_grease_pencil_copy_layer_group_parameters()

◆ BKE_grease_pencil_copy_layer_parameters()

◆ BKE_grease_pencil_copy_parameters()

◆ BKE_grease_pencil_drawing_attribute_required()

bool BKE_grease_pencil_drawing_attribute_required ( const GreasePencilDrawing * ,
const blender::StringRef name )

Definition at line 2021 of file grease_pencil.cc.

References ATTR_POSITION, and name.

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_eval_geometry()

void BKE_grease_pencil_eval_geometry ( Depsgraph * depsgraph,
GreasePencil * grease_pencil )

◆ BKE_grease_pencil_has_curve_with_type()

bool BKE_grease_pencil_has_curve_with_type ( const GreasePencil & grease_pencil,
CurveType type )
Note
Used for "move only origins" in object_data_transform.cc.

Definition at line 2393 of file grease_pencil.cc.

References GP_DRAWING, blender::bke::greasepencil::Drawing::strokes(), and wrap().

Referenced by blender::ed::object::data_xform_create_ex().

◆ BKE_grease_pencil_material_index_remove()

◆ BKE_grease_pencil_material_index_used()

◆ 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_alt_ensure_from_brush()

◆ 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_brush()

◆ BKE_grease_pencil_object_material_from_brush_get()

Material * BKE_grease_pencil_object_material_from_brush_get ( Object * ob,
Brush * brush )

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

◆ BKE_object_eval_grease_pencil()

◆ delete_drawing()

void delete_drawing ( GreasePencilDrawingBase * drawing_base)
static

◆ free_drawing_array()

void free_drawing_array ( GreasePencil & grease_pencil)
static

◆ get_node_names()

◆ grease_pencil_blend_read_data()

◆ grease_pencil_blend_write()

◆ grease_pencil_copy_data()

◆ grease_pencil_do_layer_adjustments()

◆ grease_pencil_evaluate_layers()

void grease_pencil_evaluate_layers ( GreasePencil & grease_pencil)
static

◆ grease_pencil_evaluate_modifiers()

◆ grease_pencil_foreach_id()

◆ grease_pencil_foreach_working_space_color()

◆ grease_pencil_free_data()

◆ grease_pencil_init_data()

◆ grease_pencil_initialize_drawing_user_counts_after_read()

void grease_pencil_initialize_drawing_user_counts_after_read ( GreasePencil & grease_pencil)
static

◆ grease_pencil_object_material_ensure_from_brush_pinned()

◆ grease_pencil_references_cyclic_check_internal()

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

◆ grease_pencil_set_runtime_visibilities()

◆ grow_array()

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

◆ influence_data_from_modifier()

GreasePencilModifierInfluenceData * influence_data_from_modifier ( ModifierData * md)
static

Definition at line 4030 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()

◆ read_layer_tree()

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

◆ read_layer_tree_group()

◆ reorder_attribute_domain()

◆ reorder_layer_data()

◆ shrink_array()

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

◆ shrink_attribute_storage()

◆ unique_layer_group_name()

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

Definition at line 3721 of file grease_pencil.cc.

References DATA_, name, and unique_node_name().

◆ unique_node_name()

◆ update_active_node_from_node_to_remove()

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

◆ write_drawing_array()

◆ write_layer()

◆ write_layer_tree()

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

Definition at line 4556 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 90 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

Definition at line 2824 of file grease_pencil.cc.

Referenced by BKE_grease_pencil_batch_cache_dirty_tag(), and DRW_module_init().

◆ 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 2826 of file grease_pencil.cc.

Referenced by BKE_grease_pencil_batch_cache_free(), and DRW_module_init().

◆ IDType_ID_GP

IDTypeInfo IDType_ID_GP
Initial value:
= {
GreasePencil::id_type,
sizeof(GreasePencil),
"GreasePencil",
N_("grease_pencils"),
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
}
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition BKE_idtype.hh:47
#define BLT_I18NCONTEXT_ID_GPENCIL
#define FILTER_ID_OB
Definition DNA_ID.h:1214
#define FILTER_ID_MA
Definition DNA_ID.h:1208
@ INDEX_ID_GP
Definition DNA_ID.h:1336
#define FILTER_ID_GP
Definition DNA_ID.h:1236
static void grease_pencil_foreach_working_space_color(ID *id, const IDTypeForeachColorFunctionCallback &fn)
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 354 of file grease_pencil.cc.