Blender  V3.3
Classes
draw_select_buffer.c File Reference
#include "MEM_guardedalloc.h"
#include "BLI_array_utils.h"
#include "BLI_bitmap.h"
#include "BLI_bitmap_draw_2d.h"
#include "BLI_rect.h"
#include "DNA_screen_types.h"
#include "GPU_select.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "DRW_engine.h"
#include "DRW_select_buffer.h"
#include "draw_manager.h"
#include "../engines/select/select_engine.h"

Go to the source code of this file.

Classes

struct  PolyMaskData
 
struct  SelectReadData
 

Functions

Buffer of select ID's
uintDRW_select_buffer_read (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const rcti *rect, uint *r_buf_len)
 
Select Bitmap from ID's

Given a buffer of select ID's, fill in a booleans (true/false) per index. BLI_bitmap is used for memory efficiency.

uintDRW_select_buffer_bitmap_from_rect (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const rcti *rect, uint *r_bitmap_len)
 
uintDRW_select_buffer_bitmap_from_circle (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const int center[2], const int radius, uint *r_bitmap_len)
 
static void drw_select_mask_px_cb (int x, int x_end, int y, void *user_data)
 
uintDRW_select_buffer_bitmap_from_poly (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const int poly[][2], const int poly_len, const rcti *rect, uint *r_bitmap_len)
 
Find Single Select ID's

Given a buffer of select ID's, find the a single select id.

uint DRW_select_buffer_sample_point (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const int center[2])
 
static bool select_buffer_test_fn (const void *__restrict value, void *__restrict userdata)
 
uint DRW_select_buffer_find_nearest_to_point (struct Depsgraph *depsgraph, struct ARegion *region, struct View3D *v3d, const int center[2], const uint id_min, const uint id_max, uint *dist)
 
Object Utils
bool DRW_select_buffer_elem_get (const uint sel_id, uint *r_elem, uint *r_base_index, char *r_elem_type)
 
uint DRW_select_buffer_context_offset_for_object_elem (Depsgraph *depsgraph, Object *object, char elem_type)
 
Context
void DRW_select_buffer_context_create (Base **bases, const uint bases_len, short select_mode)
 

Detailed Description

Utilities to read id buffer created in select_engine.

Definition in file draw_select_buffer.c.

Function Documentation

◆ DRW_select_buffer_bitmap_from_circle()

uint* DRW_select_buffer_bitmap_from_circle ( struct Depsgraph depsgraph,
struct ARegion region,
struct View3D v3d,
const int  center[2],
int  radius,
uint r_bitmap_len 
)
Parameters
centerCircle center.
radiusCircle radius.
r_bitmap_lenNumber of indices in the selection id buffer.
Returns
a BLI_bitmap the length of r_bitmap_len or NULL on failure.

Definition at line 148 of file draw_select_buffer.c.

References BLI_assert, BLI_BITMAP_ENABLE, BLI_BITMAP_NEW, center, depsgraph, DRW_select_buffer_read(), DRW_select_engine_context_get(), SELECTID_Context::index_drawn_len, MEM_freeN, NULL, and rcti::xmin.

Referenced by mesh_circle_select(), paint_facesel_circle_select(), and paint_vertsel_circle_select().

◆ DRW_select_buffer_bitmap_from_poly()

uint* DRW_select_buffer_bitmap_from_poly ( struct Depsgraph depsgraph,
struct ARegion region,
struct View3D v3d,
const int  poly[][2],
const int  poly_len,
const rcti rect,
uint r_bitmap_len 
)

◆ DRW_select_buffer_bitmap_from_rect()

uint* DRW_select_buffer_bitmap_from_rect ( struct Depsgraph depsgraph,
struct ARegion region,
struct View3D v3d,
const rcti rect,
uint r_bitmap_len 
)

◆ DRW_select_buffer_context_create()

void DRW_select_buffer_context_create ( Base **  bases,
const uint  bases_len,
short  select_mode 
)

◆ DRW_select_buffer_context_offset_for_object_elem()

uint DRW_select_buffer_context_offset_for_object_elem ( Depsgraph depsgraph,
Object object,
char  elem_type 
)

◆ DRW_select_buffer_elem_get()

bool DRW_select_buffer_elem_get ( const uint  sel_id,
uint r_elem,
uint r_base_index,
char *  r_elem_type 
)

◆ DRW_select_buffer_find_nearest_to_point()

uint DRW_select_buffer_find_nearest_to_point ( struct Depsgraph depsgraph,
struct ARegion region,
struct View3D v3d,
const int  center[2],
uint  id_min,
uint  id_max,
uint dist 
)

Find the selection id closest to center.

Parameters
distUse to initialize the distance, when found, this value is set to the distance of the selection that's returned.

Definition at line 325 of file draw_select_buffer.c.

References blender::math::abs(), BLI_array_iter_spiral_square, BLI_rcti_init_pt_radius(), BLI_rcti_size_x(), center, data, depsgraph, DRW_select_buffer_read(), height, SelectReadData::id_max, SelectReadData::id_min, MEM_freeN, NULL, offset, select_buffer_test_fn(), width, rcti::xmax, and rcti::ymax.

Referenced by ED_mesh_pick_face(), ED_mesh_pick_vert(), EDBM_edge_find_nearest_ex(), EDBM_face_find_nearest_ex(), and EDBM_vert_find_nearest_ex().

◆ DRW_select_buffer_read()

uint* DRW_select_buffer_read ( struct Depsgraph depsgraph,
struct ARegion region,
struct View3D v3d,
const rcti rect,
uint r_buf_len 
)

◆ DRW_select_buffer_sample_point()

uint DRW_select_buffer_sample_point ( struct Depsgraph depsgraph,
struct ARegion region,
struct View3D v3d,
const int  center[2] 
)

◆ drw_select_mask_px_cb()

static void drw_select_mask_px_cb ( int  x,
int  x_end,
int  y,
void user_data 
)
static

Definition at line 201 of file draw_select_buffer.c.

References BLI_BITMAP_ENABLE, data, PolyMaskData::px, user_data, x, and y.

Referenced by DRW_select_buffer_bitmap_from_poly().

◆ select_buffer_test_fn()

static bool select_buffer_test_fn ( const void *__restrict  value,
void *__restrict  userdata 
)
static

Definition at line 312 of file draw_select_buffer.c.

References data, and SelectReadData::id_max.

Referenced by DRW_select_buffer_find_nearest_to_point().