Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_view3d/space_view3d.cc
| Show All 38 Lines | |||||
| #include "BKE_layer.h" | #include "BKE_layer.h" | ||||
| #include "BKE_lib_remap.h" | #include "BKE_lib_remap.h" | ||||
| #include "BKE_main.h" | #include "BKE_main.h" | ||||
| #include "BKE_mball.h" | #include "BKE_mball.h" | ||||
| #include "BKE_mesh.h" | #include "BKE_mesh.h" | ||||
| #include "BKE_object.h" | #include "BKE_object.h" | ||||
| #include "BKE_scene.h" | #include "BKE_scene.h" | ||||
| #include "BKE_screen.h" | #include "BKE_screen.h" | ||||
| #include "BKE_viewer_path.h" | |||||
| #include "BKE_workspace.h" | #include "BKE_workspace.h" | ||||
| #include "ED_object.h" | #include "ED_object.h" | ||||
| #include "ED_outliner.h" | #include "ED_outliner.h" | ||||
| #include "ED_render.h" | #include "ED_render.h" | ||||
| #include "ED_screen.h" | #include "ED_screen.h" | ||||
| #include "ED_space_api.h" | #include "ED_space_api.h" | ||||
| #include "ED_transform.h" | #include "ED_transform.h" | ||||
| #include "ED_undo.h" | #include "ED_undo.h" | ||||
| #include "ED_viewer_path.hh" | |||||
| #include "GPU_matrix.h" | #include "GPU_matrix.h" | ||||
| #include "DRW_engine.h" | #include "DRW_engine.h" | ||||
| #include "WM_api.h" | #include "WM_api.h" | ||||
| #include "WM_message.h" | #include "WM_message.h" | ||||
| #include "WM_toolsystem.h" | #include "WM_toolsystem.h" | ||||
| ▲ Show 20 Lines • Show All 253 Lines • ▼ Show 20 Lines | static void view3d_free(SpaceLink *sl) | ||||
| if (vd->runtime.properties_storage) { | if (vd->runtime.properties_storage) { | ||||
| MEM_freeN(vd->runtime.properties_storage); | MEM_freeN(vd->runtime.properties_storage); | ||||
| } | } | ||||
| if (vd->shading.prop) { | if (vd->shading.prop) { | ||||
| IDP_FreeProperty(vd->shading.prop); | IDP_FreeProperty(vd->shading.prop); | ||||
| vd->shading.prop = nullptr; | vd->shading.prop = nullptr; | ||||
| } | } | ||||
| BKE_viewer_path_clear(&vd->viewer_path); | |||||
| } | } | ||||
| /* spacetype; init callback */ | /* spacetype; init callback */ | ||||
| static void view3d_init(wmWindowManager *UNUSED(wm), ScrArea *UNUSED(area)) | static void view3d_init(wmWindowManager *UNUSED(wm), ScrArea *UNUSED(area)) | ||||
| { | { | ||||
| } | } | ||||
| static void view3d_exit(wmWindowManager *UNUSED(wm), ScrArea *area) | static void view3d_exit(wmWindowManager *UNUSED(wm), ScrArea *area) | ||||
| Show All 22 Lines | static SpaceLink *view3d_duplicate(SpaceLink *sl) | ||||
| if (v3dn->shading.type == OB_RENDER) { | if (v3dn->shading.type == OB_RENDER) { | ||||
| v3dn->shading.type = OB_SOLID; | v3dn->shading.type = OB_SOLID; | ||||
| } | } | ||||
| if (v3dn->shading.prop) { | if (v3dn->shading.prop) { | ||||
| v3dn->shading.prop = IDP_CopyProperty(v3do->shading.prop); | v3dn->shading.prop = IDP_CopyProperty(v3do->shading.prop); | ||||
| } | } | ||||
| BKE_viewer_path_copy(&v3dn->viewer_path, &v3do->viewer_path); | |||||
| /* copy or clear inside new stuff */ | /* copy or clear inside new stuff */ | ||||
| return (SpaceLink *)v3dn; | return (SpaceLink *)v3dn; | ||||
| } | } | ||||
| /* add handlers, stuff you only do once or on area/region changes */ | /* add handlers, stuff you only do once or on area/region changes */ | ||||
| static void view3d_main_region_init(wmWindowManager *wm, ARegion *region) | static void view3d_main_region_init(wmWindowManager *wm, ARegion *region) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 943 Lines • ▼ Show 20 Lines | case NC_GPENCIL: | ||||
| if (wmn->data == ND_DATA || ELEM(wmn->action, NA_EDITED, NA_SELECTED)) { | if (wmn->data == ND_DATA || ELEM(wmn->action, NA_EDITED, NA_SELECTED)) { | ||||
| ED_region_tag_redraw(region); | ED_region_tag_redraw(region); | ||||
| } | } | ||||
| break; | break; | ||||
| case NC_WORKSPACE: | case NC_WORKSPACE: | ||||
| /* In case the region displays workspace settings. */ | /* In case the region displays workspace settings. */ | ||||
| ED_region_tag_redraw(region); | ED_region_tag_redraw(region); | ||||
| break; | break; | ||||
| case NC_VIEWER_PATH: { | |||||
| if (v3d->flag2 & V3D_SHOW_VIEWER) { | |||||
| ViewLayer *view_layer = WM_window_get_active_view_layer(window); | |||||
| if (Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer)) { | |||||
| ED_render_view3d_update(depsgraph, window, area, true); | |||||
| } | |||||
| ED_region_tag_redraw(region); | |||||
| } | |||||
| break; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| static void view3d_do_msg_notify_workbench_view_update(struct bContext *C, | static void view3d_do_msg_notify_workbench_view_update(struct bContext *C, | ||||
| struct wmMsgSubscribeKey *UNUSED(msg_key), | struct wmMsgSubscribeKey *UNUSED(msg_key), | ||||
| struct wmMsgSubscribeValue *msg_val) | struct wmMsgSubscribeValue *msg_val) | ||||
| { | { | ||||
| Scene *scene = CTX_data_scene(C); | Scene *scene = CTX_data_scene(C); | ||||
| ▲ Show 20 Lines • Show All 645 Lines • ▼ Show 20 Lines | static void view3d_id_remap(ScrArea *area, SpaceLink *slink, const struct IDRemapper *mappings) | ||||
| View3D *view3d = (View3D *)slink; | View3D *view3d = (View3D *)slink; | ||||
| view3d_id_remap_v3d(area, slink, view3d, mappings, false); | view3d_id_remap_v3d(area, slink, view3d, mappings, false); | ||||
| view3d_id_remap_v3d_ob_centers(view3d, mappings); | view3d_id_remap_v3d_ob_centers(view3d, mappings); | ||||
| if (view3d->localvd != nullptr) { | if (view3d->localvd != nullptr) { | ||||
| /* Object centers in local-view aren't used, see: T52663 */ | /* Object centers in local-view aren't used, see: T52663 */ | ||||
| view3d_id_remap_v3d(area, slink, view3d->localvd, mappings, true); | view3d_id_remap_v3d(area, slink, view3d->localvd, mappings, true); | ||||
| } | } | ||||
| BKE_viewer_path_id_remap(&view3d->viewer_path, mappings); | |||||
| } | } | ||||
| static void view3d_blend_read_data(BlendDataReader *reader, SpaceLink *sl) | static void view3d_blend_read_data(BlendDataReader *reader, SpaceLink *sl) | ||||
| { | { | ||||
| View3D *v3d = (View3D *)sl; | View3D *v3d = (View3D *)sl; | ||||
| memset(&v3d->runtime, 0x0, sizeof(v3d->runtime)); | memset(&v3d->runtime, 0x0, sizeof(v3d->runtime)); | ||||
| if (v3d->gpd) { | if (v3d->gpd) { | ||||
| BLO_read_data_address(reader, &v3d->gpd); | BLO_read_data_address(reader, &v3d->gpd); | ||||
| BKE_gpencil_blend_read_data(reader, v3d->gpd); | BKE_gpencil_blend_read_data(reader, v3d->gpd); | ||||
| } | } | ||||
| BLO_read_data_address(reader, &v3d->localvd); | BLO_read_data_address(reader, &v3d->localvd); | ||||
| /* render can be quite heavy, set to solid on load */ | /* render can be quite heavy, set to solid on load */ | ||||
| if (v3d->shading.type == OB_RENDER) { | if (v3d->shading.type == OB_RENDER) { | ||||
| v3d->shading.type = OB_SOLID; | v3d->shading.type = OB_SOLID; | ||||
| } | } | ||||
| v3d->shading.prev_type = OB_SOLID; | v3d->shading.prev_type = OB_SOLID; | ||||
| BKE_screen_view3d_shading_blend_read_data(reader, &v3d->shading); | BKE_screen_view3d_shading_blend_read_data(reader, &v3d->shading); | ||||
| BKE_screen_view3d_do_versions_250(v3d, &sl->regionbase); | BKE_screen_view3d_do_versions_250(v3d, &sl->regionbase); | ||||
| BKE_viewer_path_blend_read_data(reader, &v3d->viewer_path); | |||||
| } | } | ||||
| static void view3d_blend_read_lib(BlendLibReader *reader, ID *parent_id, SpaceLink *sl) | static void view3d_blend_read_lib(BlendLibReader *reader, ID *parent_id, SpaceLink *sl) | ||||
| { | { | ||||
| View3D *v3d = (View3D *)sl; | View3D *v3d = (View3D *)sl; | ||||
| BLO_read_id_address(reader, parent_id->lib, &v3d->camera); | BLO_read_id_address(reader, parent_id->lib, &v3d->camera); | ||||
| BLO_read_id_address(reader, parent_id->lib, &v3d->ob_center); | BLO_read_id_address(reader, parent_id->lib, &v3d->ob_center); | ||||
| if (v3d->localvd) { | if (v3d->localvd) { | ||||
| BLO_read_id_address(reader, parent_id->lib, &v3d->localvd->camera); | BLO_read_id_address(reader, parent_id->lib, &v3d->localvd->camera); | ||||
| } | } | ||||
| BKE_viewer_path_blend_read_lib(reader, parent_id->lib, &v3d->viewer_path); | |||||
| } | } | ||||
| static void view3d_blend_write(BlendWriter *writer, SpaceLink *sl) | static void view3d_blend_write(BlendWriter *writer, SpaceLink *sl) | ||||
| { | { | ||||
| View3D *v3d = (View3D *)sl; | View3D *v3d = (View3D *)sl; | ||||
| BLO_write_struct(writer, View3D, v3d); | BLO_write_struct(writer, View3D, v3d); | ||||
| if (v3d->localvd) { | if (v3d->localvd) { | ||||
| BLO_write_struct(writer, View3D, v3d->localvd); | BLO_write_struct(writer, View3D, v3d->localvd); | ||||
| } | } | ||||
| BKE_screen_view3d_shading_blend_write(writer, &v3d->shading); | BKE_screen_view3d_shading_blend_write(writer, &v3d->shading); | ||||
| BKE_viewer_path_blend_write(writer, &v3d->viewer_path); | |||||
| } | } | ||||
| void ED_spacetype_view3d(void) | void ED_spacetype_view3d(void) | ||||
| { | { | ||||
| SpaceType *st = MEM_cnew<SpaceType>("spacetype view3d"); | SpaceType *st = MEM_cnew<SpaceType>("spacetype view3d"); | ||||
| ARegionType *art; | ARegionType *art; | ||||
| st->spaceid = SPACE_VIEW3D; | st->spaceid = SPACE_VIEW3D; | ||||
| ▲ Show 20 Lines • Show All 94 Lines • Show Last 20 Lines | |||||