e955c94ed3
Listing the "Blender Foundation" as copyright holder implied the Blender Foundation holds copyright to files which may include work from many developers. While keeping copyright on headers makes sense for isolated libraries, Blender's own code may be refactored or moved between files in a way that makes the per file copyright holders less meaningful. Copyright references to the "Blender Foundation" have been replaced with "Blender Authors", with the exception of `./extern/` since these this contains libraries which are more isolated, any changed to license headers there can be handled on a case-by-case basis. Some directories in `./intern/` have also been excluded: - `./intern/cycles/` it's own `AUTHORS` file is planned. - `./intern/opensubdiv/`. An "AUTHORS" file has been added, using the chromium projects authors file as a template. Design task: #110784 Ref !110783.
66 lines
2.4 KiB
C
66 lines
2.4 KiB
C
/* SPDX-FileCopyrightText: Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
#pragma once
|
|
|
|
/** \file
|
|
* \ingroup bke
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Regularized Kelvinlets: Sculpting Brushes based on Fundamental Solutions of Elasticity
|
|
* Pixar Technical Memo #17-03 */
|
|
|
|
#define KELVINLET_MAX_ITERATIONS 3
|
|
|
|
typedef struct KelvinletParams {
|
|
float a;
|
|
float b;
|
|
float c;
|
|
|
|
float f;
|
|
|
|
float radius_scaled[KELVINLET_MAX_ITERATIONS];
|
|
} KelvinletParams;
|
|
|
|
/* Initialize KelvinletParams to store the parameters that will affect the deformation produced by
|
|
* a Kelvinlet */
|
|
void BKE_kelvinlet_init_params(
|
|
KelvinletParams *params, float radius, float force, float shear_modulus, float poisson_ratio);
|
|
|
|
/* Regularized Kelvinlets */
|
|
/* All these functions output the displacement that should be applied to each element. */
|
|
/* The initial coordinates of that element should not be modified during the transformation */
|
|
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]);
|
|
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]);
|
|
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]);
|
|
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]);
|
|
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]);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|