Blender  V2.93
Classes | Macros | Variables
view3d_placement.c File Reference
#include "MEM_guardedalloc.h"
#include "DNA_collection_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_vfont_types.h"
#include "BLI_math.h"
#include "BLI_utildefines.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "RNA_access.h"
#include "RNA_define.h"
#include "RNA_enum_types.h"
#include "WM_api.h"
#include "WM_toolsystem.h"
#include "WM_types.h"
#include "ED_gizmo_library.h"
#include "ED_gizmo_utils.h"
#include "ED_screen.h"
#include "ED_space_api.h"
#include "ED_transform.h"
#include "ED_transform_snap_object_context.h"
#include "ED_view3d.h"
#include "UI_resources.h"
#include "GPU_batch.h"
#include "GPU_immediate.h"
#include "GPU_matrix.h"
#include "GPU_state.h"
#include "view3d_intern.h"

Go to the source code of this file.

Classes

struct  InteractivePlaceData
 
struct  PlacementCursor
 

Macros

#define FADE(v)    max_ff(0.0f, (1.0f - square_f(((len_v3v3(v, center) / scale_fade) + resolution_div) * 2.0f)))
 

Enumerations

Local Types
enum  ePlace_PrimType {
  PLACE_PRIMITIVE_TYPE_CUBE = 1 , PLACE_PRIMITIVE_TYPE_CYLINDER = 2 , PLACE_PRIMITIVE_TYPE_CONE = 3 , PLACE_PRIMITIVE_TYPE_SPHERE_UV = 4 ,
  PLACE_PRIMITIVE_TYPE_SPHERE_ICO = 5
}
 
enum  ePlace_Origin { PLACE_ORIGIN_BASE = 1 , PLACE_ORIGIN_CENTER = 2 }
 
enum  ePlace_Aspect { PLACE_ASPECT_FREE = 1 , PLACE_ASPECT_FIXED = 2 }
 
enum  ePlace_Depth { PLACE_DEPTH_SURFACE = 1 , PLACE_DEPTH_CURSOR_PLANE = 2 , PLACE_DEPTH_CURSOR_VIEW = 3 }
 
enum  ePlace_Orient { PLACE_ORIENT_SURFACE = 1 , PLACE_ORIENT_DEFAULT = 2 }
 
enum  ePlace_SnapTo { PLACE_SNAP_TO_GEOMETRY = 1 , PLACE_SNAP_TO_DEFAULT = 2 }
 

Functions

Preview Plane Cursor
static void preview_plane_cursor_setup (wmGizmoGroup *gzgroup)
 
static void preview_plane_cursor_visible_set (wmGizmoGroup *gzgroup, bool do_draw)
 
static void cursor_plane_draw (bContext *C, int x, int y, void *customdata)
 
static void preview_plane_cursor_free (void *customdata)
 
Primitive Drawing (Cube, Cone, Cylinder...)
static void draw_line_loop (const float coords[][3], int coords_len, const float color[4])
 
static void draw_line_pairs (const float coords_a[][3], float coords_b[][3], int coords_len, const float color[4])
 
static void draw_line_bounds (const BoundBox *bounds, const float color[4])
 
static bool calc_bbox (struct InteractivePlaceData *ipd, BoundBox *bounds)
 
static void draw_circle_in_quad (const float v1[3], const float v2[3], const float v3[3], const float v4[3], const int resolution, const float color[4])
 
Drawing Callbacks
static void draw_primitive_view_impl (const struct bContext *C, struct InteractivePlaceData *ipd, const float color[4], int flatten_axis)
 
static void draw_primitive_view (const struct bContext *C, ARegion *UNUSED(region), void *arg)
 
Calculate The Initial Placement Plane

Use by both the operator and placement cursor.

static void view3d_interactive_add_calc_plane (bContext *C, Scene *scene, View3D *v3d, ARegion *region, const float mval_fl[2], wmGizmo *snap_gizmo, const enum ePlace_SnapTo snap_to, const enum ePlace_Depth plane_depth, const enum ePlace_Orient plane_orient, const int plane_axis, const bool plane_axis_auto, float r_co_src[3], float r_matrix_orient[3][3])
 
Placement Gizmo Group

This is currently only used for snapping before the tool is initialized, we could show a placement plane here.

