Blender  V3.3
Classes | Typedefs | Functions | Variables
MOD_array.c File Reference
#include "MEM_guardedalloc.h"
#include "BLI_utildefines.h"
#include "BLI_math.h"
#include "BLT_translation.h"
#include "DNA_curve_types.h"
#include "DNA_defaults.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_screen_types.h"
#include "BKE_anim_path.h"
#include "BKE_context.h"
#include "BKE_curve.h"
#include "BKE_displist.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_object_deform.h"
#include "BKE_screen.h"
#include "UI_interface.h"
#include "UI_resources.h"
#include "RNA_access.h"
#include "RNA_prototypes.h"
#include "MOD_ui_common.h"
#include "MOD_util.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"

Go to the source code of this file.

Classes

struct  SortVertsElem
 

Typedefs

typedef struct SortVertsElem SortVertsElem
 

Functions

static void initData (ModifierData *md)
 
static void foreachIDLink (ModifierData *md, Object *ob, IDWalkFunc walk, void *userData)
 
static void updateDepsgraph (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 MVert *mv, const int i_begin, const int i_end)
 
static void dm_mvert_map_doubles (int *doubles_map, const MVert *mverts, 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_polys_index, int cap_nverts, int cap_nedges, int cap_nloops, int cap_npolys, int *remap, int remap_len, const bool recalc_normals_later)
 
static Mesh * arrayModifier_doArray (ArrayModifierData *amd, const ModifierEvalContext *ctx, Mesh *mesh)
 
static Mesh * modifyMesh (ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
 
static bool isDisabled (const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams))
 
static void panel_draw (const bContext *UNUSED(C), Panel *panel)
 
static void relative_offset_header_draw (const bContext *UNUSED(C), Panel *panel)
 
static void relative_offset_draw (const bContext *UNUSED(C), Panel *panel)
 
static void constant_offset_header_draw (const bContext *UNUSED(C), Panel *panel)
 
static void constant_offset_draw (const bContext *UNUSED(C), Panel *panel)
 
static void object_offset_header_draw (const bContext *UNUSED(C), Panel *panel)
 
static void object_offset_draw (const bContext *UNUSED(C), Panel *panel)
 
static void symmetry_panel_header_draw (const bContext *UNUSED(C), Panel *panel)
 
static void symmetry_panel_draw (const bContext *UNUSED(C), Panel *panel)
 
static void uv_panel_draw (const bContext *UNUSED(C), Panel *panel)
 
static void caps_panel_draw (const bContext *UNUSED(C), Panel *panel)
 
static void panelRegister (ARegionType *region_type)
 

Variables

ModifierTypeInfo modifierType_Array
 

Detailed Description

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

Definition in file MOD_array.c.

Typedef Documentation

◆ SortVertsElem

typedef struct SortVertsElem SortVertsElem

Function Documentation

◆ arrayModifier_doArray()

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

Definition at line 353 of file MOD_array.c.

References add_v3_v3(), CurveCache::anim_path_accum_length, BKE_anim_path_get_length(), BKE_mesh_merge_verts(), BKE_mesh_new_nomain_from_template(), BKE_mesh_vertex_normals_are_dirty(), BKE_mesh_vertex_normals_clear_dirty(), BKE_mesh_vertex_normals_ensure(), BKE_mesh_vertex_normals_for_write(), BKE_modifier_get_evaluated_mesh_from_evaluated_object(), BKE_modifier_set_error(), BKE_object_defgroup_index_map_create(), Freestyle::c, CD_MEDGE, CD_MLOOPUV, CD_MPOLY, CD_MVERT, MVert::co, compare_len_v3v3(), copy_m4_m4(), copy_v3_v3(), copy_vn_i(), count, ArrayModifierData::count, Object_Runtime::curve_cache, ArrayModifierData::curve_ob, CustomData_copy_data(), CustomData_get_layer_n(), CustomData_has_layer(), CustomData_number_of_layers(), dm_mvert_map_doubles(), MLoop::e, Mesh::edata, ELEM, ArrayModifierData::end_cap, ArrayModifierData::fit_type, ArrayModifierData::flags, float(), INIT_MINMAX, invert_m4_m4(), is_one_v3(), is_zero_v2(), Mesh::ldata, len_v3(), blender::math::length(), ArrayModifierData::length, MPoly::loopstart, mat4_to_scale(), mat4_to_size(), max, Mesh::medge, MEM_freeN, MEM_malloc_arrayN, ArrayModifierData::merge_dist, mesh, mesh_merge_transform(), MESH_MERGE_VERTS_DUMP_IF_EQUAL, min, minmax_v3v3_v3(), Mesh::mloop, 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, Mesh::mpoly, mul_m4_m4m4(), mul_m4_series, mul_m4_v3(), mul_mat3_m4_v3(), Mesh::mvert, normalize_v3(), NULL, OB_MESH, ModifierEvalContext::object, Object::obmat, offset, ArrayModifierData::offset, ArrayModifierData::offset_ob, ArrayModifierData::offset_type, Mesh::pdata, result, Object::runtime, ArrayModifierData::scale, ArrayModifierData::start_cap, Mesh::totedge, Mesh::totloop, Mesh::totpoly, Mesh::totvert, Object::type, unit_m4(), MLoopUV::uv, ArrayModifierData::uv_offset, MLoop::v, MEdge::v1, MEdge::v2, and Mesh::vdata.

