Blender  V3.3
Classes | Macros | Typedefs | Enumerations | Functions | Variables
gpencil_convert.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_math.h"
#include "BLI_rand.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "DNA_anim_types.h"
#include "DNA_collection_types.h"
#include "DNA_curve_types.h"
#include "DNA_gpencil_types.h"
#include "DNA_material_types.h"
#include "DNA_node_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_animsys.h"
#include "BKE_collection.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_fcurve.h"
#include "BKE_global.h"
#include "BKE_gpencil.h"
#include "BKE_gpencil_geom.h"
#include "BKE_image.h"
#include "BKE_layer.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_object.h"
#include "BKE_report.h"
#include "BKE_scene.h"
#include "BKE_tracking.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "UI_interface.h"
#include "WM_api.h"
#include "WM_types.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "UI_resources.h"
#include "UI_view2d.h"
#include "ED_clip.h"
#include "ED_gpencil.h"
#include "ED_keyframing.h"
#include "ED_object.h"
#include "ED_view3d.h"
#include "gpencil_intern.h"

Go to the source code of this file.

Classes

struct  tGpTimingData
 

Macros

#define MIN_TIME_DELTA   0.02f
 
#define GAP_DFAC   0.01f
 
#define WIDTH_CORR_FAC   0.1f
 
#define BEZT_HANDLE_FAC   0.3f
 

Typedefs

typedef struct tGpTimingData tGpTimingData
 

Enumerations

enum  { GP_STROKECONVERT_PATH = 1 , GP_STROKECONVERT_CURVE , GP_STROKECONVERT_POLY }
 
enum  { GP_STROKECONVERT_TIMING_NONE = 1 , GP_STROKECONVERT_TIMING_LINEAR = 2 , GP_STROKECONVERT_TIMING_FULL = 3 , GP_STROKECONVERT_TIMING_CUSTOMGAP = 4 }
 

Functions

static const EnumPropertyItemrna_GPConvert_mode_items (bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *UNUSED(r_free))
 
static void gpencil_strokepoint_convertcoords (bContext *C, bGPDlayer *gpl, bGPDstroke *gps, bGPDspoint *source_pt, float p3d[3], const rctf *subrect)
 
static void gpencil_timing_data_set_num (tGpTimingData *gtd, const int num)
 
static void gpencil_timing_data_add_point (tGpTimingData *gtd, const double stroke_inittime, const float time, const float delta_dist)
 
static int gpencil_find_end_of_stroke_idx (tGpTimingData *gtd, RNG *rng, const int idx, const int gaps_count, int *gaps_done_count, const float tot_gaps_time, const float delta_time, float *next_delta_time)
 
static void gpencil_stroke_path_animation_preprocess_gaps (tGpTimingData *gtd, RNG *rng, int *gaps_count, float *r_tot_gaps_time)
 
static void gpencil_stroke_path_animation_add_keyframes (ReportList *reports, PointerRNA ptr, PropertyRNA *prop, Depsgraph *depsgraph, FCurve *fcu, Curve *cu, tGpTimingData *gtd, RNG *rng, const float time_range, const int gaps_count, const float tot_gaps_time)
 
static void gpencil_stroke_path_animation (bContext *C, ReportList *reports, Curve *cu, tGpTimingData *gtd)
 
static void gpencil_stroke_to_path_add_point (tGpTimingData *gtd, BPoint *bp, const float p[3], const float prev_p[3], const bool do_gtd, const double inittime, const float time, const float width, const float rad_fac, float minmax_weights[2])
 
static void gpencil_stroke_to_path (bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curve *cu, rctf *subrect, Nurb **curnu, float minmax_weights[2], const float rad_fac, bool stitch, const bool add_start_point, const bool add_end_point, tGpTimingData *gtd)
 
