Blender V5.0
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
9
10/* Regularized Kelvinlets: Sculpting Brushes based on Fundamental Solutions of Elasticity
11 * Pixar Technical Memo #17-03 */
12
13#define KELVINLET_MAX_ITERATIONS 3
14
15typedef struct KelvinletParams {
16 float a;
17 float b;
18 float c;
19
20 float f;
21
24
25/* Initialize KelvinletParams to store the parameters that will affect the deformation produced by
26 * a Kelvinlet */
28 KelvinletParams *params, float radius, float force, float shear_modulus, float poisson_ratio);
29
30/* Regularized Kelvinlets */
31/* All these functions output the displacement that should be applied to each element. */
32/* The initial coordinates of that element should not be modified during the transformation */
33void BKE_kelvinlet_grab(float radius_elem_disp[3],
35 const float elem_orig_co[3],
36 const float brush_location[3],
37 const float brush_delta[3]);
38void BKE_kelvinlet_grab_biscale(float radius_elem_disp[3],
40 const float elem_orig_co[3],
41 const float brush_location[3],
42 const float brush_delta[3]);
43void BKE_kelvinlet_grab_triscale(float radius_elem_disp[3],
45 const float elem_orig_co[3],
46 const float brush_location[3],
47 const float brush_delta[3]);
48void BKE_kelvinlet_scale(float radius_elem_disp[3],
50 const float elem_orig_co[3],
51 const float brush_location[3],
52 const float surface_normal[3]);
53void BKE_kelvinlet_twist(float radius_elem_disp[3],
55 const float elem_orig_co[3],
56 const float brush_location[3],
57 const float surface_normal[3]);
#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]