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