Blender  V3.3
BKE_kelvinlet.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright Blender Foundation. All rights reserved. */
3 #pragma once
4 
9 #include "BLI_math.h"
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 /* Regularized Kelvinlets: Sculpting Brushes based on Fundamental Solutions of Elasticity
16  * Pixar Technical Memo #17-03 */
17 
18 #define KELVINLET_MAX_ITERATIONS 3
19 
20 typedef struct KelvinletParams {
21  float a;
22  float b;
23  float c;
24 
25  float f;
26 
29 
30 /* Initialize KelvinletParams to store the parameters that will affect the deformation produced by
31  * a Kelvinlet */
33  KelvinletParams *params, float radius, float force, float shear_modulus, float poisson_ratio);
34 
35 /* Regularized Kelvinlets */
36 /* All these functions output the displacement that should be applied to each element. */
37 /* The initial coordinates of that element should not be modified during the transformation */
38 void BKE_kelvinlet_grab(float radius_elem_disp[3],
39  const KelvinletParams *params,
40  const float elem_orig_co[3],
41  const float brush_location[3],
42  const float brush_delta[3]);
43 void BKE_kelvinlet_grab_biscale(float radius_elem_disp[3],
44  const KelvinletParams *params,
45  const float elem_orig_co[3],
46  const float brush_location[3],
47  const float brush_delta[3]);
48 void BKE_kelvinlet_grab_triscale(float radius_elem_disp[3],
49  const KelvinletParams *params,
50  const float elem_orig_co[3],
51  const float brush_location[3],
52  const float brush_delta[3]);
53 void BKE_kelvinlet_scale(float radius_elem_disp[3],
54  const KelvinletParams *params,
55  const float elem_orig_co[3],
56  const float brush_location[3],
57  const float surface_normal[3]);
58 void BKE_kelvinlet_twist(float radius_elem_disp[3],
59  const KelvinletParams *params,
60  const float elem_orig_co[3],
61  const float brush_location[3],
62  const float surface_normal[3]);
63 
64 #ifdef __cplusplus
65 }
66 #endif
struct KelvinletParams KelvinletParams
#define KELVINLET_MAX_ITERATIONS
Definition: BKE_kelvinlet.h:18
void BKE_kelvinlet_grab(float radius_elem_disp[3], const KelvinletParams *params, const float elem_orig_co[3], const float brush_location[3], const float brush_delta[3])
Definition: kelvinlet.c:51
void BKE_kelvinlet_grab_triscale(float radius_elem_disp[3], const KelvinletParams *params, const float elem_orig_co[3], const float brush_location[3], const float brush_delta[3])
Definition: kelvinlet.c:87
void BKE_kelvinlet_init_params(KelvinletParams *params, float radius, float force, float shear_modulus, float poisson_ratio)
Definition: kelvinlet.c:13
void BKE_kelvinlet_grab_biscale(float radius_elem_disp[3], const KelvinletParams *params, const float elem_orig_co[3], const float brush_location[3], const float brush_delta[3])
Definition: kelvinlet.c:68
void BKE_kelvinlet_scale(float radius_elem_disp[3], const KelvinletParams *params, const float elem_orig_co[3], const float brush_location[3], const float surface_normal[3])
Definition: kelvinlet.c:163
void BKE_kelvinlet_twist(float radius_elem_disp[3], const KelvinletParams *params, const float elem_orig_co[3], const float brush_location[3], const float surface_normal[3])
Definition: kelvinlet.c:191
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
float radius_scaled[KELVINLET_MAX_ITERATIONS]
Definition: BKE_kelvinlet.h:27