Blender  V2.93
Classes | Macros | Typedefs | Functions | Variables
bmesh_operators.c File Reference
#include "MEM_guardedalloc.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_memarena.h"
#include "BLI_mempool.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "bmesh.h"
#include "intern/bmesh_private.h"

Go to the source code of this file.

Classes

struct  BMOpError
 

Macros

#define NEXT_CHAR(fmt)   ((fmt)[0] != 0 ? (fmt)[1] : 0)
 
#define GOTO_ERROR(reason)
 

Typedefs

typedef struct BMOpError BMOpError
 

Functions

static void bmo_flag_layer_alloc (BMesh *bm)
 ALLOC/FREE FLAG LAYER. More...
 
static void bmo_flag_layer_free (BMesh *bm)
 
static void bmo_flag_layer_clear (BMesh *bm)
 
static int bmo_name_to_slotcode (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
 
static int bmo_name_to_slotcode_check (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
 
 BLI_STATIC_ASSERT (ARRAY_SIZE(bmo_error_messages)==BMERR_TOTAL, "message mismatch")
 
void BMO_op_flag_enable (BMesh *UNUSED(bm), BMOperator *op, const int op_flag)
 
void BMO_op_flag_disable (BMesh *UNUSED(bm), BMOperator *op, const int op_flag)
 
void BMO_push (BMesh *bm, BMOperator *UNUSED(op))
 BMESH OPSTACK PUSH. More...
 
void BMO_pop (BMesh *bm)
 BMESH OPSTACK POP. More...
 
static void bmo_op_slots_init (const BMOSlotType *slot_types, BMOpSlot *slot_args)
 
static void bmo_op_slots_free (const BMOSlotType *slot_types, BMOpSlot *slot_args)
 
void BMO_op_init (BMesh *bm, BMOperator *op, const int flag, const char *opname)
 BMESH OPSTACK INIT OP. More...
 
void BMO_op_exec (BMesh *bm, BMOperator *op)
 BMESH OPSTACK EXEC OP. More...
 
void BMO_op_finish (BMesh *bm, BMOperator *op)
 BMESH OPSTACK FINISH OP. More...
 
bool BMO_slot_exists (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
 BMESH OPSTACK HAS SLOT. More...
 
BMOpSlotBMO_slot_get (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
 BMESH OPSTACK GET SLOT. More...
 
void _bmo_slot_copy (BMOpSlot slot_args_src[BMO_OP_MAX_SLOTS], const char *slot_name_src, BMOpSlot slot_args_dst[BMO_OP_MAX_SLOTS], const char *slot_name_dst, struct MemArena *arena_dst)
 BMESH OPSTACK COPY SLOT. More...
 
void BMO_slot_float_set (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const float f)
 
void BMO_slot_int_set (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const int i)
 
void BMO_slot_bool_set (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const bool i)
 
void BMO_slot_mat_set (BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const float *mat, int size)
 
void BMO_slot_mat4_get (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, float r_mat[4][4])
 
void BMO_slot_mat3_get (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, float r_mat[3][3])
 
void BMO_slot_ptr_set (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, void *p)
 
void BMO_slot_vec_set (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const float vec[3])
 
float BMO_slot_float_get (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
 
int BMO_slot_int_get (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
 
bool BMO_slot_bool_get (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
 
void * BMO_slot_as_arrayN (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, int *len)
 
void * BMO_slot_ptr_get (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
 
void BMO_slot_vec_get (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, float r_vec[3])
 
static int bmo_mesh_flag_count (BMesh *bm, const char htype, const short oflag, const bool test_for_enabled)
 
int BMO_mesh_enabled_flag_count (BMesh *bm, const char htype, const short oflag)
 
int BMO_mesh_disabled_flag_count (BMesh *bm, const char htype, const short oflag)
 
void BMO_mesh_flag_disable_all (BMesh *bm, BMOperator *UNUSED(op), const char htype, const short oflag)
 
void BMO_mesh_selected_remap (BMesh *bm, BMOpSlot *slot_vert_map, BMOpSlot *slot_edge_map, BMOpSlot *slot_face_map, const bool check_select)
 
int BMO_slot_buffer_count (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
 
int BMO_slot_map_count (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
 
void BMO_slot_map_insert (BMOperator *op, BMOpSlot *slot, const void *element, const void *data)
 
void BMO_slot_map_to_flag (BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
 
void * BMO_slot_buffer_alloc (BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const int len)
 
void BMO_slot_buffer_from_all (BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype)
 BMO_ALL_TO_SLOT. More...
 
static void bmo_slot_buffer_from_hflag (BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag, const bool test_for_enabled)
 BMO_HEADERFLAG_TO_SLOT. More...
 
void BMO_slot_buffer_from_enabled_hflag (BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag)
 
void BMO_slot_buffer_from_disabled_hflag (BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag)
 
void BMO_slot_buffer_from_single (BMOperator *op, BMOpSlot *slot, BMHeader *ele)
 
void BMO_slot_buffer_from_array (BMOperator *op, BMOpSlot *slot, BMHeader **ele_buffer, int ele_buffer_len)
 
void * BMO_slot_buffer_get_single (BMOpSlot *slot)
 
void _bmo_slot_buffer_append (BMOpSlot slot_args_dst[BMO_OP_MAX_SLOTS], const char *slot_name_dst, BMOpSlot slot_args_src[BMO_OP_MAX_SLOTS], const char *slot_name_src, struct MemArena *arena_dst)
 
static void bmo_slot_buffer_from_flag (BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag, const bool test_for_enabled)
 BMO_FLAG_TO_SLOT. More...
 
void BMO_slot_buffer_from_enabled_flag (BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
 
void BMO_slot_buffer_from_disabled_flag (BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
 
void BMO_slot_buffer_hflag_enable (BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag, const bool do_flush)
 BMO_FLAG_BUFFER. More...
 
void BMO_slot_buffer_hflag_disable (BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag, const bool do_flush)
 BMO_FLAG_BUFFER. More...
 
void BMO_slot_buffer_flag_enable (BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
 BMO_FLAG_BUFFER. More...
 
void BMO_slot_buffer_flag_disable (BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
 BMO_FLAG_BUFFER. More...
 
void * BMO_slot_buffer_get_first (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
 
void * BMO_iter_new (BMOIter *iter, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char restrictmask)
 New Iterator. More...
 
void * BMO_iter_step (BMOIter *iter)
 
void ** BMO_iter_map_value_p (BMOIter *iter)
 
void * BMO_iter_map_value_ptr (BMOIter *iter)
 
float BMO_iter_map_value_float (BMOIter *iter)
 
int BMO_iter_map_value_int (BMOIter *iter)
 
bool BMO_iter_map_value_bool (BMOIter *iter)
 
void BMO_error_clear (BMesh *bm)
 
void BMO_error_raise (BMesh *bm, BMOperator *owner, int errcode, const char *msg)
 
bool BMO_error_occurred (BMesh *bm)
 
int BMO_error_get (BMesh *bm, const char **msg, BMOperator **op)
 
int BMO_error_pop (BMesh *bm, const char **msg, BMOperator **op)
 
int BMO_opcode_from_opname (const char *opname)
 
static int BMO_opcode_from_opname_check (const char *opname)
 
bool BMO_op_vinitf (BMesh *bm, BMOperator *op, const int flag, const char *_fmt, va_list vlist)
 Format Strings for BMOperator Initialization. More...
 
bool BMO_op_initf (BMesh *bm, BMOperator *op, const int flag, const char *fmt,...)
 
bool BMO_op_callf (BMesh *bm, const int flag, const char *fmt,...)
 

Variables

static const char * bmo_error_messages []
 
const int BMO_OPSLOT_TYPEINFO [BMO_OP_SLOT_TOTAL_TYPES]
 

Detailed Description

BMesh operator access.

Definition in file bmesh_operators.c.

Macro Definition Documentation

◆ GOTO_ERROR

#define GOTO_ERROR (   reason)
Value:
{ \
err_reason = reason; \
lineno = __LINE__; \
goto error; \
} \
(void)0
static void error(const char *str)
Definition: meshlaplacian.c:65

◆ NEXT_CHAR

#define NEXT_CHAR (   fmt)    ((fmt)[0] != 0 ? (fmt)[1] : 0)

Definition at line 1628 of file bmesh_operators.c.

Typedef Documentation

◆ BMOpError

typedef struct BMOpError BMOpError

Function Documentation

◆ _bmo_slot_buffer_append()

void _bmo_slot_buffer_append ( BMOpSlot  slot_args_dst[BMO_OP_MAX_SLOTS],
const char *  slot_name_dst,
BMOpSlot  slot_args_src[BMO_OP_MAX_SLOTS],
const char *  slot_name_src,
struct MemArena arena_dst 
)

Copies the values from another slot to the end of the output slot.

Definition at line 1004 of file bmesh_operators.c.

References _bmo_slot_copy(), BLI_assert, BLI_memarena_alloc(), BMO_OP_SLOT_ELEMENT_BUF, BMO_OPSLOT_TYPEINFO, BMO_slot_get(), BMOpSlot::buf, BMOpSlot::data, BMOpSlot::len, and BMOpSlot::slot_type.

◆ _bmo_slot_copy()

void _bmo_slot_copy ( BMOpSlot  slot_args_src[BMO_OP_MAX_SLOTS],
const char *  slot_name_src,
BMOpSlot  slot_args_dst[BMO_OP_MAX_SLOTS],
const char *  slot_name_dst,
struct MemArena arena_dst 
)

◆ BLI_STATIC_ASSERT()

BLI_STATIC_ASSERT ( ARRAY_SIZE(bmo_error_messages = =BMERR_TOTAL,
"message mismatch"   
)

◆ BMO_error_clear()

void BMO_error_clear ( BMesh bm)

◆ BMO_error_get()

int BMO_error_get ( BMesh bm,
const char **  msg,
BMOperator **  op 
)

◆ BMO_error_occurred()

bool BMO_error_occurred ( BMesh bm)

◆ BMO_error_pop()

int BMO_error_pop ( BMesh bm,
const char **  msg,
BMOperator **  op 
)

◆ BMO_error_raise()

void BMO_error_raise ( BMesh bm,
BMOperator owner,
int  errcode,
const char *  msg 
)

◆ bmo_flag_layer_alloc()

static void bmo_flag_layer_alloc ( BMesh bm)
static

ALLOC/FREE FLAG LAYER.

Used by operator stack to free/allocate private flag data. This is allocated using a mempool so the allocation/frees should be quite fast.

BMESH_TODO: Investigate not freeing flag layers until all operators have been executed. This would save a lot of realloc potentially.

Definition at line 1275 of file bmesh_operators.c.

References BMVert_OFlag::base, BMEdge_OFlag::base, BMFace_OFlag::base, BLI_mempool_calloc(), BLI_mempool_create(), BLI_mempool_destroy(), BLI_MEMPOOL_NOP, bm, BM_EDGE, BM_EDGES_OF_MESH, BM_ELEM_API_FLAG_CLEAR, BM_elem_index_set, BM_FACE, BM_FACES_OF_MESH, BM_ITER_MESH_INDEX, BM_VERT, BM_VERTS_OF_MESH, BMesh::elem_index_dirty, BMesh::etoolflagpool, BMesh::ftoolflagpool, BMVert_OFlag::oflags, BMEdge_OFlag::oflags, BMFace_OFlag::oflags, BMesh::totedge, BMesh::totface, BMesh::totflags, BMesh::totvert, and BMesh::vtoolflagpool.

Referenced by BMO_push().

◆ bmo_flag_layer_clear()

static void bmo_flag_layer_clear ( BMesh bm)
static

◆ bmo_flag_layer_free()

static void bmo_flag_layer_free ( BMesh bm)
static

◆ BMO_iter_map_value_bool()

bool BMO_iter_map_value_bool ( BMOIter iter)

◆ BMO_iter_map_value_float()

float BMO_iter_map_value_float ( BMOIter iter)

◆ BMO_iter_map_value_int()

int BMO_iter_map_value_int ( BMOIter iter)

◆ BMO_iter_map_value_p()

void** BMO_iter_map_value_p ( BMOIter iter)

Returns a pointer to the key-value when iterating over mappings. remember for pointer maps this will be a pointer to a pointer.

Definition at line 1531 of file bmesh_operators.c.

References BMOIter::val.

◆ BMO_iter_map_value_ptr()

void* BMO_iter_map_value_ptr ( BMOIter iter)

◆ BMO_iter_new()

void* BMO_iter_new ( BMOIter iter,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  restrictmask 
)

New Iterator.

Parameters
restrictmaskrestricts the iteration to certain element types (e.g. combination of BM_VERT, BM_EDGE, BM_FACE), if iterating over an element buffer (not a mapping).

Definition at line 1454 of file bmesh_operators.c.

References BLI_assert, BLI_ghashIterator_init(), BMO_iter_step(), BMO_OP_SLOT_ELEMENT_BUF, BMO_OP_SLOT_MAPPING, BMO_slot_get(), BMOIter::cur, BMOpSlot::data, eBMOpSlotSubType_Union::elem, BMOpSlot::ghash, BMOIter::giter, BMOIter::restrictmask, BMOIter::slot, BMOpSlot::slot_subtype, and BMOpSlot::slot_type.

Referenced by bmesh_find_doubles_common(), bmo_extrude_edge_only_exec(), bmo_extrude_face_region_exec(), bmo_extrude_vert_indiv_exec(), BMO_iter_as_array(), and BMO_iter_as_arrayN().

◆ BMO_iter_step()

void* BMO_iter_step ( BMOIter iter)

◆ BMO_mesh_disabled_flag_count()

int BMO_mesh_disabled_flag_count ( BMesh bm,
const char  htype,
const short  oflag 
)

Definition at line 616 of file bmesh_operators.c.

References bm, bmo_mesh_flag_count(), and oflag.

Referenced by bmo_slot_buffer_from_flag().

◆ BMO_mesh_enabled_flag_count()

int BMO_mesh_enabled_flag_count ( BMesh bm,
const char  htype,
const short  oflag 
)

Definition at line 611 of file bmesh_operators.c.

References bm, bmo_mesh_flag_count(), and oflag.

Referenced by bmo_slot_buffer_from_flag().

◆ bmo_mesh_flag_count()

static int bmo_mesh_flag_count ( BMesh bm,
const char  htype,
const short  oflag,
const bool  test_for_enabled 
)
static

◆ BMO_mesh_flag_disable_all()

void BMO_mesh_flag_disable_all ( BMesh bm,
BMOperator UNUSEDop,
const char  htype,
const short  oflag 
)

◆ BMO_mesh_selected_remap()

void BMO_mesh_selected_remap ( BMesh bm,
BMOpSlot slot_vert_map,
BMOpSlot slot_edge_map,
BMOpSlot slot_face_map,
const bool  check_select 
)

◆ bmo_name_to_slotcode()

static int bmo_name_to_slotcode ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  identifier 
)
static

Definition at line 1630 of file bmesh_operators.c.

References MAX_SLOTNAME, and STREQLEN.

Referenced by bmo_name_to_slotcode_check(), and BMO_slot_exists().

◆ bmo_name_to_slotcode_check()

static int bmo_name_to_slotcode_check ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  identifier 
)
static

Definition at line 1645 of file bmesh_operators.c.

References bmo_name_to_slotcode().

Referenced by BMO_op_vinitf(), and BMO_slot_get().

◆ BMO_op_callf()

bool BMO_op_callf ( BMesh bm,
const int  flag,
const char *  fmt,
  ... 
)

◆ BMO_op_exec()

void BMO_op_exec ( BMesh bm,
BMOperator op 
)

BMESH OPSTACK EXEC OP.

Executes a passed in operator.

This handles the allocation and freeing of temporary flag layers and starting/stopping the modeling loop. Can be called from other operators exec callbacks as well.

Definition at line 211 of file bmesh_operators.c.

References bm, BM_mesh_elem_toolflags_ensure(), bmesh_edit_begin(), bmesh_edit_end(), BMO_pop(), BMO_push(), BMOperator::exec, BMesh::toolflag_index, and BMOperator::type_flag.

Referenced by bm_bridge_splice_loops(), BM_mesh_esubdivide(), bm_vert_connect_pair(), bmo_collapse_exec(), bmo_connect_vert_pair_exec(), bmo_contextual_create_exec(), bmo_create_icosphere_exec(), bmo_create_uvsphere_exec(), bmo_edgenet_fill_exec(), bmo_extrude_edge_only_exec(), bmo_extrude_face_region_exec(), bmo_holes_fill_exec(), bmo_mirror_exec(), BMO_op_callf(), bmo_pointmerge_exec(), bmo_remove_doubles_exec(), bmo_solidify_face_region_exec(), bmo_spin_exec(), bmo_split_exec(), bmo_symmetrize_exec(), bmo_triangle_fill_exec(), BPy_BMO_call(), bridge_loop_pair(), build_hull(), collapse_face_corners(), edbm_add_edge_face_exec(), EDBM_automerge(), EDBM_automerge_and_split(), edbm_bevel_calc(), edbm_bridge_edge_loops_for_single_editmesh(), edbm_connect_vert_pair(), edbm_dupli_extrude_cursor_invoke(), edbm_duplicate_exec(), edbm_edge_rotate_selected_exec(), edbm_extrude_discrete_faces(), edbm_extrude_edges_indiv(), edbm_extrude_ex(), edbm_extrude_verts_indiv(), edbm_fill_exec(), edbm_fill_grid_exec(), edbm_inset_calc(), edbm_knife_cut_exec(), edbm_offset_edgeloop_exec(), EDBM_op_call_and_selectf(), EDBM_op_call_silentf(), EDBM_op_callf(), edbm_poke_face_exec(), edbm_quads_convert_to_tris_exec(), edbm_remove_doubles_exec(), edbm_reverse_colors_exec(), edbm_reverse_uvs_exec(), edbm_rotate_colors_exec(), edbm_rotate_uvs_exec(), edbm_screw_exec(), EDBM_select_less(), EDBM_select_more(), edbm_solidify_exec(), edbm_spin_exec(), edbm_split_exec(), edbm_unsubdivide_exec(), edbm_wireframe_exec(), lineart_geometry_object_load(), mesh_bisect_exec(), mesh_symmetrize_exec(), and skin_fix_hole_no_good_verts().

◆ BMO_op_finish()

void BMO_op_finish ( BMesh bm,
BMOperator op 
)

◆ BMO_op_flag_disable()

void BMO_op_flag_disable ( BMesh UNUSEDbm,
BMOperator op,
const int  op_flag 
)

Definition at line 79 of file bmesh_operators.c.

References BMOperator::flag.

◆ BMO_op_flag_enable()

void BMO_op_flag_enable ( BMesh UNUSEDbm,
BMOperator op,
const int  op_flag 
)

Definition at line 74 of file bmesh_operators.c.

References BMOperator::flag.

◆ BMO_op_init()

void BMO_op_init ( BMesh bm,
BMOperator op,
const int  flag,
const char *  opname 
)

◆ BMO_op_initf()

bool BMO_op_initf ( BMesh bm,
BMOperator op,
const int  flag,
const char *  fmt,
  ... 
)

◆ bmo_op_slots_free()

static void bmo_op_slots_free ( const BMOSlotType slot_types,
BMOpSlot slot_args 
)
static

◆ bmo_op_slots_init()

static void bmo_op_slots_init ( const BMOSlotType slot_types,
BMOpSlot slot_args 
)
static

◆ BMO_op_vinitf()

bool BMO_op_vinitf ( BMesh bm,
BMOperator op,
const int  flag,
const char *  _fmt,
va_list  vlist 
)

Format Strings for BMOperator Initialization.

This system is used to execute or initialize an operator, using a formatted-string system.

The basic format for the format string is: [operatorname] [slot_name]=%[code] [slot_name]=%[code]

Example:

"delete context=%i geom=%hv",
@ BM_ELEM_SELECT
Definition: bmesh_class.h:471
ATTR_WARN_UNUSED_RESULT BMesh * bm
@ DEL_ONLYFACES
#define BMO_FLAG_DEFAULTS
bool BMO_op_callf(BMesh *bm, const int flag, const char *fmt,...)

Primitive Types

Pass an existing slot which is copied to either an input or output slot. Taking the operator and slot-name pair of args (BMOperator *, const char *).

  • s - slot_in (lower case)
  • S - slot_out (upper case) Element Buffer (BMO_OP_SLOT_ELEMENT_BUF)
  • e - single element vert/edge/face (use with BMO_OP_SLOT_SUBTYPE_ELEM_IS_SINGLE).
  • eb - elem buffer, take an array and a length.
  • av - all verts
  • ae - all edges
  • af - all faces
  • hv - header flagged verts (hflag)
  • he - header flagged edges (hflag)
  • hf - header flagged faces (hflag)
  • Hv - header flagged verts (hflag off)
  • He - header flagged edges (hflag off)
  • Hf - header flagged faces (hflag off)
  • fv - flagged verts (oflag)
  • fe - flagged edges (oflag)
  • ff - flagged faces (oflag)
  • Fv - flagged verts (oflag off)
  • Fe - flagged edges (oflag off)
  • Ff - flagged faces (oflag off)
Note
The common v/e/f suffix can be mixed, so avef is can be used for all verts, edges and faces. Order is not important so Hfev is also valid (all un-flagged verts, edges and faces).

Definition at line 1737 of file bmesh_operators.c.

References BLI_assert, BLI_strdup(), BLI_strncpy(), bm, BM_EDGE, BM_ELEM_HIDDEN, BM_FACE, BM_VERT, BMO_FLAG_RESPECT_HIDE, bmo_name_to_slotcode_check(), BMO_op_finish(), BMO_op_init(), BMO_opcode_from_opname_check(), BMO_slot_bool_set(), BMO_slot_buffer_from_all(), BMO_slot_buffer_from_array(), BMO_slot_buffer_from_disabled_flag(), BMO_slot_buffer_from_disabled_hflag(), BMO_slot_buffer_from_enabled_flag(), BMO_slot_buffer_from_enabled_hflag(), BMO_slot_buffer_from_single(), BMO_slot_copy, BMO_slot_float_set(), BMO_slot_get(), BMO_slot_int_set(), BMO_slot_mat_set(), BMO_slot_ptr_set(), BMO_slot_vec_set(), Freestyle::c, error(), BMOperator::flag, GOTO_ERROR, MEM_freeN, NEXT_CHAR, BMOpError::op, pos, size(), BMOperator::slots_in, BMOperator::slots_out, state, type, and UNLIKELY.

Referenced by BMO_op_callf(), BMO_op_initf(), EDBM_op_call_and_selectf(), EDBM_op_call_silentf(), EDBM_op_callf(), and EDBM_op_init().

◆ BMO_opcode_from_opname()

int BMO_opcode_from_opname ( const char *  opname)

◆ BMO_opcode_from_opname_check()

static int BMO_opcode_from_opname_check ( const char *  opname)
static

Definition at line 1671 of file bmesh_operators.c.

References BMO_opcode_from_opname().

Referenced by BMO_op_vinitf().

◆ BMO_pop()

void BMO_pop ( BMesh bm)

BMESH OPSTACK POP.

Pops the opstack one level and frees a flag layer if appropriate

BMESH_TODO: investigate NOT freeing flag layers.

Definition at line 111 of file bmesh_operators.c.

References bm, bmo_flag_layer_free(), and BMesh::toolflag_index.

Referenced by BMO_op_exec(), build_skin(), and walker_deselect_nth().

◆ BMO_push()

void BMO_push ( BMesh bm,
BMOperator UNUSEDop 
)

BMESH OPSTACK PUSH.

Pushes the opstack down one level and allocates a new flag layer if appropriate.

Definition at line 89 of file bmesh_operators.c.

References BLI_assert, bm, bmo_flag_layer_alloc(), bmo_flag_layer_clear(), BMesh::toolflag_index, and BMesh::totflags.

Referenced by BMO_op_exec().

◆ BMO_slot_as_arrayN()

void* BMO_slot_as_arrayN ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
int *  len 
)

◆ BMO_slot_bool_get()

bool BMO_slot_bool_get ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name 
)

◆ BMO_slot_bool_set()

void BMO_slot_bool_set ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const bool  i 
)

◆ BMO_slot_buffer_alloc()

void* BMO_slot_buffer_alloc ( BMOperator op,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const int  len 
)

◆ BMO_slot_buffer_count()

int BMO_slot_buffer_count ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name 
)

◆ BMO_slot_buffer_flag_disable()

void BMO_slot_buffer_flag_disable ( BMesh bm,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const short  oflag 
)

◆ BMO_slot_buffer_flag_enable()

void BMO_slot_buffer_flag_enable ( BMesh bm,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const short  oflag 
)

◆ BMO_slot_buffer_from_all()

void BMO_slot_buffer_from_all ( BMesh bm,
BMOperator op,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype 
)

BMO_ALL_TO_SLOT.

Copies all elements of a certain type into an operator slot.

Definition at line 815 of file bmesh_operators.c.

References BLI_assert, bm, BM_ALL_NOLOOP, BM_EDGE, BM_EDGES_OF_MESH, BM_FACE, BM_FACES_OF_MESH, BM_ITER_MESH, BM_VERT, BM_VERTS_OF_MESH, BMO_OP_SLOT_ELEMENT_BUF, BMO_slot_buffer_alloc(), BMO_slot_get(), output, BMesh::totedge, BMesh::totface, and BMesh::totvert.

Referenced by BMO_op_vinitf(), and bpy_slot_from_py().

◆ BMO_slot_buffer_from_array()

void BMO_slot_buffer_from_array ( BMOperator op,
BMOpSlot slot,
BMHeader **  ele_buffer,
int  ele_buffer_len 
)

◆ BMO_slot_buffer_from_disabled_flag()

void BMO_slot_buffer_from_disabled_flag ( BMesh bm,
BMOperator op,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const short  oflag 
)

Definition at line 1119 of file bmesh_operators.c.

References bm, bmo_slot_buffer_from_flag(), and oflag.

Referenced by BMO_op_vinitf().

◆ BMO_slot_buffer_from_disabled_hflag()

void BMO_slot_buffer_from_disabled_hflag ( BMesh bm,
BMOperator op,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const char  hflag 
)

Definition at line 951 of file bmesh_operators.c.

References bm, and bmo_slot_buffer_from_hflag().

Referenced by BMO_op_vinitf().

◆ BMO_slot_buffer_from_enabled_flag()

void BMO_slot_buffer_from_enabled_flag ( BMesh bm,
BMOperator op,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const short  oflag 
)

◆ BMO_slot_buffer_from_enabled_hflag()

void BMO_slot_buffer_from_enabled_hflag ( BMesh bm,
BMOperator op,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const char  hflag 
)

◆ bmo_slot_buffer_from_flag()

static void bmo_slot_buffer_from_flag ( BMesh bm,
BMOperator op,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const short  oflag,
const bool  test_for_enabled 
)
static

◆ bmo_slot_buffer_from_hflag()

static void bmo_slot_buffer_from_hflag ( BMesh bm,
BMOperator op,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const char  hflag,
const bool  test_for_enabled 
)
static

◆ BMO_slot_buffer_from_single()

void BMO_slot_buffer_from_single ( BMOperator op,
BMOpSlot slot,
BMHeader ele 
)

◆ BMO_slot_buffer_get_first()

void* BMO_slot_buffer_get_first ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name 
)

◆ BMO_slot_buffer_get_single()

void* BMO_slot_buffer_get_single ( BMOpSlot slot)

◆ BMO_slot_buffer_hflag_disable()

void BMO_slot_buffer_hflag_disable ( BMesh bm,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const char  hflag,
const bool  do_flush 
)

◆ BMO_slot_buffer_hflag_enable()

void BMO_slot_buffer_hflag_enable ( BMesh bm,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const char  hflag,
const bool  do_flush 
)

◆ BMO_slot_exists()

bool BMO_slot_exists ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  identifier 
)

BMESH OPSTACK HAS SLOT.

Returns
Success if the slot if found.

Definition at line 257 of file bmesh_operators.c.

References bmo_name_to_slotcode().

Referenced by bmesh_find_doubles_common(), and BPy_BMO_call().

◆ BMO_slot_float_get()

float BMO_slot_float_get ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name 
)

◆ BMO_slot_float_set()

void BMO_slot_float_set ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const float  f 
)

◆ BMO_slot_get()

BMOpSlot* BMO_slot_get ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  identifier 
)

BMESH OPSTACK GET SLOT.

Returns a pointer to the slot of type 'slot_code'

Definition at line 268 of file bmesh_operators.c.

References BLI_assert, bmo_name_to_slotcode_check(), NULL, and UNLIKELY.

Referenced by _bmo_slot_buffer_append(), _bmo_slot_copy(), bm_bridge_splice_loops(), bmesh_find_doubles_common(), bmo_bisect_edges_exec(), bmo_collapse_exec(), bmo_connect_vert_pair_exec(), bmo_create_grid_exec(), bmo_dissolve_limit_exec(), bmo_extrude_face_region_exec(), bmo_find_doubles_exec(), BMO_iter_new(), bmo_mesh_copy(), bmo_mirror_exec(), BMO_op_vinitf(), bmo_pointmerge_exec(), bmo_pointmerge_facedata_exec(), bmo_remove_doubles_exec(), BMO_slot_as_arrayN(), BMO_slot_bool_get(), BMO_slot_bool_set(), BMO_slot_buffer_alloc(), BMO_slot_buffer_count(), BMO_slot_buffer_flag_disable(), BMO_slot_buffer_flag_enable(), BMO_slot_buffer_from_all(), bmo_slot_buffer_from_flag(), bmo_slot_buffer_from_hflag(), BMO_slot_buffer_get_first(), BMO_slot_buffer_hflag_disable(), BMO_slot_buffer_hflag_enable(), BMO_slot_float_get(), BMO_slot_float_set(), BMO_slot_int_get(), BMO_slot_int_set(), BMO_slot_map_count(), BMO_slot_map_to_flag(), BMO_slot_mat3_get(), BMO_slot_mat4_get(), BMO_slot_mat_set(), BMO_slot_ptr_get(), BMO_slot_ptr_set(), BMO_slot_vec_get(), BMO_slot_vec_set(), bmo_spin_exec(), bmo_subdivide_edges_exec(), bmo_symmetrize_exec(), bmo_triangulate_exec(), bmo_unsubdivide_exec(), bmo_weld_verts_exec(), BPy_BMO_call(), collapse_face_corners(), EDBM_automerge_and_split(), edbm_connect_vert_pair(), edbm_extrude_ex(), edbm_knife_cut_exec(), EDBM_op_call_and_selectf(), and skin_fix_hole_no_good_verts().

◆ BMO_slot_int_get()

int BMO_slot_int_get ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name 
)

◆ BMO_slot_int_set()

void BMO_slot_int_set ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const int  i 
)

◆ BMO_slot_map_count()

int BMO_slot_map_count ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name 
)

◆ BMO_slot_map_insert()

void BMO_slot_map_insert ( BMOperator op,
BMOpSlot slot,
const void *  element,
const void *  data 
)

◆ BMO_slot_map_to_flag()

void BMO_slot_map_to_flag ( BMesh bm,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const char  htype,
const short  oflag 
)

◆ BMO_slot_mat3_get()

void BMO_slot_mat3_get ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
float  r_mat[3][3] 
)

◆ BMO_slot_mat4_get()

void BMO_slot_mat4_get ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
float  r_mat[4][4] 
)

◆ BMO_slot_mat_set()

void BMO_slot_mat_set ( BMOperator op,
BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const float mat,
int  size 
)

◆ BMO_slot_ptr_get()

void* BMO_slot_ptr_get ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name 
)

