Blender V5.0
cage2d_gizmo.cc File Reference
#include "MEM_guardedalloc.h"
#include "BLI_dial_2d.h"
#include "BLI_math_base_safe.h"
#include "BLI_math_matrix.h"
#include "BLI_math_rotation.h"
#include "BLI_math_vector.h"
#include "BLI_math_vector_types.hh"
#include "BLI_rect.h"
#include "BKE_context.hh"
#include "GPU_immediate.hh"
#include "GPU_immediate_util.hh"
#include "GPU_matrix.hh"
#include "GPU_select.hh"
#include "GPU_state.hh"
#include "RNA_access.hh"
#include "RNA_define.hh"
#include "WM_api.hh"
#include "WM_types.hh"
#include "ED_gizmo_library.hh"
#include "ED_screen.hh"
#include "../gizmo_library_intern.hh"

Go to the source code of this file.

Macros

#define MUL_V2_V3_M4_FINAL(test_co, mouse_co)

Functions

static void gizmo_cage2d_draw_intern (wmGizmo *gz, const bool select, const bool highlight, const int select_id)
static void gizmo_cage2d_draw_select (const bContext *, wmGizmo *gz, int select_id)
static void gizmo_cage2d_draw (const bContext *, wmGizmo *gz)
static int gizmo_cage2d_get_cursor (wmGizmo *gz)
static int gizmo_cage2d_test_select (bContext *C, wmGizmo *gz, const int mval[2])
static void gizmo_cage2d_setup (wmGizmo *gz)
static wmOperatorStatus gizmo_cage2d_invoke (bContext *C, wmGizmo *gz, const wmEvent *event)
static void gizmo_constrain_from_scale_part (int part, bool r_constrain_axis[2])
static void gizmo_pivot_from_scale_part (int part, float r_pt[2])
static wmOperatorStatus gizmo_cage2d_modal (bContext *C, wmGizmo *gz, const wmEvent *event, eWM_GizmoFlagTweak)
static void gizmo_cage2d_property_update (wmGizmo *gz, wmGizmoProperty *gz_prop)
static void gizmo_cage2d_exit (bContext *C, wmGizmo *gz, const bool cancel)
Box Draw Style

Useful for 3D views, see: ED_GIZMO_CAGE2D_STYLE_BOX

static void cage2d_draw_box_corners (const rctf *r, const float margin[2], const float color[3], const float line_width)
static void cage2d_draw_box_interaction (const float color[4], const int highlighted, const float size[2], const float margin[2], const float line_width, const bool is_solid, const int draw_options)
Circle Draw Style

Useful for 2D views, see: ED_GIZMO_CAGE2D_STYLE_CIRCLE

static void imm_draw_point_aspect_2d (uint pos, float x, float y, float rad_x, float rad_y, bool solid)
static void cage2d_draw_rect_wire (const rctf *r, const float margin[2], const float color[3], const int transform_flag, const int draw_options, const float line_width)
static void cage2d_draw_circle_wire (const float color[3], const float size[2], const float margin[2], const int transform_flag, const int draw_options, const float line_width)
static bool is_corner_highlighted (const int highlighted)
static void cage2d_draw_rect_rotate_handle (const rctf *r, const float margin[2], const float color[3], bool solid)
static void cage2d_draw_rect_corner_handles (const rctf *r, const float margin[2], const float color[3], bool solid)
static void cage2d_draw_rect_edge_handles (const rctf *r, const int highlighted, const float size[2], const float margin[2], const float color[3], bool solid)
Cage Gizmo API
static void GIZMO_GT_cage_2d (wmGizmoType *gzt)
void ED_gizmotypes_cage_2d ()

Cage Gizmo

Rectangular or circular gizmo acting as a 'cage' around its content. Interacting scales or translates the gizmo.

2D Gizmo

#define GIZMO_MARGIN_OFFSET_SCALE   1.5f
#define CIRCLE_RESOL   32
static int gizmo_cage2d_transform_flag_get (const wmGizmo *gz)
static void gizmo_calc_rect_view_scale (const wmGizmo *gz, float scale[2])
static void gizmo_calc_rect_view_margin (const wmGizmo *gz, float margin[2])

Macro Definition Documentation

◆ CIRCLE_RESOL

#define CIRCLE_RESOL   32

Definition at line 48 of file cage2d_gizmo.cc.

Referenced by cage2d_draw_circle_wire(), circball_array_fill(), and imm_drawcircball().

◆ GIZMO_MARGIN_OFFSET_SCALE

#define GIZMO_MARGIN_OFFSET_SCALE   1.5f

Definition at line 46 of file cage2d_gizmo.cc.

Referenced by cage2d_draw_rect_rotate_handle(), and gizmo_cage2d_test_select().

◆ MUL_V2_V3_M4_FINAL

#define MUL_V2_V3_M4_FINAL ( test_co,
mouse_co )
Value:
mul_v3_m4v3(test_co, data->orig_matrix_final_no_offset, blender::float3{UNPACK2(mouse_co), 0.0})
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
BMesh const char void * data
VecBase< float, 3 > float3

Referenced by gizmo_cage2d_modal().

Function Documentation

◆ cage2d_draw_box_corners()

◆ cage2d_draw_box_interaction()

◆ cage2d_draw_circle_wire()

◆ cage2d_draw_rect_corner_handles()

void cage2d_draw_rect_corner_handles ( const rctf * r,
const float margin[2],
const float color[3],
bool solid )
static

◆ cage2d_draw_rect_edge_handles()

◆ cage2d_draw_rect_rotate_handle()

