Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/modifiers/intern/MOD_surface.c')
-rw-r--r--source/blender/modifiers/intern/MOD_surface.c279
1 files changed, 136 insertions, 143 deletions
diff --git a/source/blender/modifiers/intern/MOD_surface.c b/source/blender/modifiers/intern/MOD_surface.c
index c0fbb4d9ac3..02678879e89 100644
--- a/source/blender/modifiers/intern/MOD_surface.c
+++ b/source/blender/modifiers/intern/MOD_surface.c
@@ -21,7 +21,6 @@
* \ingroup modifiers
*/
-
#include "BLI_utildefines.h"
#include "BLI_math.h"
@@ -43,173 +42,167 @@
#include "MEM_guardedalloc.h"
-
static void initData(ModifierData *md)
{
- SurfaceModifierData *surmd = (SurfaceModifierData *) md;
+ SurfaceModifierData *surmd = (SurfaceModifierData *)md;
- surmd->bvhtree = NULL;
- surmd->mesh = NULL;
- surmd->x = NULL;
- surmd->v = NULL;
+ surmd->bvhtree = NULL;
+ surmd->mesh = NULL;
+ surmd->x = NULL;
+ surmd->v = NULL;
}
static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int flag)
{
- SurfaceModifierData *surmd_dst = (SurfaceModifierData *)md_dst;
+ SurfaceModifierData *surmd_dst = (SurfaceModifierData *)md_dst;
- modifier_copyData_generic(md_src, md_dst, flag);
+ modifier_copyData_generic(md_src, md_dst, flag);
- surmd_dst->bvhtree = NULL;
- surmd_dst->mesh = NULL;
- surmd_dst->x = NULL;
- surmd_dst->v = NULL;
+ surmd_dst->bvhtree = NULL;
+ surmd_dst->mesh = NULL;
+ surmd_dst->x = NULL;
+ surmd_dst->v = NULL;
}
static void freeData(ModifierData *md)
{
- SurfaceModifierData *surmd = (SurfaceModifierData *) md;
+ SurfaceModifierData *surmd = (SurfaceModifierData *)md;
- if (surmd) {
- if (surmd->bvhtree) {
- free_bvhtree_from_mesh(surmd->bvhtree);
- MEM_SAFE_FREE(surmd->bvhtree);
- }
+ if (surmd) {
+ if (surmd->bvhtree) {
+ free_bvhtree_from_mesh(surmd->bvhtree);
+ MEM_SAFE_FREE(surmd->bvhtree);
+ }
- if (surmd->mesh) {
- BKE_id_free(NULL, surmd->mesh);
- surmd->mesh = NULL;
- }
+ if (surmd->mesh) {
+ BKE_id_free(NULL, surmd->mesh);
+ surmd->mesh = NULL;
+ }
- MEM_SAFE_FREE(surmd->x);
+ MEM_SAFE_FREE(surmd->x);
- MEM_SAFE_FREE(surmd->v);
- }
+ MEM_SAFE_FREE(surmd->v);
+ }
}
static bool dependsOnTime(ModifierData *UNUSED(md))
{
- return true;
+ return true;
}
-static void deformVerts(
- ModifierData *md, const ModifierEvalContext *ctx,
- Mesh *mesh,
- float (*vertexCos)[3],
- int numVerts)
+static void deformVerts(ModifierData *md,
+ const ModifierEvalContext *ctx,
+ Mesh *mesh,
+ float (*vertexCos)[3],
+ int numVerts)
{
- SurfaceModifierData *surmd = (SurfaceModifierData *) md;
- const int cfra = (int)DEG_get_ctime(ctx->depsgraph);
-
- /* Free mesh and BVH cache. */
- if (surmd->bvhtree) {
- free_bvhtree_from_mesh(surmd->bvhtree);
- MEM_SAFE_FREE(surmd->bvhtree);
- }
-
- if (surmd->mesh) {
- BKE_id_free(NULL, surmd->mesh);
- surmd->mesh = NULL;
- }
-
- if (mesh) {
- /* Not possible to use get_mesh() in this case as we'll modify its vertices
- * and get_mesh() would return 'mesh' directly. */
- BKE_id_copy_ex(NULL, (ID *)mesh, (ID **)&surmd->mesh, LIB_ID_COPY_LOCALIZE);
- }
- else {
- surmd->mesh = MOD_deform_mesh_eval_get(ctx->object, NULL, NULL, NULL, numVerts, false, false);
- }
-
- if (!ctx->object->pd) {
- printf("SurfaceModifier deformVerts: Should not happen!\n");
- return;
- }
-
- if (surmd->mesh) {
- unsigned int numverts = 0, i = 0;
- int init = 0;
- float *vec;
- MVert *x, *v;
-
- BKE_mesh_apply_vert_coords(surmd->mesh, vertexCos);
- BKE_mesh_calc_normals(surmd->mesh);
-
- numverts = surmd->mesh->totvert;
-
- if (numverts != surmd->numverts ||
- surmd->x == NULL ||
- surmd->v == NULL ||
- cfra != surmd->cfra + 1)
- {
- if (surmd->x) {
- MEM_freeN(surmd->x);
- surmd->x = NULL;
- }
- if (surmd->v) {
- MEM_freeN(surmd->v);
- surmd->v = NULL;
- }
-
- surmd->x = MEM_calloc_arrayN(numverts, sizeof(MVert), "MVert");
- surmd->v = MEM_calloc_arrayN(numverts, sizeof(MVert), "MVert");
-
- surmd->numverts = numverts;
-
- init = 1;
- }
-
- /* convert to global coordinates and calculate velocity */
- for (i = 0, x = surmd->x, v = surmd->v; i < numverts; i++, x++, v++) {
- vec = surmd->mesh->mvert[i].co;
- mul_m4_v3(ctx->object->obmat, vec);
-
- if (init)
- v->co[0] = v->co[1] = v->co[2] = 0.0f;
- else
- sub_v3_v3v3(v->co, vec, x->co);
-
- copy_v3_v3(x->co, vec);
- }
-
- surmd->cfra = cfra;
-
- surmd->bvhtree = MEM_callocN(sizeof(BVHTreeFromMesh), "BVHTreeFromMesh");
-
- if (surmd->mesh->totpoly)
- BKE_bvhtree_from_mesh_get(surmd->bvhtree, surmd->mesh, BVHTREE_FROM_LOOPTRI, 2);
- else
- BKE_bvhtree_from_mesh_get(surmd->bvhtree, surmd->mesh, BVHTREE_FROM_EDGES, 2);
- }
+ SurfaceModifierData *surmd = (SurfaceModifierData *)md;
+ const int cfra = (int)DEG_get_ctime(ctx->depsgraph);
+
+ /* Free mesh and BVH cache. */
+ if (surmd->bvhtree) {
+ free_bvhtree_from_mesh(surmd->bvhtree);
+ MEM_SAFE_FREE(surmd->bvhtree);
+ }
+
+ if (surmd->mesh) {
+ BKE_id_free(NULL, surmd->mesh);
+ surmd->mesh = NULL;
+ }
+
+ if (mesh) {
+ /* Not possible to use get_mesh() in this case as we'll modify its vertices
+ * and get_mesh() would return 'mesh' directly. */
+ BKE_id_copy_ex(NULL, (ID *)mesh, (ID **)&surmd->mesh, LIB_ID_COPY_LOCALIZE);
+ }
+ else {
+ surmd->mesh = MOD_deform_mesh_eval_get(ctx->object, NULL, NULL, NULL, numVerts, false, false);
+ }
+
+ if (!ctx->object->pd) {
+ printf("SurfaceModifier deformVerts: Should not happen!\n");
+ return;
+ }
+
+ if (surmd->mesh) {
+ unsigned int numverts = 0, i = 0;
+ int init = 0;
+ float *vec;
+ MVert *x, *v;
+
+ BKE_mesh_apply_vert_coords(surmd->mesh, vertexCos);
+ BKE_mesh_calc_normals(surmd->mesh);
+
+ numverts = surmd->mesh->totvert;
+
+ if (numverts != surmd->numverts || surmd->x == NULL || surmd->v == NULL ||
+ cfra != surmd->cfra + 1) {
+ if (surmd->x) {
+ MEM_freeN(surmd->x);
+ surmd->x = NULL;
+ }
+ if (surmd->v) {
+ MEM_freeN(surmd->v);
+ surmd->v = NULL;
+ }
+
+ surmd->x = MEM_calloc_arrayN(numverts, sizeof(MVert), "MVert");
+ surmd->v = MEM_calloc_arrayN(numverts, sizeof(MVert), "MVert");
+
+ surmd->numverts = numverts;
+
+ init = 1;
+ }
+
+ /* convert to global coordinates and calculate velocity */
+ for (i = 0, x = surmd->x, v = surmd->v; i < numverts; i++, x++, v++) {
+ vec = surmd->mesh->mvert[i].co;
+ mul_m4_v3(ctx->object->obmat, vec);
+
+ if (init)
+ v->co[0] = v->co[1] = v->co[2] = 0.0f;
+ else
+ sub_v3_v3v3(v->co, vec, x->co);
+
+ copy_v3_v3(x->co, vec);
+ }
+
+ surmd->cfra = cfra;
+
+ surmd->bvhtree = MEM_callocN(sizeof(BVHTreeFromMesh), "BVHTreeFromMesh");
+
+ if (surmd->mesh->totpoly)
+ BKE_bvhtree_from_mesh_get(surmd->bvhtree, surmd->mesh, BVHTREE_FROM_LOOPTRI, 2);
+ else
+ BKE_bvhtree_from_mesh_get(surmd->bvhtree, surmd->mesh, BVHTREE_FROM_EDGES, 2);
+ }
}
-
ModifierTypeInfo modifierType_Surface = {
- /* name */ "Surface",
- /* structName */ "SurfaceModifierData",
- /* structSize */ sizeof(SurfaceModifierData),
- /* type */ eModifierTypeType_OnlyDeform,
- /* flags */ eModifierTypeFlag_AcceptsMesh |
- eModifierTypeFlag_AcceptsCVs |
- eModifierTypeFlag_NoUserAdd,
-
- /* copyData */ copyData,
-
- /* deformVerts */ deformVerts,
- /* deformMatrices */ NULL,
- /* deformVertsEM */ NULL,
- /* deformMatricesEM */ NULL,
- /* applyModifier */ NULL,
-
- /* initData */ initData,
- /* requiredDataMask */ NULL,
- /* freeData */ freeData,
- /* isDisabled */ NULL,
- /* updateDepsgraph */ NULL,
- /* dependsOnTime */ dependsOnTime,
- /* dependsOnNormals */ NULL,
- /* foreachObjectLink */ NULL,
- /* foreachIDLink */ NULL,
- /* foreachTexLink */ NULL,
- /* freeRuntimeData */ NULL,
+ /* name */ "Surface",
+ /* structName */ "SurfaceModifierData",
+ /* structSize */ sizeof(SurfaceModifierData),
+ /* type */ eModifierTypeType_OnlyDeform,
+ /* flags */ eModifierTypeFlag_AcceptsMesh | eModifierTypeFlag_AcceptsCVs |
+ eModifierTypeFlag_NoUserAdd,
+
+ /* copyData */ copyData,
+
+ /* deformVerts */ deformVerts,
+ /* deformMatrices */ NULL,
+ /* deformVertsEM */ NULL,
+ /* deformMatricesEM */ NULL,
+ /* applyModifier */ NULL,
+
+ /* initData */ initData,
+ /* requiredDataMask */ NULL,
+ /* freeData */ freeData,
+ /* isDisabled */ NULL,
+ /* updateDepsgraph */ NULL,
+ /* dependsOnTime */ dependsOnTime,
+ /* dependsOnNormals */ NULL,
+ /* foreachObjectLink */ NULL,
+ /* foreachIDLink */ NULL,
+ /* foreachTexLink */ NULL,
+ /* freeRuntimeData */ NULL,
};