Blender V4.3
grease_pencil_intern.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
7#include <functional>
8
9#include "BLI_color.hh"
10#include "BLI_task.hh"
11
12#include "DNA_scene_types.h"
13
14#include "ED_grease_pencil.hh"
15
16#include "IMB_imbuf_types.hh"
17
18#include "paint_intern.hh"
19
20#ifdef WITH_POTRACE
21# include "potracelib.h"
22#endif
23
25class Drawing;
26class Layer;
27} // namespace blender::bke::greasepencil
29struct GeometryDeformation;
30}
31
33
40 std::function<float3(const float3 position, const float2 &screen_delta)>;
41
46
48 public:
49 virtual void on_stroke_begin(const bContext &C, const InputSample &start_sample) = 0;
50 virtual void on_stroke_extended(const bContext &C, const InputSample &extension_sample) = 0;
51 virtual void on_stroke_done(const bContext &C) = 0;
52};
53
54namespace greasepencil {
55
56/* Get list of drawings the tool should be operating on. */
58/* Get the brush radius accounting for pen pressure. */
59float brush_radius(const Scene &scene, const Brush &brush, float pressure);
60
61/* Make sure the brush has all necessary grease pencil settings. */
62void init_brush(Brush &brush);
63
64/* Index mask of all points within the brush radius. */
66 const Brush &brush,
67 const float2 &mouse_position,
68 float pressure,
69 float multi_frame_falloff,
70 const IndexMask &selection,
71 Span<float2> view_positions,
72 Vector<float> &influences,
73 IndexMaskMemory &memory);
74
75/* Influence value at point co for the brush. */
76float brush_point_influence(const Scene &scene,
77 const Brush &brush,
78 const float2 &co,
79 const InputSample &sample,
80 float multi_frame_falloff);
87/* Influence value for an entire fill. */
88float brush_fill_influence(const Scene &scene,
89 const Brush &brush,
90 Span<float2> fill_positions,
91 const InputSample &sample,
92 float multi_frame_falloff);
93
94/* True if influence of the brush should be inverted. */
95bool is_brush_inverted(const Brush &brush, BrushStrokeMode stroke_mode);
96
97/* Common parameters for stroke callbacks that can be passed to utility functions. */
102 const Scene &scene;
110
111 /* NOTE: accessing region in worker threads will return null,
112 * this has to be done on the main thread and passed explicitly. */
113 static GreasePencilStrokeParams from_context(const Scene &scene,
114 Depsgraph &depsgraph,
115 ARegion &region,
117 Object &object,
118 int layer_index,
119 int frame_number,
122};
123
124/* Point index mask for a drawing based on selection tool settings. */
126 const bool use_masking,
127 IndexMaskMemory &memory);
129 const bool use_masking,
130 IndexMaskMemory &memory);
132 const bool use_masking,
133 IndexMaskMemory &memory);
134
137
138/* Project points from layer space into 2D view space. */
140 const IndexMask &selection);
142 const IndexMask &selection);
143
144/* Get an appropriate projection function from screen space to layer space.
145 * This is an alternative to using the DrawingPlacement. */
147 const Object &object,
148 const bke::greasepencil::Layer &layer);
149
150bool do_vertex_color_points(const Brush &brush);
151bool do_vertex_color_fill(const Brush &brush);
152
153/* Stroke operation base class that performs various common initializations. */
188
189/* Operations */
190
191std::unique_ptr<GreasePencilStrokeOperation> new_paint_operation();
192std::unique_ptr<GreasePencilStrokeOperation> new_erase_operation(bool temp_eraser);
193std::unique_ptr<GreasePencilStrokeOperation> new_tint_operation();
194std::unique_ptr<GreasePencilStrokeOperation> new_weight_paint_draw_operation(
195 const BrushStrokeMode &brush_mode);
196std::unique_ptr<GreasePencilStrokeOperation> new_weight_paint_blur_operation();
197std::unique_ptr<GreasePencilStrokeOperation> new_weight_paint_average_operation();
198std::unique_ptr<GreasePencilStrokeOperation> new_weight_paint_smear_operation();
199std::unique_ptr<GreasePencilStrokeOperation> new_smooth_operation(BrushStrokeMode stroke_mode);
200std::unique_ptr<GreasePencilStrokeOperation> new_thickness_operation(BrushStrokeMode stroke_mode);
201std::unique_ptr<GreasePencilStrokeOperation> new_strength_operation(BrushStrokeMode stroke_mode);
202std::unique_ptr<GreasePencilStrokeOperation> new_randomize_operation(BrushStrokeMode stroke_mode);
203std::unique_ptr<GreasePencilStrokeOperation> new_grab_operation(BrushStrokeMode stroke_mode);
204std::unique_ptr<GreasePencilStrokeOperation> new_push_operation(BrushStrokeMode stroke_mode);
205std::unique_ptr<GreasePencilStrokeOperation> new_pinch_operation(BrushStrokeMode stroke_mode);
206std::unique_ptr<GreasePencilStrokeOperation> new_twist_operation(BrushStrokeMode stroke_mode);
207std::unique_ptr<GreasePencilStrokeOperation> new_clone_operation(BrushStrokeMode stroke_mode);
208std::unique_ptr<GreasePencilStrokeOperation> new_vertex_average_operation();
209std::unique_ptr<GreasePencilStrokeOperation> new_vertex_blur_operation();
210std::unique_ptr<GreasePencilStrokeOperation> new_vertex_paint_operation(
211 BrushStrokeMode stroke_mode);
212std::unique_ptr<GreasePencilStrokeOperation> new_vertex_replace_operation();
213std::unique_ptr<GreasePencilStrokeOperation> new_vertex_smear_operation();
214
215} // namespace greasepencil
216
217} // namespace blender::ed::sculpt_paint
Contains defines and structs used throughout the imbuf module.
virtual void on_stroke_extended(const bContext &C, const InputSample &extension_sample)=0
virtual void on_stroke_begin(const bContext &C, const InputSample &start_sample)=0
virtual void on_stroke_done(const bContext &C)=0
void foreach_editable_drawing(const bContext &C, FunctionRef< bool(const GreasePencilStrokeParams &params)> fn) const
const Depsgraph * depsgraph
static float verts[][3]
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
std::unique_ptr< GreasePencilStrokeOperation > new_vertex_replace_operation()
std::unique_ptr< GreasePencilStrokeOperation > new_erase_operation(const bool temp_eraser)
bool is_brush_inverted(const Brush &brush, BrushStrokeMode stroke_mode)
std::unique_ptr< GreasePencilStrokeOperation > new_weight_paint_average_operation()
float closest_distance_to_surface_2d(const float2 pt, const Span< float2 > verts)
std::unique_ptr< GreasePencilStrokeOperation > new_strength_operation(BrushStrokeMode stroke_mode)
std::unique_ptr< GreasePencilStrokeOperation > new_grab_operation(BrushStrokeMode stroke_mode)
Array< float > calculate_view_radii(const GreasePencilStrokeParams &params, const IndexMask &selection)
std::unique_ptr< GreasePencilStrokeOperation > new_weight_paint_blur_operation()
std::unique_ptr< GreasePencilStrokeOperation > new_vertex_paint_operation(BrushStrokeMode stroke_mode)
Vector< ed::greasepencil::MutableDrawingInfo > get_drawings_for_painting(const bContext &C)
IndexMask point_selection_mask(const GreasePencilStrokeParams &params, const bool use_masking, IndexMaskMemory &memory)
std::unique_ptr< GreasePencilStrokeOperation > new_clone_operation(BrushStrokeMode stroke_mode)
std::unique_ptr< GreasePencilStrokeOperation > new_randomize_operation(BrushStrokeMode stroke_mode)
std::unique_ptr< GreasePencilStrokeOperation > new_paint_operation()
Array< float2 > calculate_view_positions(const GreasePencilStrokeParams &params, const IndexMask &selection)
IndexMask fill_selection_mask(const GreasePencilStrokeParams &params, const bool use_masking, IndexMaskMemory &memory)
std::unique_ptr< GreasePencilStrokeOperation > new_vertex_blur_operation()
std::unique_ptr< GreasePencilStrokeOperation > new_tint_operation()
IndexMask brush_point_influence_mask(const Scene &scene, const Brush &brush, const float2 &mouse_position, float pressure, float multi_frame_falloff, const IndexMask &selection, Span< float2 > view_positions, Vector< float > &influences, IndexMaskMemory &memory)
float brush_point_influence(const Scene &scene, const Brush &brush, const float2 &co, const InputSample &sample, float multi_frame_falloff)
IndexMask stroke_selection_mask(const GreasePencilStrokeParams &params, const bool use_masking, IndexMaskMemory &memory)
std::unique_ptr< GreasePencilStrokeOperation > new_thickness_operation(BrushStrokeMode stroke_mode)
std::unique_ptr< GreasePencilStrokeOperation > new_pinch_operation(BrushStrokeMode stroke_mode)
float brush_fill_influence(const Scene &scene, const Brush &brush, Span< float2 > fill_positions, const InputSample &sample, float multi_frame_falloff)
std::unique_ptr< GreasePencilStrokeOperation > new_weight_paint_draw_operation(const BrushStrokeMode &brush_mode)
std::unique_ptr< GreasePencilStrokeOperation > new_push_operation(BrushStrokeMode stroke_mode)
bke::crazyspace::GeometryDeformation get_drawing_deformation(const GreasePencilStrokeParams &params)
std::unique_ptr< GreasePencilStrokeOperation > new_weight_paint_smear_operation()
DeltaProjectionFunc get_screen_projection_fn(const GreasePencilStrokeParams &params, const Object &object, const bke::greasepencil::Layer &layer)
std::unique_ptr< GreasePencilStrokeOperation > new_vertex_average_operation()
std::unique_ptr< GreasePencilStrokeOperation > new_twist_operation(BrushStrokeMode stroke_mode)
std::unique_ptr< GreasePencilStrokeOperation > new_vertex_smear_operation()
float brush_radius(const Scene &scene, const Brush &brush, float pressure)
std::unique_ptr< CurvesSculptStrokeOperation > new_smooth_operation()
std::function< float3(const float3 position, const float2 &screen_delta)> DeltaProjectionFunc
VecBase< float, 3 > float3
BrushStrokeMode
static GreasePencilStrokeParams from_context(const Scene &scene, Depsgraph &depsgraph, ARegion &region, RegionView3D &rv3d, Object &object, int layer_index, int frame_number, float multi_frame_falloff, bke::greasepencil::Drawing &drawing)