3D Viewport: make shading and overlay DNA match UI names.

We should use consistent naming between the internal code and UI whenever
possible, only reason not to is file compatibility.
This commit is contained in:
Brecht Van Lommel 2018-05-05 10:45:15 +02:00
parent 1983eea98e
commit 2094b45447
14 changed files with 211 additions and 215 deletions

@ -222,7 +222,7 @@ def object_add_grid_scale(context):
space_data = context.space_data space_data = context.space_data
if space_data and space_data.type == 'VIEW_3D': if space_data and space_data.type == 'VIEW_3D':
return space_data.grid_scale_unit return space_data.overlay.grid_scale_unit
return 1.0 return 1.0

@ -722,7 +722,7 @@ kmi.properties.value_1 = 'VERTEX'
kmi.properties.value_2 = 'INCREMENT' kmi.properties.value_2 = 'INCREMENT'
kmi = km.keymap_items.new('view3d.select_border', 'EVT_TWEAK_L', 'ANY', ctrl=True) kmi = km.keymap_items.new('view3d.select_border', 'EVT_TWEAK_L', 'ANY', ctrl=True)
kmi = km.keymap_items.new('wm.context_toggle', 'G', 'PRESS') kmi = km.keymap_items.new('wm.context_toggle', 'G', 'PRESS')
kmi.properties.data_path = 'space_data.show_floor' kmi.properties.data_path = 'space_data.overlay.show_floor'
# Map Animation Channels # Map Animation Channels
km = kc.keymaps.new('Animation Channels', space_type='EMPTY', region_type='WINDOW', modal=False) km = kc.keymaps.new('Animation Channels', space_type='EMPTY', region_type='WINDOW', modal=False)

@ -3546,9 +3546,9 @@ class VIEW3D_PT_shading(Panel):
if shading.type == 'SOLID': if shading.type == 'SOLID':
col.separator() col.separator()
col.row().prop(shading, "single_color_mode", expand=True) col.row().prop(shading, "color_type", expand=True)
if shading.single_color_mode == 'SINGLE': if shading.color_type == 'SINGLE':
col.separator() col.separator()
col.row().prop(shading, "single_color", text="") col.row().prop(shading, "single_color", text="")
@ -3580,7 +3580,6 @@ class VIEW3D_PT_overlay(Panel):
view = context.space_data view = context.space_data
overlay = view.overlay overlay = view.overlay
shading = view.shading
scene = context.scene scene = context.scene
display_all = overlay.show_overlays display_all = overlay.show_overlays
@ -3606,30 +3605,30 @@ class VIEW3D_PT_overlay(Panel):
col = layout.column() col = layout.column()
col.active = display_all col.active = display_all
col.prop(view, "show_outline_selected") col.prop(overlay, "show_outline_selected")
col.prop(view, "show_all_objects_origin") col.prop(overlay, "show_all_objects_origin")
col.prop(view, "show_relationship_lines") col.prop(overlay, "show_relationship_lines")
col.prop(view, "show_face_orientation_overlay") col.prop(overlay, "show_face_orientation")
col = layout.column() col = layout.column()
col.active = display_all col.active = display_all
split = col.split(percentage=0.55) split = col.split(percentage=0.55)
split.prop(view, "show_floor", text="Grid Floor") split.prop(overlay, "show_floor", text="Grid Floor")
row = split.row(align=True) row = split.row(align=True)
row.prop(view, "show_axis_x", text="X", toggle=True) row.prop(overlay, "show_axis_x", text="X", toggle=True)
row.prop(view, "show_axis_y", text="Y", toggle=True) row.prop(overlay, "show_axis_y", text="Y", toggle=True)
row.prop(view, "show_axis_z", text="Z", toggle=True) row.prop(overlay, "show_axis_z", text="Z", toggle=True)
sub = col.column(align=True) sub = col.column(align=True)
sub.active = bool(view.show_floor or view.region_quadviews or not view.region_3d.is_perspective) sub.active = bool(overlay.show_floor or view.region_quadviews or not view.region_3d.is_perspective)
subsub = sub.column(align=True) subsub = sub.column(align=True)
subsub.active = view.show_floor subsub.active = overlay.show_floor
subsub.prop(view, "grid_lines", text="Lines") subsub.prop(overlay, "grid_lines", text="Lines")
sub.prop(view, "grid_scale", text="Scale") sub.prop(overlay, "grid_scale", text="Scale")
subsub = sub.column(align=True) subsub = sub.column(align=True)
subsub.active = scene.unit_settings.system == 'NONE' subsub.active = scene.unit_settings.system == 'NONE'
subsub.prop(view, "grid_subdivisions", text="Subdivisions") subsub.prop(overlay, "grid_subdivisions", text="Subdivisions")
class VIEW3D_PT_quad_view(Panel): class VIEW3D_PT_quad_view(Panel):

@ -28,7 +28,7 @@
* and keep comment above the defines. * and keep comment above the defines.
* Use STRINGIFY() rather than defining with quotes */ * Use STRINGIFY() rather than defining with quotes */
#define BLENDER_VERSION 280 #define BLENDER_VERSION 280
#define BLENDER_SUBVERSION 12 #define BLENDER_SUBVERSION 13
/* Several breakages with 270, e.g. constraint deg vs rad */ /* Several breakages with 270, e.g. constraint deg vs rad */
#define BLENDER_MINVERSION 270 #define BLENDER_MINVERSION 270
#define BLENDER_MINSUBVERSION 6 #define BLENDER_MINSUBVERSION 6