◆ BMO_slot_ptr_set()

void BMO_slot_ptr_set ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
void *  p 
)

◆ BMO_slot_vec_get()

void BMO_slot_vec_get ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
float  r_vec[3] 
)

◆ BMO_slot_vec_set()

void BMO_slot_vec_set ( BMOpSlot  slot_args[BMO_OP_MAX_SLOTS],
const char *  slot_name,
const float  vec[3] 
)

Variable Documentation

◆ bmo_error_messages

const char* bmo_error_messages[]
static
Initial value:
= {
N_("Could not connect vertices"),
N_("Could not dissolve faces"),
N_("Invalid selection"),
N_("Internal mesh error"),
N_("Convex hull failed"),
}
#define N_(msgid)

Definition at line 45 of file bmesh_operators.c.

Referenced by BMO_error_raise().

◆ BMO_OPSLOT_TYPEINFO

const int BMO_OPSLOT_TYPEINFO[BMO_OP_SLOT_TOTAL_TYPES]
Initial value:
= {
0,
sizeof(int),
sizeof(int),
sizeof(float),
sizeof(void *),
sizeof(void *),
0,
0,
sizeof(float[3]),
sizeof(void *),
sizeof(void *),
}
typedef float(TangentPoint)[2]

Definition at line 57 of file bmesh_operators.c.

Referenced by _bmo_slot_buffer_append(), _bmo_slot_copy(), and BMO_slot_buffer_alloc().