55#define ARROW_SELECT_THRESHOLD_PX (5)
80 const float arrow_length)
83 bool unbind_shader =
true;
107 const float unitx = aspect[0];
108 const float unity = aspect[1];
109 const float vec[4][3] = {
120 const float scale = 0.1f;
121 const float verts[4][3] = {
128 const float color_inner[4] = {
UNPACK3(color), color[3] * 0.5f};
143#ifdef USE_GIZMO_CUSTOM_ARROWS
146 const float vec[2][3] = {
148 {0.0f, 0.0f, arrow_length},
168 const float size = 0.05f;
177 unbind_shader =
false;
183 const float len = 0.25f;
184 const float width = 0.06f;
206 const float point_size = 10 *
U.pixelsize;
224 float matrix_final[4][4];
272 const float head_center_z = (0.974306f + 1.268098f) / 2;
273 const float head_geo_x = 0.051304f;
274 const float stem_geo_x = 0.012320f;
280 float matrix_final[4][4];
284 const float arrow_start[2] = {matrix_final[3][0], matrix_final[3][1]};
287 float co[3] = {0, 0, arrow_length};
295 float select_threshold_base = gz->
line_width *
U.pixelsize;
297 const float mval_fl[2] = {
float(mval[0]),
float(mval[1])};
309 if (lambda >= 0.0f && lambda <= 1.0f) {
341 float ray_origin[3], ray_direction[3];
355 for (
int j = 0; j < 2; j++) {
364 float arrow_no_proj[3];
380 sub_v3_v3v3(offset, proj[1].location, proj[0].location);
381 facdir =
dot_v3v3(arrow_no, offset) < 0.0f ? -1 : 1;
384 const float ofs_new = facdir *
len_v3(offset);
395 data, inter, ofs_new, constrained, inverted, use_precision);
404 data->offset = ofs_new;
502 "Make sure this function is called before WM_gizmo_target_property_def_rna");
514 "Make sure this function is called before WM_gizmo_target_property_def_rna");
522 gzt->
idname =
"GIZMO_GT_arrow_3d";
544 {0,
nullptr, 0,
nullptr,
nullptr},
549 {0,
nullptr, 0,
nullptr,
nullptr},
554 {0,
nullptr, 0,
nullptr,
nullptr},
559 rna_enum_draw_style_items,
565 rna_enum_draw_options_items,
574 gzt->
srna,
"aspect", 2,
nullptr, 0,
FLT_MAX,
"Aspect",
"Cone/box style only", 0.0f,
FLT_MAX);
wmWindow * CTX_wm_window(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
#define BLI_assert_msg(a, msg)
MINLINE float square_f(float a)
bool isect_ray_plane_v3_factor(const float ray_origin[3], const float ray_direction[3], const float plane_co[3], const float plane_no[3], float *r_lambda)
float closest_to_line_v2(float r_close[2], const float p[2], const float l1[2], const float l2[2])
float mat4_to_scale(const float mat[4][4])
void mul_m4_v3(const float M[4][4], float r[3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f)
MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
void project_plane_v3_v3v3(float out[3], const float p[3], const float v_plane[3])
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
MINLINE float normalize_v3_v3(float r[3], const float a[3])
MINLINE void madd_v3_v3v3fl(float r[3], const float a[3], const float b[3], float f)
MINLINE float normalize_v3(float n[3])
MINLINE float len_v3(const float a[3]) ATTR_WARN_UNUSED_RESULT
@ ED_GIZMO_ARROW_DRAW_FLAG_ORIGIN
@ ED_GIZMO_ARROW_DRAW_FLAG_STEM
@ ED_GIZMO_ARROW_XFORM_FLAG_CONSTRAINED
@ ED_GIZMO_ARROW_XFORM_FLAG_INVERTED
@ ED_GIZMO_ARROW_STYLE_CROSS
@ ED_GIZMO_ARROW_STYLE_PLANE
@ ED_GIZMO_ARROW_STYLE_BOX
@ ED_GIZMO_ARROW_STYLE_NORMAL
@ ED_GIZMO_ARROW_STYLE_CONE
void ED_region_tag_redraw_editor_overlays(ARegion *region)
void ED_view3d_win_to_ray(const ARegion *region, const float mval[2], float r_ray_start[3], float r_ray_normal[3])
#define GPU_matrix_mul(x)
void GPU_matrix_scale_3f(float x, float y, float z)
void GPU_matrix_translate_3f(float x, float y, float z)
bool GPU_select_load_id(unsigned int id)
@ GPU_SHADER_3D_POLYLINE_UNIFORM_COLOR
@ GPU_SHADER_3D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_AA
@ GPU_SHADER_3D_UNIFORM_COLOR
void GPU_program_point_size(bool enable)
void GPU_blend(eGPUBlend blend)
void GPU_viewport_size_get_f(float coords[4])
Read Guarded memory(de)allocation.
eWM_GizmoFlagTweak
Gizmo tweak flag. Bit-flag passed to gizmo while tweaking.
@ WM_GIZMO_STATE_HIGHLIGHT
static int gizmo_arrow_test_select(bContext *, wmGizmo *gz, const int mval[2])
static int gizmo_arrow_invoke(bContext *, wmGizmo *gz, const wmEvent *event)
static void gizmo_arrow_matrix_basis_get(const wmGizmo *gz, float r_matrix[4][4])
static void gizmo_arrow_setup(wmGizmo *gz)
static void gizmo_arrow_draw_select(const bContext *, wmGizmo *gz, int select_id)
#define ARROW_SELECT_THRESHOLD_PX
void ED_gizmo_arrow3d_set_range_fac(wmGizmo *gz, const float range_fac)
static int gizmo_arrow_modal(bContext *C, wmGizmo *gz, const wmEvent *event, eWM_GizmoFlagTweak tweak_flag)
static void GIZMO_GT_arrow_3d(wmGizmoType *gzt)
void ED_gizmotypes_arrow_3d()
static void arrow_draw_intern(ArrowGizmo3D *arrow, const bool select, const bool highlight)
static void gizmo_arrow_exit(bContext *C, wmGizmo *gz, const bool cancel)
void ED_gizmo_arrow3d_set_ui_range(wmGizmo *gz, const float min, const float max)
static void gizmo_arrow_property_update(wmGizmo *gz, wmGizmoProperty *gz_prop)
static void arrow_draw_geom(const ArrowGizmo3D *arrow, const bool select, const float color[4], const float arrow_length)
static void gizmo_arrow_draw(const bContext *, wmGizmo *gz)
draw_view in_light_buf[] float
GizmoGeomInfo wm_gizmo_geom_data_arrow
GizmoGeomInfo wm_gizmo_geom_data_cube
void wm_gizmo_geometryinfo_draw(const GizmoGeomInfo *info, const bool, const float color[4])
void wm_gizmo_vec_draw(const float color[4], const float(*verts)[3], uint vert_count, uint pos, uint primitive_type)
float gizmo_value_from_offset(GizmoCommonData *data, GizmoInteraction *inter, float offset, bool constrained, bool inverted, bool use_precision)
float gizmo_offset_from_value(GizmoCommonData *data, float value, bool constrained, bool inverted)
void gizmo_color_get(const wmGizmo *gz, bool highlight, float r_color[4])
void gizmo_property_data_update(wmGizmo *gz, GizmoCommonData *data, wmGizmoProperty *gz_prop, bool constrained, bool inverted)
void gizmo_property_value_reset(bContext *C, const wmGizmo *gz, GizmoInteraction *inter, wmGizmoProperty *gz_prop)
void *(* MEM_callocN)(size_t len, const char *str)
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
float RNA_float_get(PointerRNA *ptr, const char *name)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_enum_flag(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
float init_matrix_basis[4][4]
float init_matrix_final[4][4]
wmGizmoFnMatrixBasisGet matrix_basis_get
wmGizmoFnTestSelect test_select
wmGizmoFnDrawSelect draw_select
wmGizmoFnPropertyUpdate property_update
void WM_event_add_mousemove(wmWindow *win)
void WM_gizmo_calc_matrix_final(const wmGizmo *gz, float r_mat[4][4])
void WM_gizmo_target_property_float_set(bContext *C, const wmGizmo *gz, wmGizmoProperty *gz_prop, const float value)
void WM_gizmo_target_property_anim_autokey(bContext *C, const wmGizmo *, wmGizmoProperty *gz_prop)
bool WM_gizmo_target_property_is_valid(const wmGizmoProperty *gz_prop)
void WM_gizmotype_target_property_def(wmGizmoType *gzt, const char *idname, int data_type, int array_length)
float WM_gizmo_target_property_float_get(const wmGizmo *gz, wmGizmoProperty *gz_prop)
wmGizmoProperty * WM_gizmo_target_property_find(wmGizmo *gz, const char *idname)
void WM_gizmotype_append(void(*gtfunc)(wmGizmoType *))