static void WIDGETGROUP_placement_setup (const bContext *UNUSED(C), wmGizmoGroup *gzgroup)
 
void VIEW3D_GGT_placement (wmGizmoGroupType *gzgt)
 
Placement Preview Plane

Preview the plane that will be used for placement.

Note that we might want to split this into its own file, for now this is coupled with the 3D view placement gizmo.

static void gizmo_plane_update_cursor (const bContext *C, ARegion *region, const int mval[2], float r_co[3], float r_matrix_orient[3][3], int *r_plane_axis)
 
static void gizmo_plane_draw_grid (const int resolution, const float scale, const float scale_fade, const float matrix[4][4], const int plane_axis, const float color[4])
 

Variables

static const char * view3d_gzgt_placement_id = "VIEW3D_GGT_placement"
 
static const float eps_view_align = 1e-2f
 

Internal Utilities

#define MVAL_MAX_PX_DIST   12.0f
 
static bool view3d_win_to_3d_on_plane_maybe_fallback (const ARegion *region, const float plane[4], const float mval[2], const float *plane_fallback, float r_out[3])
 
static int dot_v3_array_find_max_index (const float dirs[][3], const int dirs_len, const float dir_test[3], bool is_signed)
 
static bool mat3_align_axis_to_v3 (float mat[3][3], const int axis_align, const float v[3])
 
static bool idp_snap_point_from_gizmo_ex (wmGizmo *gz, const char *prop_id, float r_location[3])
 
static bool idp_snap_point_from_gizmo (wmGizmo *gz, float r_location[3])
 
static bool idp_snap_normal_from_gizmo (wmGizmo *gz, float r_normal[3])
 
static bool idp_poject_surface_normal (SnapObjectContext *snap_context, struct Depsgraph *depsgraph, const float mval_fl[2], const float mat_fallback[3][3], const float normal_fallback[3], float r_mat[3][3])
 
static wmGizmoGroupidp_gizmogroup_from_region (ARegion *region)
 
static bool idp_snap_calc_incremental (Scene *scene, View3D *v3d, ARegion *region, const float co_relative[3], float co[3])
 
static void idp_snap_gizmo_update_snap_elements (Scene *scene, enum ePlace_SnapTo snap_to, wmGizmo *gizmo)
 

Add Object Modal Operator

enum  {
  PLACE_MODAL_SNAP_ON , PLACE_MODAL_SNAP_OFF , PLACE_MODAL_FIXED_ASPECT_ON , PLACE_MODAL_FIXED_ASPECT_OFF ,
  PLACE_MODAL_PIVOT_CENTER_ON , PLACE_MODAL_PIVOT_CENTER_OFF
}
 
static void view3d_interactive_add_begin (bContext *C, wmOperator *op, const wmEvent *event)
 
static int view3d_interactive_add_invoke (bContext *C, wmOperator *op, const wmEvent *event)
 
static void view3d_interactive_add_exit (bContext *C, wmOperator *op)
 
static void view3d_interactive_add_cancel (bContext *C, wmOperator *op)
 
void viewplace_modal_keymap (wmKeyConfig *keyconf)
 
static int view3d_interactive_add_modal (bContext *C, wmOperator *op, const wmEvent *event)
 
static bool view3d_interactive_add_poll (bContext *C)
 
void VIEW3D_OT_interactive_add (struct wmOperatorType *ot)
 

Detailed Description

Operator to interactively place data.

Currently only adds meshes, but could add other kinds of data including library assets & non-mesh types.

Definition in file view3d_placement.c.

Macro Definition Documentation

◆ FADE

#define FADE (   v)     max_ff(0.0f, (1.0f - square_f(((len_v3v3(v, center) / scale_fade) + resolution_div) * 2.0f)))

◆ MVAL_MAX_PX_DIST

#define MVAL_MAX_PX_DIST   12.0f

Definition at line 282 of file view3d_placement.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
PLACE_MODAL_SNAP_ON 
PLACE_MODAL_SNAP_OFF 
PLACE_MODAL_FIXED_ASPECT_ON 
PLACE_MODAL_FIXED_ASPECT_OFF 
PLACE_MODAL_PIVOT_CENTER_ON 
PLACE_MODAL_PIVOT_CENTER_OFF 

