Blender V5.0
MOD_solidify_nonmanifold.cc File Reference
#include <algorithm>
#include "BLI_math_matrix.h"
#include "BLI_math_vector.h"
#include "BLI_utildefines.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "MEM_guardedalloc.h"
#include "BKE_attribute.hh"
#include "BKE_customdata.hh"
#include "BKE_deform.hh"
#include "BKE_mesh.hh"
#include "MOD_solidify_util.hh"
#include "MOD_util.hh"

Go to the source code of this file.

Classes

struct  NewFaceRef
struct  OldEdgeFaceRef
struct  OldVertEdgeRef
struct  NewEdgeRef
struct  EdgeGroup
struct  FaceKeyPair

Macros

#define MOD_SOLIDIFY_EMPTY_TAG   uint(-1)

Functions

Local Utilities
static float project_v3_v3 (float r[3], const float a[3])
static float angle_signed_on_axis_normalized_v3v3_v3 (const float n[3], const float ref_n[3], const float axis[3])
static float clamp_nonzero (const float value, const float epsilon)
Main Solidify Function
static int comp_float_int_pair (const void *a, const void *b)
MeshMOD_solidify_nonmanifold_modifyMesh (ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)

Macro Definition Documentation

◆ MOD_SOLIDIFY_EMPTY_TAG

#define MOD_SOLIDIFY_EMPTY_TAG   uint(-1)

Function Documentation

◆ angle_signed_on_axis_normalized_v3v3_v3()

float angle_signed_on_axis_normalized_v3v3_v3 ( const float n[3],
const float ref_n[3],
const float axis[3] )
static

◆ clamp_nonzero()

float clamp_nonzero ( const float value,
const float epsilon )
static

Definition at line 60 of file MOD_solidify_nonmanifold.cc.

References BLI_assert, max_ff(), and min_ff().

Referenced by MOD_solidify_nonmanifold_modifyMesh().

◆ comp_float_int_pair()

int comp_float_int_pair ( const void * a,
const void * b )
static

Definition at line 127 of file MOD_solidify_nonmanifold.cc.

References b, x, and y.

Referenced by MOD_solidify_nonmanifold_modifyMesh().

◆ MOD_solidify_nonmanifold_modifyMesh()

Mesh * MOD_solidify_nonmanifold_modifyMesh ( ModifierData * md,
const ModifierEvalContext * ctx,
Mesh * mesh )

Definition at line 135 of file MOD_solidify_nonmanifold.cc.

References add_v3_v3(), add_v3_v3v3(), angle(), FaceKeyPair::angle, NewEdgeRef::angle, angle_signed_on_axis_normalized_v3v3_v3(), angle_v3v3v3(), Geometry::attributes, SolidifyModifierData::bevel_convex, BKE_defvert_ensure_index(), BKE_defvert_find_weight(), BKE_id_defgroup_name_index(), BKE_mesh_new_nomain_from_template(), BKE_modifier_set_error(), BLI_assert, CD_ORIGINDEX, CLAMP, clamp_f(), clamp_nonzero(), EdgeGroup::co, comp_float_int_pair(), blender::bke::AttributeAccessor::contains(), copy_v3_v3(), Mesh::corner_data, cosf, count, cross_v3_v3v3(), CustomData_copy_data(), CustomData_get_layer_for_write(), blender::Span< T >::data(), SolidifyModifierData::defgrp_name, dot_v3v3(), e, blender::bke::Edge, Mesh::edge_data, EdgeGroup::edges, OldVertEdgeRef::edges, EdgeGroup::edges_len, OldVertEdgeRef::edges_len, Mesh::edges_num, ELEM, fabsf, blender::bke::Face, FaceKeyPair::face, NewFaceRef::face, Mesh::face_data, faces, NewEdgeRef::faces, OldEdgeFaceRef::faces, OldEdgeFaceRef::faces_len, Mesh::faces_num, OldEdgeFaceRef::faces_reversed, blender::bke::SpanAttributeWriter< T >::finish(), SolidifyModifierData::flag, float, i, Mesh::id, NewFaceRef::index, blender::offset_indices::OffsetIndices< T >::index_range(), insert(), invert_m3(), blender::Span< T >::is_empty(), EdgeGroup::is_even_split, EdgeGroup::is_orig_closed, EdgeGroup::is_singularity, l, len, len_squared_v3(), len_v3(), length(), LIKELY, NewEdgeRef::link_edge_groups, NewFaceRef::link_edges, blender::bke::AttributeAccessor::lookup(), blender::bke::MutableAttributeAccessor::lookup_or_add_for_write_span(), M_PI, madd_v3_v3fl(), madd_v3_v3v3fl(), SolidifyModifierData::mat_ofs, SolidifyModifierData::mat_ofs_rim, max_ff(), MEM_calloc_arrayN(), MEM_freeN(), MEM_malloc_arrayN(), MEM_mallocN(), MEM_reallocN_id, SolidifyModifierData::merge_tolerance, min_ff(), MOD_get_vgroup(), MOD_SOLIDIFY_EMPTY_TAG, MOD_SOLIDIFY_FLIP, MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_FLAT, MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_NONE, MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_ROUND, MOD_SOLIDIFY_NONMANIFOLD_FLAT_FACES, MOD_SOLIDIFY_NONMANIFOLD_OFFSET_MODE_CONSTRAINTS, MOD_SOLIDIFY_NONMANIFOLD_OFFSET_MODE_EVEN, MOD_SOLIDIFY_NOSHELL, MOD_SOLIDIFY_OFFSET_ANGLE_CLAMP, MOD_SOLIDIFY_RIM, MOD_SOLIDIFY_VGROUP_INV, mul_v3_fl(), mul_v3_m3v3(), mul_v3_v3fl(), negate_v3_v3(), NewEdgeRef::new_edge, EdgeGroup::new_vert, next, EdgeGroup::no, SolidifyModifierData::nonmanifold_boundary_mode, SolidifyModifierData::nonmanifold_offset_mode, nor, normalize_v3(), ModifierEvalContext::object, SolidifyModifierData::offset, SolidifyModifierData::offset_clamp, SolidifyModifierData::offset_fac, SolidifyModifierData::offset_fac_vg, NewEdgeRef::old_edge, EdgeGroup::open_face_edge, ORIGINDEX_NONE, blender::bke::Point, pos, printf, project_v3_v3(), blender::bke::MutableAttributeAccessor::remove(), result, NewFaceRef::reversed, SolidifyModifierData::rim_defgrp_name, SolidifyModifierData::shell_defgrp_name, blender::IndexRange::size(), blender::offset_indices::OffsetIndices< T >::size(), size(), blender::Span< T >::slice(), blender::bke::SpanAttributeWriter< T >::span, EdgeGroup::split, split(), sqrtf, blender::IndexRange::start(), sub_v3_v3(), sub_v3_v3v3(), swap_v4_v4(), EdgeGroup::topo_group, Object::totcol, UNLIKELY, OldEdgeFaceRef::used, v2, EdgeGroup::valid, Mesh::vert_data, Mesh::verts_num, MDeformWeight::weight, zero_m3(), and zero_v3().

Referenced by modify_mesh().

◆ project_v3_v3()

float project_v3_v3 ( float r[3],
const float a[3] )
static

Similar to project_v3_v3v3_normalized that returns the dot-product.

Definition at line 36 of file MOD_solidify_nonmanifold.cc.

References dot_v3v3().

Referenced by MOD_solidify_nonmanifold_modifyMesh().