Rumba C++ SDK
BrushID.h
Go to the documentation of this file.
1 /*
2 
3  *
4  ***
5  *****
6  ********************* Mercenaries Engineering SARL
7  ***************** Copyright (C) 2018
8  *************
9  ********* http://www.mercenaries-engineering.com
10  ***********
11  **** ****
12  ** **
13 
14 */
15 #include "Maquina/BVHTriangle.h"
16 #include "Maquina/BrushPlugin.h"
17 
18 MAQUINA_IGNORE_WARNINGS_BEGIN
19 #include <vector>
20 #include <tbb/parallel_for.h>
21 MAQUINA_IGNORE_WARNINGS_END
22 
23 using namespace Imath;
24 
25 namespace maquina {
26 
27 enum class MAQUINA_EXPORT SetBrushAttribute
28 {
29  none = 0,
30  radius
31 };
32 
34 {
35 public:
36  BrushID(Node* node);
37 
38  // From ToolPlugin
39  void on_mouse_move(const CameraContext& camera, const InteractionContext& interaction) final;
40  void on_mouse_press(const CameraContext& camera, const InteractionContext& interaction) final;
41  void on_mouse_release(const CameraContext& camera, const InteractionContext& interaction) final;
42  void activate() override;
43  void deactivate() override;
44  Array get_help(const char* tool) override;
45  Array get_status(const char* tool) override;
46  bool on_key_press(int32_t key, int32_t modifiers) final;
47  bool on_key_release(int32_t key, int32_t modifiers) final;
48 
49  // From BrushPlugin
50  void stroke_begin(int modifiers) override;
51  void stroke_update(bool first, bool finished) override;
52  void update_weights(bool first, const Imath::M44f& previous_brush_matrix) final;
53  float weight(float distance) final;
54  float flow() final;
55 
56 protected:
57  virtual void _stroke_init_data(GeometryData& geometry);
58  virtual void _stroke_update(GeometryData& geometry);
59 
60  // The currently edit attribute
61  SetBrushAttribute __attribute_change = SetBrushAttribute::none;
62 
63  // The edited attributes
65 
67 
68 private:
69  SetBrushAttribute _attribute_change(int32_t key);
70 
71  Plug _attribute();
72 
73  // Some cache to compute the weights
74  float _radius;
75 
76  // The edit attribute data
77  int _attribute_change_init = 0;
78  float _attribute_init = 0.f;
79 
80 protected:
81  // transfer data
82  std::string _input_path;
83  std::string _attrib_name;
84  std::string _source_path;
88  std::vector<uint32_t> _source_tri_to_face;
92 };
93 
94 }
BVHTriangle _source_bvh_triangle
Definition: BrushID.h:90
BufferV3i _source_topo
Definition: BrushID.h:87
Definition: ImathFrame.h:43
A mesh value.
Definition: Mesh.h:33
A mutable scene node value.
Definition: Scene.h:292
Mesh _source_mesh
Definition: BrushID.h:86
int _modifiers
Definition: BrushID.h:66
std::string _attrib_name
Definition: BrushID.h:83
This class provides viewport space conversion services.
Definition: CameraContext.h:23
This version of the SDK is unstable, i-e, it may change with no warning.
Definition: AddCurveAction.h:20
SpanSpan< const uint32_t, const uint32_t > _source_topo_face
Definition: BrushID.h:89
Scene _ids
Definition: BrushID.h:64
Definition: BrushPlugin.h:36
MAQUINA_EXPORT Value default_value(const maquina::StringView &type_name)
Return the default value of a type.
none
Definition: BrushID.h:29
An array of values.
Definition: Array.h:26
#define MAQUINA_EXPORT
Definition: Export.h:31
A node plug.
Definition: Plug.h:59
std::string _source_path
Definition: BrushID.h:84
Definition: BrushID.h:33
This interface is passed to the events and is implemented by the application. */. ...
Definition: InteractionContext.h:22
A bounding volume hierarchy to quickly intersect 3d triangles.
Definition: BVHTriangle.h:24
Definition: ImathBox.h:67
M44d _source_matrix_inv
Definition: BrushID.h:85
std::string _input_path
Definition: BrushID.h:82
std::vector< uint32_t > _source_tri_to_face
Definition: BrushID.h:88
Definition: BrushPlugin.h:180
Base class of all Rumba nodes.
Definition: Node.h:37