static void gpencil_stroke_to_bezier_add_point (tGpTimingData *gtd, BezTriple *bezt, const float p[3], const float h1[3], const float h2[3], const float prev_p[3], const bool do_gtd, const double inittime, const float time, const float width, const float rad_fac, float minmax_weights[2])
 
static void gpencil_stroke_to_bezier (bContext *C, bGPDlayer *gpl, bGPDstroke *gps, Curve *cu, rctf *subrect, Nurb **curnu, float minmax_weights[2], const float rad_fac, bool stitch, const bool add_start_point, const bool add_end_point, tGpTimingData *gtd)
 
static void gpencil_stroke_finalize_curve_endpoints (Curve *cu)
 
static void gpencil_stroke_norm_curve_weights (Curve *cu, const float minmax_weights[2])
 
static int gpencil_camera_view_subrect (bContext *C, rctf *subrect)
 
static void gpencil_layer_to_curve (bContext *C, ReportList *reports, bGPdata *gpd, bGPDlayer *gpl, const int mode, const bool norm_weights, const float rad_fac, const bool link_strokes, tGpTimingData *gtd)
 
static bool gpencil_convert_check_has_valid_timing (bContext *C, bGPDlayer *gpl, wmOperator *op)
 
static void gpencil_convert_set_end_frame (struct Main *UNUSED(main), struct Scene *UNUSED(scene), struct PointerRNA *ptr)
 
static bool gpencil_convert_poll (bContext *C)
 
static int gpencil_convert_layer_exec (bContext *C, wmOperator *op)
 
static bool gpencil_convert_poll_property (const bContext *UNUSED(C), wmOperator *op, const PropertyRNA *prop)
 
void GPENCIL_OT_convert (wmOperatorType *ot)
 
static bool image_to_gpencil_poll (bContext *C)
 
static int image_to_gpencil_exec (bContext *C, wmOperator *op)
 
void GPENCIL_OT_image_to_grease_pencil (wmOperatorType *ot)
 

Variables

static const EnumPropertyItem prop_gpencil_convertmodes []
 
static const EnumPropertyItem prop_gpencil_convert_timingmodes_restricted []
 
static const EnumPropertyItem prop_gpencil_convert_timingmodes []
 

Detailed Description

Operator for converting Grease Pencil data to geometry.

Definition in file gpencil_convert.c.

Macro Definition Documentation

◆ BEZT_HANDLE_FAC

#define BEZT_HANDLE_FAC   0.3f

Definition at line 603 of file gpencil_convert.c.

◆ GAP_DFAC

#define GAP_DFAC   0.01f

Definition at line 601 of file gpencil_convert.c.

◆ MIN_TIME_DELTA

#define MIN_TIME_DELTA   0.02f

Definition at line 294 of file gpencil_convert.c.

◆ WIDTH_CORR_FAC

#define WIDTH_CORR_FAC   0.1f

Definition at line 602 of file gpencil_convert.c.

Typedef Documentation

◆ tGpTimingData

typedef struct tGpTimingData tGpTimingData

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
GP_STROKECONVERT_PATH 
GP_STROKECONVERT_CURVE 
GP_STROKECONVERT_POLY 

Definition at line 79 of file gpencil_convert.c.

◆ anonymous enum

anonymous enum
Enumerator
GP_STROKECONVERT_TIMING_NONE 
GP_STROKECONVERT_TIMING_LINEAR 
GP_STROKECONVERT_TIMING_FULL 
GP_STROKECONVERT_TIMING_CUSTOMGAP 

Definition at line 86 of file gpencil_convert.c.

Function Documentation

◆ gpencil_camera_view_subrect()

static int gpencil_camera_view_subrect ( bContext C,
rctf subrect 
)
static

◆ gpencil_convert_check_has_valid_timing()

static bool gpencil_convert_check_has_valid_timing ( bContext C,
bGPDlayer gpl,
wmOperator op 
)
static

◆ gpencil_convert_layer_exec()

static int gpencil_convert_layer_exec ( bContext C,
wmOperator op 
)
static