Definition at line 1262 of file view3d_placement.c.

◆ ePlace_Aspect

Enumerator
PLACE_ASPECT_FREE 
PLACE_ASPECT_FIXED 

Definition at line 94 of file view3d_placement.c.

◆ ePlace_Depth

Enumerator
PLACE_DEPTH_SURFACE 
PLACE_DEPTH_CURSOR_PLANE 
PLACE_DEPTH_CURSOR_VIEW 

Definition at line 99 of file view3d_placement.c.

◆ ePlace_Orient

Enumerator
PLACE_ORIENT_SURFACE 
PLACE_ORIENT_DEFAULT 

Definition at line 105 of file view3d_placement.c.

◆ ePlace_Origin

Enumerator
PLACE_ORIGIN_BASE 
PLACE_ORIGIN_CENTER 

Definition at line 89 of file view3d_placement.c.

◆ ePlace_PrimType

Enumerator
PLACE_PRIMITIVE_TYPE_CUBE 
PLACE_PRIMITIVE_TYPE_CYLINDER 
PLACE_PRIMITIVE_TYPE_CONE 
PLACE_PRIMITIVE_TYPE_SPHERE_UV 
PLACE_PRIMITIVE_TYPE_SPHERE_ICO 

Definition at line 81 of file view3d_placement.c.

◆ ePlace_SnapTo

Enumerator
PLACE_SNAP_TO_GEOMETRY 
PLACE_SNAP_TO_DEFAULT 

Definition at line 110 of file view3d_placement.c.

Function Documentation

◆ calc_bbox()

static bool calc_bbox ( struct InteractivePlaceData ipd,
BoundBox bounds 
)
static

◆ cursor_plane_draw()

static void cursor_plane_draw ( bContext C,
int  x,
int  y,
void *  customdata 
)
static

◆ dot_v3_array_find_max_index()

static int dot_v3_array_find_max_index ( const float  dirs[][3],
const int  dirs_len,
const float  dir_test[3],
bool  is_signed 
)
static

Return the index of dirs with the largest dot product compared to dir_test.

Definition at line 234 of file view3d_placement.c.

References dot_v3v3(), and fabsf.

Referenced by view3d_interactive_add_begin().

◆ draw_circle_in_quad()

static void draw_circle_in_quad ( const float  v1[3],
const float  v2[3],
const float  v3[3],
const float  v4[3],
const int  resolution,
const float  color[4] 
)
static

◆ draw_line_bounds()

static void draw_line_bounds ( const BoundBox bounds,
const float  color[4] 
)
static

◆ draw_line_loop()

static void draw_line_loop ( const float  coords[][3],
int  coords_len,
const float  color[4] 
)
static

◆ draw_line_pairs()

static void draw_line_pairs ( const float  coords_a[][3],
float  coords_b[][3],
int  coords_len,
const float  color[4] 
)
static

◆ draw_primitive_view()

static void draw_primitive_view ( const struct bContext C,
ARegion UNUSEDregion,
void *  arg 
)
static

◆ draw_primitive_view_impl()

static void draw_primitive_view_impl ( const struct bContext C,
struct InteractivePlaceData ipd,
const float  color[4],
int  flatten_axis 
)
static

◆ gizmo_plane_draw_grid()

static void gizmo_plane_draw_grid ( const int  resolution,
const float  scale,
const float  scale_fade,
const float  matrix[4][4],
const int  plane_axis,
const float  color[4] 
)
static

◆ gizmo_plane_update_cursor()

static void gizmo_plane_update_cursor ( const bContext C,
ARegion region,
const int  mval[2],
float  r_co[3],
float  r_matrix_orient[3][3],
int *  r_plane_axis 
)
static

◆ idp_gizmogroup_from_region()

static wmGizmoGroup* idp_gizmogroup_from_region ( ARegion region)
static

◆ idp_poject_surface_normal()

static bool idp_poject_surface_normal ( SnapObjectContext snap_context,
struct Depsgraph depsgraph,
const float  mval_fl[2],
const float  mat_fallback[3][3],
const float  normal_fallback[3],
float  r_mat[3][3] 
)
static

◆ idp_snap_calc_incremental()

static bool idp_snap_calc_incremental ( Scene scene,
View3D v3d,
ARegion region,
const float  co_relative[3],
float  co[3] 
)
static

