Blender V4.5
curves_sculpt_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 <optional>
8
9#include "paint_intern.hh"
10
11#include "BLI_vector.hh"
12
13#include "BKE_attribute.hh"
14#include "BKE_crazyspace.hh"
15#include "BKE_curves.hh"
16
17#include "ED_curves.hh"
18
19struct ARegion;
20struct RegionView3D;
21struct Depsgraph;
22struct View3D;
23struct Object;
24struct Brush;
25struct Scene;
26
27namespace blender::bke {
28struct BVHTreeFromMesh;
29}
30
31struct ReportList;
32
34
35using bke::CurvesGeometry;
36using bke::CurvesSurfaceTransforms;
37
44
45float brush_radius_factor(const Brush &brush, const StrokeExtension &stroke_extension);
46float brush_radius_get(const Scene &scene,
47 const Brush &brush,
48 const StrokeExtension &stroke_extension);
49
50float brush_strength_factor(const Brush &brush, const StrokeExtension &stroke_extension);
51float brush_strength_get(const Scene &scene,
52 const Brush &brush,
53 const StrokeExtension &stroke_extension);
54
59 public:
60 virtual ~CurvesSculptStrokeOperation() = default;
61 virtual void on_stroke_extended(const bContext &C, const StrokeExtension &stroke_extension) = 0;
62};
63
64std::unique_ptr<CurvesSculptStrokeOperation> new_add_operation();
65std::unique_ptr<CurvesSculptStrokeOperation> new_comb_operation();
66std::unique_ptr<CurvesSculptStrokeOperation> new_delete_operation();
67std::unique_ptr<CurvesSculptStrokeOperation> new_snake_hook_operation();
68std::unique_ptr<CurvesSculptStrokeOperation> new_grow_shrink_operation(
69 const BrushStrokeMode brush_mode, const bContext &C);
70std::unique_ptr<CurvesSculptStrokeOperation> new_selection_paint_operation(
71 const BrushStrokeMode brush_mode, const bContext &C);
72std::unique_ptr<CurvesSculptStrokeOperation> new_pinch_operation(const BrushStrokeMode brush_mode,
73 const bContext &C);
74std::unique_ptr<CurvesSculptStrokeOperation> new_smooth_operation();
75std::unique_ptr<CurvesSculptStrokeOperation> new_puff_operation();
76std::unique_ptr<CurvesSculptStrokeOperation> new_density_operation(
77 const BrushStrokeMode brush_mode, const bContext &C, const StrokeExtension &stroke_start);
78std::unique_ptr<CurvesSculptStrokeOperation> new_slide_operation();
79
84
88std::optional<CurvesBrush3D> sample_curves_3d_brush(const Depsgraph &depsgraph,
89 const ARegion &region,
90 const View3D &v3d,
91 const RegionView3D &rv3d,
92 const Object &curves_object,
93 const float2 &brush_pos_re,
94 const float brush_radius_re);
95
100void remember_stroke_position(Scene &scene, const float3 &brush_position_wo);
101
103
105
116
121 MutableSpan<float3> positions,
122 const float3 &new_last_position);
123
125 public:
126 const Depsgraph *depsgraph = nullptr;
127 Scene *scene = nullptr;
128 ARegion *region = nullptr;
129 const View3D *v3d = nullptr;
130 RegionView3D *rv3d = nullptr;
131
133};
134
135std::optional<CurvesBrush3D> sample_curves_surface_3d_brush(
136 const Depsgraph &depsgraph,
137 const ARegion &region,
138 const View3D &v3d,
139 const CurvesSurfaceTransforms &transforms,
140 const bke::BVHTreeFromMesh &surface_bvh,
141 const float2 &brush_pos_re,
142 const float brush_radius_re);
143
145 const float3 &brush_position,
146 const float old_radius);
147
154
160 private:
161 bool use_surface_collision_;
162 float surface_collision_distance_;
163 Array<float3> start_positions_;
164 Array<float> segment_lengths_;
165
166 public:
168 const IndexMask &curve_selection,
169 const bool use_surface_collision,
170 const float surface_collision_distance);
171
173 const IndexMask &curve_selection,
174 const Mesh *surface,
175 const CurvesSurfaceTransforms &transforms);
176
178 {
179 return segment_lengths_;
180 }
181};
182
185
186} // namespace blender::ed::sculpt_paint
Low-level operations for curves.
eCurvesSymmetryType
#define C
Definition RandGen.cpp:29
ReportList * reports
Definition WM_types.hh:1025
BPy_StructRNA * depsgraph
void initialize()
virtual void on_stroke_extended(const bContext &C, const StrokeExtension &stroke_extension)=0
bool curves_sculpt_poll(bContext *C)
std::unique_ptr< CurvesSculptStrokeOperation > new_add_operation()
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)
void remember_stroke_position(Scene &scene, const float3 &brush_position_wo)
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)
bke::SpanAttributeWriter< float > float_selection_ensure(Curves &curves_id)
void report_missing_uv_map_on_original_surface(ReportList *reports)
std::unique_ptr< CurvesSculptStrokeOperation > new_snake_hook_operation()
std::unique_ptr< CurvesSculptStrokeOperation > new_grow_shrink_operation(const BrushStrokeMode brush_mode, const bContext &C)
bool curves_sculpt_poll_view3d(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::optional< CurvesBrush3D > sample_curves_surface_3d_brush(const Depsgraph &depsgraph, const ARegion &region, const View3D &v3d, const CurvesSurfaceTransforms &transforms, const bke::BVHTreeFromMesh &surface_bvh, const float2 &brush_pos_re, const float brush_radius_re)
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)
void move_last_point_and_resample(MoveAndResampleBuffers &buffer, MutableSpan< float3 > positions, const float3 &new_last_position)
float transform_brush_radius(const float4x4 &transform, const float3 &brush_position, const float old_radius)
MatBase< float, 4, 4 > float4x4
VecBase< float, 2 > float2
VecBase< float, 3 > float3
BrushStrokeMode
void solve_step(bke::CurvesGeometry &curves, const IndexMask &curve_selection, const Mesh *surface, const CurvesSurfaceTransforms &transforms)