117 "Bezier curve with straight-line segments (vector handles)"},
134 "Use the original timing, gaps included"},
139 "Use the original timing, but with custom gap lengths (in frames)"},
176 float diff_mat[4][4];
204 mvalf[0] = (
float)pt->
x / 100.0f * region->
winx;
205 mvalf[1] = (
float)pt->
y / 100.0f * region->
winy;
275 const double stroke_inittime,
277 const float delta_dist)
279 float delta_time = 0.0f;
285 gtd->
times[cur_point] = 0.0f;
287 else if (
time < 0.0f) {
291 delta_time = -gtd->
times[cur_point] - gtd->
times[cur_point - 1];
310 #define MIN_TIME_DELTA 0.02f
318 const float tot_gaps_time,
319 const float delta_time,
320 float *next_delta_time)
325 if (gtd->
times[j] < 0) {
335 int rem_gaps = nbr_gaps - (*nbr_done_gaps);
338 *next_delta_time = tot_gaps_time;
346 delta = delta_time - (gtd->
gap_duration * (*nbr_done_gaps));
373 float *r_tot_gaps_time)
375 float delta_time = 0.0f;
378 if (gtd->
times[i] < 0 && i) {
381 delta_time += gtd->
times[i] - gtd->
times[i - 1];
385 gtd->
times[i] -= delta_time;
393 printf(
"%f, %f, %f, %d\n", gtd->
tot_time, delta_time, *r_tot_gaps_time, *nbr_gaps);
408 const float time_range,
410 const float tot_gaps_time)
415 float last_valid_time = 0.0f;
416 int end_stroke_idx = -1, start_stroke_idx = 0;
417 float end_stroke_time = 0.0f;
420 float delta_time = 0.0f, next_delta_time = 0.0f;
421 int nbr_done_gaps = 0;
429 if (i > end_stroke_idx) {
430 start_stroke_idx = i;
431 delta_time = next_delta_time;
434 gtd, rng, i, nbr_gaps, &nbr_done_gaps, tot_gaps_time, delta_time, &next_delta_time);
436 end_stroke_time = time_start +
437 ((gtd->
times[end_stroke_idx] + delta_time) / gtd->
tot_time * time_range);
442 float cfra = time_start + ((gtd->
times[i] + delta_time) / gtd->
tot_time * time_range);
445 if (i == start_stroke_idx) {
465 last_valid_time = cfra;
468 printf(
"\t Skipping start point %d, too close from end point %d\n", i, end_stroke_idx);
471 else if (i == end_stroke_idx) {
486 last_valid_time = cfra;
503 last_valid_time = cfra;
507 "\t Skipping \"middle\" point %d, too close from last added point or end point %d\n",
550 printf(
"%s: tot len: %f\t\ttot time: %f\n", __func__, gtd->
tot_dist, gtd->
tot_time);
552 printf(
"\tpoint %d:\t\tlen: %f\t\ttime: %f\n", i, gtd->
dists[i], gtd->
times[i]);
570 &anim_eval_context_start,
588 &anim_eval_context_end,
599 float tot_gaps_time = 0.0f;
614 printf(
"GP Stroke Path Conversion: Starting keying!\n");
618 reports,
ptr, prop,
depsgraph, fcu, cu, gtd, rng, time_range, nbr_gaps, tot_gaps_time);
627 printf(
"%s: \ntot len: %f\t\ttot time: %f\n", __func__, gtd->
tot_dist, gtd->
tot_time);
629 printf(
"\tpoint %d:\t\tlen: %f\t\ttime: %f\n", i, gtd->
dists[i], gtd->
times[i]);
640 #undef MIN_TIME_DELTA
642 #define GAP_DFAC 0.01f
643 #define WIDTH_CORR_FAC 0.1f
644 #define BEZT_HANDLE_FAC 0.3f
652 const float prev_p[3],
654 const double inittime,
658 float minmax_weights[2])
668 if (bp->
weight < minmax_weights[0]) {
669 minmax_weights[0] = bp->
weight;
671 else if (bp->
weight > minmax_weights[1]) {
672 minmax_weights[1] = bp->
weight;
687 float minmax_weights[2],
690 const bool add_start_point,
691 const bool add_end_point,
698 const int add_start_end_points = (add_start_point ? 1 : 0) + (add_end_point ? 1 : 0);
742 if (curnu && !stitch && old_nbp) {
743 float p1[3], p2[3], p[3], next_p[3];
744 float dt1 = 0.0f, dt2 = 0.0f;
751 prev_bp = &nu->
bp[old_nbp - 2];
753 bp = &nu->
bp[old_nbp - 1];
799 gtd, bp, p2, p1, do_gtd, gps->
inittime, dt2, 0.0f, rad_fac, minmax_weights);
803 else if (add_start_point) {
804 float p[3], next_p[3];
819 bp = &nu->
bp[old_nbp];
825 gtd, bp, p, p, do_gtd, gps->
inittime, dt, 0.0f, rad_fac, minmax_weights);
831 prev_bp = &nu->
bp[old_nbp - 1];
835 for (i = (stitch) ? 1 : 0, pt = &gps->
points[(stitch) ? 1 : 0], bp = &nu->
bp[old_nbp];
847 (prev_bp) ? prev_bp->
vec : p,
876 gtd, bp, p, prev_bp->
vec, do_gtd, gps->
inittime, dt, 0.0f, rad_fac, minmax_weights);
880 if (!curnu || !*curnu) {
898 const float prev_p[3],
900 const double inittime,
904 float minmax_weights[2])
916 if (bezt->
weight < minmax_weights[0]) {
917 minmax_weights[0] = bezt->
weight;
919 else if (bezt->
weight > minmax_weights[1]) {
920 minmax_weights[1] = bezt->
weight;
935 float minmax_weights[2],
938 const bool add_start_point,
939 const bool add_end_point,
945 int i, tot, old_nbezt = 0;
946 const int add_start_end_points = (add_start_point ? 1 : 0) + (add_end_point ? 1 : 0);
947 float p3d_cur[3], p3d_prev[3], p3d_next[3], h1[3], h2[3];
952 old_nbezt = nu->
pntsu;
984 C, gpl, gps, pt + 1, (stitch) ? p3d_cur : p3d_next, subrect);
986 if (stitch && tot > 2) {
992 if (curnu && old_nbezt) {
997 bezt = &nu->
bezt[old_nbezt - 1];
1017 float dt1 = 0.0f, dt2 = 0.0f;
1022 prev_bezt = &nu->
bezt[old_nbezt - 2];
1024 bezt = &nu->
bezt[old_nbezt - 1];
1082 gtd, bezt, p2, h1, h2, p1, do_gtd, gps->
inittime, dt2, 0.0f, rad_fac, minmax_weights);
1088 else if (add_start_point) {
1105 bezt = &nu->
bezt[old_nbezt];
1107 gtd, bezt, p, h1, h2, p, do_gtd, gps->
inittime, dt, 0.0f, rad_fac, minmax_weights);
1114 prev_bezt = &nu->
bezt[old_nbezt - 1];
1118 for (i = stitch ? 1 : 0, bezt = &nu->
bezt[old_nbezt]; i < tot; i++, pt++, bezt++) {
1121 if (i || old_nbezt) {
1140 prev_bezt ? prev_bezt->
vec[1] : p3d_cur,
1159 if (add_end_point) {
1202 if (!curnu || !*curnu) {
1211 #undef WIDTH_CORR_FAC
1212 #undef BEZT_HANDLE_FAC
1251 const float delta = minmax_weights[0];
1255 if (
IS_EQF(delta, minmax_weights[1])) {
1259 fac = 1.0f / (minmax_weights[1] - delta);
1265 for (
int i = 0; i < nu->pntsu; i++, bezt++) {
1271 for (
int i = 0; i < nu->pntsu; i++, bp++) {
1305 const bool norm_weights,
1306 const float rad_fac,
1307 const bool link_strokes,
1321 float minmax_weights[2] = {1.0f, 0.0f};
1338 subrect_ptr = &subrect;
1358 if (gps->totpoints < 1) {
1361 const bool add_start_point = (link_strokes && !(prev_gps));
1362 const bool add_end_point = (link_strokes && !(gps->next));
1366 bool stitch =
false;
1371 if ((pt1->
x == pt2->
x) && (pt1->
y == pt2->
y)) {
1377 if (!(stitch || link_strokes)) {
1424 if (norm_weights && ((minmax_weights[0] > 0.0f) || (minmax_weights[1] < 1.0f))) {
1454 double base_time, cur_time, prev_time = -1.0;
1464 base_time = cur_time = gps->
inittime;
1465 if (cur_time <= prev_time) {
1470 prev_time = cur_time;
1471 for (i = 0, pt = gps->
points; i < gps->totpoints; i++, pt++) {
1476 if ((i && cur_time <= prev_time) || (cur_time < prev_time)) {
1480 prev_time = cur_time;
1486 }
while ((gps = gps->
next));
1502 if (end_frame <= start_frame) {
1553 "Current Grease Pencil strokes have no valid timing data, most timing options will "
1560 if (!valid_timing &&
1565 if (!link_strokes) {
1588 C, op->
reports, gpd, gpl, mode, norm_weights, rad_fac, link_strokes, >d);
1625 "use_normalize_weights",
1626 "radius_multiplier",
1629 "bevel_resolution")) {
1634 if (
STREQ(prop_id,
"use_timing_data")) {
1640 if (
STREQ(prop_id,
"timing_mode")) {
1646 if (
STR_ELEM(prop_id,
"frame_range",
"start_frame")) {
1651 if (valid_timing &&
STREQ(prop_id,
"use_realtime")) {
1656 if ((!realtime || !valid_timing) &&
STREQ(prop_id,
"end_frame")) {
1662 if (
STREQ(prop_id,
"gap_duration")) {
1667 if (
STREQ(prop_id,
"gap_randomness") && (gap_duration > 0.0f)) {
1672 if (
STREQ(prop_id,
"seed") && (gap_duration > 0.0f) && (gap_randomness > 0.0f)) {
1688 ot->
name =
"Convert Grease Pencil";
1690 ot->
description =
"Convert the active Grease Pencil layer to a new Curve Object";
1706 ot->
srna,
"bevel_depth", 0.0f, 0.0f, 1000.0f,
"Bevel Depth",
"", 0.0f, 10.0f);
1713 "Bevel resolution when depth is non-zero",
1718 "use_normalize_weights",
1721 "Normalize weight (set from stroke width)");
1723 "radius_multiplier",
1728 "Multiplier for the points' radii (set from stroke width)",
1735 "Whether to link strokes with zero-radius sections of curves");
1742 "How to use timing data stored in strokes");
1751 "The duration of evaluation of the path control curve",
1760 "The start frame of the path control curve",
1767 "Whether the path control curve reproduces the drawing in realtime, starting "
1768 "from Start Frame");
1775 "The end frame of the path control curve (if Realtime is not set)",
1786 "Custom Gap mode: (Average) length of gaps, in frames "
1787 "(Note: Realtime value, will be scaled if Realtime is not set)",
1796 "Custom Gap mode: Number of frames that gap lengths can vary",
1805 "Custom Gap mode: Random generator seed",
1815 "Whether the converted Grease Pencil layer has valid timing data (internal use)");
1849 ushort local_view_bits = 0;
1882 ot->
name =
"Generate Grease Pencil Object using image as source";
1883 ot->
idname =
"GPENCIL_OT_image_to_grease_pencil";
1884 ot->
description =
"Generate a Grease Pencil Object using Image as source";
1900 "Size used for grease pencil points",
1909 "Create an inverted image for masking using alpha channel");
typedef float(TangentPoint)[2]
AnimationEvalContext BKE_animsys_eval_context_construct(struct Depsgraph *depsgraph, float eval_time)
bool BKE_collection_object_add(struct Main *bmain, struct Collection *collection, struct Object *ob)
struct ScrArea * CTX_wm_area(const bContext *C)
struct Scene * CTX_data_scene(const bContext *C)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct Collection * CTX_data_collection(const bContext *C)
struct Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
struct Object * CTX_data_active_object(const bContext *C)
struct View3D * CTX_wm_view3d(const bContext *C)
struct SpaceLink * CTX_wm_space_data(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
struct SpaceImage * CTX_wm_space_image(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
void BKE_nurb_handles_calc(struct Nurb *nu)
struct Curve * BKE_curve_add(struct Main *bmain, const char *name, int type)
void BKE_nurb_points_add(struct Nurb *nu, int number)
void BKE_nurb_knot_calc_u(struct Nurb *nu)
bool BKE_nurb_type_convert(struct Nurb *nu, const short type, const bool use_handles, const char **r_err_msg)
void BKE_nurb_bezierPoints_add(struct Nurb *nu, int number)
void calchandles_fcurve(struct FCurve *fcu)
struct bGPDframe * BKE_gpencil_frame_addnew(struct bGPDlayer *gpl, int cframe)
struct Material * BKE_gpencil_object_material_new(struct Main *bmain, struct Object *ob, const char *name, int *r_index)
struct bGPDlayer * BKE_gpencil_layer_active_get(struct bGPdata *gpd)
struct bGPDframe * BKE_gpencil_layer_frame_get(struct bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
bool BKE_gpencil_from_image(struct SpaceImage *sima, struct bGPdata *gpd, struct bGPDframe *gpf, const float size, const bool mask)
void BKE_gpencil_layer_transform_matrix_get(const struct Depsgraph *depsgraph, struct Object *obact, struct bGPDlayer *gpl, float diff_mat[4][4])
struct bGPDlayer * BKE_gpencil_layer_addnew(struct bGPdata *gpd, const char *name, bool setactive)
struct bGPDstroke * BKE_gpencil_stroke_delete_tagged_points(struct bGPdata *gpd, struct bGPDframe *gpf, struct bGPDstroke *gps, struct bGPDstroke *next_stroke, int tag_flags, const bool select, const bool flat_cap, const int limit)
bool BKE_image_has_ibuf(struct Image *ima, struct ImageUser *iuser)
struct Base * BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob)
General operations, lookup, etc. for materials.
General operations, lookup, etc. for blender objects.
struct Object * BKE_object_add_only_object(struct Main *bmain, int type, const char *name) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL
void BKE_report(ReportList *reports, ReportType type, const char *message)
void BKE_reportf(ReportList *reports, ReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float min_ff(float a, float b)
MINLINE float interpf(float a, float b, float t)
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], const float t)
MINLINE float len_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v3_v3(float r[3], const float a[3])
void BLI_rng_srandom(struct RNG *rng, unsigned int seed) ATTR_NONNULL(1)
void BLI_rng_free(struct RNG *rng) ATTR_NONNULL(1)
struct RNG * BLI_rng_new(unsigned int seed)
float BLI_rng_get_float(struct RNG *rng) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
typedef double(DMatrix)[4][4]
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
void DEG_relations_tag_update(struct Main *bmain)
@ FCURVE_EXTRAPOLATE_LINEAR
Object groups, one object can be in many groups at once.
#define GPENCIL_ANY_EDIT_MODE(gpd)
@ GP_MATERIAL_MODE_SQUARE
Object is a sort of wrapper for general info.
void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode)
void ED_view3d_calc_camera_border(const struct Scene *scene, struct Depsgraph *depsgraph, const struct ARegion *region, const struct View3D *v3d, const struct RegionView3D *rv3d, struct rctf *r_viewborder, const bool no_shift)
void ED_view3d_win_to_3d(const struct View3D *v3d, const struct ARegion *region, const float depth_pt[3], const float mval[2], float r_out[3])
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
Read Guarded memory(de)allocation.
Group RGB to Bright Vector Camera CLAMP
void UI_view2d_view_to_region_fl(const struct View2D *v2d, float x, float y, float *r_region_x, float *r_region_y) ATTR_NONNULL()
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
const Depsgraph * depsgraph
static int image_to_gpencil_exec(bContext *C, wmOperator *op)
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 bool gpencil_convert_poll(bContext *C)
struct tGpTimingData tGpTimingData
static void gpencil_stroke_finalize_curve_endpoints(Curve *cu)
static bool gpencil_convert_poll_property(const bContext *UNUSED(C), wmOperator *op, const PropertyRNA *prop)
void GPENCIL_OT_image_to_grease_pencil(wmOperatorType *ot)
static void gpencil_timing_data_add_point(tGpTimingData *gtd, const double stroke_inittime, const float time, const float delta_dist)
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_strokepoint_convertcoords(bContext *C, bGPDlayer *gpl, bGPDstroke *gps, bGPDspoint *source_pt, float p3d[3], const rctf *subrect)
static const EnumPropertyItem * rna_GPConvert_mode_items(bContext *UNUSED(C), PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *UNUSED(r_free))
static void gpencil_stroke_path_animation(bContext *C, ReportList *reports, Curve *cu, tGpTimingData *gtd)
static int gpencil_find_end_of_stroke_idx(tGpTimingData *gtd, RNG *rng, const int idx, const int nbr_gaps, int *nbr_done_gaps, const float tot_gaps_time, const float delta_time, float *next_delta_time)
static const EnumPropertyItem prop_gpencil_convert_timingmodes[]
static int gpencil_convert_layer_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_gpencil_convertmodes[]
static bool gpencil_convert_check_has_valid_timing(bContext *C, bGPDlayer *gpl, wmOperator *op)
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 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 nbr_gaps, const float tot_gaps_time)
static bool image_to_gpencil_poll(bContext *C)
static const EnumPropertyItem prop_gpencil_convert_timingmodes_restricted[]
void GPENCIL_OT_convert(wmOperatorType *ot)
static void gpencil_stroke_norm_curve_weights(Curve *cu, const float minmax_weights[2])
static void gpencil_stroke_path_animation_preprocess_gaps(tGpTimingData *gtd, RNG *rng, int *nbr_gaps, float *r_tot_gaps_time)
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_convert_set_end_frame(struct Main *UNUSED(main), struct Scene *UNUSED(scene), struct PointerRNA *ptr)
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 int gpencil_camera_view_subrect(bContext *C, rctf *subrect)
@ GP_STROKECONVERT_TIMING_LINEAR
@ GP_STROKECONVERT_TIMING_NONE
@ GP_STROKECONVERT_TIMING_CUSTOMGAP
@ GP_STROKECONVERT_TIMING_FULL
static void gpencil_timing_data_set_nbr(tGpTimingData *gtd, const int nbr)
Object * ED_gpencil_add_object(bContext *C, const float loc[3], ushort local_view_bits)
bAction * ED_id_action_ensure(Main *bmain, ID *id)
bool insert_keyframe_direct(ReportList *reports, PointerRNA ptr, PropertyRNA *prop, FCurve *fcu, const AnimationEvalContext *anim_eval_context, eBezTriple_KeyframeType keytype, struct NlaKeyframingContext *nla_context, eInsertKeyFlags flag)
FCurve * ED_action_fcurve_ensure(struct Main *bmain, struct bAction *act, const char group[], struct PointerRNA *ptr, const char rna_path[], const int array_index)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
int main(int argc, char **argv)
static void area(int d1, int d2, int e1, int e2, float weights[2])
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
const char * RNA_property_identifier(const PropertyRNA *prop)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_int_get(PointerRNA *ptr, const char *name)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_float_distance(StructOrFunctionRNA *cont_, const char *identifier, float default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_update_runtime(PropertyRNA *prop, const void *func)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, int default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
struct MaterialGPencilStyle * gp_style
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
bool(* poll_property)(const struct bContext *C, struct wmOperator *op, const PropertyRNA *prop) ATTR_WARN_UNUSED_RESULT
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))