Calculate 3D view incremental (grid) snapping.

Note
This could be moved to a public function.

Definition at line 385 of file view3d_placement.c.

References add_v3_v3(), ED_view3d_grid_view_scale(), mul_v3_fl(), NULL, SCE_SNAP_ABS_GRID, SCE_SNAP_MODE_INCREMENT, scene, ToolSettings::snap_flag, ToolSettings::snap_mode, sub_v3_v3(), Scene::toolsettings, and UNLIKELY.

Referenced by view3d_interactive_add_calc_plane(), and view3d_interactive_add_modal().

◆ idp_snap_gizmo_update_snap_elements()

static void idp_snap_gizmo_update_snap_elements ( Scene scene,
enum ePlace_SnapTo  snap_to,
wmGizmo gizmo 
)
static

◆ idp_snap_normal_from_gizmo()

static bool idp_snap_normal_from_gizmo ( wmGizmo gz,
float  r_normal[3] 
)
static

Definition at line 299 of file view3d_placement.c.

References idp_snap_point_from_gizmo_ex().

Referenced by view3d_interactive_add_calc_plane().

◆ idp_snap_point_from_gizmo()

static bool idp_snap_point_from_gizmo ( wmGizmo gz,
float  r_location[3] 
)
static

Definition at line 294 of file view3d_placement.c.

References idp_snap_point_from_gizmo_ex().

Referenced by view3d_interactive_add_calc_plane().

◆ idp_snap_point_from_gizmo_ex()

static bool idp_snap_point_from_gizmo_ex ( wmGizmo gz,
const char *  prop_id,
float  r_location[3] 
)
static

◆ mat3_align_axis_to_v3()

static bool mat3_align_axis_to_v3 ( float  mat[3][3],
const int  axis_align,
const float  v[3] 
)
static

Re-order mat so axis_align uses it's own axis which is closest to v.

Definition at line 257 of file view3d_placement.c.

References copy_m3_m3(), copy_v3_v3(), dot_v3v3(), fabsf, mod_i(), and v.

Referenced by view3d_interactive_add_calc_plane().

◆ preview_plane_cursor_free()

static void preview_plane_cursor_free ( void *  customdata)
static

◆ preview_plane_cursor_setup()

static void preview_plane_cursor_setup ( wmGizmoGroup gzgroup)
static

◆ preview_plane_cursor_visible_set()

static void preview_plane_cursor_visible_set ( wmGizmoGroup gzgroup,
bool  do_draw 
)
static

◆ VIEW3D_GGT_placement()

void VIEW3D_GGT_placement ( wmGizmoGroupType gzgt)

◆ view3d_interactive_add_begin()

static void view3d_interactive_add_begin ( bContext C,
wmOperator op,
const wmEvent event 
)
static

Definition at line 1013 of file view3d_placement.c.