@ -966,7 +966,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) { for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_VIEW3D) { if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *)sl; View3D *v3d = (View3D *)sl;
v3d->drawtype_lighting = V3D_LIGHTING_STUDIO; v3d->shading.light = V3D_LIGHTING_STUDIO;
/* Assume (demo) files written with 2.8 want to show /* Assume (demo) files written with 2.8 want to show
* Eevee renders in the viewport. */ * Eevee renders in the viewport. */
@ -1069,22 +1069,31 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
} }
} }
} }
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *)sl;
v3d->drawtype_ambient_intensity = 0.5;
copy_v3_fl(v3d->drawtype_single_color, 1.0f);
v3d->overlays |= V3D_OVERLAY_HIDE_CURSOR;
}
} }
} }
} }
} }
{ if (!MAIN_VERSION_ATLEAST(main, 280, 13)) {
/* Initialize specular factor. */
if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "spec_fac")) { if (!DNA_struct_elem_find(fd->filesdna, "Lamp", "float", "spec_fac")) {
for (Lamp *la = main->lamp.first; la; la = la->id.next) { for (Lamp *la = main->lamp.first; la; la = la->id.next) {
la->spec_fac = 1.0f; la->spec_fac = 1.0f;
} }
} }
/* Initialize new view3D options. */
for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_VIEW3D) {
View3D *v3d = (View3D *)sl;
v3d->shading.ambient_intensity = 0.5;
copy_v3_fl(v3d->shading.single_color, 1.0f);
v3d->overlay.flag |= V3D_OVERLAY_HIDE_CURSOR;
}
}
}
}
} }
} }

@ -18,12 +18,12 @@ void main()
vec2 uv_viewport = gl_FragCoord.xy * invertedViewportSize; vec2 uv_viewport = gl_FragCoord.xy * invertedViewportSize;
uint object_id = texelFetch(objectId, texel, 0).r; uint object_id = texelFetch(objectId, texel, 0).r;
#ifndef V3D_DRAWOPTION_OBJECT_OVERLAP #ifndef V3D_SHADING_OBJECT_OVERLAP
if (object_id == NO_OBJECT_ID) { if (object_id == NO_OBJECT_ID) {
fragColor = vec4(background_color(world_data, uv_viewport.y), 0.0); fragColor = vec4(background_color(world_data, uv_viewport.y), 0.0);
return; return;
} }
#else /* !V3D_DRAWOPTION_OBJECT_OVERLAP */ #else /* !V3D_SHADING_OBJECT_OVERLAP */
float object_overlap = calculate_object_overlap(objectId, texel, object_id); float object_overlap = calculate_object_overlap(objectId, texel, object_id);
if (object_id == NO_OBJECT_ID) { if (object_id == NO_OBJECT_ID) {
@ -35,7 +35,7 @@ void main()
} }
return; return;
} }
#endif /* !V3D_DRAWOPTION_OBJECT_OVERLAP */ #endif /* !V3D_SHADING_OBJECT_OVERLAP */
#ifdef V3D_LIGHTING_STUDIO #ifdef V3D_LIGHTING_STUDIO
@ -57,9 +57,9 @@ void main()
#endif /* V3D_LIGHTING_STUDIO */ #endif /* V3D_LIGHTING_STUDIO */
#ifdef V3D_DRAWOPTION_OBJECT_OVERLAP #ifdef V3D_SHADING_OBJECT_OVERLAP
shaded_color = mix(objectOverlapColor, shaded_color, object_overlap); shaded_color = mix(objectOverlapColor, shaded_color, object_overlap);
#endif /* V3D_DRAWOPTION_OBJECT_OVERLAP */ #endif /* V3D_SHADING_OBJECT_OVERLAP */
fragColor = vec4(shaded_color, 1.0); fragColor = vec4(shaded_color, 1.0);
} }

