Blender  V3.3
curves_sculpt_intern.hh
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #pragma once
4 
5 #include <optional>
6 
7 #include "curves_sculpt_intern.h"
8 #include "paint_intern.h"
9 
10 #include "BLI_math_vector.hh"
11 #include "BLI_vector.hh"
12 #include "BLI_virtual_array.hh"
13 
14 #include "BKE_attribute.h"
15 #include "BKE_crazyspace.hh"
16 #include "BKE_curves.hh"
17 
18 #include "ED_curves_sculpt.h"
19 
20 struct ARegion;
21 struct RegionView3D;
22 struct Depsgraph;
23 struct View3D;
24 struct Object;
25 struct Brush;
26 struct Scene;
27 struct BVHTreeFromMesh;
28 struct ReportList;
29 
30 namespace blender::ed::sculpt_paint {
31 
33 using bke::CurvesSurfaceTransforms;
34 
36  bool is_first;
38  float pressure;
39  ReportList *reports = nullptr;
40 };
41 
42 float brush_radius_factor(const Brush &brush, const StrokeExtension &stroke_extension);
43 float brush_radius_get(const Scene &scene,
44  const Brush &brush,
45  const StrokeExtension &stroke_extension);
46 
47 float brush_strength_factor(const Brush &brush, const StrokeExtension &stroke_extension);
48 float brush_strength_get(const Scene &scene,
49  const Brush &brush,
50  const StrokeExtension &stroke_extension);
51 
56  public:
57  virtual ~CurvesSculptStrokeOperation() = default;
58  virtual void on_stroke_extended(const bContext &C, const StrokeExtension &stroke_extension) = 0;
59 };
60 
61 std::unique_ptr<CurvesSculptStrokeOperation> new_add_operation();
62 std::unique_ptr<CurvesSculptStrokeOperation> new_comb_operation();
63 std::unique_ptr<CurvesSculptStrokeOperation> new_delete_operation();
64 std::unique_ptr<CurvesSculptStrokeOperation> new_snake_hook_operation();
65 std::unique_ptr<CurvesSculptStrokeOperation> new_grow_shrink_operation(
66  const BrushStrokeMode brush_mode, const bContext &C);
67 std::unique_ptr<CurvesSculptStrokeOperation> new_selection_paint_operation(
68  const BrushStrokeMode brush_mode, const bContext &C);
69 std::unique_ptr<CurvesSculptStrokeOperation> new_pinch_operation(const BrushStrokeMode brush_mode,
70  const bContext &C);
71 std::unique_ptr<CurvesSculptStrokeOperation> new_smooth_operation();
72 std::unique_ptr<CurvesSculptStrokeOperation> new_puff_operation();
73 std::unique_ptr<CurvesSculptStrokeOperation> new_density_operation(
74  const BrushStrokeMode brush_mode, const bContext &C, const StrokeExtension &stroke_start);
75 std::unique_ptr<CurvesSculptStrokeOperation> new_slide_operation();
76 
77 struct CurvesBrush3D {
79  float radius_cu;
80 };
81 
85 std::optional<CurvesBrush3D> sample_curves_3d_brush(const Depsgraph &depsgraph,
86  const ARegion &region,
87  const View3D &v3d,
88  const RegionView3D &rv3d,
89  const Object &curves_object,
90  const float2 &brush_pos_re,
91  const float brush_radius_re);
92 
94 
98 VArray<float> get_curves_selection(const Curves &curves_id);
99 
103 VArray<float> get_point_selection(const Curves &curves_id);
104 
105 void move_last_point_and_resample(MutableSpan<float3> positions, const float3 &new_last_position);
106 
108  public:
109  const Depsgraph *depsgraph = nullptr;
110  const Scene *scene = nullptr;
111  ARegion *region = nullptr;
112  const View3D *v3d = nullptr;
113  RegionView3D *rv3d = nullptr;
114 
116 };
117 
118 std::optional<CurvesBrush3D> sample_curves_surface_3d_brush(
119  const Depsgraph &depsgraph,
120  const ARegion &region,
121  const View3D &v3d,
122  const CurvesSurfaceTransforms &transforms,
123  const BVHTreeFromMesh &surface_bvh,
124  const float2 &brush_pos_re,
125  const float brush_radius_re);
126 
128  const float3 &brush_position,
129  const float old_radius);
130 
133 void report_missing_surface(ReportList *reports);
136 void report_invalid_uv_map(ReportList *reports);
137 
138 } // namespace blender::ed::sculpt_paint
Generic geometry attributes built on CustomData.
Low-level operations for curves.
struct Depsgraph Depsgraph
Definition: DEG_depsgraph.h:35
struct CurvesGeometry CurvesGeometry
eCurvesSymmetryType
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
virtual void on_stroke_extended(const bContext &C, const StrokeExtension &stroke_extension)=0
Scene scene
const Depsgraph * depsgraph
std::unique_ptr< CurvesSculptStrokeOperation > new_add_operation()
std::optional< CurvesBrush3D > sample_curves_surface_3d_brush(const Depsgraph &depsgraph, const ARegion &region, const View3D &v3d, const CurvesSurfaceTransforms &transforms, const BVHTreeFromMesh &surface_bvh, const float2 &brush_pos_re, const float brush_radius_re)
std::unique_ptr< CurvesSculptStrokeOperation > new_pinch_operation(const BrushStrokeMode brush_mode, const bContext &C)
void report_invalid_uv_map(ReportList *reports)
std::unique_ptr< CurvesSculptStrokeOperation > new_comb_operation()
void report_empty_evaluated_surface(ReportList *reports)
float brush_radius_get(const Scene &scene, const Brush &brush, const StrokeExtension &stroke_extension)
VArray< float > get_curves_selection(const Curves &curves_id)
std::optional< CurvesBrush3D > sample_curves_3d_brush(const Depsgraph &depsgraph, const ARegion &region, const View3D &v3d, const RegionView3D &rv3d, const Object &curves_object, const float2 &brush_pos_re, const float brush_radius_re)
void move_last_point_and_resample(MutableSpan< float3 > positions, const float3 &new_last_position)
void report_missing_uv_map_on_original_surface(ReportList *reports)
VArray< float > get_point_selection(const Curves &curves_id)
std::unique_ptr< CurvesSculptStrokeOperation > new_snake_hook_operation()
std::unique_ptr< CurvesSculptStrokeOperation > new_grow_shrink_operation(const BrushStrokeMode brush_mode, const bContext &C)
void report_missing_uv_map_on_evaluated_surface(ReportList *reports)
std::unique_ptr< CurvesSculptStrokeOperation > new_smooth_operation()
std::unique_ptr< CurvesSculptStrokeOperation > new_delete_operation()
void report_missing_surface(ReportList *reports)
std::unique_ptr< CurvesSculptStrokeOperation > new_selection_paint_operation(const BrushStrokeMode brush_mode, const bContext &C)
void report_empty_original_surface(ReportList *reports)
float brush_strength_get(const Scene &scene, const Brush &brush, const StrokeExtension &stroke_extension)
Vector< float4x4 > get_symmetry_brush_transforms(const eCurvesSymmetryType symmetry)
std::unique_ptr< CurvesSculptStrokeOperation > new_slide_operation()
std::unique_ptr< CurvesSculptStrokeOperation > new_puff_operation()
float brush_strength_factor(const Brush &brush, const StrokeExtension &stroke_extension)
float brush_radius_factor(const Brush &brush, const StrokeExtension &stroke_extension)
std::unique_ptr< CurvesSculptStrokeOperation > new_density_operation(const BrushStrokeMode brush_mode, const bContext &C, const StrokeExtension &stroke_start)
float transform_brush_radius(const float4x4 &transform, const float3 &brush_position, const float old_radius)
MutableSpan< float3 > positions
BrushStrokeMode
Definition: paint_intern.h:448