◆ gpencil_convert_poll()

static bool gpencil_convert_poll ( bContext C)
static

◆ gpencil_convert_poll_property()

static bool gpencil_convert_poll_property ( const bContext UNUSEDC,
wmOperator op,
const PropertyRNA prop 
)
static

◆ gpencil_convert_set_end_frame()

static void gpencil_convert_set_end_frame ( struct Main UNUSEDmain,
struct Scene UNUSEDscene,
struct PointerRNA ptr 
)
static

Definition at line 1454 of file gpencil_convert.c.

References ptr, RNA_int_get(), and RNA_int_set().

Referenced by GPENCIL_OT_convert().

◆ gpencil_find_end_of_stroke_idx()

static int gpencil_find_end_of_stroke_idx ( tGpTimingData gtd,
RNG rng,
const int  idx,
const int  gaps_count,
int *  gaps_done_count,
const float  tot_gaps_time,
const float  delta_time,
float next_delta_time 
)
static

◆ gpencil_layer_to_curve()

static void gpencil_layer_to_curve ( bContext C,
ReportList reports,
bGPdata gpd,
bGPDlayer gpl,
const int  mode,
const bool  norm_weights,
const float  rad_fac,
const bool  link_strokes,
tGpTimingData gtd 
)
static

◆ GPENCIL_OT_convert()

void GPENCIL_OT_convert ( wmOperatorType ot)

◆ GPENCIL_OT_image_to_grease_pencil()

void GPENCIL_OT_image_to_grease_pencil ( wmOperatorType ot)

◆ gpencil_stroke_finalize_curve_endpoints()

static void gpencil_stroke_finalize_curve_endpoints ( Curve cu)
static

◆ gpencil_stroke_norm_curve_weights()

static void gpencil_stroke_norm_curve_weights ( Curve cu,
const float  minmax_weights[2] 
)
static

◆ gpencil_stroke_path_animation()

static void gpencil_stroke_path_animation ( bContext C,
ReportList reports,
Curve cu,
tGpTimingData gtd 
)
static

◆ gpencil_stroke_path_animation_add_keyframes()

static void gpencil_stroke_path_animation_add_keyframes ( ReportList reports,
PointerRNA  ptr,
PropertyRNA prop,
Depsgraph depsgraph,
FCurve fcu,
Curve cu,
tGpTimingData gtd,
RNG rng,
const float  time_range,
const int  gaps_count,
const float  tot_gaps_time 
)
static

◆ gpencil_stroke_path_animation_preprocess_gaps()

static void gpencil_stroke_path_animation_preprocess_gaps ( tGpTimingData gtd,
RNG rng,
int *  gaps_count,
float r_tot_gaps_time 
)
static

◆ gpencil_stroke_to_bezier()

static void gpencil_stroke_to_bezier ( bContext C,
bGPDlayer gpl,
bGPDstroke gps,
Curve cu,
rctf subrect,
Nurb **  curnu,
float  minmax_weights[2],
const float  rad_fac,
bool  stitch,
const bool  add_start_point,
const bool  add_end_point,
tGpTimingData gtd 
)
static

◆ gpencil_stroke_to_bezier_add_point()

static void gpencil_stroke_to_bezier_add_point ( tGpTimingData gtd,
BezTriple bezt,
const float  p[3],
const float  h1[3],
const float  h2[3],
const float  prev_p[3],
const bool  do_gtd,
const double  inittime,
const float  time,
const float  width,
const float  rad_fac,
float  minmax_weights[2] 
)
static

◆ gpencil_stroke_to_path()

static void gpencil_stroke_to_path ( bContext C,
bGPDlayer gpl,
bGPDstroke gps,
Curve cu,
rctf subrect,
Nurb **  curnu,
float  minmax_weights[2],
const float  rad_fac,
bool  stitch,
const bool  add_start_point,
const bool  add_end_point,
tGpTimingData gtd 
)
static

