60 #include "RNA_prototypes.h"
91 switch (
area->spacetype) {
124 switch (
area->spacetype) {
233 return (gpd_ptr) ? *(gpd_ptr) :
NULL;
239 return (gpd_ptr) ? *(gpd_ptr) :
NULL;
254 return (gpd_ptr) ? *(gpd_ptr) :
NULL;
274 return ((owner_ptr) && (owner_ptr->
type != &RNA_Object));
320 return (gpl !=
NULL);
355 item_tmp.name = gpl->
info;
359 item_tmp.icon = ICON_GREASEPENCIL;
362 item_tmp.icon = ICON_NONE;
394 item_tmp.name =
"New Layer";
396 item_tmp.icon = ICON_ADD;
406 item_tmp.identifier = gpl->
info;
407 item_tmp.name = gpl->
info;
408 item_tmp.value = tot - i - 1;
411 item_tmp.icon = ICON_GREASEPENCIL;
414 item_tmp.icon = ICON_NONE;
441 for (i = 1; i <= ob->
totcol; i++) {
444 item_tmp.identifier = ma->
id.
name + 2;
445 item_tmp.name = ma->
id.
name + 2;
465 const float screen_co_a[2] = {x0, y0};
466 const float screen_co_b[2] = {x1,
y1};
546 if (gp_style !=
NULL) {
563 if (gp_style !=
NULL) {
590 r_gsc->
v2d = ®ion->
v2d;
616 const float diff_mat[4][4],
631 float diff_mat[4][4];
632 float inverse_diff_mat[4][4];
652 float diff_mat[4][4];
653 float inverse_diff_mat[4][4];
689 float vec[3] = {pt->
x, pt->
y, 0.0f};
694 if (subrect ==
NULL) {
696 *r_x = (int)(pt->
x / 100 * region->
winx);
697 *r_y = (int)(pt->
y / 100 * region->
winy);
734 float vec[3] = {pt->
x, pt->
y, 0.0f};
751 if (subrect ==
NULL) {
753 *r_x = (pt->
x / 100.0f * region->
winx);
754 *r_y = (pt->
y / 100.0f * region->
winy);
788 float vec[3] = {pt[0], pt[1], 0.0f};
805 if (subrect ==
NULL) {
807 xy[0] = (pt[0] / 100.0f * region->
winx);
808 xy[1] = (pt[1] / 100.0f * region->
winy);
820 const float screen_co[2],
933 float diff_mat[4][4];
934 float inverse_diff_mat[4][4];
944 for (i = 0, pt = gps->
points; i < gps->totpoints; i++, pt++) {
964 const float origin[3],
969 float plane_normal[3];
988 plane_normal[axis] = 1.0f;
1012 const float scale[3] = {1.0f, 1.0f, 1.0f};
1013 plane_normal[2] = 1.0f;
1020 for (
int i = 0; i < gps->
totpoints; i++) {
1044 const bool keep_original)
1054 float diff_mat[4][4], inverse_diff_mat[4][4];
1073 if (keep_original) {
1077 for (i = 0, pt = gps_active->
points; i < gps_active->totpoints; i++, pt++) {
1085 for (i = 0, pt = gps_active->
points; i < gps_active->totpoints; i++, pt++) {
1139 float ray_normal[3];
1143 float depth = 1.70141e+38f;
1144 float location[3] = {0.0f, 0.0f, 0.0f};
1145 float normal[3] = {0.0f, 0.0f, 0.0f};
1151 depsgraph, region, v3d,
xy, &ray_start[0], &ray_normal[0],
true);
1182 const float origin[3],
1188 float plane_normal[3];
1202 else if (axis < 3) {
1203 plane_normal[axis] = 1.0f;
1227 const float scale[3] = {1.0f, 1.0f, 1.0f};
1228 plane_normal[2] = 1.0f;
1263 int totnewpoints, oldtotpoints;
1267 for (
int s = 0; s < subdivide; s++) {
1282 for (
int i = oldtotpoints - 1; i > 0; i--) {
1300 dvert_final->
dw = dvert->
dw;
1307 for (
int i = 0; i < oldtotpoints - 1; i++) {
1338 for (
int i = 0; i < gps->
totpoints - 2; i++) {
1357 float diff_mat[4][4];
1358 float cur_mat[4][4];
1363 if (gpl->parent !=
NULL) {
1369 else if (gpl->partype ==
PARBONE) {
1372 float tmp_mat[4][4];
1388 for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
1404 const float rot[3] = {0.0f};
1436 &gp_falloff_curve->
clipr,
1455 bGPDframe *init_gpf = (is_multiedit) ? gpl->frames.first : gpl->actframe;
1459 if ((gpf == gpl->actframe) || ((gpf->flag &
GP_FRAME_SELECT) && (is_multiedit))) {
1464 for (gps = gpf->strokes.first; gps; gps = gps->next) {
1475 for (
int i = 0; i < gps->totpoints; i++) {
1490 if (!is_multiedit) {
1508 bGPDframe *init_gpf = (is_multiedit) ? gpl->frames.first : gpl->actframe;
1512 if ((gpf == gpl->actframe) || ((gpf->flag &
GP_FRAME_SELECT) && (is_multiedit))) {
1517 for (gps = gpf->strokes.first; gps; gps = gps->next) {
1524 for (
int i = 0; i < gps->totpoints; i++) {
1526 if (gps->dvert ==
NULL) {
1542 if (!is_multiedit) {
1560 bGPDframe *init_gpf = (is_multiedit) ? gpl->frames.first : gpl->actframe;
1564 if ((gpf == gpl->actframe) || ((gpf->flag &
GP_FRAME_SELECT) && (is_multiedit))) {
1569 for (gps = gpf->strokes.first; gps; gps = gps->next) {
1576 for (
int i = 0; i < gps->totpoints; i++) {
1578 if (gps->dvert ==
NULL) {
1596 if (!is_multiedit) {
1614 bGPDframe *init_gpf = (is_multiedit) ? gpl->frames.first : gpl->actframe;
1618 if ((gpf == gpl->actframe) || ((gpf->flag &
GP_FRAME_SELECT) && (is_multiedit))) {
1623 for (gps = gpf->strokes.first; gps; gps = gps->next) {
1630 for (
int i = 0; i < gps->totpoints; i++) {
1632 if (gps->dvert ==
NULL) {
1645 if (!is_multiedit) {
1686 short radius = (short)brush->
size;
1702 float viewport_size[4];
1704 immUniform2f(
"viewport_size", viewport_size[2], viewport_size[3]);
1747 float *last_mouse_position = customdata;
1750 float color[3] = {1.0f, 1.0f, 1.0f};
1752 float radius = 3.0f;
1754 const int mval_i[2] = {
x,
y};
1804 radius = brush->
size;
1825 radius = brush->
size;
1845 radius = brush->
size;
1865 radius = brush->
size;
1908 last_mouse_position[0] + region->
winrct.
xmin,
1909 last_mouse_position[1] + region->
winrct.
ymin);
1923 float *lastpost = customdata;
1942 (lastpost) ? customdata :
NULL);
2009 const float origin[3],
2071 if ((gps_ma) && (gps_ma == mat)) {
2087 const float p2d_a1[2],
2088 const float p2d_a2[2],
2093 for (
int s = 0; s < totstrokes; s++) {
2101 for (
int i2 = 0; i2 < gps_iter->
totpoints - 1; i2++) {
2102 float p2d_b1[2], p2d_b2[2];
2107 if (gps == gps_iter) {
2172 const float co_a[3],
2173 const float co_b[3])
2176 int totnewpoints, oldtotpoints;
2193 for (
int i = 0; i < oldtotpoints; i++) {
2212 for (
int i = 0; i < oldtotpoints; i++) {
2218 if (
ELEM(i, a_idx, b_idx)) {
2220 pt_final = &gps->
points[i2];
2222 copy_v3_v3(&pt_final->
x, (i == a_idx) ? co_a : co_b);
2239 const float p2d_a2[2],
2240 const float r_hit2d[2])
2244 float f = dist1 > 0.0f ? dist2 / dist1 : 0.0f;
2250 float f1 = dist1 > 0.0f ? dist3 / dist1 : 0.0f;
2269 const float min_factor = 0.0015f;
2290 if (gps_iter->totpoints < 2) {
2293 gps_array[totstrokes] = gps_iter;
2297 if (totstrokes == 0) {
2303 for (
int i = 0; i < gps->
totpoints; i++) {
2317 "GP Stroke temp 2d points");
2323 for (
int s = 0; s < totstrokes; s++) {
2341 float p2d_a1[2] = {0.0f, 0.0f};
2342 float p2d_a2[2] = {0.0f, 0.0f};
2349 for (
int i = cur_idx; i >= 0; i--) {
2370 if (f > min_factor) {
2382 for (
int i = cur_idx; i < gps->
totpoints; i++) {
2403 if (f > min_factor) {
2429 if ((!hit_a) && (!hit_b)) {
2430 for (
int i = 0; i < gps->
totpoints; i++) {
2432 pta2 = &oldpoints[i];
2442 if ((hit_a) && (hit_b)) {
2492 for (gps = gpf->strokes.first; gps; gps = gps->
next) {
2498 for (i = 0, pt = gps->
points; i < gps->totpoints; i++, pt++) {
2515 bool selected =
false;
2518 for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
2574 for (
int i = 0; i < gpc->tot_curve_points; i++) {
2590 bool selected =
false;
2593 if (gps->editcurve ==
NULL) {
2646 if (*buffer_used + 1 > *buffer_size) {
2647 if ((*buffer_size == 0) || (buffer_array ==
NULL)) {
2657 *buffer_size = *buffer_used = 0;
2666 if (buffer_array !=
NULL) {
2667 memset(buffer_array, 0,
sizeof(
tGPspoint) * *buffer_size);
2671 return buffer_array;
2754 int ix = mval[0] *
seed;
2755 int iy = mval[1] *
seed;
2756 int iz = ix + iy *
seed;
2763 random_settings->
hsv[0] = rand * brush_settings->
random_hue * 0.5f;
2800 int ix = (int)(tpt->
m_xy[0] *
seed);
2801 int iy = (int)(tpt->
m_xy[1] *
seed);
2802 int iz = ix + iy *
seed;
2804 float factor_value[3];
2812 factor_value[0] = rand * brush_settings->
random_hue * 0.5f;
2815 factor_value[0] = random_color[0];
2832 factor_value[1] = random_color[1];
2849 factor_value[2] = random_color[2];
2863 if (hsv[0] < 0.0f) {
2866 else if (hsv[0] > 1.0f) {
2880 float random_color[3],
2888 const bool is_vertex_fill =
2894 const bool is_vertex_stroke =
2903 float vertex_color[4];
2909 if (is_vertex_fill) {
2916 if (is_vertex_stroke) {
2928 if (gpd_eval !=
NULL) {
2936 const float diff_mat[4][4],
2945 for (
int i = 0; i < 8; i++) {
2954 for (
int i = 0; i < 8; i++) {
2959 if (r_max[0] < r_min[0]) {
2960 SWAP(
float, r_min[0], r_max[0]);
2962 if (r_max[1] < r_min[1]) {
2963 SWAP(
float, r_min[1], r_max[1]);
2969 const float mval[2],
2971 const float diff_mat[4][4])
2974 float boundbox_min[2];
2975 float boundbox_max[2];
2984 rcti rect_stroke = {boundbox_min[0], boundbox_max[0], boundbox_min[1], boundbox_max[1]};
2996 const float diff_mat[4][4])
3003 int(*mcoords)[2] =
NULL;
3010 for (i = 0, pt = gps->
points; i < gps->totpoints; i++, pt++) {
3031 const float diff_mat[4][4],
3049 const float ctrl1[2],
3050 const float ctrl2[2],
3057 const float radius_sqr = radius * radius;
3060 float diff_mat[4][4];
3065 float pt2d_start[2], pt2d_end[2];
3076 float dist_min = FLT_MAX;
3095 float pt2d_target_start[2], pt2d_target_end[2];
3097 pt = &gps_target->points[0];
3101 pt = &gps_target->points[gps_target->totpoints - 1];
3123 for (i = 0, pt = gps_target->points; i < gps_target->totpoints; i++, pt++) {
3131 if ((dist <= radius_sqr) && (dist < dist_min)) {
3134 gps_rtn = gps_target;
3138 if ((dist <= radius_sqr) && (dist < dist_min)) {
3141 gps_rtn = gps_target;
3155 BLI_assert(pt_index >= 0 && pt_index < gps_dst->totpoints);
3165 if ((pt_index > 0) && (pt_index < gps_dst->totpoints - 2)) {
3168 for (
int i = 0; i < gps_dst->
totpoints; i++) {
3173 pt = &gps_dst->
points[0];
3177 gps_dst, pt_index, gps_dst->
totpoints - 1,
true);
3179 if (dist_to_start < dist_to_end) {
3180 for (
int i = 0; i < pt_index; i++) {
3185 for (
int i = pt_index + 1; i < gps_dst->
totpoints; i++) {
3199 pt = &gps_final->
points[totpoint - 1];
3202 pt = &gps_final->
points[totpoint];
3207 for (
int i = 0; i < gps_final->
totpoints; i++) {
3228 if (dist_to_close < threshold_sqr) {
3254 gpf_dst->
key_type = gpf_src->key_type;
3261 if (gpf_dst->
next && (!gpf_src->next || (gpf_dst->
next->
framenum < gpf_src->next->framenum))) {
3262 gpf_dst = gpf_dst->
next;
typedef float(TangentPoint)[2]
Blender kernel action and pose functionality.
struct bPoseChannel * BKE_pose_channel_find_name(const struct bPose *pose, const char *name)
void BKE_brush_gpencil_paint_presets(struct Main *bmain, struct ToolSettings *ts, bool reset)
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_END
#define FOREACH_SCENE_COLLECTION_END
#define FOREACH_SCENE_COLLECTION_BEGIN(scene, _instance)
#define FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(_collection, _object)
struct ScrArea * CTX_wm_area(const bContext *C)
struct Scene * CTX_data_scene(const bContext *C)
#define CTX_DATA_BEGIN(C, Type, instance, member)
struct bGPdata * CTX_data_gpencil_data(const bContext *C)
struct Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
struct Object * CTX_data_active_object(const bContext *C)
struct bScreen * CTX_wm_screen(const bContext *C)
struct SpaceLink * CTX_wm_space_data(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct Main * CTX_data_main(const bContext *C)
struct ToolSettings * CTX_data_tool_settings(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
void BKE_gpencil_stroke_select_index_set(struct bGPdata *gpd, struct bGPDstroke *gps)
void BKE_gpencil_layer_active_set(struct bGPdata *gpd, struct bGPDlayer *active)
#define GPENCIL_USE_VERTEX_COLOR_STROKE(toolsettings, brush)
struct bGPDlayer_Mask * BKE_gpencil_layer_mask_named_get(struct bGPDlayer *gpl, const char *name)
void BKE_gpencil_layer_mask_sort(struct bGPdata *gpd, struct bGPDlayer *gpl)
struct bGPDstroke * BKE_gpencil_stroke_duplicate(struct bGPDstroke *gps_src, bool dup_points, bool dup_curve)
struct bGPDlayer * BKE_gpencil_layer_active_get(struct bGPdata *gpd)
void BKE_gpencil_stroke_select_index_reset(struct bGPDstroke *gps)
void BKE_gpencil_dvert_ensure(struct bGPDstroke *gps)
bool BKE_gpencil_layer_is_editable(const struct bGPDlayer *gpl)
struct bGPDlayer * BKE_gpencil_layer_named_get(struct bGPdata *gpd, const char *name)
void BKE_gpencil_free_stroke(struct bGPDstroke *gps)
struct Material * BKE_gpencil_object_material_ensure_from_active_input_toolsettings(struct Main *bmain, struct Object *ob, struct ToolSettings *ts)
struct Material * BKE_gpencil_object_material_from_brush_get(struct Object *ob, struct Brush *brush)
struct bGPDframe * BKE_gpencil_layer_frame_get(struct bGPDlayer *gpl, int cframe, eGP_GetFrame_Mode addnew)
#define GPENCIL_STRENGTH_MIN
void BKE_gpencil_layer_transform_matrix_get(const struct Depsgraph *depsgraph, struct Object *obact, struct bGPDlayer *gpl, float diff_mat[4][4])
void BKE_gpencil_layer_delete(struct bGPdata *gpd, struct bGPDlayer *gpl)
#define GPENCIL_USE_VERTEX_COLOR_FILL(toolsettings, brush)
void BKE_gpencil_stroke_editcurve_update(struct bGPdata *gpd, struct bGPDlayer *gpl, struct bGPDstroke *gps)
void BKE_gpencil_stroke_2d_flat_ref(const struct bGPDspoint *ref_points, int ref_totpoints, const struct bGPDspoint *points, int totpoints, float(*points2d)[2], float scale, int *r_direction)
void BKE_gpencil_stroke_join(struct bGPDstroke *gps_a, struct bGPDstroke *gps_b, bool leave_gaps, bool fit_thickness, bool smooth)
void BKE_gpencil_stroke_geometry_update(struct bGPdata *gpd, struct bGPDstroke *gps)
float BKE_gpencil_stroke_segment_length(const struct bGPDstroke *gps, int start_index, int end_index, bool use_3d)
void BKE_gpencil_stroke_uv_update(struct bGPDstroke *gps)
void BKE_gpencil_stroke_boundingbox_calc(struct bGPDstroke *gps)
struct bGPDstroke * BKE_gpencil_stroke_delete_tagged_points(struct bGPdata *gpd, struct bGPDframe *gpf, struct bGPDstroke *gps, struct bGPDstroke *next_stroke, int tag_flags, bool select, bool flat_cap, int limit)
void BKE_gpencil_stroke_merge_distance(struct bGPdata *gpd, struct bGPDframe *gpf, struct bGPDstroke *gps, float threshold, bool use_unselected)
bool BKE_gpencil_stroke_close(struct bGPDstroke *gps)
General operations, lookup, etc. for materials.
struct MaterialGPencilStyle * BKE_gpencil_material_settings(struct Object *ob, short act)
struct Material * BKE_object_material_get(struct Object *ob, short act)
struct Material * BKE_gpencil_material(struct Object *ob, short act)
General operations, lookup, etc. for blender objects.
void BKE_boundbox_init_from_minmax(struct BoundBox *bb, const float min[3], const float max[3])
bool BKE_paint_ensure(struct ToolSettings *ts, struct Paint **r_paint)
struct Paint * BKE_paint_get_active_from_context(const struct bContext *C)
struct MovieTrackingTrack * BKE_tracking_track_get_active(struct MovieTracking *tracking)
GHash * BLI_ghash_int_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
#define GHASH_ITER(gh_iter_, ghash_)
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
BLI_INLINE float BLI_hash_int_01(unsigned int k)
BLI_INLINE unsigned int BLI_hash_int_2d(unsigned int kx, unsigned int ky)
bool BLI_lasso_is_point_inside(const int mcoords[][2], unsigned int mcoords_len, int sx, int sy, int error_value)
void BLI_lasso_boundbox(struct rcti *rect, const int mcoords[][2], unsigned int mcoords_len)
#define LISTBASE_FOREACH(type, var, list)
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void void void BLI_movelisttolist_reverse(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int max_ii(int a, int b)
MINLINE float interpf(float a, float b, float t)
void hsv_to_rgb_v(const float hsv[3], float r_rgb[3])
void rgb_to_hsv_v(const float rgb[3], float r_hsv[3])
MINLINE void srgb_to_linearrgb_v4(float linear[4], const float srgb[4])
int isect_seg_seg_v2_point(const float v0[2], const float v1[2], const float v2[2], const float v3[2], float vi[2])
bool isect_line_plane_v3(float r_isect_co[3], const float l1[3], const float l2[3], const float plane_co[3], const float plane_no[3]) ATTR_WARN_UNUSED_RESULT
void mul_m4_m4m4(float R[4][4], const float A[4][4], const float B[4][4])
void unit_m4(float m[4][4])
void mul_mat3_m4_v3(const float M[4][4], float r[3])
bool invert_m4_m4(float R[4][4], const float A[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
bool equals_m4m4(const float mat1[4][4], const float mat2[4][4])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
void zero_axis_bias_m4(float mat[4][4])
void loc_eul_size_to_mat4(float R[4][4], const float loc[3], const float eul[3], const float size[3])
MINLINE void round_v2i_v2fl(int r[2], const float a[2])
MINLINE void copy_v4_v4(float r[4], const float a[4])
MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3(float r[3], const float a[3])
MINLINE float len_squared_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
void interp_v2_v2v2(float r[2], const float a[2], const float b[2], float t)
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], float t)
MINLINE bool is_zero_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], float t)
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE bool equals_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void zero_v4(float r[4])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void zero_v2(float r[2])
MINLINE void zero_v3(float r[3])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void add_v3_v3(float r[3], const float a[3])
bool BLI_rcti_isect_pt_v(const struct rcti *rect, const int xy[2])
bool BLI_rcti_isect_pt(const struct rcti *rect, int x, int y)
bool BLI_rcti_isect(const struct rcti *src1, const struct rcti *src2, struct rcti *dest)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
#define INIT_MINMAX2(min, max)
#define POINTER_FROM_INT(i)
#define CLAMP3(vec, b, c)
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
struct ID * DEG_get_evaluated_id(const struct Depsgraph *depsgraph, struct ID *id)
struct Object * DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct Object *object)
@ ID_RECALC_COPY_ON_WRITE
@ GP_SCULPT_FLAG_TMP_INVERT
@ GP_BRUSH_USE_SAT_RAND_PRESS
@ GP_BRUSH_USE_VAL_RAND_PRESS
@ GP_BRUSH_USE_HUE_RAND_PRESS
@ GP_BRUSH_USE_HUE_AT_STROKE
@ GP_BRUSH_USE_VAL_AT_STROKE
@ GP_BRUSH_USE_SAT_AT_STROKE
@ GP_BRUSH_MODE_VERTEXCOLOR
@ GP_BRUSH_STABILIZE_MOUSE
@ GP_BRUSH_STABILIZE_MOUSE_TEMP
Object groups, one object can be in many groups at once.
#define BEZT_SEL_INVERT(bezt)
#define BEZT_SEL_ALL(bezt)
#define BEZT_DESEL_ALL(bezt)
#define GPENCIL_VERTEX_MODE(gpd)
#define GPENCIL_WEIGHT_MODE(gpd)
#define GPENCIL_SCULPT_MODE(gpd)
@ GP_STROKE_NEEDS_CURVE_UPDATE
#define GPENCIL_MULTIEDIT_SESSIONS_ON(gpd)
#define GPENCIL_PAINT_MODE(gpd)
@ GP_DATA_STROKE_WEIGHTMODE
@ GP_DATA_STROKE_VERTEXMODE
@ GP_DATA_STROKE_PAINTMODE
@ GP_DATA_STROKE_SCULPTMODE
@ GP_DATA_STROKE_EDITMODE
Object is a sort of wrapper for general info.
struct MovieClip * ED_space_clip_get_clip(struct SpaceClip *sc)
struct Object * ED_object_add_type(struct bContext *C, int type, const char *name, const float loc[3], const float rot[3], bool enter_editmode, unsigned short local_view_bits) ATTR_NONNULL(1) ATTR_RETURNS_NONNULL
bool ED_transform_snap_object_project_ray(SnapObjectContext *sctx, struct Depsgraph *depsgraph, const View3D *v3d, const struct SnapObjectParams *params, const float ray_origin[3], const float ray_direction[3], float *ray_depth, float r_co[3], float r_no[3])
void ED_view3d_win_to_delta(const struct ARegion *region, const float xy_delta[2], float zfac, float r_out[3])
eV3DProjStatus ED_view3d_project_float_global(const struct ARegion *region, const float co[3], float r_co[2], eV3DProjTest flag)
eV3DProjStatus ED_view3d_project_int_global(const struct ARegion *region, const float co[3], int r_co[2], eV3DProjTest flag)
bool ED_view3d_win_to_ray_clipped(struct Depsgraph *depsgraph, const struct ARegion *region, const struct View3D *v3d, const float mval[2], float r_ray_start[3], float r_ray_normal[3], bool do_clip_planes)
void ED_view3d_global_to_vector(const struct RegionView3D *rv3d, const float coord[3], float vec[3])
float ED_view3d_calc_zfac(const struct RegionView3D *rv3d, const float co[3])
void view3d_region_operator_needs_opengl(struct wmWindow *win, struct ARegion *region)
bool ED_view3d_autodist_simple(struct ARegion *region, const int mval[2], float mouse_worldloc[3], int margin, const float *force_depth)
void view3d_operator_needs_opengl(const struct bContext *C)
bool edge_inside_circle(const float cent[2], float radius, const float screen_co_a[2], const float screen_co_b[2])
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, bool no_shift)
void ED_view3d_depth_override(struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, struct Object *obact, eV3DDepthOverrideMode mode, struct ViewDepths **r_depths)
_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 GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble y1
_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 GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint vn
_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 y
_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 GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble v1
@ GPU_SHADER_2D_LINE_DASHED_UNIFORM_COLOR
@ GPU_SHADER_2D_UNIFORM_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_smooth(bool enable)
void GPU_viewport_size_get_f(float coords[4])
Read Guarded memory(de)allocation.
#define MEM_recallocN(vmemh, len)
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position CLAMP
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
Platform independent time functions.
bool UI_view2d_view_to_region_clip(const struct View2D *v2d, float x, float y, int *r_region_x, int *r_region_y) ATTR_NONNULL()
__forceinline const avxb select(const avxb &m, const avxb &t, const avxb &f)
return(oflags[bm->toolflag_index].f &oflag) !=0
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
static unsigned long seed
const Depsgraph * depsgraph
#define GP_EDITABLE_CURVES_END(gpstroke_iter)
#define GP_EDITABLE_CURVES_BEGIN(gpstroke_iter, C, gpl, gps, gpc)
#define GP_EDITABLE_STROKES_BEGIN(gpstroke_iter, C, gpl, gps)
#define GP_STROKE_BUFFER_CHUNK
#define GP_EDITABLE_STROKES_END(gpstroke_iter)
void ED_gpencil_stroke_close_by_distance(bGPDstroke *gps, const float threshold)
void ED_gpencil_projected_2d_bound_box(const GP_SpaceConversion *gsc, const bGPDstroke *gps, const float diff_mat[4][4], float r_min[2], float r_max[2])
Object * ED_gpencil_add_object(bContext *C, const float loc[3], ushort local_view_bits)
void ED_gpencil_select_toggle_all(bContext *C, int action)
void ED_gpencil_vgroup_deselect(bContext *C, Object *ob)
void gpencil_apply_parent(Depsgraph *depsgraph, Object *obact, bGPDlayer *gpl, bGPDstroke *gps)
void gpencil_point_conversion_init(bContext *C, GP_SpaceConversion *r_gsc)
bool ED_gpencil_stroke_material_editable(Object *ob, const bGPDlayer *gpl, const bGPDstroke *gps)
void ED_gpencil_project_point_to_plane(const Scene *scene, const Object *ob, bGPDlayer *gpl, const RegionView3D *rv3d, const float origin[3], const int axis, bGPDspoint *pt)
void ED_gpencil_project_stroke_to_plane(const Scene *scene, const Object *ob, const RegionView3D *rv3d, bGPDlayer *gpl, bGPDstroke *gps, const float origin[3], const int axis)
bool gpencil_active_layer_poll(bContext *C)
void ED_gpencil_project_stroke_to_view(bContext *C, bGPDlayer *gpl, bGPDstroke *gps)
bGPDstroke * ED_gpencil_stroke_join_and_trim(bGPdata *gpd, bGPDframe *gpf, bGPDstroke *gps, bGPDstroke *gps_dst, const int pt_index)
static bool gpencil_check_collision(bGPDstroke *gps, bGPDstroke **gps_array, GHash *all_2d, int totstrokes, const float p2d_a1[2], const float p2d_a2[2], float r_hit[2])
static void gpencil_brush_cursor_draw(bContext *C, int x, int y, void *customdata)
bool ED_gpencil_stroke_can_use_direct(const ScrArea *area, const bGPDstroke *gps)
void ED_gpencil_update_color_uv(Main *bmain, Material *mat)
void ED_gpencil_fill_vertex_color_set(ToolSettings *ts, Brush *brush, bGPDstroke *gps)
bGPdata * ED_gpencil_data_get_active_direct(ScrArea *area, Object *ob)
void ED_gpencil_tag_scene_gpencil(Scene *scene)
void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable, void *customdata)
void ED_gpencil_init_random_settings(Brush *brush, const int mval[2], GpRandomSettings *random_settings)
bool gpencil_point_xy_to_3d(const GP_SpaceConversion *gsc, Scene *scene, const float screen_co[2], float r_out[3])
bGPDstroke * ED_gpencil_stroke_nearest_to_ends(bContext *C, const GP_SpaceConversion *gsc, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps, const float ctrl1[2], const float ctrl2[2], const float radius, int *r_index)
void gpencil_subdivide_stroke(bGPdata *gpd, bGPDstroke *gps, const int subdivide)
void ED_gpencil_vgroup_select(bContext *C, Object *ob)
void ED_gpencil_brush_draw_eraser(Brush *brush, int x, int y)
bool ED_gpencil_stroke_check_collision(const GP_SpaceConversion *gsc, bGPDstroke *gps, const float mval[2], const int radius, const float diff_mat[4][4])
void gpencil_point_to_parent_space(const bGPDspoint *pt, const float diff_mat[4][4], bGPDspoint *r_pt)
const EnumPropertyItem * ED_gpencil_layers_with_new_enum_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
bGPdata ** ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *r_ptr)
static bool gpencil_brush_cursor_poll(bContext *C)
void ED_gpencil_sbuffer_update_eval(bGPdata *gpd, Object *ob_eval)
void ED_gpencil_vgroup_remove(bContext *C, Object *ob)
bGPdata ** ED_annotation_data_get_pointers_direct(ID *screen_id, ScrArea *area, Scene *scene, PointerRNA *r_ptr)
static void gpencil_copy_points(bGPDstroke *gps, bGPDspoint *pt, bGPDspoint *pt_final, int i, int i2)
static void gpencil_stroke_convertcoords(ARegion *region, const tGPspoint *point2D, const float origin[3], float out[3])
bool ED_gpencil_stroke_material_visible(Object *ob, const bGPDstroke *gps)
void ED_gpencil_select_curve_toggle_all(bContext *C, int action)
const EnumPropertyItem * ED_gpencil_material_enum_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
void ED_gpencil_point_vertex_color_set(ToolSettings *ts, Brush *brush, bGPDspoint *pt, tGPspoint *tpt)
void ED_gpencil_stroke_extremes_to2d(const GP_SpaceConversion *gsc, const float diff_mat[4][4], bGPDstroke *gps, float r_ctrl1[2], float r_ctrl2[2])
void gpencil_point_3d_to_xy(const GP_SpaceConversion *gsc, const short flag, const float pt[3], float xy[2])
int ED_gpencil_select_stroke_segment(bGPdata *gpd, bGPDlayer *gpl, bGPDstroke *gps, bGPDspoint *pt, bool select, bool insert, const float scale, float r_hita[3], float r_hitb[3])
void ED_gpencil_setup_modes(bContext *C, bGPdata *gpd, int newmode)
bool ED_gpencil_stroke_point_is_inside(const bGPDstroke *gps, const GP_SpaceConversion *gsc, const int mval[2], const float diff_mat[4][4])
void ED_gpencil_tpoint_to_point(ARegion *region, float origin[3], const tGPspoint *tpt, bGPDspoint *pt)
bool ED_gpencil_frame_has_selected_stroke(const bGPDframe *gpf)
static void gpencil_sbuffer_vertex_color_random(bGPdata *gpd, Brush *brush, tGPspoint *tpt, const float random_color[3], float pen_pressure)
bool gpencil_active_brush_poll(bContext *C)
void ED_gpencil_stroke_reproject(Depsgraph *depsgraph, const GP_SpaceConversion *gsc, SnapObjectContext *sctx, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps, const eGP_ReprojectModes mode, const bool keep_original)
bGPdata ** ED_gpencil_data_get_pointers_direct(ScrArea *area, Object *ob, PointerRNA *r_ptr)
bGPdata * ED_annotation_data_get_active(const bContext *C)
void gpencil_point_to_xy(const GP_SpaceConversion *gsc, const bGPDstroke *gps, const bGPDspoint *pt, int *r_x, int *r_y)
bool gpencil_add_poll(bContext *C)
void ED_gpencil_layer_merge(bGPdata *gpd, bGPDlayer *gpl_src, bGPDlayer *gpl_dst, const bool reverse)
bool ED_gpencil_stroke_can_use(const bContext *C, const bGPDstroke *gps)
void ED_gpencil_drawing_reference_get(const Scene *scene, const Object *ob, char align_flag, float r_vec[3])
bool ED_gpencil_data_owner_is_annotation(PointerRNA *owner_ptr)
void gpencil_point_to_xy_fl(const GP_SpaceConversion *gsc, const bGPDstroke *gps, const bGPDspoint *pt, float *r_x, float *r_y)
bGPdata * ED_gpencil_data_get_active_evaluated(const bContext *C)
void ED_gpencil_sbuffer_vertex_color_set(Depsgraph *depsgraph, Object *ob, ToolSettings *ts, Brush *brush, Material *material, float random_color[3], float pen_pressure)
bGPdata * ED_annotation_data_get_active_direct(ID *screen_id, ScrArea *area, Scene *scene)
void ED_gpencil_reset_layers_parent(Depsgraph *depsgraph, Object *obact, bGPdata *gpd)
bGPdata * ED_gpencil_data_get_active(const bContext *C)
tGPspoint * ED_gpencil_sbuffer_ensure(tGPspoint *buffer_array, int *buffer_size, int *buffer_used, const bool clear)
bool ED_gpencil_layer_has_selected_stroke(const bGPDlayer *gpl, const bool is_multiedit)
static void gpencil_insert_point(bGPdata *gpd, bGPDstroke *gps, bGPDspoint *a_pt, bGPDspoint *b_pt, const float co_a[3], const float co_b[3])
void gpencil_apply_parent_point(Depsgraph *depsgraph, Object *obact, bGPDlayer *gpl, bGPDspoint *pt)
static float gpencil_calc_factor(const float p2d_a1[2], const float p2d_a2[2], const float r_hit2d[2])
void ED_gpencil_add_defaults(bContext *C, Object *ob)
bool gpencil_stroke_inside_circle(const float mval[2], int rad, int x0, int y0, int x1, int y1)
const EnumPropertyItem * ED_gpencil_layers_enum_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
bGPdata ** ED_annotation_data_get_pointers(const bContext *C, PointerRNA *r_ptr)
static bool gpencil_check_cursor_region(bContext *C, const int mval_i[2])
bool ED_gpencil_has_keyframe_v3d(Scene *UNUSED(scene), Object *ob, int cfra)
void gpencil_stroke_convertcoords_tpoint(Scene *scene, ARegion *region, Object *ob, const tGPspoint *point2D, float *depth, float r_out[3])
void ED_gpencil_vgroup_assign(bContext *C, Object *ob, float weight)
IconTextureDrawCall normal
ccl_gpu_kernel_postfix ccl_global float int int int int float threshold
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
ccl_device_inline float3 ceil(const float3 &a)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
static void clear(Message *msg)
Insertion insert(const float3 &point_prev, const float3 &handle_prev, const float3 &handle_next, const float3 &point_next, float parameter)
static void area(int d1, int d2, int e1, int e2, float weights[2])
static const pxr::TfToken out("out", pxr::TfToken::Immortal)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem)
const EnumPropertyItem DummyRNA_DEFAULT_items[]
struct CurveMapping * curve_rand_saturation
struct CurveMapping * curve_rand_hue
float draw_random_strength
struct CurveMapping * curve_rand_value
struct BrushGpencilSettings * gpencil_settings
struct CurveMapping * cur_falloff
struct PreviewImage * preview
struct MaterialGPencilStyle * gp_style
struct MovieTracking tracking
struct ToolSettings * toolsettings
struct bNodeTree * nodetree
bGPDcurve_point * curve_points
struct bGPDlayer * gpl_orig
bGPDlayer_Runtime runtime
struct MDeformVert * dvert
bGPDcontrolpoint * cp_points
ListBase vertex_group_names
int vertex_group_active_index
double PIL_check_seconds_timer(void)
void WM_main_add_notifier(unsigned int type, void *reference)
bool WM_paint_cursor_end(wmPaintCursor *handle)
wmPaintCursor * WM_paint_cursor_activate(short space_type, short region_type, bool(*poll)(bContext *C), wmPaintCursorDraw draw, void *customdata)