Blender  V3.3
Classes | Typedefs | Enumerations | Functions
gpencil_interpolate.c File Reference
#include <math.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
#include "BLI_easing.h"
#include "BLI_ghash.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "DNA_color_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
#include "DNA_view3d_types.h"
#include "BKE_colortools.h"
#include "BKE_context.h"
#include "BKE_gpencil.h"
#include "BKE_gpencil_geom.h"
#include "BKE_report.h"
#include "UI_interface.h"
#include "UI_resources.h"
#include "WM_api.h"
#include "WM_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_prototypes.h"
#include "ED_gpencil.h"
#include "ED_screen.h"
#include "DEG_depsgraph.h"
#include "gpencil_intern.h"

Go to the source code of this file.

Classes

struct  tGPDinterpolate_layer
 
struct  tGPDinterpolate
 

Typedefs

typedef struct tGPDinterpolate_layer tGPDinterpolate_layer
 
typedef struct tGPDinterpolate tGPDinterpolate
 
typedef enum eGP_InterpolateFlipMode eGP_InterpolateFlipMode
 

Enumerations

enum  eGP_InterpolateFlipMode { GP_INTERPOLATE_NOFLIP = 0 , GP_INTERPOLATE_FLIP = 1 , GP_INTERPOLATE_FLIPAUTO = 2 }
 

Functions

static bool gpencil_view3d_poll (bContext *C)
 
static bool gpencil_stroke_need_flip (Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, GP_SpaceConversion *gsc, bGPDstroke *gps_from, bGPDstroke *gps_to)
 
static bGPDstrokegpencil_stroke_get_related (GHash *used_strokes, bGPDframe *gpf, const int reference_index)
 
static void gpencil_stroke_pair_table (bContext *C, tGPDinterpolate *tgpi, tGPDinterpolate_layer *tgpil)
 
static void gpencil_interpolate_update_points (const bGPDstroke *gps_from, const bGPDstroke *gps_to, bGPDstroke *new_stroke, float factor)
 
static void gpencil_interpolate_free_tagged_strokes (bGPDframe *gpf)
 
static void gpencil_interpolate_untag_strokes (bGPDlayer *gpl)
 
static void gpencil_interpolate_update_strokes (bContext *C, tGPDinterpolate *tgpi)
 
static bGPDframegpencil_get_previous_keyframe (bGPDlayer *gpl, int cfra)
 
static bGPDframegpencil_get_next_keyframe (bGPDlayer *gpl, int cfra)
 
static void gpencil_interpolate_set_points (bContext *C, tGPDinterpolate *tgpi)
 
static void gpencil_mouse_update_shift (tGPDinterpolate *tgpi, wmOperator *op, const wmEvent *event)
 
static void gpencil_interpolate_status_indicators (bContext *C, tGPDinterpolate *p)
 
static void gpencil_interpolate_update (bContext *C, wmOperator *op, tGPDinterpolate *tgpi)
 
static void gpencil_interpolate_exit (bContext *C, wmOperator *op)
 
static bool gpencil_interpolate_set_init_values (bContext *C, wmOperator *op, tGPDinterpolate *tgpi)
 
static tGPDinterpolategpencil_session_init_interpolation (bContext *C, wmOperator *op)
 
static int gpencil_interpolate_init (bContext *C, wmOperator *op)
 