References add_v3_v3v3(), InteractivePlaceData::area, C, InteractivePlaceData::co_dst, InteractivePlaceData::co_src, copy_v3_v3(), CTX_data_ensure_evaluated_depsgraph(), wmOperator::customdata, wmGizmoGroup::customdata, InteractivePlaceData::degenerate_axis, InteractivePlaceData::degenerate_diagonal, InteractivePlaceData::degenerate_diagonal_display, dot_v3_array_find_max_index(), dot_v3v3(), InteractivePlaceData::draw_handle_view, draw_primitive_view(), ED_gizmotypes_snap_3d_invert_snap_get(), ED_gizmotypes_snap_3d_update(), ED_region_draw_cb_activate(), ED_region_tag_redraw(), eps_view_align, fabsf, ListBase::first, G_MAIN, wmGizmoGroup::gizmos, bToolRef::idname, idp_gizmogroup_from_region(), InteractivePlaceData::is_centered, InteractivePlaceData::is_centered_init, InteractivePlaceData::is_degenerate_view_align, InteractivePlaceData::is_fixed_aspect, InteractivePlaceData::is_fixed_aspect_init, InteractivePlaceData::is_snap_invert, ISTWEAK, InteractivePlaceData::launch_event, InteractivePlaceData::matrix_orient, wmEvent::mval, negate_v3(), negate_v3_v3(), normalize_v3(), normalize_v3_v3(), NULL, InteractivePlaceData::orient_axis, PLACE_ASPECT_FIXED, PLACE_ORIGIN_CENTER, PLACE_PRIMITIVE_TYPE_CONE, PLACE_PRIMITIVE_TYPE_CUBE, PLACE_PRIMITIVE_TYPE_CYLINDER, PLACE_PRIMITIVE_TYPE_SPHERE_ICO, PLACE_PRIMITIVE_TYPE_SPHERE_UV, InteractivePlaceData::plane, plane_from_point_normal_v3(), preview_plane_cursor_visible_set(), InteractivePlaceData::primitive_type, wmOperator::ptr, InteractivePlaceData::region, REGION_DRAW_POST_VIEW, ARegion::regiondata, RNA_boolean_get(), RNA_enum_get(), RNA_property_enum_get(), RNA_property_is_set(), RNA_struct_find_property(), ScrArea::runtime, SCE_SNAP, InteractivePlaceData::scene, ToolSettings::snap_flag, InteractivePlaceData::snap_gizmo, InteractivePlaceData::snap_to, InteractivePlaceData::step, InteractivePlaceData::STEP_BASE, InteractivePlaceData::STEP_DEPTH, InteractivePlaceData::step_index, STREQ, sub_v3_v3v3(), ScrArea_Runtime::tool, Scene::toolsettings, ARegion::type, wmEvent::type, UNPACK2, InteractivePlaceData::use_snap, InteractivePlaceData::use_tool, InteractivePlaceData::v3d, view3d_interactive_add_calc_plane(), InteractivePlaceData::view_plane, RegionView3D::viewinv, and WM_userdef_event_type_from_keymap_type().

Referenced by view3d_interactive_add_invoke(), and view3d_interactive_add_modal().

◆ view3d_interactive_add_calc_plane()

static void view3d_interactive_add_calc_plane ( bContext C,
Scene scene,
View3D v3d,
ARegion region,
const float  mval_fl[2],
wmGizmo snap_gizmo,
const enum ePlace_SnapTo  snap_to,
const enum ePlace_Depth  plane_depth,
const enum ePlace_Orient  plane_orient,
const int  plane_axis,
const bool  plane_axis_auto,
float  r_co_src[3],
float  r_matrix_orient[3][3] 
)
static

◆ view3d_interactive_add_cancel()

static void view3d_interactive_add_cancel ( bContext C,
wmOperator op 
)
static

Definition at line 1257 of file view3d_placement.c.

References C, and view3d_interactive_add_exit().

Referenced by VIEW3D_OT_interactive_add().

◆ view3d_interactive_add_exit()

static void view3d_interactive_add_exit ( bContext C,
wmOperator op 
)
static

◆ view3d_interactive_add_invoke()

static int view3d_interactive_add_invoke ( bContext C,
wmOperator op,
const wmEvent event 
)
static

◆ view3d_interactive_add_modal()

static int view3d_interactive_add_modal ( bContext C,
wmOperator op,
const wmEvent event 
)
static

Definition at line 1296 of file view3d_placement.c.

