diff options
Diffstat (limited to 'source/blender/editors/gpencil/gpencil_utils.c')
-rw-r--r-- | source/blender/editors/gpencil/gpencil_utils.c | 185 |
1 files changed, 1 insertions, 184 deletions
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c index 99cf2b52df7..f082af979a1 100644 --- a/source/blender/editors/gpencil/gpencil_utils.c +++ b/source/blender/editors/gpencil/gpencil_utils.c @@ -96,11 +96,6 @@ /* ******************************************************** */ /* Context Wrangling... */ -/** - * Get pointer to active Grease Pencil data-block, - * and an RNA-pointer to trace back to whatever owns it, - * when context info is not available. - */ bGPdata **ED_gpencil_data_get_pointers_direct(ScrArea *area, Object *ob, PointerRNA *r_ptr) { /* if there's an active area, check if the particular editor may @@ -130,11 +125,6 @@ bGPdata **ED_gpencil_data_get_pointers_direct(ScrArea *area, Object *ob, Pointer return NULL; } -/** - * Get pointer to active Grease Pencil data-block for annotations, - * and an RNA-pointer to trace back to whatever owns it, - * when context info is not available. - */ bGPdata **ED_annotation_data_get_pointers_direct(ID *screen_id, ScrArea *area, Scene *scene, @@ -233,10 +223,6 @@ bGPdata **ED_annotation_data_get_pointers_direct(ID *screen_id, return NULL; } -/** - * Get pointer to active Grease Pencil data-block, - * and an RNA-pointer to trace back to whatever owns it. - */ bGPdata **ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *r_ptr) { ScrArea *area = CTX_wm_area(C); @@ -245,10 +231,6 @@ bGPdata **ED_gpencil_data_get_pointers(const bContext *C, PointerRNA *r_ptr) return ED_gpencil_data_get_pointers_direct(area, ob, r_ptr); } -/** - * Get pointer to active Grease Pencil data-block, - * and an RNA-pointer to trace back to whatever owns it. - */ bGPdata **ED_annotation_data_get_pointers(const bContext *C, PointerRNA *r_ptr) { ID *screen_id = (ID *)CTX_wm_screen(C); @@ -259,23 +241,18 @@ bGPdata **ED_annotation_data_get_pointers(const bContext *C, PointerRNA *r_ptr) } /* -------------------------------------------------------- */ -/* Get the active Grease Pencil data-block, when context is not available */ bGPdata *ED_gpencil_data_get_active_direct(ScrArea *area, Object *ob) { bGPdata **gpd_ptr = ED_gpencil_data_get_pointers_direct(area, ob, NULL); return (gpd_ptr) ? *(gpd_ptr) : NULL; } -/* Get the active Grease Pencil data-block, when context is not available */ bGPdata *ED_annotation_data_get_active_direct(ID *screen_id, ScrArea *area, Scene *scene) { bGPdata **gpd_ptr = ED_annotation_data_get_pointers_direct(screen_id, area, scene, NULL); return (gpd_ptr) ? *(gpd_ptr) : NULL; } -/** - * Get the active Grease Pencil data-block - */ bGPdata *ED_gpencil_data_get_active(const bContext *C) { Object *ob = CTX_data_active_object(C); @@ -285,24 +262,12 @@ bGPdata *ED_gpencil_data_get_active(const bContext *C) return ob->data; } -/** - * Get the active Grease Pencil data-block - * \note This is the original (#G.main) copy of the data-block, stored in files. - * Do not use for reading evaluated copies of GP Objects data. - */ bGPdata *ED_annotation_data_get_active(const bContext *C) { bGPdata **gpd_ptr = ED_annotation_data_get_pointers(C, NULL); return (gpd_ptr) ? *(gpd_ptr) : NULL; } -/** - * Get the evaluated copy of the active Grease Pencil data-block (where applicable) - * - For the 3D View (i.e. "GP Objects"), this gives the evaluated copy of the GP data-block - * (i.e. a copy of the active GP data-block for the active object, where modifiers have been - * applied). This is needed to correctly work with "Copy-on-Write". - * - For all other editors (i.e. "GP Annotations"), this just gives the active data-block - * like for #ED_gpencil_data_get_active() - */ + bGPdata *ED_gpencil_data_get_active_evaluated(const bContext *C) { ScrArea *area = CTX_wm_area(C); @@ -316,10 +281,6 @@ bGPdata *ED_gpencil_data_get_active_evaluated(const bContext *C) /* -------------------------------------------------------- */ -/** - * Utility to check whether the r_ptr output of ED_gpencil_data_get_pointers() - * is for annotation usage. - */ bool ED_gpencil_data_owner_is_annotation(PointerRNA *owner_ptr) { /* Key Assumption: If the pointer is an object, we're dealing with a GP Object's data. @@ -330,7 +291,6 @@ bool ED_gpencil_data_owner_is_annotation(PointerRNA *owner_ptr) /* ******************************************************** */ /* Keyframe Indicator Checks */ -/* Check whether there's an active GP keyframe on the current frame */ bool ED_gpencil_has_keyframe_v3d(Scene *UNUSED(scene), Object *ob, int cfra) { if (ob && ob->data && (ob->type == OB_GPENCIL)) { @@ -351,7 +311,6 @@ bool ED_gpencil_has_keyframe_v3d(Scene *UNUSED(scene), Object *ob, int cfra) /* ******************************************************** */ /* Poll Callbacks */ -/* poll callback for adding data/layers - special */ bool gpencil_add_poll(bContext *C) { Object *ob = CTX_data_active_object(C); @@ -363,7 +322,6 @@ bool gpencil_add_poll(bContext *C) return (gpd != NULL); } -/* poll callback for checking if there is an active layer */ bool gpencil_active_layer_poll(bContext *C) { Object *ob = CTX_data_active_object(C); @@ -376,7 +334,6 @@ bool gpencil_active_layer_poll(bContext *C) return (gpl != NULL); } -/* poll callback for checking if there is an active brush */ bool gpencil_active_brush_poll(bContext *C) { ToolSettings *ts = CTX_data_tool_settings(C); @@ -391,7 +348,6 @@ bool gpencil_active_brush_poll(bContext *C) /* Dynamic Enums of GP Layers */ /* NOTE: These include an option to create a new layer and use that... */ -/* Just existing layers */ const EnumPropertyItem *ED_gpencil_layers_enum_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), @@ -429,7 +385,6 @@ const EnumPropertyItem *ED_gpencil_layers_enum_itemf(bContext *C, return item; } -/* Existing + Option to add/use new layer */ const EnumPropertyItem *ED_gpencil_layers_with_new_enum_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), @@ -482,7 +437,6 @@ const EnumPropertyItem *ED_gpencil_layers_with_new_enum_itemf(bContext *C, return item; } -/* Just existing Materials */ const EnumPropertyItem *ED_gpencil_material_enum_itemf(bContext *C, PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), @@ -519,15 +473,6 @@ const EnumPropertyItem *ED_gpencil_material_enum_itemf(bContext *C, /* ******************************************************** */ /* Brush Tool Core */ -/** - * Check whether a given stroke segment is inside a circular brush - * - * \param mval: The current screen-space coordinates (midpoint) of the brush - * \param rad: The radius of the brush - * - * \param x0, y0: The screen-space x and y coordinates of the start of the stroke segment - * \param x1, y1: The screen-space x and y coordinates of the end of the stroke segment - */ bool gpencil_stroke_inside_circle(const float mval[2], int rad, int x0, int y0, int x1, int y1) { /* simple within-radius check for now */ @@ -577,8 +522,6 @@ bool ED_gpencil_layer_has_selected_stroke(const bGPDlayer *gpl, const bool is_mu /* ******************************************************** */ /* Stroke Validity Testing */ -/* Check whether given stroke can be edited given the supplied context */ -/* TODO: do we need additional flags for screenspace vs dataspace? */ bool ED_gpencil_stroke_can_use_direct(const ScrArea *area, const bGPDstroke *gps) { /* sanity check */ @@ -603,14 +546,12 @@ bool ED_gpencil_stroke_can_use_direct(const ScrArea *area, const bGPDstroke *gps return true; } -/* Check whether given stroke can be edited in the current context */ bool ED_gpencil_stroke_can_use(const bContext *C, const bGPDstroke *gps) { ScrArea *area = CTX_wm_area(C); return ED_gpencil_stroke_can_use_direct(area, gps); } -/* Check whether given stroke can be edited for the current color */ bool ED_gpencil_stroke_material_editable(Object *ob, const bGPDlayer *gpl, const bGPDstroke *gps) { /* check if the color is editable */ @@ -628,7 +569,6 @@ bool ED_gpencil_stroke_material_editable(Object *ob, const bGPDlayer *gpl, const return true; } -/* Check whether given stroke is visible for the current material. */ bool ED_gpencil_stroke_material_visible(Object *ob, const bGPDstroke *gps) { /* check if the color is editable */ @@ -646,11 +586,6 @@ bool ED_gpencil_stroke_material_visible(Object *ob, const bGPDstroke *gps) /* ******************************************************** */ /* Space Conversion */ -/** - * Init settings for stroke point space conversions - * - * \param r_gsc: [out] The space conversion settings struct, populated with necessary params - */ void gpencil_point_conversion_init(bContext *C, GP_SpaceConversion *r_gsc) { ScrArea *area = CTX_wm_area(C); @@ -691,13 +626,6 @@ void gpencil_point_conversion_init(bContext *C, GP_SpaceConversion *r_gsc) } } -/** - * Convert point to parent space - * - * \param pt: Original point - * \param diff_mat: Matrix with the difference between original parent matrix - * \param[out] r_pt: Pointer to new point after apply matrix - */ void gpencil_point_to_parent_space(const bGPDspoint *pt, const float diff_mat[4][4], bGPDspoint *r_pt) @@ -708,9 +636,6 @@ void gpencil_point_to_parent_space(const bGPDspoint *pt, copy_v3_v3(&r_pt->x, fpt); } -/** - * Change position relative to parent object - */ void gpencil_apply_parent(Depsgraph *depsgraph, Object *obact, bGPDlayer *gpl, bGPDstroke *gps) { bGPDspoint *pt; @@ -731,9 +656,6 @@ void gpencil_apply_parent(Depsgraph *depsgraph, Object *obact, bGPDlayer *gpl, b } } -/** - * Change point position relative to parent object - */ void gpencil_apply_parent_point(Depsgraph *depsgraph, Object *obact, bGPDlayer *gpl, @@ -752,15 +674,6 @@ void gpencil_apply_parent_point(Depsgraph *depsgraph, copy_v3_v3(&pt->x, fpt); } -/** - * Convert a Grease Pencil coordinate (i.e. can be 2D or 3D) to screenspace (2D) - * - * \param[out] r_x: The screen-space x-coordinate of the point - * \param[out] r_y: The screen-space y-coordinate of the point - * - * \warning This assumes that the caller has already checked - * whether the stroke in question can be drawn. - */ void gpencil_point_to_xy( const GP_SpaceConversion *gsc, const bGPDstroke *gps, const bGPDspoint *pt, int *r_x, int *r_y) { @@ -803,19 +716,6 @@ void gpencil_point_to_xy( } } -/** - * Convert a Grease Pencil coordinate (i.e. can be 2D or 3D) to screenspace (2D). - * - * Just like #gpencil_point_to_xy(), except the resulting coordinates are floats not ints. - * Use this version to solve "stair-step" artifacts which may arise when - * roundtripping the calculations. - * - * \param r_x: The screen-space x-coordinate of the point. - * \param r_y: The screen-space y-coordinate of the point. - * - * \warning This assumes that the caller has already checked - * whether the stroke in question can be drawn. - */ void gpencil_point_to_xy_fl(const GP_SpaceConversion *gsc, const bGPDstroke *gps, const bGPDspoint *pt, @@ -873,9 +773,6 @@ void gpencil_point_to_xy_fl(const GP_SpaceConversion *gsc, } } -/** - * generic based on gpencil_point_to_xy_fl - */ void gpencil_point_3d_to_xy(const GP_SpaceConversion *gsc, const short flag, const float pt[3], @@ -930,21 +827,6 @@ void gpencil_point_3d_to_xy(const GP_SpaceConversion *gsc, } } -/** - * Project screenspace coordinates to 3D-space - * - * For use with editing tools where it is easier to perform the operations in 2D, - * and then later convert the transformed points back to 3D. - * - * \param screen_co: The screenspace 2D coordinates to convert to - * \param r_out: The resulting 3D coordinates of the input point - * - * \note We include this as a utility function, since the standard method - * involves quite a few steps, which are invariably always the same - * for all GPencil operations. So, it's nicer to just centralize these. - * - * \warning Assumes that it is getting called in a 3D view only. - */ bool gpencil_point_xy_to_3d(const GP_SpaceConversion *gsc, Scene *scene, const float screen_co[2], @@ -974,14 +856,6 @@ bool gpencil_point_xy_to_3d(const GP_SpaceConversion *gsc, return false; } -/** - * Convert tGPspoint (temporary 2D/screenspace point data used by GP modal operators) - * to 3D coordinates. - * - * \param point2D: The screen-space 2D point data to convert. - * \param depth: Depth array (via #ED_view3d_depth_read_cached()). - * \param r_out: The resulting 2D point data. - */ void gpencil_stroke_convertcoords_tpoint(Scene *scene, ARegion *region, Object *ob, @@ -1027,10 +901,6 @@ void gpencil_stroke_convertcoords_tpoint(Scene *scene, } } -/** - * Get drawing reference point for conversion or projection of the stroke - * \param r_vec: Reference point found - */ void ED_gpencil_drawing_reference_get(const Scene *scene, const Object *ob, char align_flag, @@ -1098,9 +968,6 @@ void ED_gpencil_project_stroke_to_view(bContext *C, bGPDlayer *gpl, bGPDstroke * } } -/** - * Reproject all points of the stroke to a plane locked to axis to avoid stroke offset - */ void ED_gpencil_project_stroke_to_plane(const Scene *scene, const Object *ob, const RegionView3D *rv3d, @@ -1179,7 +1046,6 @@ void ED_gpencil_project_stroke_to_plane(const Scene *scene, } } -/* Reproject selected strokes */ void ED_gpencil_stroke_reproject(Depsgraph *depsgraph, const GP_SpaceConversion *gsc, SnapObjectContext *sctx, @@ -1320,10 +1186,6 @@ void ED_gpencil_stroke_reproject(Depsgraph *depsgraph, } } -/** - * Reproject given point to a plane locked to axis to avoid stroke offset - * \param pt: Point to affect (used for input & output). - */ void ED_gpencil_project_point_to_plane(const Scene *scene, const Object *ob, bGPDlayer *gpl, @@ -1406,12 +1268,6 @@ void ED_gpencil_project_point_to_plane(const Scene *scene, /* XXX: Check if these functions duplicate stuff in blenkernel, * and/or whether we should just deduplicate. */ -/** - * Subdivide a stroke once, by adding a point half way between each pair of existing points - * \param gpd: Datablock - * \param gps: Stroke data - * \param subdivide: Number of times to subdivide - */ void gpencil_subdivide_stroke(bGPdata *gpd, bGPDstroke *gps, const int subdivide) { bGPDspoint *temp_points; @@ -1505,7 +1361,6 @@ void gpencil_subdivide_stroke(bGPdata *gpd, bGPDstroke *gps, const int subdivide BKE_gpencil_stroke_geometry_update(gpd, gps); } -/* Reset parent matrix for all layers. */ void ED_gpencil_reset_layers_parent(Depsgraph *depsgraph, Object *obact, bGPdata *gpd) { bGPDspoint *pt; @@ -1555,7 +1410,6 @@ void ED_gpencil_reset_layers_parent(Depsgraph *depsgraph, Object *obact, bGPdata /* ******************************************************** */ /* GP Object Stuff */ -/* Helper function to create new OB_GPENCIL Object */ Object *ED_gpencil_add_object(bContext *C, const float loc[3], ushort local_view_bits) { const float rot[3] = {0.0f}; @@ -1568,7 +1422,6 @@ Object *ED_gpencil_add_object(bContext *C, const float loc[3], ushort local_view return ob; } -/* Helper function to create default colors and drawing brushes */ void ED_gpencil_add_defaults(bContext *C, Object *ob) { Main *bmain = CTX_data_main(C); @@ -1600,7 +1453,6 @@ void ED_gpencil_add_defaults(bContext *C, Object *ob) /* ******************************************************** */ /* Vertex Groups */ -/* assign points to vertex group */ void ED_gpencil_vgroup_assign(bContext *C, Object *ob, float weight) { bGPdata *gpd = (bGPdata *)ob->data; @@ -1654,7 +1506,6 @@ void ED_gpencil_vgroup_assign(bContext *C, Object *ob, float weight) CTX_DATA_END; } -/* remove points from vertex group */ void ED_gpencil_vgroup_remove(bContext *C, Object *ob) { bGPdata *gpd = (bGPdata *)ob->data; @@ -1707,7 +1558,6 @@ void ED_gpencil_vgroup_remove(bContext *C, Object *ob) CTX_DATA_END; } -/* select points of vertex group */ void ED_gpencil_vgroup_select(bContext *C, Object *ob) { bGPdata *gpd = (bGPdata *)ob->data; @@ -1762,7 +1612,6 @@ void ED_gpencil_vgroup_select(bContext *C, Object *ob) CTX_DATA_END; } -/* unselect points of vertex group */ void ED_gpencil_vgroup_deselect(bContext *C, Object *ob) { bGPdata *gpd = (bGPdata *)ob->data; @@ -1843,7 +1692,6 @@ static bool gpencil_check_cursor_region(bContext *C, const int mval_i[2]) return false; } -/* draw eraser cursor */ void ED_gpencil_brush_draw_eraser(Brush *brush, int x, int y) { short radius = (short)brush->size; @@ -2079,7 +1927,6 @@ static void gpencil_brush_cursor_draw(bContext *C, int x, int y, void *customdat immUnbindProgram(); } -/* Turn brush cursor in on/off */ void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable, void *customdata) { Scene *scene = CTX_data_scene(C); @@ -2107,7 +1954,6 @@ void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable, void *customdata) } } -/* set object modes */ void ED_gpencil_setup_modes(bContext *C, bGPdata *gpd, int newmode) { if (!gpd) { @@ -2194,9 +2040,6 @@ static void gpencil_stroke_convertcoords(ARegion *region, } } -/** - * Convert 2d #tGPspoint to 3d #bGPDspoint. - */ void ED_gpencil_tpoint_to_point(ARegion *region, float origin[3], const tGPspoint *tpt, @@ -2214,9 +2057,6 @@ void ED_gpencil_tpoint_to_point(ARegion *region, pt->uv_rot = tpt->uv_rot; } -/** - * Recalculate UV for any stroke using the material. - */ void ED_gpencil_update_color_uv(Main *bmain, Material *mat) { Material *gps_ma = NULL; @@ -2424,7 +2264,6 @@ static float gpencil_calc_factor(const float p2d_a1[2], return f; } -/* extend selection to stroke intersections */ int ED_gpencil_select_stroke_segment(bGPdata *gpd, bGPDlayer *gpl, bGPDstroke *gps, @@ -2805,10 +2644,6 @@ void ED_gpencil_select_curve_toggle_all(bContext *C, int action) } } -/** - * Ensure the #tGPspoint buffer (while drawing stroke) - * size is enough to save all points of the stroke. - */ tGPspoint *ED_gpencil_sbuffer_ensure(tGPspoint *buffer_array, int *buffer_size, int *buffer_used, @@ -2859,9 +2694,6 @@ void ED_gpencil_sbuffer_update_eval(bGPdata *gpd, Object *ob_eval) gpd_eval->runtime.cp_points = gpd->runtime.cp_points; } -/** - * Tag all scene grease pencil object to update. - */ void ED_gpencil_tag_scene_gpencil(Scene *scene) { /* Mark all grease pencil data-blocks of the scene. */ @@ -3110,7 +2942,6 @@ void ED_gpencil_sbuffer_vertex_color_set(Depsgraph *depsgraph, } } -/* Get the bigger 2D bound box points. */ void ED_gpencil_projected_2d_bound_box(const GP_SpaceConversion *gsc, const bGPDstroke *gps, const float diff_mat[4][4], @@ -3144,7 +2975,6 @@ void ED_gpencil_projected_2d_bound_box(const GP_SpaceConversion *gsc, } } -/* Check if the stroke collides with brush. */ bool ED_gpencil_stroke_check_collision(const GP_SpaceConversion *gsc, bGPDstroke *gps, const float mouse[2], @@ -3171,15 +3001,6 @@ bool ED_gpencil_stroke_check_collision(const GP_SpaceConversion *gsc, return BLI_rcti_isect(&rect_stroke, &rect_mouse, NULL); } -/** - * Check if a point is inside of the stroke. - * - * \param gps: Stroke to check. - * \param gsc: Space conversion data. - * \param mouse: Mouse position. - * \param diff_mat: View matrix. - * \return True if the point is inside. - */ bool ED_gpencil_stroke_point_is_inside(const bGPDstroke *gps, const GP_SpaceConversion *gsc, const int mouse[2], @@ -3218,7 +3039,6 @@ bool ED_gpencil_stroke_point_is_inside(const bGPDstroke *gps, return hit; } -/* Get extremes of stroke in 2D using current view. */ void ED_gpencil_stroke_extremes_to2d(const GP_SpaceConversion *gsc, const float diff_mat[4][4], bGPDstroke *gps, @@ -3333,7 +3153,6 @@ bGPDstroke *ED_gpencil_stroke_nearest_to_ends(bContext *C, return gps_rtn; } -/* Join two stroke using a contact point index and trimming the rest. */ bGPDstroke *ED_gpencil_stroke_join_and_trim( bGPdata *gpd, bGPDframe *gpf, bGPDstroke *gps, bGPDstroke *gps_dst, const int pt_index) { @@ -3403,7 +3222,6 @@ bGPDstroke *ED_gpencil_stroke_join_and_trim( return gps_final; } -/* Close if the distance between extremes is below threshold. */ void ED_gpencil_stroke_close_by_distance(bGPDstroke *gps, const float threshold) { if (gps == NULL) { @@ -3420,7 +3238,6 @@ void ED_gpencil_stroke_close_by_distance(bGPDstroke *gps, const float threshold) } } -/* Merge two layers. */ void ED_gpencil_layer_merge(bGPdata *gpd, bGPDlayer *gpl_src, bGPDlayer *gpl_dst, |