Referenced by modifyMesh().

◆ caps_panel_draw()

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

◆ constant_offset_draw()

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

◆ constant_offset_header_draw()

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

Definition at line 881 of file MOD_array.c.

References Panel::layout, modifier_panel_get_property_pointers(), NULL, ptr, and uiItemR().

Referenced by panelRegister().

◆ dm_mvert_map_doubles()

static void dm_mvert_map_doubles ( int *  doubles_map,
const MVert *  mverts,
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 147 of file MOD_array.c.

References MVert::co, 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().

◆ foreachIDLink()

static void foreachIDLink ( ModifierData *  md,
Object *  ob,
IDWalkFunc  walk,
void *  userData 
)
static

◆ initData()

static void initData ( ModifierData *  md)
static

◆ isDisabled()

static bool isDisabled ( const struct Scene *  UNUSEDscene,
ModifierData *  md,
bool   UNUSEDuseRenderParams 
)
static

◆ mesh_merge_transform()

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_polys_index,
int  cap_nverts,
int  cap_nedges,
int  cap_nloops,
int  cap_npolys,
int *  remap,
int  remap_len,
const bool  recalc_normals_later 
)
static

◆ modifyMesh()

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

Definition at line 802 of file MOD_array.c.

References arrayModifier_doArray(), and mesh.

◆ object_offset_draw()

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

◆ object_offset_header_draw()

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

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

Definition at line 907 of file MOD_array.c.

References Panel::layout, modifier_panel_get_property_pointers(), NULL, ptr, and uiItemR().

Referenced by panelRegister().

◆ panel_draw()

static void panel_draw ( const bContext *  UNUSEDC,
Panel *  panel 
)
static

◆ panelRegister()

static void panelRegister ( ARegionType *  region_type)
static

◆ relative_offset_draw()

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

◆ relative_offset_header_draw()

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

Definition at line 858 of file MOD_array.c.

References Panel::layout, modifier_panel_get_property_pointers(), NULL, ptr, and uiItemR().

Referenced by panelRegister().

◆ sum_v3()

BLI_INLINE float sum_v3 ( const float  v[3])

Definition at line 100 of file MOD_array.c.

References v.

Referenced by dm_mvert_map_doubles(), and svert_from_mvert().

◆ svert_from_mvert()

static void svert_from_mvert ( SortVertsElem *  sv,
const MVert *  mv,
const int  i_begin,
const int  i_end 
)
static

◆ svert_sum_cmp()

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

Definition at line 112 of file MOD_array.c.

References SortVertsElem::sum_co.

Referenced by dm_mvert_map_doubles().

◆ symmetry_panel_draw()

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

◆ symmetry_panel_header_draw()

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

Definition at line 930 of file MOD_array.c.

References IFACE_, Panel::layout, modifier_panel_get_property_pointers(), NULL, ptr, and uiItemR().

Referenced by panelRegister().

◆ updateDepsgraph()

static void updateDepsgraph ( ModifierData *  md,
const ModifierUpdateDepsgraphContext *  ctx 
)
static

◆ uv_panel_draw()

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

Variable Documentation

◆ modifierType_Array

ModifierTypeInfo modifierType_Array

Definition at line 1004 of file MOD_array.c.