Blender V4.3
ED_grease_pencil.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
9#pragma once
10
11#include "BKE_grease_pencil.hh"
12
14#include "BLI_generic_span.hh"
15#include "BLI_index_mask_fwd.hh"
17#include "BLI_set.hh"
18
19#include "ED_keyframes_edit.hh"
20#include "ED_select_utils.hh"
21
22#include "WM_api.hh"
23
24struct bContext;
25struct Main;
26struct Object;
27struct KeyframeEditData;
28struct wmKeyConfig;
29struct wmOperator;
30struct GPUOffScreen;
31struct ToolSettings;
32struct Scene;
33struct UndoType;
34struct ViewDepths;
35struct View3D;
36struct ViewContext;
37struct BVHTree;
39namespace blender {
40namespace bke {
41enum class AttrDomain : int8_t;
42class CurvesGeometry;
43namespace crazyspace {
44}
45} // namespace bke
46} // namespace blender
47
48enum {
51};
52
53/* -------------------------------------------------------------------- */
61
83
85
87
92 const ToolSettings *tool_settings);
94 const ToolSettings *tool_settings);
96 const ToolSettings *tool_settings);
98 const Object *object);
106 const Object *object);
107
111
113
115
116enum class DrawingPlacementPlane : int8_t { View, Front, Side, Top, Cursor };
117
119 const ARegion *region_;
120 const View3D *view3d_;
121
124 ViewDepths *depth_cache_ = nullptr;
125 bool use_project_only_selected_ = false;
126 float surface_offset_;
127
128 float3 placement_loc_;
129 float3 placement_normal_;
130 float4 placement_plane_;
131
132 float4x4 layer_space_to_world_space_;
133 float4x4 world_space_to_layer_space_;
134
135 public:
136 DrawingPlacement() = default;
137 DrawingPlacement(const Scene &scene,
138 const ARegion &region,
139 const View3D &view3d,
140 const Object &eval_object,
141 const bke::greasepencil::Layer *layer);
142
146 DrawingPlacement(const Scene &scene,
147 const ARegion &region,
148 const View3D &view3d,
149 const Object &eval_object,
150 const bke::greasepencil::Layer *layer,
151 ReprojectMode reproject_mode,
152 float surface_offset = 0.0f,
153 ViewDepths *view_depths = nullptr);
159
160 public:
161 bool use_project_to_surface() const;
163
164 void cache_viewport_depths(Depsgraph *depsgraph, ARegion *region, View3D *view3d);
166
170 float3 project(float2 co) const;
171 void project(Span<float2> src, MutableSpan<float3> dst) const;
172
176 float3 reproject(float3 pos) const;
177 void reproject(Span<float3> src, MutableSpan<float3> dst) const;
178
179 float4x4 to_world_space() const;
180
181 private:
182 float3 project_depth(float2 co) const;
183};
184
186 const eBezTriple_KeyframeType key_type);
187
188bool snap_selected_frames(GreasePencil &grease_pencil,
190 Scene &scene,
191 const eEditKeyframes_Snap mode);
192
193bool mirror_selected_frames(GreasePencil &grease_pencil,
195 Scene &scene,
196 const eEditKeyframes_Mirror mode);
197
204
206
208
210 /* Datatype for use in copy/paste buffer. */
217
223
225 int first_frame{std::numeric_limits<int>::max()};
226 int last_frame{std::numeric_limits<int>::min()};
227 int cfra{0};
228
229 void clear()
230 {
231 copy_buffer.clear();
232 first_frame = std::numeric_limits<int>::max();
233 last_frame = std::numeric_limits<int>::min();
234 cfra = 0;
235 }
236};
237
239 Object *parent,
240 StringRefNull bone,
241 bool keep_transform);
242
243void grease_pencil_layer_parent_clear(bke::greasepencil::Layer &layer, bool keep_transform);
244
245bool grease_pencil_copy_keyframes(bAnimContext *ac, KeyframeClipboard &clipboard);
246
248 const eKeyPasteOffset offset_mode,
249 const eKeyMergeMode merge_mode,
250 const KeyframeClipboard &clipboard);
251
257 const int frame_number,
258 const short select_mode);
259
261 const int frame_number,
262 const short select_mode);
263
264void select_all_frames(bke::greasepencil::Layer &layer, const short select_mode);
265
268 const short tool,
269 const short select_mode);
270
272 const float min,
273 const float max,
274 const short select_mode);
275
280
286bool ensure_active_keyframe(const Scene &scene,
287 GreasePencil &grease_pencil,
289 bool duplicate_previous_key,
290 bool &r_inserted_keyframe);
291
293 const bke::greasepencil::Layer &layer);
294
307
308float opacity_from_input_sample(const float pressure,
309 const Brush *brush,
310 const BrushGpencilSettings *settings);
311float radius_from_input_sample(const RegionView3D *rv3d,
312 const ARegion *region,
313 const Brush *brush,
314 float pressure,
315 float3 location,
316 float4x4 to_world,
317 const BrushGpencilSettings *settings);
319 wmOperator *op,
320 bool use_duplicate_previous_key);
322 const ARegion *region,
323 const float2 &mouse,
324 const DrawingPlacement &placement);
325
328 const int layer_index;
329 const int frame_number;
330 /* This is used by the onion skinning system. A value of 0 means the drawing is on the current
331 * frame. Negative values are before the current frame, positive values are drawings after the
332 * current frame. The magnitude of the value indicates how far the drawing is from the current
333 * frame (either in absolute frames, or in number of keyframes). */
334 const int onion_id;
335};
343 GreasePencil &grease_pencil);
345 GreasePencil &grease_pencil);
347 const Scene &scene, GreasePencil &grease_pencil);
349 const Scene &scene, GreasePencil &grease_pencil, const bke::greasepencil::Layer &layer);
351 const Scene &scene, GreasePencil &grease_pencil, const bke::greasepencil::Layer &layer);
353 const GreasePencil &grease_pencil,
354 bool do_onion_skinning);
355
356IndexMask retrieve_editable_strokes(Object &grease_pencil_object,
357 const bke::greasepencil::Drawing &drawing,
358 int layer_index,
359 IndexMaskMemory &memory);
361 const bke::greasepencil::Drawing &drawing,
362 int layer_index,
363 IndexMaskMemory &memory);
365 const bke::greasepencil::Drawing &drawing,
366 const int mat_i,
367 IndexMaskMemory &memory);
369 const bke::greasepencil::Drawing &drawing,
370 int layer_index,
371 IndexMaskMemory &memory);
373 const MutableDrawingInfo &info,
374 bke::AttrDomain selection_domain,
375 IndexMaskMemory &memory);
376
377IndexMask retrieve_visible_strokes(Object &grease_pencil_object,
378 const bke::greasepencil::Drawing &drawing,
379 IndexMaskMemory &memory);
381 const bke::greasepencil::Drawing &drawing,
382 IndexMaskMemory &memory);
383
385 const bke::greasepencil::Drawing &drawing,
386 int layer_index,
387 IndexMaskMemory &memory);
389 const bke::greasepencil::Drawing &drawing,
390 int layer_index,
391 bke::AttrDomain selection_domain,
392 IndexMaskMemory &memory);
393
395 const bke::greasepencil::Drawing &drawing,
396 int layer_index,
397 IndexMaskMemory &memory);
399 const bke::greasepencil::Drawing &drawing,
400 int layer_index,
401 IndexMaskMemory &memory);
403 const bke::greasepencil::Drawing &drawing,
404 int layer_index,
405 IndexMaskMemory &memory);
407 const bke::greasepencil::Drawing &drawing,
408 int layer_index,
409 bke::AttrDomain selection_domain,
410 IndexMaskMemory &memory);
411
412void create_blank(Main &bmain, Object &object, int frame_number);
413void create_stroke(Main &bmain, Object &object, const float4x4 &matrix, int frame_number);
414void create_suzanne(Main &bmain, Object &object, const float4x4 &matrix, int frame_number);
415
428 float epsilon,
429 FunctionRef<float(int64_t, int64_t, int64_t)> dist_function,
430 MutableSpan<bool> points_to_delete);
431
433 float error_threshold,
434 const IndexMask &corner_mask);
435
437 float radius_min,
438 float radius_max,
439 int samples_max,
440 float angle_threshold,
441 IndexMaskMemory &memory);
442
448 const float merge_distance,
449 const IndexMask &selection,
450 const bke::AttributeFilter &attribute_filter);
451
455int curve_merge_by_distance(const IndexRange points,
456 const Span<float> distances,
457 const IndexMask &selection,
458 const float merge_distance,
459 MutableSpan<int> r_merge_indices);
460
465 const ARegion &region,
466 const bke::CurvesGeometry &src_curves,
467 const float4x4 &layer_to_world,
468 const float merge_distance,
469 const IndexMask &selection,
470 const bke::AttributeFilter &attribute_filter);
471
484 float factor;
486 bool is_cut;
487 /* Additional attributes changes that can be stored to be used after a call to
488 * compute_topology_change.
489 * Note that they won't be automatically updated in the destination's attributes.
490 */
491 float opacity;
492
496 bool is_src_end_point() const
497 {
498 /* The src_next_point index increments for all points except the last, where it is set to the
499 * first point index. This can be used to detect the curve end from the source index alone.
500 */
502 }
503};
504
519 const bke::CurvesGeometry &src,
521 const Span<Vector<PointTransferData>> src_to_dst_points,
522 const bool keep_caps);
523
526
530 int active_vertex_group,
531 Span<bool> vertex_group_is_locked,
532 Span<bool> vertex_group_is_bone_deformed);
533
535bool add_armature_vertex_groups(Object &object, const Object &armature);
538void add_armature_envelope_weights(Scene &scene, Object &object, const Object &ob_armature);
541void add_armature_automatic_weights(Scene &scene, Object &object, const Object &ob_armature);
542
543void clipboard_free();
552 Object &object,
554 const float4x4 &transform,
555 bool keep_world_transform,
556 bool paste_back);
557
562 /* Use the current view projection unchanged. */
564 /* Fit all strokes into the view (may change pixel size). */
566};
567
578
597 const Brush &brush,
598 const Scene &scene,
599 const bke::greasepencil::Layer &layer,
600 const VArray<bool> &boundary_layers,
601 Span<DrawingInfo> src_drawings,
602 bool invert,
603 const std::optional<float> alpha_threshold,
604 const float2 &fill_point,
605 const ExtensionData &extensions,
606 FillToolFitMethod fit_method,
607 int stroke_material_index,
608 bool keep_images);
609
610namespace image_render {
611
617
621RegionViewData region_init(ARegion &region, const int2 &win_size);
625void region_reset(ARegion &region, const RegionViewData &data);
626
630GPUOffScreen *image_render_begin(const int2 &win_size);
634Image *image_render_end(Main &bmain, GPUOffScreen *buffer);
635
643void compute_view_matrices(const ViewContext &view_context,
644 const Scene &scene,
645 const int2 &win_size,
646 const float2 &zoom,
647 const float2 &offset);
648
649void set_view_matrix(const RegionView3D &rv3d);
650void clear_view_matrix();
651void set_projection_matrix(const RegionView3D &rv3d);
653
657void draw_dot(const float4x4 &transform,
658 const float3 &position,
659 float point_size,
660 const ColorGeometry4f &color);
661
665void draw_polyline(const float4x4 &transform,
666 IndexRange indices,
667 Span<float3> positions,
668 const VArray<ColorGeometry4f> &colors,
669 bool cyclic,
670 float line_width);
671
675void draw_circles(const float4x4 &transform,
676 const IndexRange indices,
677 Span<float3> centers,
678 const VArray<float> &radii,
679 const VArray<ColorGeometry4f> &colors,
680 const float2 &viewport_size,
681 const float line_width,
682 const bool fill);
683
687void draw_lines(const float4x4 &transform,
688 IndexRange indices,
689 Span<float3> start_positions,
690 Span<float3> end_positions,
691 const VArray<ColorGeometry4f> &colors,
692 float line_width);
693
699 const int2 &win_size,
700 const Object &object,
701 const bke::greasepencil::Drawing &drawing,
702 const float4x4 &transform,
703 const IndexMask &strokes_mask,
704 const VArray<ColorGeometry4f> &colors,
705 bool use_xray,
706 float radius_scale = 1.0f);
707
708} // namespace image_render
709
711 /* No flip. */
712 None = 0,
713 /* Flip always. */
714 Flip,
715 /* Flip if needed. */
716 FlipAuto,
717};
718
720 /* Only interpolate on the active layer. */
721 Active = 0,
722 /* Interpolate strokes on every layer. */
723 All,
724};
725
737 const IndexMask &strokes,
738 const float4x4 &transform,
739 int corner_subdivisions,
740 float outline_radius,
741 float outline_offset,
742 int material_index);
743
744/* Function that generates an update mask for a selection operation. */
746 const IndexMask &universe,
747 StringRef attribute_name,
748 IndexMaskMemory &memory)>;
749
750bool selection_update(const ViewContext *vc,
751 const eSelectOp sel_op,
752 SelectionUpdateFunc select_operation);
753
754/* BVHTree and associated data for 2D curve projection. */
756 BVHTree *tree = nullptr;
757 /* Projected coordinates for each tree element. */
760 /* BVH element index range for each drawing. */
762};
763
768 const Object &object,
769 const GreasePencil &grease_pencil,
771 int frame_number);
773
790 const IndexMask &curve_mask,
791 const Span<float2> screen_space_positions,
792 const Curves2DBVHTree &tree_data,
793 IndexRange tree_data_range,
794 MutableSpan<bool> r_hits,
795 std::optional<MutableSpan<float>> r_first_intersect_factors,
796 std::optional<MutableSpan<float>> r_last_intersect_factors);
797
818 /* Segment start index for each curve, can be used as \a OffsetIndices. */
820 /* Point indices where new segments start. */
822 /* Fraction of the start point on the line segment to the next point. */
824};
825
846 const IndexMask &curve_mask,
847 const Span<float2> screen_space_positions,
848 const Curves2DBVHTree &tree_data,
849 IndexRange tree_data_range);
850
852 const IndexMask &selection,
853 bke::AttrDomain selection_domain,
854 StringRef attribute_name,
855 GrainSize grain_size,
856 eSelectOp sel_op);
857
859 const IndexMask &point_selection,
860 StringRef attribute_name,
861 const Curves2DBVHTree &tree_data,
862 IndexRange tree_data_range,
863 GrainSize grain_size,
864 eSelectOp sel_op);
865
866namespace trim {
868 Span<float2> screen_space_positions,
869 Span<rcti> screen_space_curve_bounds,
870 const IndexMask &curve_selection,
871 const Vector<Vector<int>> &selected_points_in_curves,
872 bool keep_caps);
873}; // namespace trim
874
875void merge_layers(const GreasePencil &src_grease_pencil,
876 const Span<Vector<int>> src_layer_indices_by_dst_layer,
877 GreasePencil &dst_grease_pencil);
878
879/* Lineart */
880
881/* Stores the maximum calculation range in the whole modifier stack for line art so the cache can
882 * cover everything that will be visible. */
890
893 const LineartLimitInfo &info,
894 const bool cache_is_ready);
895
897
899} // namespace blender::ed::greasepencil
Low-level operations for grease pencil.
eBezTriple_KeyframeType
void ED_interpolatetool_modal_keymap(wmKeyConfig *keyconf)
blender::bke::AttrDomain ED_grease_pencil_sculpt_selection_domain_get(const ToolSettings *tool_settings)
void GREASE_PENCIL_OT_stroke_trim(wmOperatorType *ot)
void ED_operatortypes_grease_pencil_edit()
void ED_operatortypes_grease_pencil_trace()
bool ED_grease_pencil_sculpt_segment_selection_enabled(const ToolSettings *tool_settings)
blender::bke::AttrDomain ED_grease_pencil_edit_selection_domain_get(const ToolSettings *tool_settings)
void ED_operatormacros_grease_pencil()
void ED_operatortypes_grease_pencil_join()
void ED_primitivetool_modal_keymap(wmKeyConfig *keyconf)
bool ED_grease_pencil_edit_segment_selection_enabled(const ToolSettings *tool_settings)
int ED_grease_pencil_join_objects_exec(bContext *C, wmOperator *op)
void ED_filltool_modal_keymap(wmKeyConfig *keyconf)
void ED_operatortypes_grease_pencil_frames()
blender::bke::AttrDomain ED_grease_pencil_vertex_selection_domain_get(const ToolSettings *tool_settings)
@ LAYER_REORDER_BELOW
@ LAYER_REORDER_ABOVE
void ED_operatortypes_grease_pencil_draw()
void ED_keymap_grease_pencil(wmKeyConfig *keyconf)
void ED_operatortypes_grease_pencil_primitives()
void ED_operatortypes_grease_pencil_select()
void ED_operatortypes_grease_pencil()
void ED_operatortypes_grease_pencil_layers()
blender::bke::AttrDomain ED_grease_pencil_selection_domain_get(const ToolSettings *tool_settings, const Object *object)
void ED_operatortypes_grease_pencil_lineart()
void ED_operatortypes_grease_pencil_modes()
void ED_undosys_type_grease_pencil(UndoType *undo_type)
void ED_operatortypes_grease_pencil_weight_paint()
void ED_operatortypes_grease_pencil_interpolate()
bool ED_grease_pencil_segment_selection_enabled(const ToolSettings *tool_settings, const Object *object)
void ED_operatortypes_grease_pencil_material()
bool ED_grease_pencil_vertex_segment_selection_enabled(const ToolSettings *tool_settings)
void ED_operatortypes_grease_pencil_bake_animation()
eEditKeyframes_Mirror
eKeyPasteOffset
eEditKeyframes_Snap
eSelectOp
DrawingPlacement & operator=(const DrawingPlacement &other)
void cache_viewport_depths(Depsgraph *depsgraph, ARegion *region, View3D *view3d)
const Depsgraph * depsgraph
CCL_NAMESPACE_BEGIN ccl_device float invert(float color, float factor)
Definition invert.h:9
void compute_view_matrices(const ViewContext &view_context, const Scene &scene, const int2 &win_size, const float2 &zoom, const float2 &offset)
void region_reset(ARegion &region, const RegionViewData &data)
void draw_lines(const float4x4 &transform, IndexRange indices, Span< float3 > start_positions, Span< float3 > end_positions, const VArray< ColorGeometry4f > &colors, float line_width)
Image * image_render_end(Main &bmain, GPUOffScreen *buffer)
void draw_grease_pencil_strokes(const RegionView3D &rv3d, const int2 &win_size, const Object &object, const bke::greasepencil::Drawing &drawing, const float4x4 &transform, const IndexMask &strokes_mask, const VArray< ColorGeometry4f > &colors, const bool use_xray, const float radius_scale)
RegionViewData region_init(ARegion &region, const int2 &win_size)
void draw_circles(const float4x4 &transform, const IndexRange indices, Span< float3 > centers, const VArray< float > &radii, const VArray< ColorGeometry4f > &colors, const float2 &viewport_size, const float line_width, const bool fill)
void draw_dot(const float4x4 &transform, const float3 &position, const float point_size, const ColorGeometry4f &color)
void draw_polyline(const float4x4 &transform, const IndexRange indices, Span< float3 > positions, const VArray< ColorGeometry4f > &colors, const bool cyclic, const float line_width)
GPUOffScreen * image_render_begin(const int2 &win_size)
bke::CurvesGeometry trim_curve_segments(const bke::CurvesGeometry &src, const Span< float2 > screen_space_positions, const Span< rcti > screen_space_curve_bounds, const IndexMask &curve_selection, const Vector< Vector< int > > &selected_points_in_curves, const bool keep_caps)
void find_curve_intersections(const bke::CurvesGeometry &curves, const IndexMask &curve_mask, const Span< float2 > screen_space_positions, const Curves2DBVHTree &tree_data, const IndexRange tree_data_range, MutableSpan< bool > r_hits, std::optional< MutableSpan< float > > r_first_intersect_factors, std::optional< MutableSpan< float > > r_last_intersect_factors)
void select_frames_at(bke::greasepencil::LayerGroup &layer_group, const int frame_number, const short select_mode)
IndexMask retrieve_editable_and_selected_elements(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, const bke::AttrDomain selection_domain, IndexMaskMemory &memory)
bool active_grease_pencil_poll(bContext *C)
IndexMask retrieve_editable_and_selected_strokes(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
int grease_pencil_draw_operator_invoke(bContext *C, wmOperator *op, const bool use_duplicate_previous_key)
Set< std::string > get_bone_deformed_vertex_group_names(const Object &object)
blender::bke::CurvesGeometry curves_merge_by_distance(const bke::CurvesGeometry &src_curves, const float merge_distance, const IndexMask &selection, const bke::AttributeFilter &attribute_filter)
IndexRange clipboard_paste_strokes(Main &bmain, Object &object, bke::greasepencil::Drawing &drawing, const float4x4 &transform, const bool keep_world_transform, const bool paste_back)
bool remove_all_selected_frames(GreasePencil &grease_pencil, bke::greasepencil::Layer &layer)
bool grease_pencil_copy_keyframes(bAnimContext *ac, KeyframeClipboard &clipboard)
IndexMask retrieve_editable_points(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
bool grease_pencil_paste_keyframes(bAnimContext *ac, const eKeyPasteOffset offset_mode, const eKeyMergeMode merge_mode, const KeyframeClipboard &clipboard)
bool ensure_active_keyframe(const Scene &scene, GreasePencil &grease_pencil, bke::greasepencil::Layer &layer, const bool duplicate_previous_key, bool &r_inserted_keyframe)
const bke::CurvesGeometry & clipboard_curves()
int64_t ramer_douglas_peucker_simplify(const IndexRange range, const float epsilon, const FunctionRef< float(int64_t, int64_t, int64_t)> dist_function, MutableSpan< bool > points_to_delete)
void create_suzanne(Main &bmain, Object &object, const float4x4 &matrix, const int frame_number)
bool selection_update(const ViewContext *vc, const eSelectOp sel_op, SelectionUpdateFunc select_operation)
GreasePencil * from_context(bContext &C)
bool grease_pencil_vertex_painting_poll(bContext *C)
IndexMask retrieve_editable_fill_strokes(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
float opacity_from_input_sample(const float pressure, const Brush *brush, const BrushGpencilSettings *settings)
bool editable_grease_pencil_point_selection_poll(bContext *C)
void grease_pencil_layer_parent_clear(bke::greasepencil::Layer &layer, const bool keep_transform)
IndexMask retrieve_editable_elements(Object &object, const MutableDrawingInfo &info, const bke::AttrDomain selection_domain, IndexMaskMemory &memory)
IndexMask retrieve_visible_bezier_handle_points(Object &object, const bke::greasepencil::Drawing &drawing, const int layer_index, IndexMaskMemory &memory)
void set_selected_frames_type(bke::greasepencil::Layer &layer, const eBezTriple_KeyframeType key_type)
bool mirror_selected_frames(GreasePencil &grease_pencil, bke::greasepencil::Layer &layer, Scene &scene, const eEditKeyframes_Mirror mode)
void free_curves_2d_bvh_data(Curves2DBVHTree &data)
bke::CurvesGeometry fill_strokes(const ViewContext &view_context, const Brush &brush, const Scene &scene, const bke::greasepencil::Layer &layer, const VArray< bool > &boundary_layers, Span< DrawingInfo > src_drawings, bool invert, const std::optional< float > alpha_threshold, const float2 &fill_point, const ExtensionData &extensions, FillToolFitMethod fit_method, int stroke_material_index, bool keep_images)
void select_frames_range(bke::greasepencil::TreeNode &node, const float min, const float max, const short select_mode)
CurveSegmentsData find_curve_segments(const bke::CurvesGeometry &curves, const IndexMask &curve_mask, const Span< float2 > screen_space_positions, const Curves2DBVHTree &tree_data, const IndexRange tree_data_range)
void add_armature_automatic_weights(Scene &scene, Object &object, const Object &ob_armature)
IndexMask retrieve_visible_points(Object &object, const bke::greasepencil::Drawing &drawing, IndexMaskMemory &memory)
void get_lineart_modifier_limits(const Object &ob, blender::ed::greasepencil::LineartLimitInfo &info)
Vector< DrawingInfo > retrieve_visible_drawings(const Scene &scene, const GreasePencil &grease_pencil, const bool do_onion_skinning)
float radius_from_input_sample(const RegionView3D *rv3d, const ARegion *region, const Brush *brush, const float pressure, const float3 location, const float4x4 to_world, const BrushGpencilSettings *settings)
void create_blank(Main &bmain, Object &object, const int frame_number)
IndexMask retrieve_editable_strokes_by_material(Object &object, const bke::greasepencil::Drawing &drawing, const int mat_i, IndexMaskMemory &memory)
IndexMask retrieve_editable_and_selected_fill_strokes(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
void create_keyframe_edit_data_selected_frames_list(KeyframeEditData *ked, const bke::greasepencil::Layer &layer)
void set_lineart_modifier_limits(GreasePencilLineartModifierData &lmd, const blender::ed::greasepencil::LineartLimitInfo &info, const bool cache_is_ready)
void select_frames_region(KeyframeEditData *ked, bke::greasepencil::TreeNode &node, const short tool, const short select_mode)
bool has_any_frame_selected(const bke::greasepencil::Layer &layer)
void normalize_vertex_weights(MDeformVert &dvert, const int active_vertex_group, const Span< bool > vertex_group_is_locked, const Span< bool > vertex_group_is_bone_deformed)
IndexMask polyline_detect_corners(Span< float2 > points, const float radius_min, const float radius_max, const int samples_max, const float angle_threshold, IndexMaskMemory &memory)
bool editable_grease_pencil_poll(bContext *C)
bool grease_pencil_selection_poll(bContext *C)
void select_all_frames(bke::greasepencil::Layer &layer, const short select_mode)
Array< PointTransferData > compute_topology_change(const bke::CurvesGeometry &src, bke::CurvesGeometry &dst, const Span< Vector< PointTransferData > > src_to_dst_points, const bool keep_caps)
void create_stroke(Main &bmain, Object &object, const float4x4 &matrix, const int frame_number)
GreasePencilLineartModifierData * get_first_lineart_modifier(const Object &ob)
IndexMask retrieve_editable_and_selected_points(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
bool grease_pencil_sculpting_poll(bContext *C)
void add_armature_envelope_weights(Scene &scene, Object &object, const Object &ob_armature)
bool apply_mask_as_selection(bke::CurvesGeometry &curves, const IndexMask &selection_mask, const bke::AttrDomain selection_domain, const StringRef attribute_name, const GrainSize grain_size, const eSelectOp sel_op)
Vector< MutableDrawingInfo > retrieve_editable_drawings_from_layer(const Scene &scene, GreasePencil &grease_pencil, const blender::bke::greasepencil::Layer &layer)
IndexMask retrieve_visible_strokes(Object &object, const bke::greasepencil::Drawing &drawing, IndexMaskMemory &memory)
bke::CurvesGeometry curves_merge_endpoints_by_distance(const ARegion &region, const bke::CurvesGeometry &src_curves, const float4x4 &layer_to_world, const float merge_distance, const IndexMask &selection, const bke::AttributeFilter &attribute_filter)
Array< float2 > polyline_fit_curve(Span< float2 > points, const float error_threshold, const IndexMask &corner_mask)
bool duplicate_selected_frames(GreasePencil &grease_pencil, bke::greasepencil::Layer &layer)
Vector< MutableDrawingInfo > retrieve_editable_drawings_from_layer_with_falloff(const Scene &scene, GreasePencil &grease_pencil, const blender::bke::greasepencil::Layer &layer)
IndexMask retrieve_visible_bezier_handle_elements(Object &object, const bke::greasepencil::Drawing &drawing, const int layer_index, const bke::AttrDomain selection_domain, IndexMaskMemory &memory)
bool grease_pencil_weight_painting_poll(bContext *C)
Vector< MutableDrawingInfo > retrieve_editable_drawings_with_falloff(const Scene &scene, GreasePencil &grease_pencil)
bool grease_pencil_layer_parent_set(bke::greasepencil::Layer &layer, Object *parent, StringRefNull bone, const bool keep_transform)
bool active_grease_pencil_material_poll(bContext *C)
IndexMask retrieve_editable_strokes(Object &object, const bke::greasepencil::Drawing &drawing, int layer_index, IndexMaskMemory &memory)
bool add_armature_vertex_groups(Object &object, const Object &ob_armature)
bool grease_pencil_context_poll(bContext *C)
Vector< MutableDrawingInfo > retrieve_editable_drawings(const Scene &scene, GreasePencil &grease_pencil)
Curves2DBVHTree build_curves_2d_bvh_from_visible(const ViewContext &vc, const Object &object, const GreasePencil &grease_pencil, Span< MutableDrawingInfo > drawings, const int frame_number)
void merge_layers(const GreasePencil &src_grease_pencil, const Span< Vector< int > > src_layer_indices_by_dst_layer, GreasePencil &dst_grease_pencil)
float4x2 calculate_texture_space(const Scene *scene, const ARegion *region, const float2 &mouse, const DrawingPlacement &placement)
Array< Vector< MutableDrawingInfo > > retrieve_editable_drawings_grouped_per_frame(const Scene &scene, GreasePencil &grease_pencil)
bool apply_mask_as_segment_selection(bke::CurvesGeometry &curves, const IndexMask &point_selection_mask, const StringRef attribute_name, const Curves2DBVHTree &tree_data, const IndexRange tree_data_range, const GrainSize grain_size, const eSelectOp sel_op)
void select_layer_channel(GreasePencil &grease_pencil, bke::greasepencil::Layer *layer)
bool grease_pencil_edit_poll(bContext *C)
bool grease_pencil_painting_poll(bContext *C)
int curve_merge_by_distance(const IndexRange points, const Span< float > distances, const IndexMask &selection, const float merge_distance, MutableSpan< int > r_merge_indices)
bool active_grease_pencil_layer_poll(bContext *C)
bke::CurvesGeometry create_curves_outline(const bke::greasepencil::Drawing &drawing, const IndexMask &strokes, const float4x4 &transform, const int corner_subdivisions, const float outline_radius, const float outline_offset, const int material_index)
bool select_frame_at(bke::greasepencil::Layer &layer, const int frame_number, const short select_mode)
bool snap_selected_frames(GreasePencil &grease_pencil, bke::greasepencil::Layer &layer, Scene &scene, const eEditKeyframes_Snap mode)
#define min(a, b)
Definition sort.c:32
signed short int16_t
Definition stdint.h:76
__int64 int64_t
Definition stdint.h:89
unsigned char uint8_t
Definition stdint.h:78
signed char int8_t
Definition stdint.h:75
const bke::greasepencil::Drawing & drawing
struct blender::ed::greasepencil::ExtensionData::@346 circles
struct blender::ed::greasepencil::ExtensionData::@345 lines
Map< std::string, LayerBufferItem > copy_buffer
wmOperatorType * ot
Definition wm_files.cc:4125