Blender V5.0
MOD_array.cc File Reference
#include <algorithm>
#include "MEM_guardedalloc.h"
#include "BLI_utildefines.h"
#include "BLI_math_matrix.h"
#include "BLI_math_vector.h"
#include "BLI_span.hh"
#include "BLT_translation.hh"
#include "DNA_defaults.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_screen_types.h"
#include "BKE_anim_path.h"
#include "BKE_attribute.hh"
#include "BKE_curve.hh"
#include "BKE_customdata.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_query.hh"
#include "BKE_mesh.hh"
#include "BKE_mesh_wrapper.hh"
#include "BKE_modifier.hh"
#include "BKE_object_deform.h"
#include "BKE_object_types.hh"
#include "UI_interface_layout.hh"
#include "UI_resources.hh"
#include "RNA_access.hh"
#include "RNA_prototypes.hh"
#include "MOD_ui_common.hh"
#include "DEG_depsgraph.hh"
#include "GEO_mesh_merge_by_distance.hh"

Go to the source code of this file.

Classes

struct  SortVertsElem

Functions

static void init_data (ModifierData *md)
static void foreach_ID_link (ModifierData *md, Object *ob, IDWalkFunc walk, void *user_data)
static void update_depsgraph (ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
BLI_INLINE float sum_v3 (const float v[3])
static int svert_sum_cmp (const void *e1, const void *e2)
static void svert_from_mvert (SortVertsElem *sv, const Span< float3 > vert_positions, const int i_begin, const int i_end)
static void dm_mvert_map_doubles (int *doubles_map, const Span< float3 > vert_positions, const int target_start, const int target_verts_num, const int source_start, const int source_verts_num, const float dist)
static void mesh_merge_transform (Mesh *result, Mesh *cap_mesh, const float cap_offset[4][4], uint cap_verts_index, uint cap_edges_index, int cap_loops_index, int cap_faces_index, int cap_nverts, int cap_nedges, int cap_nloops, int cap_nfaces, int *remap, int remap_len, MutableSpan< float3 > dst_vert_normals)
static MesharrayModifier_doArray (ArrayModifierData *amd, const ModifierEvalContext *ctx, Mesh *mesh)
static Meshmodify_mesh (ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
static bool is_disabled (const Scene *, ModifierData *md, bool)
static void panel_draw (const bContext *, Panel *panel)
static void relative_offset_header_draw (const bContext *, Panel *panel)
static void relative_offset_draw (const bContext *, Panel *panel)
static void constant_offset_header_draw (const bContext *, Panel *panel)
static void constant_offset_draw (const bContext *, Panel *panel)
static void object_offset_header_draw (const bContext *, Panel *panel)
static void object_offset_draw (const bContext *, Panel *panel)
static void symmetry_panel_header_draw (const bContext *, Panel *panel)
static void symmetry_panel_draw (const bContext *, Panel *panel)
static void uv_panel_draw (const bContext *, Panel *panel)
static void caps_panel_draw (const bContext *, Panel *panel)
static void panel_register (ARegionType *region_type)

Variables

ModifierTypeInfo modifierType_Array

Detailed Description

Array modifier: duplicates the object multiple times along an axis.

Definition in file MOD_array.cc.

Function Documentation

◆ arrayModifier_doArray()

Mesh * arrayModifier_doArray ( ArrayModifierData * amd,
const ModifierEvalContext * ctx,
Mesh * mesh )
static

Definition at line 377 of file MOD_array.cc.

References add_v3_v3(), CurveCache::anim_path_accum_length, blender::Vector< T, InlineBufferCapacity, Allocator >::as_mutable_span(), BKE_anim_path_get_length(), BKE_id_free(), BKE_mesh_new_nomain_from_template(), BKE_mesh_vert_normals_are_dirty(), BKE_mesh_wrapper_ensure_mdata(), BKE_modifier_get_evaluated_mesh_from_evaluated_object(), BKE_modifier_set_error(), BKE_object_defgroup_index_map_create(), CD_PROP_FLOAT2, compare_len_v3v3(), blender::bits::MutableBitSpan::copy_from(), blender::MutableSpan< T >::copy_from(), copy_m4_m4(), copy_v3_v3(), copy_vn_i(), Mesh::corner_data, Mesh::corners_num, ArrayModifierData::count, count, ArrayModifierData::curve_ob, CustomData_copy_data(), CustomData_get_layer_n_for_write(), CustomData_number_of_layers(), dm_mvert_map_doubles(), Mesh::edge_data, Mesh::edges_num, ELEM, ArrayModifierData::end_cap, Mesh::face_data, Mesh::faces_num, ArrayModifierData::fit_type, ArrayModifierData::flags, float, i, invert_m4_m4(), blender::Vector< T, InlineBufferCapacity, Allocator >::is_empty(), is_one_v3(), is_zero_v2(), len_v3(), ArrayModifierData::length, length(), mat4_to_scale(), mat4_to_size(), MEM_freeN(), MEM_malloc_arrayN(), ArrayModifierData::merge_dist, mesh_merge_transform(), blender::geometry::mesh_merge_verts(), blender::bke::mesh_vert_normals_assign(), MOD_ARR_FITCURVE, MOD_ARR_FITLENGTH, MOD_ARR_MERGE, MOD_ARR_MERGEFINAL, MOD_ARR_OFF_CONST, MOD_ARR_OFF_OBJ, MOD_ARR_OFF_RELATIVE, ArrayModifierData::modifier, mul_m4_m4m4(), mul_m4_series, mul_m4_v3(), mul_mat3_m4_v3(), normalize_v3(), OB_MESH, ModifierEvalContext::object, ArrayModifierData::offset, ArrayModifierData::offset_ob, ArrayModifierData::offset_type, blender::Vector< T, InlineBufferCapacity, Allocator >::reinitialize(), result, Mesh::runtime, Object::runtime, ArrayModifierData::scale, blender::bits::MutableBitSpan::set_all(), blender::Span< T >::size(), blender::bits::MutableBitSpan::slice(), ArrayModifierData::start_cap, blender::MutableSpan< T >::take_front(), Object::type, unit_m4(), ArrayModifierData::uv_offset, Mesh::vert_data, and Mesh::verts_num.

Referenced by modify_mesh().

◆ caps_panel_draw()

void caps_panel_draw ( const bContext * ,
Panel * panel )
static

◆ constant_offset_draw()

void constant_offset_draw ( const bContext * ,
Panel * panel )
static

◆ constant_offset_header_draw()

void constant_offset_header_draw ( const bContext * ,
Panel * panel )
static

◆ dm_mvert_map_doubles()

void dm_mvert_map_doubles ( int * doubles_map,
const Span< float3 > vert_positions,
const int target_start,
const int target_verts_num,
const int source_start,
const int source_verts_num,
const float dist )
static

Take as inputs two sets of verts, to be processed for detection of doubles and mapping. Each set of verts is defined by its start within mverts array and its verts_num; It builds a mapping for all vertices within source, to vertices within target, or -1 if no double found. The int doubles_map[verts_source_num] array must have been allocated by caller.

Definition at line 152 of file MOD_array.cc.

References SortVertsElem::co, compare_len_v3v3(), ELEM, float, len_squared_v3v3(), M_SQRT3, MEM_freeN(), MEM_malloc_arrayN(), SortVertsElem::sum_co, sum_v3(), svert_from_mvert(), svert_sum_cmp(), and SortVertsElem::vertex_num.

Referenced by arrayModifier_doArray().

◆ foreach_ID_link()

void foreach_ID_link ( ModifierData * md,
Object * ob,
IDWalkFunc walk,
void * user_data )
static

◆ init_data()

◆ is_disabled()

bool is_disabled ( const Scene * ,
ModifierData * md,
bool  )
static

◆ mesh_merge_transform()

◆ modify_mesh()

Mesh * modify_mesh ( ModifierData * md,
const ModifierEvalContext * ctx,
Mesh * mesh )
static

Definition at line 862 of file MOD_array.cc.

References arrayModifier_doArray().

◆ object_offset_draw()

void object_offset_draw ( const bContext * ,
Panel * panel )
static

◆ object_offset_header_draw()

void object_offset_header_draw ( const bContext * ,
Panel * panel )
static

Object offset in a subpanel for consistency with the other offset types.

Definition at line 965 of file MOD_array.cc.

References Panel::layout, modifier_panel_get_property_pointers(), uiLayout::prop(), ptr, and UI_ITEM_NONE.

Referenced by panel_register().

◆ panel_draw()

◆ panel_register()

◆ relative_offset_draw()

void relative_offset_draw ( const bContext * ,
Panel * panel )
static

◆ relative_offset_header_draw()

void relative_offset_header_draw ( const bContext * ,
Panel * panel )
static

◆ sum_v3()

BLI_INLINE float sum_v3 ( const float v[3])

Definition at line 105 of file MOD_array.cc.

References BLI_INLINE, and v.

Referenced by dm_mvert_map_doubles(), and svert_from_mvert().

◆ svert_from_mvert()

void svert_from_mvert ( SortVertsElem * sv,
const Span< float3 > vert_positions,
const int i_begin,
const int i_end )
static

◆ svert_sum_cmp()

int svert_sum_cmp ( const void * e1,
const void * e2 )
static

Definition at line 117 of file MOD_array.cc.

References SortVertsElem::sum_co.

Referenced by dm_mvert_map_doubles().

◆ symmetry_panel_draw()

void symmetry_panel_draw ( const bContext * ,
Panel * panel )
static

◆ symmetry_panel_header_draw()

void symmetry_panel_header_draw ( const bContext * ,
Panel * panel )
static

◆ update_depsgraph()

◆ uv_panel_draw()

void uv_panel_draw ( const bContext * ,
Panel * panel )
static

Variable Documentation

◆ modifierType_Array

ModifierTypeInfo modifierType_Array

Definition at line 1063 of file MOD_array.cc.