@ -72,18 +72,19 @@ extern char datatoc_workbench_world_light_lib_glsl[];
extern DrawEngineType draw_engine_workbench_solid; extern DrawEngineType draw_engine_workbench_solid;
#define NORMAL_VIEWPORT_PASS_ENABLED(wpd) (wpd->drawtype_lighting & V3D_LIGHTING_STUDIO) #define OBJECT_ID_PASS_ENABLED(wpd) (wpd->shading.flag & V3D_SHADING_OBJECT_OVERLAP)
#define SHADOW_ENABLED(wpd) (wpd->drawtype_options & V3D_DRAWOPTION_SHADOW) #define NORMAL_VIEWPORT_PASS_ENABLED(wpd) (wpd->shading.light & V3D_LIGHTING_STUDIO)
#define SHADOW_ENABLED(wpd) (wpd->shading.flag & V3D_SHADING_SHADOW)
static char *workbench_build_defines(WORKBENCH_PrivateData *wpd) static char *workbench_build_defines(WORKBENCH_PrivateData *wpd)
{ {
char *str = NULL; char *str = NULL;
DynStr *ds = BLI_dynstr_new(); DynStr *ds = BLI_dynstr_new();
if (wpd->drawtype_options & V3D_DRAWOPTION_OBJECT_OVERLAP) { if (wpd->shading.flag & V3D_SHADING_OBJECT_OVERLAP) {
BLI_dynstr_appendf(ds, "#define V3D_DRAWOPTION_OBJECT_OVERLAP\n"); BLI_dynstr_appendf(ds, "#define V3D_SHADING_OBJECT_OVERLAP\n");
} }
if (wpd->drawtype_lighting & V3D_LIGHTING_STUDIO) { if (wpd->shading.light & V3D_LIGHTING_STUDIO) {
BLI_dynstr_appendf(ds, "#define V3D_LIGHTING_STUDIO\n"); BLI_dynstr_appendf(ds, "#define V3D_LIGHTING_STUDIO\n");
} }
@ -106,10 +107,10 @@ static char *workbench_build_composite_frag(WORKBENCH_PrivateData *wpd)
BLI_dynstr_append(ds, datatoc_workbench_common_lib_glsl); BLI_dynstr_append(ds, datatoc_workbench_common_lib_glsl);
BLI_dynstr_append(ds, datatoc_workbench_background_lib_glsl); BLI_dynstr_append(ds, datatoc_workbench_background_lib_glsl);
if (wpd->drawtype_lighting & V3D_LIGHTING_STUDIO) { if (wpd->shading.light & V3D_LIGHTING_STUDIO) {
BLI_dynstr_append(ds, datatoc_workbench_world_light_lib_glsl); BLI_dynstr_append(ds, datatoc_workbench_world_light_lib_glsl);
} }
if (wpd->drawtype_options & V3D_DRAWOPTION_OBJECT_OVERLAP) { if (wpd->shading.flag & V3D_SHADING_OBJECT_OVERLAP) {
BLI_dynstr_append(ds, datatoc_workbench_object_overlap_lib_glsl); BLI_dynstr_append(ds, datatoc_workbench_object_overlap_lib_glsl);
} }
@ -136,9 +137,9 @@ static char *workbench_build_prepass_frag(void)
static int get_shader_index(WORKBENCH_PrivateData *wpd) static int get_shader_index(WORKBENCH_PrivateData *wpd)
{ {
const int DRAWOPTIONS_MASK = V3D_DRAWOPTION_OBJECT_OVERLAP; const int DRAWOPTIONS_MASK = V3D_SHADING_OBJECT_OVERLAP;
int index = (wpd->drawtype_options & DRAWOPTIONS_MASK); int index = (wpd->shading.flag & DRAWOPTIONS_MASK);
index = (index << 2) + wpd->drawtype_lighting; index = (index << 2) + wpd->shading.light;
return index; return index;
} }
@ -183,10 +184,10 @@ static void workbench_init_object_data(ObjectEngineData *engine_data)
static void get_material_solid_color(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, float *color, float hsv_saturation, float hsv_value) static void get_material_solid_color(WORKBENCH_PrivateData *wpd, Object *ob, Material *mat, float *color, float hsv_saturation, float hsv_value)
{ {
static float default_color[] = {1.0f, 1.0f, 1.0f}; static float default_color[] = {1.0f, 1.0f, 1.0f};
if (DRW_object_is_paint_mode(ob) || wpd->drawtype_options & V3D_DRAWOPTION_SINGLE_COLOR) { if (DRW_object_is_paint_mode(ob) || wpd->shading.color_type == V3D_SHADING_SINGLE_COLOR) {
copy_v3_v3(color, wpd->drawtype_single_color); copy_v3_v3(color, wpd->shading.single_color);
} }
else if (wpd->drawtype_options & V3D_DRAWOPTION_RANDOMIZE) { else if (wpd->shading.color_type == V3D_SHADING_RANDOM_COLOR) {
uint hash = BLI_ghashutil_strhash_p_murmur(ob->id.name); uint hash = BLI_ghashutil_strhash_p_murmur(ob->id.name);
if (ob->id.lib) { if (ob->id.lib) {
hash = (hash * 13) ^ BLI_ghashutil_strhash_p_murmur(ob->id.lib->name); hash = (hash * 13) ^ BLI_ghashutil_strhash_p_murmur(ob->id.lib->name);
@ -196,11 +197,11 @@ static void get_material_solid_color(WORKBENCH_PrivateData *wpd, Object *ob, Mat
float hsv[3] = {offset, hsv_saturation, hsv_value}; float hsv[3] = {offset, hsv_saturation, hsv_value};
hsv_to_rgb_v(hsv, color); hsv_to_rgb_v(hsv, color);
} }
else if (wpd->drawtype_options & V3D_DRAWOPTION_OBJECT_COLOR) { else if (wpd->shading.color_type == V3D_SHADING_OBJECT_COLOR) {
copy_v3_v3(color, ob->col); copy_v3_v3(color, ob->col);
} }
else { else {
/* V3D_DRAWOPTION_MATERIAL_COLOR */ /* V3D_SHADING_MATERIAL_COLOR */
if (mat) { if (mat) {
copy_v3_v3(color, &mat->r); copy_v3_v3(color, &mat->r);
} }
@ -297,18 +298,13 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata)
View3D *v3d = DCS->v3d; View3D *v3d = DCS->v3d;
if (v3d) { if (v3d) {
wpd->drawtype_lighting = v3d->drawtype_lighting; wpd->shading = v3d->shading;
wpd->drawtype_options = v3d->drawtype_options;
wpd->drawtype_studiolight = v3d->drawtype_studiolight;
wpd->drawtype_ambient_intensity = v3d->drawtype_ambient_intensity;
copy_v3_v3(wpd->drawtype_single_color, v3d->drawtype_single_color);
} }
else { else {
wpd->drawtype_lighting = V3D_LIGHTING_STUDIO; memset(&wpd->shading, 0, sizeof(wpd->shading));
wpd->drawtype_options = 0; wpd->shading.light = V3D_LIGHTING_STUDIO;
wpd->drawtype_studiolight = 0; wpd->shading.ambient_intensity = 0.5;
wpd->drawtype_ambient_intensity = 0.5; copy_v3_fl(wpd->shading.single_color, 1.0f);
copy_v3_fl(wpd->drawtype_single_color, 1.0f);
} }
select_deferred_shaders(wpd); select_deferred_shaders(wpd);
@ -317,7 +313,7 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata)
WORKBENCH_UBO_World *wd = &wpd->world_data; WORKBENCH_UBO_World *wd = &wpd->world_data;
UI_GetThemeColor3fv(UI_GetThemeValue(TH_SHOW_BACK_GRAD) ? TH_LOW_GRAD:TH_HIGH_GRAD, wd->background_color_low); UI_GetThemeColor3fv(UI_GetThemeValue(TH_SHOW_BACK_GRAD) ? TH_LOW_GRAD:TH_HIGH_GRAD, wd->background_color_low);
UI_GetThemeColor3fv(TH_HIGH_GRAD, wd->background_color_high); UI_GetThemeColor3fv(TH_HIGH_GRAD, wd->background_color_high);
studiolight_update_world(wpd->drawtype_studiolight, wd); studiolight_update_world(wpd->shading.studio_light, wd);
wpd->world_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_World), NULL); wpd->world_ubo = DRW_uniformbuffer_create(sizeof(WORKBENCH_UBO_World), NULL);
DRW_uniformbuffer_update(wpd->world_ubo, &wpd->world_data); DRW_uniformbuffer_update(wpd->world_ubo, &wpd->world_data);
@ -350,7 +346,7 @@ void workbench_materials_cache_init(WORKBENCH_Data *vedata)
grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_shadow_pass); grp = DRW_shgroup_create(wpd->composite_sh, psl->composite_shadow_pass);
DRW_shgroup_stencil_mask(grp, 0x00); DRW_shgroup_stencil_mask(grp, 0x00);
workbench_composite_uniforms(wpd, grp); workbench_composite_uniforms(wpd, grp);
DRW_shgroup_uniform_float(grp, "lightMultiplier", &wpd->drawtype_ambient_intensity, 1); DRW_shgroup_uniform_float(grp, "lightMultiplier", &wpd->shading.ambient_intensity, 1);
DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL); DRW_shgroup_call_add(grp, DRW_cache_fullscreen_quad_get(), NULL);
#endif #endif
} }
@ -446,7 +442,7 @@ void workbench_materials_solid_cache_populate(WORKBENCH_Data *vedata, Object *ob
const bool is_active = (ob == draw_ctx->obact); const bool is_active = (ob == draw_ctx->obact);
const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0; const bool is_sculpt_mode = is_active && (draw_ctx->object_mode & OB_MODE_SCULPT) != 0;
if ((vedata->stl->g_data->drawtype_options & V3D_DRAWOPTION_SOLID_COLOR_MASK) != 0 || is_sculpt_mode) { if (vedata->stl->g_data->shading.color_type != V3D_SHADING_MATERIAL_COLOR || is_sculpt_mode) {
/* No material split needed */ /* No material split needed */
struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob); struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
if (geom) { if (geom) {

@ -75,11 +75,7 @@ typedef struct WORKBENCH_PrivateData {
struct GHash *material_hash; struct GHash *material_hash;
struct GPUShader *prepass_sh; struct GPUShader *prepass_sh;
struct GPUShader *composite_sh; struct GPUShader *composite_sh;
short drawtype_lighting; View3DShading shading;
short drawtype_options;
short drawtype_studiolight;
float drawtype_ambient_intensity;
float drawtype_single_color[3];
struct GPUUniformBuffer *world_ubo; struct GPUUniformBuffer *world_ubo;
struct DRWShadingGroup *shadow_shgrp; struct DRWShadingGroup *shadow_shgrp;
WORKBENCH_UBO_World world_data; WORKBENCH_UBO_World world_data;

@ -983,7 +983,7 @@ static void drw_engines_enable_external(void)
/* TODO revisit this when proper layering is implemented */ /* TODO revisit this when proper layering is implemented */
/* Gather all draw engines needed and store them in DST.enabled_engines /* Gather all draw engines needed and store them in DST.enabled_engines
* That also define the rendering order of engines */ * That also define the rendering order of engines */
static void drw_engines_enable_from_engine(RenderEngineType *engine_type, int drawtype, int UNUSED(drawtype_lighting)) static void drw_engines_enable_from_engine(RenderEngineType *engine_type, int drawtype)
{ {
switch (drawtype) { switch (drawtype) {
case OB_WIRE: case OB_WIRE:
@ -1065,9 +1065,9 @@ static void drw_engines_enable_from_mode(int mode)
} }
} }
static void drw_engines_enable_from_overlays(int draw_overlays) static void drw_engines_enable_from_overlays(int overlay_flag)
{ {
if (draw_overlays) { if (overlay_flag) {
use_drw_engine(&draw_engine_overlay_type); use_drw_engine(&draw_engine_overlay_type);
} }
} }
@ -1085,12 +1085,11 @@ static void drw_engines_enable(ViewLayer *view_layer, RenderEngineType *engine_t
const int mode = CTX_data_mode_enum_ex(DST.draw_ctx.object_edit, obact, DST.draw_ctx.object_mode); const int mode = CTX_data_mode_enum_ex(DST.draw_ctx.object_edit, obact, DST.draw_ctx.object_mode);
View3D * v3d = DST.draw_ctx.v3d; View3D * v3d = DST.draw_ctx.v3d;
const int drawtype = v3d->drawtype; const int drawtype = v3d->drawtype;
const int drawtype_lighting = v3d->drawtype_lighting;
drw_engines_enable_from_engine(engine_type, drawtype, drawtype_lighting); drw_engines_enable_from_engine(engine_type, drawtype);
if (DRW_state_draw_support()) { if (DRW_state_draw_support()) {
drw_engines_enable_from_overlays(v3d->overlays); drw_engines_enable_from_overlays(v3d->overlay.flag);
drw_engines_enable_from_object_mode(); drw_engines_enable_from_object_mode();
drw_engines_enable_from_mode(mode); drw_engines_enable_from_mode(mode);
} }

@ -615,7 +615,7 @@ static bool is_cursor_visible(const DRWContextState *draw_ctx, Scene *scene, Vie
{ {
Object *ob = OBACT(view_layer); Object *ob = OBACT(view_layer);
View3D *v3d = draw_ctx->v3d; View3D *v3d = draw_ctx->v3d;
if ((v3d->flag2 & V3D_RENDER_OVERRIDE) > 0 || (v3d->overlays & V3D_OVERLAY_HIDE_CURSOR)) { if ((v3d->flag2 & V3D_RENDER_OVERRIDE) > 0 || (v3d->overlay.flag & V3D_OVERLAY_HIDE_CURSOR)) {
return false; return false;
} }

@ -49,7 +49,7 @@ typedef struct OVERLAY_Data {
typedef struct OVERLAY_PrivateData { typedef struct OVERLAY_PrivateData {
DRWShadingGroup *face_orientation_shgrp; DRWShadingGroup *face_orientation_shgrp;
int overlays; View3DOverlay overlay;
} OVERLAY_PrivateData; /* Transient data */ } OVERLAY_PrivateData; /* Transient data */
/* *********** STATIC *********** */ /* *********** STATIC *********** */
@ -90,14 +90,14 @@ static void overlay_cache_init(void *vedata)
View3D *v3d = DCS->v3d; View3D *v3d = DCS->v3d;
if (v3d) { if (v3d) {
stl->g_data->overlays = v3d->overlays; stl->g_data->overlay = v3d->overlay;
} }
else { else {
stl->g_data->overlays = 0; memset(&stl->g_data->overlay, 0, sizeof(stl->g_data->overlay));
} }
/* Face Orientation Pass */ /* Face Orientation Pass */
if (stl->g_data->overlays & V3D_OVERLAY_FACE_ORIENTATION) { if (stl->g_data->overlay.flag & V3D_OVERLAY_FACE_ORIENTATION) {
int state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND; int state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND;
psl->face_orientation_pass = DRW_pass_create("Face Orientation", state); psl->face_orientation_pass = DRW_pass_create("Face Orientation", state);
stl->g_data->face_orientation_shgrp = DRW_shgroup_create(e_data.face_orientation_sh, psl->face_orientation_pass); stl->g_data->face_orientation_shgrp = DRW_shgroup_create(e_data.face_orientation_sh, psl->face_orientation_pass);
@ -116,7 +116,7 @@ static void overlay_cache_populate(void *vedata, Object *ob)
struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob); struct Gwn_Batch *geom = DRW_cache_object_surface_get(ob);
if (geom) { if (geom) {
/* Face Orientation */ /* Face Orientation */
if (stl->g_data->overlays & V3D_OVERLAY_FACE_ORIENTATION) { if (stl->g_data->overlay.flag & V3D_OVERLAY_FACE_ORIENTATION) {
DRW_shgroup_call_add(pd->face_orientation_shgrp, geom, ob->obmat); DRW_shgroup_call_add(pd->face_orientation_shgrp, geom, ob->obmat);
} }
} }
@ -133,7 +133,7 @@ static void overlay_draw_scene(void *vedata)
OVERLAY_StorageList *stl = data->stl; OVERLAY_StorageList *stl = data->stl;
OVERLAY_PrivateData *pd = stl->g_data; OVERLAY_PrivateData *pd = stl->g_data;
if (pd->overlays & V3D_OVERLAY_FACE_ORIENTATION) { if (pd->overlay.flag & V3D_OVERLAY_FACE_ORIENTATION) {
DRW_draw_pass(psl->face_orientation_pass); DRW_draw_pass(psl->face_orientation_pass);
} }
} }

@ -322,9 +322,9 @@ static SpaceLink *view3d_new(const ScrArea *UNUSED(sa), const Scene *scene)
v3d->gridlines = 16; v3d->gridlines = 16;
v3d->gridsubdiv = 10; v3d->gridsubdiv = 10;
v3d->drawtype = OB_SOLID; v3d->drawtype = OB_SOLID;
v3d->drawtype_lighting = V3D_LIGHTING_STUDIO; v3d->shading.light = V3D_LIGHTING_STUDIO;
v3d->drawtype_ambient_intensity = 0.5; v3d->shading.ambient_intensity = 0.5;
copy_v3_fl(v3d->drawtype_single_color, 1.0f); copy_v3_fl(v3d->shading.single_color, 1.0f);
v3d->gridflag = V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_FLOOR; v3d->gridflag = V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_FLOOR;

@ -131,6 +131,24 @@ typedef struct RegionView3D {
float rot_axis[3]; float rot_axis[3];
} RegionView3D; } RegionView3D;
/* 3D Viewport Shading setings */
typedef struct View3DShading {
short flag;
short color_type;
short light;
short studio_light;
float ambient_intensity;
float single_color[3];
} View3DShading;
/* 3D Viewport Overlay setings */
typedef struct View3DOverlay {
int flag;
int pad;
} View3DOverlay;
/* 3D ViewPort Struct */ /* 3D ViewPort Struct */
typedef struct View3D { typedef struct View3D {
struct SpaceLink *next, *prev; struct SpaceLink *next, *prev;
@ -162,13 +180,9 @@ typedef struct View3D {
unsigned int lay; unsigned int lay;
int layact; int layact;
/**
* The drawing mode for the 3d display. Set to OB_BOUNDBOX, OB_WIRE, OB_SOLID,
* OB_TEXTURE, OB_MATERIAL or OB_RENDER */
short drawtype;
short ob_centre_cursor; /* optional bool for 3d cursor to define center */ short ob_centre_cursor; /* optional bool for 3d cursor to define center */
short scenelock, around; short scenelock, around;
short flag, flag2; short flag, flag2, pad2;
float lens, grid; float lens, grid;
float near, far; float near, far;
@ -202,7 +216,7 @@ typedef struct View3D {
/* XXX deprecated? */ /* XXX deprecated? */
struct bGPdata *gpd DNA_DEPRECATED; /* Grease-Pencil Data (annotation layers) */ struct bGPdata *gpd DNA_DEPRECATED; /* Grease-Pencil Data (annotation layers) */
/* multiview - stereo 3d */ /* Stereoscopy settings */
short stereo3d_flag; short stereo3d_flag;
char stereo3d_camera; char stereo3d_camera;
char pad4; char pad4;
@ -210,19 +224,13 @@ typedef struct View3D {
float stereo3d_volume_alpha; float stereo3d_volume_alpha;
float stereo3d_convergence_alpha; float stereo3d_convergence_alpha;
/* Previous viewport draw type. /* Display settings */
* Runtime-only, set in the rendered viewport toggle operator. short drawtype; /* Shading mode (OB_SOLID, OB_TEXTURE, ..) */
*/ short prev_drawtype; /* Runtime, for toggle between rendered viewport. */
short prev_drawtype;
/* drawtype options (lighting, random) used for drawtype == OB_SOLID */
short drawtype_lighting;
short drawtype_options;
short drawtype_studiolight;
float drawtype_ambient_intensity;
float drawtype_single_color[3];
int overlays;
int pad5; int pad5;
View3DShading shading;
View3DOverlay overlay;
} View3D; } View3D;
@ -299,30 +307,28 @@ typedef struct View3D {
/* View3d->flag3 (short) */ /* View3d->flag3 (short) */
#define V3D_SHOW_WORLD (1 << 0) #define V3D_SHOW_WORLD (1 << 0)
/* View3D->drawtype_lighting */ /* View3DShading->light */
enum { enum {
V3D_LIGHTING_FLAT = 0, V3D_LIGHTING_FLAT = 0,
V3D_LIGHTING_STUDIO = 1, V3D_LIGHTING_STUDIO = 1,
V3D_LIGHTING_SCENE = 2 V3D_LIGHTING_SCENE = 2
}; };
/* View3D->drawtype_options */ /* View3DShading->flag */
enum { enum {
V3D_DRAWOPTION_MATERIAL_COLOR = (0 << 0), V3D_SHADING_OBJECT_OVERLAP = (1 << 0),
V3D_DRAWOPTION_RANDOMIZE = (1 << 0), V3D_SHADING_SHADOW = (1 << 2),
V3D_DRAWOPTION_OBJECT_OVERLAP = (1 << 1),
V3D_DRAWOPTION_SINGLE_COLOR = (1 << 2),
V3D_DRAWOPTION_OBJECT_COLOR = (1 << 4),
V3D_DRAWOPTION_SHADOW = (1 << 5),
/* These options are mutually exclusive. */
V3D_DRAWOPTION_SOLID_COLOR_MASK = (V3D_DRAWOPTION_SINGLE_COLOR |
V3D_DRAWOPTION_RANDOMIZE |
V3D_DRAWOPTION_OBJECT_COLOR |
V3D_DRAWOPTION_MATERIAL_COLOR),
}; };
/* View3D->overlays */ /* View3DShading->single_color_type */
enum {
V3D_SHADING_MATERIAL_COLOR = 0,
V3D_SHADING_RANDOM_COLOR = 1,
V3D_SHADING_SINGLE_COLOR = 2,
V3D_SHADING_OBJECT_COLOR = 3,
};
/* View3DOverlay->flag */
enum { enum {
V3D_OVERLAY_FACE_ORIENTATION = (1 << 0), V3D_OVERLAY_FACE_ORIENTATION = (1 << 0),
V3D_OVERLAY_HIDE_CURSOR = (1 << 1), V3D_OVERLAY_HIDE_CURSOR = (1 << 1),

@ -463,7 +463,7 @@ static void rna_View3D_CursorLocation_set(PointerRNA *ptr, const float *values)
copy_v3_v3(cursor, values); copy_v3_v3(cursor, values);
} }
static float rna_View3D_GridScaleUnit_get(PointerRNA *ptr) static float rna_View3DOverlay_GridScaleUnit_get(PointerRNA *ptr)
{ {
View3D *v3d = (View3D *)(ptr->data); View3D *v3d = (View3D *)(ptr->data);
bScreen *screen = ptr->id.data; bScreen *screen = ptr->id.data;
@ -662,16 +662,6 @@ static void rna_3DViewShading_type_set(PointerRNA *ptr, int value)
v3d->drawtype = value; v3d->drawtype = value;
} }
static void rna_View3DShading_single_color_mode_set(PointerRNA *ptr, int value) {
View3D *v3d = (View3D *)ptr->data;
v3d->drawtype_options = (v3d->drawtype_options &~ V3D_DRAWOPTION_SOLID_COLOR_MASK) + value;
}
static int rna_View3DShading_single_color_mode_get(PointerRNA *ptr) {
View3D *v3d = (View3D *)ptr->data;
return v3d->drawtype_options & V3D_DRAWOPTION_SOLID_COLOR_MASK;
}
static const EnumPropertyItem *rna_3DViewShading_type_itemf( static const EnumPropertyItem *rna_3DViewShading_type_itemf(
bContext *C, PointerRNA *UNUSED(ptr), bContext *C, PointerRNA *UNUSED(ptr),
PropertyRNA *UNUSED(prop), bool *r_free) PropertyRNA *UNUSED(prop), bool *r_free)
@ -2177,11 +2167,11 @@ static void rna_def_space_view3d_shading(BlenderRNA *brna)
StructRNA *srna; StructRNA *srna;
PropertyRNA *prop; PropertyRNA *prop;
static const EnumPropertyItem single_color_mode_items[] = { static const EnumPropertyItem color_type_items[] = {
{V3D_DRAWOPTION_SINGLE_COLOR, "SINGLE", 0, "Single", "Show scene in a single color"}, {V3D_SHADING_SINGLE_COLOR, "SINGLE", 0, "Single", "Show scene in a single color"},
{V3D_DRAWOPTION_OBJECT_COLOR, "OBJECT", 0, "Object", "Show Object color"}, {V3D_SHADING_OBJECT_COLOR, "OBJECT", 0, "Object", "Show Object color"},
{V3D_DRAWOPTION_MATERIAL_COLOR, "MATERIAL", 0, "Material", "Show Material color"}, {V3D_SHADING_MATERIAL_COLOR, "MATERIAL", 0, "Material", "Show Material color"},
{V3D_DRAWOPTION_RANDOMIZE, "RANDOM", 0, "Random", "Show random object color"}, {V3D_SHADING_RANDOM_COLOR, "RANDOM", 0, "Random", "Show random object color"},
{0, NULL, 0, NULL, NULL} {0, NULL, 0, NULL, NULL}
}; };
static const EnumPropertyItem studio_lighting_items[] = { static const EnumPropertyItem studio_lighting_items[] = {
@ -2207,46 +2197,43 @@ static void rna_def_space_view3d_shading(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Viewport Shading", "Method to display/shade objects in the 3D View"); RNA_def_property_ui_text(prop, "Viewport Shading", "Method to display/shade objects in the 3D View");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
RNA_def_struct_sdna(srna, "View3DShading");
prop = RNA_def_property(srna, "light", PROP_ENUM, PROP_NONE); prop = RNA_def_property(srna, "light", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "drawtype_lighting"); RNA_def_property_enum_sdna(prop, NULL, "light");
RNA_def_property_enum_items(prop, rna_enum_viewport_lighting_items); RNA_def_property_enum_items(prop, rna_enum_viewport_lighting_items);
RNA_def_property_ui_text(prop, "Lighting", "Lighting Method for Solid/Texture Viewport Shading"); RNA_def_property_ui_text(prop, "Lighting", "Lighting Method for Solid/Texture Viewport Shading");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "show_object_overlap", PROP_BOOLEAN, PROP_NONE); prop = RNA_def_property(srna, "show_object_overlap", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawtype_options", V3D_DRAWOPTION_OBJECT_OVERLAP); RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SHADING_OBJECT_OVERLAP);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Object Overlap", "Show Object Overlap"); RNA_def_property_ui_text(prop, "Object Overlap", "Show Object Overlap");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "studiolight", PROP_ENUM, PROP_NONE); prop = RNA_def_property(srna, "studio_light", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "drawtype_studiolight");
RNA_def_property_enum_items(prop, studio_lighting_items); RNA_def_property_enum_items(prop, studio_lighting_items);
RNA_def_property_ui_text(prop, "Studiolight", "Studio lighting setup"); RNA_def_property_ui_text(prop, "Studiolight", "Studio lighting setup");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "single_color_mode", PROP_ENUM, PROP_NONE); prop = RNA_def_property(srna, "color_type", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, single_color_mode_items); RNA_def_property_enum_items(prop, color_type_items);
RNA_def_property_enum_funcs(prop, "rna_View3DShading_single_color_mode_get", RNA_def_property_ui_text(prop, "Color", "Color Type");
"rna_View3DShading_single_color_mode_set",
NULL);
RNA_def_property_ui_text(prop, "Color", "Single Color Mode");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "single_color", PROP_FLOAT, PROP_COLOR); prop = RNA_def_property(srna, "single_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "drawtype_single_color");
RNA_def_property_array(prop, 3); RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Color", "Color for single color mode"); RNA_def_property_ui_text(prop, "Color", "Color for single color mode");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "show_shadows", PROP_BOOLEAN, PROP_NONE); prop = RNA_def_property(srna, "show_shadows", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "drawtype_options", V3D_DRAWOPTION_SHADOW); RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SHADING_SHADOW);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Shadow", "Show Shadow"); RNA_def_property_ui_text(prop, "Shadow", "Show Shadow");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update"); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "ambient_light_intensity", PROP_FLOAT, PROP_NONE); prop = RNA_def_property(srna, "ambient_light_intensity", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "drawtype_ambient_intensity"); RNA_def_property_float_sdna(prop, NULL, "ambient_intensity");
RNA_def_property_float_default(prop, 0.5); RNA_def_property_float_default(prop, 0.5);
RNA_def_property_ui_text(prop, "Ambient Light", "Intensity of ambient light for shadows"); RNA_def_property_ui_text(prop, "Ambient Light", "Intensity of ambient light for shadows");
RNA_def_property_range(prop, 0.0f, 1.0f); RNA_def_property_range(prop, 0.0f, 1.0f);
@ -2271,10 +2258,85 @@ static void rna_def_space_view3d_overlay(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Show Overlays", "Display overlays like manipulators and outlines"); RNA_def_property_ui_text(prop, "Show Overlays", "Display overlays like manipulators and outlines");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_FLOOR);
RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid in perspective view");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_axis_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_X);
RNA_def_property_ui_text(prop, "Display X Axis", "Show the X axis line in perspective view");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_axis_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Y);
RNA_def_property_ui_text(prop, "Display Y Axis", "Show the Y axis line in perspective view");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_axis_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Z);
RNA_def_property_ui_text(prop, "Display Z Axis", "Show the Z axis line in perspective view");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "grid");
RNA_def_property_ui_text(prop, "Grid Scale", "Distance between 3D View grid lines");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.001f, 1000.0f, 0.1f, 3);
RNA_def_property_float_default(prop, 1.0f);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_lines", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gridlines");
RNA_def_property_ui_text(prop, "Grid Lines", "Number of grid lines to display in perspective view");
RNA_def_property_range(prop, 0, 1024);
RNA_def_property_int_default(prop, 16);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_subdivisions", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gridsubdiv");
RNA_def_property_ui_text(prop, "Grid Subdivisions", "Number of subdivisions between grid lines");
RNA_def_property_range(prop, 1, 1024);
RNA_def_property_int_default(prop, 10);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_scale_unit", PROP_FLOAT, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_float_funcs(prop, "rna_View3DOverlay_GridScaleUnit_get", NULL, NULL);
RNA_def_property_ui_text(prop, "Grid Scale Unit", "Grid cell size scaled by scene unit system settings");
prop = RNA_def_property(srna, "show_outline_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SELECT_OUTLINE);
RNA_def_property_ui_text(prop, "Outline Selected",
"Show an outline highlight around selected objects in non-wireframe views");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_all_objects_origin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DRAW_CENTERS);
RNA_def_property_ui_text(prop, "All Object Origins",
"Show the object origin center dot for all (selected and unselected) objects");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_relationship_lines", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_HIDE_HELPLINES);
RNA_def_property_ui_text(prop, "Relationship Lines",
"Show dashed lines indicating parent or constraint relationships");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
RNA_def_struct_sdna(srna, "View3DOverlay");
prop = RNA_def_property(srna, "show_cursor", PROP_BOOLEAN, PROP_NONE); prop = RNA_def_property(srna, "show_cursor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "overlays", V3D_OVERLAY_HIDE_CURSOR); RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_OVERLAY_HIDE_CURSOR);
RNA_def_property_ui_text(prop, "Show 3D Cursor", "Display 3D Cursor Overlay"); RNA_def_property_ui_text(prop, "Show 3D Cursor", "Display 3D Cursor Overlay");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_face_orientation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_OVERLAY_FACE_ORIENTATION);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Face Orientation", "Show the Face Orientation Overlay");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
} }
static void rna_def_space_view3d(BlenderRNA *brna) static void rna_def_space_view3d(BlenderRNA *brna)
@ -2387,12 +2449,6 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Lock to Cursor", "3D View center is locked to the cursor's position"); RNA_def_property_ui_text(prop, "Lock to Cursor", "3D View center is locked to the cursor's position");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_face_orientation_overlay", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "overlays", V3D_OVERLAY_FACE_ORIENTATION);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Face Orientation", "Show the Face Orientation Overlay");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_3DViewShading_type_update");
prop = RNA_def_property(srna, "local_view", PROP_POINTER, PROP_NONE); prop = RNA_def_property(srna, "local_view", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "localvd"); RNA_def_property_pointer_sdna(prop, NULL, "localvd");
RNA_def_property_ui_text(prop, "Local View", RNA_def_property_ui_text(prop, "Local View",
@ -2428,71 +2484,6 @@ static void rna_def_space_view3d(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Clip End", "3D View far clipping distance"); RNA_def_property_ui_text(prop, "Clip End", "3D View far clipping distance");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL); RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "grid");
RNA_def_property_ui_text(prop, "Grid Scale", "Distance between 3D View grid lines");
RNA_def_property_range(prop, 0.0f, FLT_MAX);
RNA_def_property_ui_range(prop, 0.001f, 1000.0f, 0.1f, 3);
RNA_def_property_float_default(prop, 1.0f);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_lines", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gridlines");
RNA_def_property_ui_text(prop, "Grid Lines", "Number of grid lines to display in perspective view");
RNA_def_property_range(prop, 0, 1024);
RNA_def_property_int_default(prop, 16);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_subdivisions", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "gridsubdiv");
RNA_def_property_ui_text(prop, "Grid Subdivisions", "Number of subdivisions between grid lines");
RNA_def_property_range(prop, 1, 1024);
RNA_def_property_int_default(prop, 10);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "grid_scale_unit", PROP_FLOAT, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_float_funcs(prop, "rna_View3D_GridScaleUnit_get", NULL, NULL);
RNA_def_property_ui_text(prop, "Grid Scale Unit", "Grid cell size scaled by scene unit system settings");
prop = RNA_def_property(srna, "show_floor", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_FLOOR);
RNA_def_property_ui_text(prop, "Display Grid Floor", "Show the ground plane grid in perspective view");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_axis_x", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_X);
RNA_def_property_ui_text(prop, "Display X Axis", "Show the X axis line in perspective view");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_axis_y", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Y);
RNA_def_property_ui_text(prop, "Display Y Axis", "Show the Y axis line in perspective view");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_axis_z", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "gridflag", V3D_SHOW_Z);
RNA_def_property_ui_text(prop, "Display Z Axis", "Show the Z axis line in perspective view");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_outline_selected", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_SELECT_OUTLINE);
RNA_def_property_ui_text(prop, "Outline Selected",
"Show an outline highlight around selected objects in non-wireframe views");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_all_objects_origin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", V3D_DRAW_CENTERS);
RNA_def_property_ui_text(prop, "All Object Origins",
"Show the object origin center dot for all (selected and unselected) objects");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_relationship_lines", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", V3D_HIDE_HELPLINES);
RNA_def_property_ui_text(prop, "Relationship Lines",
"Show dashed lines indicating parent or constraint relationships");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_grease_pencil", PROP_BOOLEAN, PROP_NONE); prop = RNA_def_property(srna, "show_grease_pencil", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_GPENCIL); RNA_def_property_boolean_sdna(prop, NULL, "flag2", V3D_SHOW_GPENCIL);
RNA_def_property_ui_text(prop, "Show Grease Pencil", RNA_def_property_ui_text(prop, "Show Grease Pencil",