◆ gpencil_stroke_to_path_add_point()

static void gpencil_stroke_to_path_add_point ( tGpTimingData gtd,
BPoint bp,
const float  p[3],
const float  prev_p[3],
const bool  do_gtd,
const double  inittime,
const float  time,
const float  width,
const float  rad_fac,
float  minmax_weights[2] 
)
static

◆ gpencil_strokepoint_convertcoords()

static void gpencil_strokepoint_convertcoords ( bContext C,
bGPDlayer gpl,
bGPDstroke gps,
bGPDspoint source_pt,
float  p3d[3],
const rctf subrect 
)
static

◆ gpencil_timing_data_add_point()

static void gpencil_timing_data_add_point ( tGpTimingData gtd,
const double  stroke_inittime,
const float  time,
const float  delta_dist 
)
static

◆ gpencil_timing_data_set_num()

static void gpencil_timing_data_set_num ( tGpTimingData gtd,
const int  num 
)
static

◆ image_to_gpencil_exec()

static int image_to_gpencil_exec ( bContext C,
wmOperator op 
)
static

◆ image_to_gpencil_poll()

static bool image_to_gpencil_poll ( bContext C)
static

◆ rna_GPConvert_mode_items()

static const EnumPropertyItem* rna_GPConvert_mode_items ( bContext UNUSEDC,
PointerRNA ptr,
PropertyRNA UNUSEDprop,
bool UNUSEDr_free 
)
static

Variable Documentation

◆ prop_gpencil_convert_timingmodes

const EnumPropertyItem prop_gpencil_convert_timingmodes[]
static
Initial value:
= {
{GP_STROKECONVERT_TIMING_NONE, "NONE", 0, "No Timing", "Ignore timing"},
{GP_STROKECONVERT_TIMING_LINEAR, "LINEAR", 0, "Linear", "Simple linear timing"},
"FULL",
0,
"Original",
"Use the original timing, gaps included"},
"CUSTOMGAP",
0,
"Custom Gaps",
"Use the original timing, but with custom gap lengths (in frames)"},
{0, NULL, 0, NULL, NULL},
}
@ GP_STROKECONVERT_TIMING_LINEAR
@ GP_STROKECONVERT_TIMING_NONE
@ GP_STROKECONVERT_TIMING_CUSTOMGAP
@ GP_STROKECONVERT_TIMING_FULL

Definition at line 111 of file gpencil_convert.c.

Referenced by GPENCIL_OT_convert(), and rna_GPConvert_mode_items().

◆ prop_gpencil_convert_timingmodes_restricted

const EnumPropertyItem prop_gpencil_convert_timingmodes_restricted[]
static
Initial value:
= {
{GP_STROKECONVERT_TIMING_NONE, "NONE", 0, "No Timing", "Ignore timing"},
{GP_STROKECONVERT_TIMING_LINEAR, "LINEAR", 0, "Linear", "Simple linear timing"},
{0, NULL, 0, NULL, NULL},
}

Definition at line 105 of file gpencil_convert.c.

Referenced by rna_GPConvert_mode_items().

◆ prop_gpencil_convertmodes

const EnumPropertyItem prop_gpencil_convertmodes[]
static
Initial value:
= {
{GP_STROKECONVERT_PATH, "PATH", ICON_CURVE_PATH, "Path", "Animation path"},
{GP_STROKECONVERT_CURVE, "CURVE", ICON_CURVE_BEZCURVE, "Bezier Curve", "Smooth Bezier curve"},
"POLY",
ICON_MESH_DATA,
"Polygon Curve",
"Bezier curve with straight-line segments (vector handles)"},
{0, NULL, 0, NULL, NULL},
}
@ GP_STROKECONVERT_POLY
@ GP_STROKECONVERT_PATH
@ GP_STROKECONVERT_CURVE

Definition at line 94 of file gpencil_convert.c.

Referenced by GPENCIL_OT_convert().