◆ cage2d_draw_rect_wire()

◆ ED_gizmotypes_cage_2d()

void ED_gizmotypes_cage_2d ( )

Definition at line 1469 of file cage2d_gizmo.cc.

References GIZMO_GT_cage_2d(), and WM_gizmotype_append().

Referenced by ED_spacetypes_init().

◆ gizmo_cage2d_draw()

void gizmo_cage2d_draw ( const bContext * ,
wmGizmo * gz )
static

Definition at line 891 of file cage2d_gizmo.cc.

References gizmo_cage2d_draw_intern(), wmGizmo::state, and WM_GIZMO_STATE_HIGHLIGHT.

Referenced by GIZMO_GT_cage_2d().

◆ gizmo_cage2d_draw_intern()

void gizmo_cage2d_draw_intern ( wmGizmo * gz,
const bool select,
const bool highlight,
const int select_id )
static

Definition at line 697 of file cage2d_gizmo.cc.

References ARRAY_SIZE, BLI_assert, cage2d_draw_box_corners(), cage2d_draw_box_interaction(), cage2d_draw_circle_wire(), cage2d_draw_rect_corner_handles(), cage2d_draw_rect_edge_handles(), cage2d_draw_rect_rotate_handle(), cage2d_draw_rect_wire(), wmGizmo::color, ED_GIZMO_CAGE2D_PART_ROTATE, ED_GIZMO_CAGE2D_PART_SCALE, ED_GIZMO_CAGE2D_PART_SCALE_MAX_X, ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MAX_Y, ED_GIZMO_CAGE2D_PART_SCALE_MAX_X_MIN_Y, ED_GIZMO_CAGE2D_PART_SCALE_MAX_Y, ED_GIZMO_CAGE2D_PART_SCALE_MIN_X, ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MAX_Y, ED_GIZMO_CAGE2D_PART_SCALE_MIN_X_MIN_Y, ED_GIZMO_CAGE2D_PART_SCALE_MIN_Y, ED_GIZMO_CAGE2D_PART_TRANSLATE, ED_GIZMO_CAGE2D_STYLE_BOX, ED_GIZMO_CAGE2D_STYLE_BOX_TRANSFORM, ED_GIZMO_CAGE2D_STYLE_CIRCLE, ED_GIZMO_CAGE_DRAW_FLAG_CORNER_HANDLES, ED_GIZMO_CAGE_DRAW_FLAG_XFORM_CENTER_HANDLE, ED_GIZMO_CAGE_XFORM_FLAG_ROTATE, ED_GIZMO_CAGE_XFORM_FLAG_SCALE, ED_GIZMO_CAGE_XFORM_FLAG_TRANSLATE, gizmo_cage2d_transform_flag_get(), gizmo_calc_rect_view_margin(), gizmo_color_get(), GPU_blend(), GPU_BLEND_ALPHA, GPU_BLEND_NONE, GPU_matrix_mul, GPU_matrix_pop(), GPU_matrix_push(), GPU_select_load_id(), GPU_SHADER_3D_UNIFORM_COLOR, GPU_vertformat_attr_add(), wmGizmo::highlight_part, i, immBindBuiltinProgram(), immRectf(), immUnbindProgram(), immUniformColor4f(), immVertexFormat(), is_corner_highlighted(), wmGizmo::line_width, pos, wmGizmo::ptr, RNA_enum_get(), RNA_float_get_array(), select, size(), WM_gizmo_calc_matrix_final(), rctf::xmax, rctf::xmin, rctf::ymax, and rctf::ymin.

Referenced by gizmo_cage2d_draw(), and gizmo_cage2d_draw_select().

◆ gizmo_cage2d_draw_select()

void gizmo_cage2d_draw_select ( const bContext * ,
wmGizmo * gz,
int select_id )
static

For when we want to draw 2d cage in 3d views.

Definition at line 886 of file cage2d_gizmo.cc.

References gizmo_cage2d_draw_intern().

Referenced by GIZMO_GT_cage_2d().

◆ gizmo_cage2d_exit()

◆ gizmo_cage2d_get_cursor()

◆ gizmo_cage2d_invoke()

◆ gizmo_cage2d_modal()

◆ gizmo_cage2d_property_update()

◆ gizmo_cage2d_setup()

void gizmo_cage2d_setup ( wmGizmo * gz)
static

Definition at line 1078 of file cage2d_gizmo.cc.

References wmGizmo::flag, WM_GIZMO_DRAW_MODAL, and WM_GIZMO_DRAW_NO_SCALE.

Referenced by GIZMO_GT_cage_2d().

◆ gizmo_cage2d_test_select()

◆ gizmo_cage2d_transform_flag_get()

int gizmo_cage2d_transform_flag_get ( const wmGizmo * gz)
static

◆ gizmo_calc_rect_view_margin()

void gizmo_calc_rect_view_margin ( const wmGizmo * gz,
float margin[2] )
static

◆ gizmo_calc_rect_view_scale()

void gizmo_calc_rect_view_scale ( const wmGizmo * gz,
float scale[2] )
static

◆ gizmo_constrain_from_scale_part()

void gizmo_constrain_from_scale_part ( int part,
bool r_constrain_axis[2] )
static

◆ GIZMO_GT_cage_2d()

◆ gizmo_pivot_from_scale_part()

◆ imm_draw_point_aspect_2d()

void imm_draw_point_aspect_2d ( uint pos,
float x,
float y,
float rad_x,
float rad_y,
bool solid )
static

◆ is_corner_highlighted()