static int gpencil_interpolate_invoke (bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
 
static int gpencil_interpolate_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
static void gpencil_interpolate_cancel (bContext *C, wmOperator *op)
 
void GPENCIL_OT_interpolate (wmOperatorType *ot)
 
static float gpencil_interpolate_seq_easing_calc (wmOperator *op, float time)
 
static int gpencil_interpolate_seq_exec (bContext *C, wmOperator *op)
 
static void gpencil_interpolate_seq_ui (bContext *C, wmOperator *op)
 
void GPENCIL_OT_interpolate_sequence (wmOperatorType *ot)
 
static bool gpencil_interpolate_reverse_poll (bContext *C)
 
static int gpencil_interpolate_reverse_exec (bContext *C, wmOperator *UNUSED(op))
 
void GPENCIL_OT_interpolate_reverse (wmOperatorType *ot)
 

Detailed Description

Operators for interpolating new Grease Pencil frames from existing strokes.

Definition in file gpencil_interpolate.c.

Typedef Documentation

◆ eGP_InterpolateFlipMode

◆ tGPDinterpolate

◆ tGPDinterpolate_layer

Enumeration Type Documentation

◆ eGP_InterpolateFlipMode

Enumerator
GP_INTERPOLATE_NOFLIP 
GP_INTERPOLATE_FLIP 
GP_INTERPOLATE_FLIPAUTO 

Definition at line 121 of file gpencil_interpolate.c.

Function Documentation

◆ gpencil_get_next_keyframe()

static bGPDframe* gpencil_get_next_keyframe ( bGPDlayer gpl,
int  cfra 
)
static

◆ gpencil_get_previous_keyframe()

static bGPDframe* gpencil_get_previous_keyframe ( bGPDlayer gpl,
int  cfra 
)
static

◆ gpencil_interpolate_cancel()

static void gpencil_interpolate_cancel ( bContext C,
wmOperator op 
)
static

Definition at line 920 of file gpencil_interpolate.c.

References C, and gpencil_interpolate_exit().

Referenced by GPENCIL_OT_interpolate().

◆ gpencil_interpolate_exit()

static void gpencil_interpolate_exit ( bContext C,
wmOperator op 
)
static

◆ gpencil_interpolate_free_tagged_strokes()

static void gpencil_interpolate_free_tagged_strokes ( bGPDframe gpf)
static

◆ gpencil_interpolate_init()

static int gpencil_interpolate_init ( bContext C,
wmOperator op 
)
static

◆ gpencil_interpolate_invoke()

static int gpencil_interpolate_invoke ( bContext C,
wmOperator op,
const wmEvent UNUSEDevent 
)
static

◆ gpencil_interpolate_modal()

static int gpencil_interpolate_modal ( bContext C,
wmOperator op,
const wmEvent event 
)
static

◆ gpencil_interpolate_reverse_exec()

static int gpencil_interpolate_reverse_exec ( bContext C,
wmOperator UNUSEDop 
)
static

◆ gpencil_interpolate_reverse_poll()

static bool gpencil_interpolate_reverse_poll ( bContext C)
static

◆ gpencil_interpolate_seq_easing_calc()

static float gpencil_interpolate_seq_easing_calc ( wmOperator op,
float  time 
)
static

◆ gpencil_interpolate_seq_exec()

static int gpencil_interpolate_seq_exec ( bContext C,
wmOperator op 
)
static

Definition at line 1219 of file gpencil_interpolate.c.

References BEZT_KEYTYPE_BREAKDOWN, BKE_curvemapping_add(), BKE_curvemapping_evaluateF(), BKE_curvemapping_init(), BKE_gpencil_frame_duplicate(), BKE_gpencil_free_strokes(), BKE_gpencil_layer_frame_get(), BKE_gpencil_layer_is_editable(), BKE_gpencil_stroke_duplicate(), BKE_gpencil_stroke_flip(), BKE_gpencil_stroke_geometry_update(), BKE_gpencil_stroke_smooth(), BKE_gpencil_stroke_uniform_subdivide(), BKE_report(), BLI_addtail(), BLI_findindex(), BLI_findlink(), BLI_freelistN(), BLI_genericNodeN(), BLI_ghash_free(), BLI_ghash_haskey(), BLI_ghash_insert(), BLI_ghash_lookup(), BLI_ghash_ptr_new(), bool, C, RenderData::cfra, CLAMP_MIN, CTX_data_active_gpencil_layer(), CTX_data_active_object(), CTX_data_ensure_evaluated_depsgraph(), CTX_data_scene(), CTX_data_tool_settings(), GP_Interpolate_Settings::custom_ipo, Object::data, DEG_id_tag_update(), depsgraph, ED_gpencil_stroke_can_use(), ED_gpencil_stroke_material_editable(), ELEM, bGPDstroke::flag, float(), bGPDframe::framenum, GP_GETFRAME_ADD_NEW, ToolSettings::gp_interpolate, GP_INTERPOLATE_FLIP, GP_INTERPOLATE_FLIPAUTO, GP_IPO_BACK, GP_IPO_CURVEMAP, GP_STROKE_SELECT, GP_STROKE_TAG, GP_SpaceConversion::gpd, GPENCIL_CURVE_EDIT_SESSIONS_ON, GPENCIL_EDIT_MODE, gpencil_get_next_keyframe(), gpencil_get_previous_keyframe(), gpencil_interpolate_seq_easing_calc(), gpencil_interpolate_update_points(), GPENCIL_MULTIEDIT_SESSIONS_ON, gpencil_point_conversion_init(), gpencil_stroke_get_related(), gpencil_stroke_need_flip(), GP_SpaceConversion::gpl, bGPdata::id, ID_RECALC_GEOMETRY, ID_RECALC_TRANSFORM, bGPDframe::key_type, bGPdata::layers, LISTBASE_FOREACH, MEM_SAFE_FREE, NA_EDITED, NC_GPENCIL, ND_DATA, NULL, GP_SpaceConversion::ob, OPERATOR_CANCELLED, OPERATOR_FINISHED, wmOperator::ptr, Scene::r, wmOperator::reports, RNA_boolean_get(), RNA_enum_get(), RNA_float_get(), RNA_int_get(), RPT_ERROR, scene, bGPDstroke::select_index, bGPDframe::strokes, bGPDstroke::totpoints, type, and WM_event_add_notifier().

Referenced by GPENCIL_OT_interpolate_sequence().

◆ gpencil_interpolate_seq_ui()

static void gpencil_interpolate_seq_ui ( bContext C,
wmOperator op 
)
static

◆ gpencil_interpolate_set_init_values()

static bool gpencil_interpolate_set_init_values ( bContext C,
wmOperator op,
tGPDinterpolate tgpi 
)
static

◆ gpencil_interpolate_set_points()

static void gpencil_interpolate_set_points ( bContext C,
tGPDinterpolate tgpi 
)
static

Definition at line 452 of file gpencil_interpolate.c.

References bGPDlayer::actframe, BKE_gpencil_frame_duplicate(), BKE_gpencil_layer_is_editable(), BKE_gpencil_stroke_duplicate(), BKE_gpencil_stroke_flip(), BKE_gpencil_stroke_geometry_update(), BKE_gpencil_stroke_smooth(), BKE_gpencil_stroke_uniform_subdivide(), BLI_addtail(), BLI_ghash_haskey(), BLI_ghash_lookup(), C, RenderData::cfra, tGPDinterpolate::cframe, CTX_data_active_gpencil_layer(), tGPDinterpolate::depsgraph, tGPDinterpolate_layer::factor, tGPDinterpolate::flag, bGPDstroke::flag, tGPDinterpolate::flipmode, float(), bGPDframe::framenum, GP_INTERPOLATE_FLIP, GP_INTERPOLATE_FLIPAUTO, GP_STROKE_TAG, GP_TOOLFLAG_INTERPOLATE_ALL_LAYERS, GP_SpaceConversion::gpd, tGPDinterpolate::gpd, gpencil_get_next_keyframe(), gpencil_get_previous_keyframe(), gpencil_interpolate_update_points(), gpencil_stroke_need_flip(), gpencil_stroke_pair_table(), GP_SpaceConversion::gpl, tGPDinterpolate_layer::gpl, tGPDinterpolate::gsc, tGPDinterpolate::high_limit, tGPDinterpolate::ilayers, tGPDinterpolate::init_factor, tGPDinterpolate_layer::interFrame, bGPdata::layers, LISTBASE_FOREACH, tGPDinterpolate::low_limit, MEM_callocN, bGPDframe::next, tGPDinterpolate_layer::nextFrame, NULL, tGPDinterpolate::ob, tGPDinterpolate_layer::pair_strokes, tGPDinterpolate_layer::prevFrame, Scene::r, scene, tGPDinterpolate::scene, bGPDstroke::select_index, tGPDinterpolate_layer::selected_strokes, tGPDinterpolate::smooth_factor, tGPDinterpolate::smooth_steps, bGPDframe::strokes, and bGPDstroke::totpoints.

Referenced by gpencil_interpolate_set_init_values().

◆ gpencil_interpolate_status_indicators()

static void gpencil_interpolate_status_indicators ( bContext C,
tGPDinterpolate p 
)
static

◆ gpencil_interpolate_untag_strokes()

static void gpencil_interpolate_untag_strokes ( bGPDlayer gpl)
static

◆ gpencil_interpolate_update()

static void gpencil_interpolate_update ( bContext C,
wmOperator op,
tGPDinterpolate tgpi 
)
static

◆ gpencil_interpolate_update_points()

static void gpencil_interpolate_update_points ( const bGPDstroke gps_from,
const bGPDstroke gps_to,
bGPDstroke new_stroke,
float  factor 
)
static

◆ gpencil_interpolate_update_strokes()

static void gpencil_interpolate_update_strokes ( bContext C,
tGPDinterpolate tgpi 
)
static

◆ gpencil_mouse_update_shift()

static void gpencil_mouse_update_shift ( tGPDinterpolate tgpi,
wmOperator op,
const wmEvent event 
)
static

◆ GPENCIL_OT_interpolate()

void GPENCIL_OT_interpolate ( wmOperatorType ot)

◆ GPENCIL_OT_interpolate_reverse()

void GPENCIL_OT_interpolate_reverse ( wmOperatorType ot)

◆ GPENCIL_OT_interpolate_sequence()

void GPENCIL_OT_interpolate_sequence ( wmOperatorType ot)

◆ gpencil_session_init_interpolation()

static tGPDinterpolate* gpencil_session_init_interpolation ( bContext C,
wmOperator op 
)
static

Definition at line 720 of file gpencil_interpolate.c.

References C, gpencil_interpolate_set_init_values(), and MEM_callocN.

Referenced by gpencil_interpolate_init().

◆ gpencil_stroke_get_related()

static bGPDstroke* gpencil_stroke_get_related ( GHash used_strokes,
bGPDframe gpf,
const int  reference_index 
)
static

◆ gpencil_stroke_need_flip()

static bool gpencil_stroke_need_flip ( Depsgraph depsgraph,
Object ob,
bGPDlayer gpl,
GP_SpaceConversion gsc,
bGPDstroke gps_from,
bGPDstroke gps_to 
)
static

◆ gpencil_stroke_pair_table()

static void gpencil_stroke_pair_table ( bContext C,
tGPDinterpolate tgpi,
tGPDinterpolate_layer tgpil 
)
static

◆ gpencil_view3d_poll()

static bool gpencil_view3d_poll ( bContext C)
static