Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/makesrna/intern/rna_space.c')
-rw-r--r--source/blender/makesrna/intern/rna_space.c220
1 files changed, 213 insertions, 7 deletions
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 409a2f097ed..c0b40bfd526 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -25,6 +25,9 @@
#include "BLT_translation.h"
+#include "BKE_attribute.h"
+#include "BKE_context.h"
+#include "BKE_geometry_set.h"
#include "BKE_image.h"
#include "BKE_key.h"
#include "BKE_movieclip.h"
@@ -53,7 +56,9 @@
#include "rna_internal.h"
+#include "SEQ_proxy.h"
#include "SEQ_relations.h"
+#include "SEQ_sequencer.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -145,6 +150,11 @@ const EnumPropertyItem rna_enum_space_type_items[] = {
"Properties",
"Edit properties of active object and related data-blocks"},
{SPACE_FILE, "FILE_BROWSER", ICON_FILEBROWSER, "File Browser", "Browse for files and assets"},
+ {SPACE_SPREADSHEET,
+ "SPREADSHEET",
+ ICON_SPREADSHEET,
+ "Spreadsheet",
+ "Explore geometry data in a table"},
{SPACE_USERPREF,
"PREFERENCES",
ICON_PREFERENCES,
@@ -448,6 +458,7 @@ static const EnumPropertyItem buttons_context_items[] = {
{BCONTEXT_OUTPUT, "OUTPUT", ICON_OUTPUT, "Output", "Output Properties"},
{BCONTEXT_VIEW_LAYER, "VIEW_LAYER", ICON_RENDER_RESULT, "View Layer", "View Layer Properties"},
{BCONTEXT_WORLD, "WORLD", ICON_WORLD, "World", "World Properties"},
+ {BCONTEXT_COLLECTION, "COLLECTION", ICON_GROUP, "Collection", "Collection Properties"},
{BCONTEXT_OBJECT, "OBJECT", ICON_OBJECT_DATA, "Object", "Object Properties"},
{BCONTEXT_CONSTRAINT,
"CONSTRAINT",
@@ -571,6 +582,8 @@ static StructRNA *rna_Space_refine(struct PointerRNA *ptr)
return &RNA_SpacePreferences;
case SPACE_CLIP:
return &RNA_SpaceClipEditor;
+ case SPACE_SPREADSHEET:
+ return &RNA_SpaceSpreadsheet;
/* Currently no type info. */
case SPACE_SCRIPT:
@@ -2226,6 +2239,48 @@ static void rna_SequenceEditor_update_cache(Main *UNUSED(bmain),
SEQ_cache_cleanup(scene);
}
+static void seq_build_proxy(bContext *C, PointerRNA *ptr)
+{
+ if (U.sequencer_proxy_setup != USER_SEQ_PROXY_SETUP_AUTOMATIC) {
+ return;
+ }
+
+ SpaceSeq *sseq = ptr->data;
+ Scene *scene = CTX_data_scene(C);
+ ListBase *seqbase = SEQ_active_seqbase_get(SEQ_editing_get(scene, false));
+
+ GSet *file_list = BLI_gset_new(BLI_ghashutil_strhash_p, BLI_ghashutil_strcmp, "file list");
+ wmJob *wm_job = ED_seq_proxy_wm_job_get(C);
+ ProxyJob *pj = ED_seq_proxy_job_get(C, wm_job);
+
+ LISTBASE_FOREACH (Sequence *, seq, seqbase) {
+ if (seq->type != SEQ_TYPE_MOVIE || seq->strip == NULL || seq->strip->proxy == NULL) {
+ continue;
+ }
+
+ /* Add new proxy size. */
+ seq->strip->proxy->build_size_flags |= SEQ_rendersize_to_proxysize(sseq->render_size);
+
+ /* Build proxy. */
+ SEQ_proxy_rebuild_context(pj->main, pj->depsgraph, pj->scene, seq, file_list, &pj->queue);
+ }
+
+ BLI_gset_free(file_list, MEM_freeN);
+
+ if (!WM_jobs_is_running(wm_job)) {
+ G.is_break = false;
+ WM_jobs_start(CTX_wm_manager(C), wm_job);
+ }
+
+ ED_area_tag_redraw(CTX_wm_area(C));
+}
+
+static void rna_SequenceEditor_render_size_update(bContext *C, PointerRNA *ptr)
+{
+ seq_build_proxy(C, ptr);
+ rna_SequenceEditor_update_cache(CTX_data_main(C), CTX_data_scene(C), ptr);
+}
+
static void rna_Sequencer_view_type_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
@@ -2976,6 +3031,72 @@ static void rna_SpaceFileBrowser_browse_mode_update(Main *UNUSED(bmain),
ED_area_tag_refresh(area);
}
+static void rna_SpaceSpreadsheet_pinned_id_set(PointerRNA *ptr,
+ PointerRNA value,
+ struct ReportList *UNUSED(reports))
+{
+ SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)ptr->data;
+ sspreadsheet->pinned_id = value.data;
+}
+
+static void rna_SpaceSpreadsheet_geometry_component_type_update(Main *UNUSED(bmain),
+ Scene *UNUSED(scene),
+ PointerRNA *ptr)
+{
+ SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)ptr->data;
+ if (sspreadsheet->geometry_component_type == GEO_COMPONENT_TYPE_POINT_CLOUD) {
+ sspreadsheet->attribute_domain = ATTR_DOMAIN_POINT;
+ }
+}
+
+const EnumPropertyItem *rna_SpaceSpreadsheet_attribute_domain_itemf(bContext *C,
+ PointerRNA *ptr,
+ PropertyRNA *UNUSED(prop),
+ bool *r_free)
+{
+ SpaceSpreadsheet *sspreadsheet = (SpaceSpreadsheet *)ptr->data;
+ GeometryComponentType component_type = sspreadsheet->geometry_component_type;
+ if (sspreadsheet->object_eval_state == SPREADSHEET_OBJECT_EVAL_STATE_ORIGINAL) {
+ Object *active_object = CTX_data_active_object(C);
+ Object *used_object = (sspreadsheet->pinned_id && GS(sspreadsheet->pinned_id->name) == ID_OB) ?
+ (Object *)sspreadsheet->pinned_id :
+ active_object;
+ if (used_object != NULL) {
+ if (used_object->type == OB_POINTCLOUD) {
+ component_type = GEO_COMPONENT_TYPE_POINT_CLOUD;
+ }
+ else {
+ component_type = GEO_COMPONENT_TYPE_MESH;
+ }
+ }
+ }
+
+ EnumPropertyItem *item_array = NULL;
+ int items_len = 0;
+ for (const EnumPropertyItem *item = rna_enum_attribute_domain_items; item->identifier != NULL;
+ item++) {
+ if (component_type == GEO_COMPONENT_TYPE_MESH) {
+ if (!ELEM(item->value,
+ ATTR_DOMAIN_CORNER,
+ ATTR_DOMAIN_EDGE,
+ ATTR_DOMAIN_POINT,
+ ATTR_DOMAIN_POLYGON)) {
+ continue;
+ }
+ }
+ if (component_type == GEO_COMPONENT_TYPE_POINT_CLOUD) {
+ if (item->value != ATTR_DOMAIN_POINT) {
+ continue;
+ }
+ }
+ RNA_enum_item_add(&item_array, &items_len, item);
+ }
+ RNA_enum_item_end(&item_array, &items_len);
+
+ *r_free = true;
+ return item_array;
+}
+
#else
static const EnumPropertyItem dt_uv_items[] = {
@@ -5094,12 +5215,11 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
static const EnumPropertyItem proxy_render_size_items[] = {
{SEQ_RENDER_SIZE_NONE, "NONE", 0, "No display", ""},
- {SEQ_RENDER_SIZE_SCENE, "SCENE", 0, "Scene render size", ""},
- {SEQ_RENDER_SIZE_PROXY_25, "PROXY_25", 0, "Proxy size 25%", ""},
- {SEQ_RENDER_SIZE_PROXY_50, "PROXY_50", 0, "Proxy size 50%", ""},
- {SEQ_RENDER_SIZE_PROXY_75, "PROXY_75", 0, "Proxy size 75%", ""},
- {SEQ_RENDER_SIZE_PROXY_100, "PROXY_100", 0, "Proxy size 100%", ""},
- {SEQ_RENDER_SIZE_FULL, "FULL", 0, "No proxy, full render", ""},
+ {SEQ_RENDER_SIZE_SCENE, "SCENE", 0, "Scene size", ""},
+ {SEQ_RENDER_SIZE_PROXY_25, "PROXY_25", 0, "25%", ""},
+ {SEQ_RENDER_SIZE_PROXY_50, "PROXY_50", 0, "50%", ""},
+ {SEQ_RENDER_SIZE_PROXY_75, "PROXY_75", 0, "75%", ""},
+ {SEQ_RENDER_SIZE_PROXY_100, "PROXY_100", 0, "100%", ""},
{0, NULL, 0, NULL, NULL},
};
@@ -5253,7 +5373,15 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
RNA_def_property_ui_text(prop,
"Proxy Render Size",
"Display preview using full resolution or different proxy resolutions");
- RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_update_cache");
+ RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
+ RNA_def_property_update(
+ prop, NC_SPACE | ND_SPACE_SEQUENCER, "rna_SequenceEditor_render_size_update");
+
+ prop = RNA_def_property(srna, "use_proxies", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_USE_PROXIES);
+ RNA_def_property_ui_text(
+ prop, "Use Proxies", "Use optimized files for faster scrubbing when available");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
/* grease pencil */
prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
@@ -5674,6 +5802,11 @@ static void rna_def_space_graph(BlenderRNA *brna)
"If any exists, show markers in a separate row at the bottom of the editor");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
+ prop = RNA_def_property(srna, "show_extrapolation", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NO_DRAW_EXTRAPOLATION);
+ RNA_def_property_ui_text(prop, "Show Extrapolation", "");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_GRAPH, NULL);
+
/* editing */
prop = RNA_def_property(srna, "use_auto_merge_keyframes", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SIPO_NOTRANSKEYCULL);
@@ -6569,6 +6702,8 @@ static void rna_def_space_filebrowser(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(
prop, NC_SPACE | ND_SPACE_FILE_PARAMS, "rna_FileBrowser_FSMenu_active_update");
+
+ RNA_api_space_filebrowser(srna);
}
static void rna_def_space_info(BlenderRNA *brna)
@@ -7169,6 +7304,76 @@ static void rna_def_space_clip(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_CLIP, NULL);
}
+static void rna_def_space_spreadsheet(BlenderRNA *brna)
+{
+ PropertyRNA *prop;
+ StructRNA *srna;
+
+ static const EnumPropertyItem geometry_component_type_items[] = {
+ {GEO_COMPONENT_TYPE_MESH,
+ "MESH",
+ ICON_MESH_DATA,
+ "Mesh",
+ "Mesh component containing point, corner, edge and polygon data"},
+ {GEO_COMPONENT_TYPE_POINT_CLOUD,
+ "POINTCLOUD",
+ ICON_POINTCLOUD_DATA,
+ "Point Cloud",
+ "Point cloud component containing only point data"},
+ {0, NULL, 0, NULL, NULL},
+ };
+
+ static const EnumPropertyItem object_eval_state_items[] = {
+ {SPREADSHEET_OBJECT_EVAL_STATE_FINAL,
+ "FINAL",
+ ICON_NONE,
+ "Final",
+ "Use data from object with all modifiers applied"},
+ {SPREADSHEET_OBJECT_EVAL_STATE_ORIGINAL,
+ "ORIGINAL",
+ ICON_NONE,
+ "Original",
+ "Use data from original object without any modifiers applied"},
+ {0, NULL, 0, NULL, NULL},
+ };
+
+ srna = RNA_def_struct(brna, "SpaceSpreadsheet", "Space");
+ RNA_def_struct_ui_text(srna, "Space Spreadsheet", "Spreadsheet space data");
+
+ rna_def_space_generic_show_region_toggles(srna, (1 << RGN_TYPE_FOOTER));
+
+ prop = RNA_def_property(srna, "pinned_id", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceSpreadsheet_pinned_id_set", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Pinned ID", "Data-block whose values are displayed");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SPREADSHEET, NULL);
+
+ prop = RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "filter_flag", SPREADSHEET_FILTER_SELECTED_ONLY);
+ RNA_def_property_ui_text(
+ prop, "Show Only Selected", "Only include rows that correspond to selected elements");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SPREADSHEET, NULL);
+
+ prop = RNA_def_property(srna, "geometry_component_type", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, geometry_component_type_items);
+ RNA_def_property_ui_text(
+ prop, "Geometry Component", "Part of the geometry to display data from");
+ RNA_def_property_update(prop,
+ NC_SPACE | ND_SPACE_SPREADSHEET,
+ "rna_SpaceSpreadsheet_geometry_component_type_update");
+
+ prop = RNA_def_property(srna, "attribute_domain", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items);
+ RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_SpaceSpreadsheet_attribute_domain_itemf");
+ RNA_def_property_ui_text(prop, "Attribute Domain", "Attribute domain to display");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SPREADSHEET, NULL);
+
+ prop = RNA_def_property(srna, "object_eval_state", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, object_eval_state_items);
+ RNA_def_property_ui_text(prop, "Object Evaluation State", "");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SPREADSHEET, NULL);
+}
+
void RNA_def_space(BlenderRNA *brna)
{
rna_def_space(brna);
@@ -7194,6 +7399,7 @@ void RNA_def_space(BlenderRNA *brna)
rna_def_node_tree_path(brna);
rna_def_space_node(brna);
rna_def_space_clip(brna);
+ rna_def_space_spreadsheet(brna);
}
#endif