References InteractivePlaceData::area, ATTR_FALLTHROUGH, BLI_assert, bounds(), C, calc_bbox(), closest_to_plane_normalized_v3(), InteractivePlaceData::co_dst, InteractivePlaceData::co_src, copy_m3_m3(), copy_v3_v3(), cross_v3_v3v3(), CTX_data_ensure_evaluated_depsgraph(), wmOperator::customdata, InteractivePlaceData::degenerate_diagonal, dot_v3v3(), ED_gizmotypes_snap_3d_data_get(), ED_gizmotypes_snap_3d_flag_clear(), ED_gizmotypes_snap_3d_flag_set(), ED_gizmotypes_snap_3d_update(), ED_region_tag_redraw(), ED_SNAPGIZMO_TOGGLE_ALWAYS_TRUE, ELEM, EVT_ESCKEY, EVT_MODAL_MAP, G_MAIN, idp_snap_calc_incremental(), InteractivePlaceData::is_centered, InteractivePlaceData::is_centered_init, InteractivePlaceData::is_degenerate_view_align, InteractivePlaceData::is_fixed_aspect, InteractivePlaceData::is_fixed_aspect_init, InteractivePlaceData::is_snap_found, InteractivePlaceData::is_snap_invert, KM_PRESS, KM_RELEASE, InteractivePlaceData::launch_event, LEFTMOUSE, len_v3v3(), mat3_to_eul(), InteractivePlaceData::matrix_orient, mid_v3_v3v3(), MOUSEMOVE, wmEvent::mval, negate_v3(), normalize_v3(), NULL, OPERATOR_CANCELLED, OPERATOR_FINISHED, OPERATOR_RUNNING_MODAL, InteractivePlaceData::orient_axis, ot, PLACE_MODAL_FIXED_ASPECT_OFF, PLACE_MODAL_FIXED_ASPECT_ON, PLACE_MODAL_PIVOT_CENTER_OFF, PLACE_MODAL_PIVOT_CENTER_ON, PLACE_MODAL_SNAP_OFF, PLACE_MODAL_SNAP_ON, PLACE_PRIMITIVE_TYPE_CONE, PLACE_PRIMITIVE_TYPE_CUBE, PLACE_PRIMITIVE_TYPE_CYLINDER, PLACE_PRIMITIVE_TYPE_SPHERE_ICO, PLACE_PRIMITIVE_TYPE_SPHERE_UV, PLACE_SNAP_TO_DEFAULT, InteractivePlaceData::plane, plane_from_point_normal_v3(), InteractivePlaceData::primitive_type, InteractivePlaceData::region, ARegion::regiondata, RIGHTMOUSE, RNA_float_set(), RNA_float_set_array(), ScrArea::runtime, SCE_SNAP, InteractivePlaceData::scene, InteractivePlaceData::snap_co, ToolSettings::snap_flag, InteractivePlaceData::snap_gizmo, InteractivePlaceData::snap_to, InteractivePlaceData::step, InteractivePlaceData::STEP_BASE, InteractivePlaceData::STEP_DEPTH, InteractivePlaceData::step_index, sub_v3_v3(), sub_v3_v3v3(), SWAP, swap_v3_v3(), ScrArea_Runtime::tool, Scene::toolsettings, wmEvent::type, UNPACK2, UNUSED_VARS, InteractivePlaceData::use_snap, InteractivePlaceData::use_tool, InteractivePlaceData::v3d, wmEvent::val, view3d_interactive_add_begin(), view3d_interactive_add_exit(), view3d_win_to_3d_on_plane_maybe_fallback(), InteractivePlaceData::view_plane, RegionView3D::viewinv, InteractivePlaceData::wait_for_input, WM_OP_EXEC_DEFAULT, WM_operator_name_call_ptr(), WM_operator_properties_create_ptr(), WM_operator_properties_free(), WM_operatortype_find(), and WM_toolsystem_ref_properties_init_for_keymap().

Referenced by VIEW3D_OT_interactive_add().

◆ view3d_interactive_add_poll()

static bool view3d_interactive_add_poll ( bContext C)
static

Definition at line 1594 of file view3d_placement.c.

References C, CTX_data_mode_enum(), CTX_MODE_EDIT_MESH, CTX_MODE_OBJECT, and ELEM.

Referenced by VIEW3D_OT_interactive_add().

◆ VIEW3D_OT_interactive_add()

void VIEW3D_OT_interactive_add ( struct wmOperatorType ot)

◆ view3d_win_to_3d_on_plane_maybe_fallback()

static bool view3d_win_to_3d_on_plane_maybe_fallback ( const ARegion region,
const float  plane[4],
const float  mval[2],
const float plane_fallback,
float  r_out[3] 
)
static

◆ viewplace_modal_keymap()

void viewplace_modal_keymap ( wmKeyConfig keyconf)

◆ WIDGETGROUP_placement_setup()

static void WIDGETGROUP_placement_setup ( const bContext UNUSEDC,
wmGizmoGroup gzgroup 
)
static

Variable Documentation

◆ eps_view_align

const float eps_view_align = 1e-2f
static

Dot products below this will be considered view aligned. In this case we can't usefully project the mouse cursor onto the plane, so use a fall-back plane instead.

Definition at line 75 of file view3d_placement.c.

Referenced by view3d_interactive_add_begin(), and view3d_interactive_add_calc_plane().

◆ view3d_gzgt_placement_id

const char* view3d_gzgt_placement_id = "VIEW3D_GGT_placement"
static