Commit: cf8cf884d147cdd6d1786d3a1a341bbeec2b871d Author: Michael Kowalski Date: Tue Oct 18 14:16:53 2022 -0400 Branches: universal-scene-description https://developer.blender.org/rBcf8cf884d147cdd6d1786d3a1a341bbeec2b871d
Merge branch 'master' into universal-scene-description =================================================================== =================================================================== diff --cc source/blender/editors/io/io_usd.c index 0998fc77b01,c776fbf0dd7..313e2488ace --- a/source/blender/editors/io/io_usd.c +++ b/source/blender/editors/io/io_usd.c @@@ -178,43 -85,16 +179,29 @@@ static int wm_usd_export_invoke(bContex options->as_background_job = true; op->customdata = options; + RNA_boolean_set(op->ptr, "init_scene_frame_range", true); + - if (!RNA_struct_property_is_set(op->ptr, "filepath")) { - Main *bmain = CTX_data_main(C); - char filepath[FILE_MAX]; - const char *main_blendfile_path = BKE_main_blendfile_path(bmain); - - if (main_blendfile_path[0] == '\0') { - BLI_strncpy(filepath, "untitled", sizeof(filepath)); - } - else { - BLI_strncpy(filepath, main_blendfile_path, sizeof(filepath)); - } - - BLI_path_extension_replace(filepath, sizeof(filepath), ".usd"); - RNA_string_set(op->ptr, "filepath", filepath); - } + ED_fileselect_ensure_default_filepath(C, op, ".usdc"); WM_event_add_fileselect(C, op); return OPERATOR_RUNNING_MODAL; } +static char *usd_ensure_prim_path(char *primpath) +{ + if (primpath != NULL && primpath[0] != '/' && primpath[0] != '\0') { + char *legal_path = BLI_strdupcat("/", primpath); + MEM_freeN(primpath); + primpath = legal_path; + return legal_path; + } + return primpath; +} + static int wm_usd_export_exec(bContext *C, wmOperator *op) { - if (!RNA_struct_property_is_set(op->ptr, "filepath")) { + if (!RNA_struct_property_is_set_ex(op->ptr, "filepath", false)) { BKE_report(op->reports, RPT_ERROR, "No filename given"); return OPERATOR_CANCELLED; } @@@ -559,11 -187,23 +546,24 @@@ static void wm_usd_export_draw(bContex uiItemR(col, ptr, "relative_paths", 0, NULL, ICON_NONE); box = uiLayoutBox(layout); - uiItemL(box, IFACE_("Experimental"), ICON_NONE); + uiItemL(box, IFACE_("Experimental:"), ICON_NONE); uiItemR(box, ptr, "use_instancing", 0, NULL, ICON_NONE); + uiItemR(box, ptr, "fix_skel_root", 0, NULL, ICON_NONE); } + static void free_operator_customdata(wmOperator *op) + { + if (op->customdata) { + MEM_freeN(op->customdata); + op->customdata = NULL; + } + } + + static void wm_usd_export_cancel(bContext *UNUSED(C), wmOperator *op) + { + free_operator_customdata(op); + } + static bool wm_usd_export_check(bContext *UNUSED(C), wmOperator *op) { char filepath[FILE_MAX]; @@@ -1137,17 -424,13 +1138,19 @@@ static int wm_usd_import_exec(bContext .import_render = import_render, .import_visible_only = import_visible_only, .use_instancing = use_instancing, - .import_usd_preview = import_usd_preview, + .import_shaders_mode = import_shaders_mode, .set_material_blend = set_material_blend, .light_intensity_scale = light_intensity_scale, - .mtl_name_collision_mode = mtl_name_collision_mode}; + .apply_unit_conversion_scale = apply_unit_conversion_scale, + .convert_light_from_nits = convert_light_from_nits, + .scale_light_radius = scale_light_radius, + .create_background_shader = create_background_shader, + .mtl_name_collision_mode = mtl_name_collision_mode, + .attr_import_mode = attr_import_mode, + .import_shapes = import_shapes}; + STRNCPY(params.prim_path_mask, prim_path_mask); + const bool ok = USD_import(C, filename, ¶ms, as_background_job); return as_background_job || ok ? OPERATOR_FINISHED : OPERATOR_CANCELLED; diff --cc source/blender/editors/space_file/filelist.cc index 00000000000,b6f6ab39438..783e471e630 mode 000000,100644..100644 --- a/source/blender/editors/space_file/filelist.cc +++ b/source/blender/editors/space_file/filelist.cc @@@ -1,0 -1,3960 +1,3960 @@@ + /* SPDX-License-Identifier: GPL-2.0-or-later + * Copyright 2007 Blender Foundation. All rights reserved. */ + + /** \file + * \ingroup spfile + */ + + /* global includes */ + + #include <cmath> + #include <cstdlib> + #include <cstring> + #include <ctime> + #include <sys/stat.h> + + #ifndef WIN32 + # include <unistd.h> + #else + # include <direct.h> + # include <io.h> + #endif + #include "MEM_guardedalloc.h" + + #include "BLF_api.h" + + #include "BLI_blenlib.h" + #include "BLI_fileops.h" + #include "BLI_fileops_types.h" + #include "BLI_fnmatch.h" + #include "BLI_ghash.h" + #include "BLI_linklist.h" + #include "BLI_math.h" + #include "BLI_stack.h" + #include "BLI_task.h" + #include "BLI_threads.h" + #include "BLI_utildefines.h" + #include "BLI_uuid.h" + + #ifdef WIN32 + # include "BLI_winstuff.h" + #endif + + #include "BKE_asset.h" + #include "BKE_asset_library.h" + #include "BKE_context.h" + #include "BKE_global.h" + #include "BKE_icons.h" + #include "BKE_idtype.h" + #include "BKE_lib_id.h" + #include "BKE_main.h" + #include "BKE_main_idmap.h" + #include "BKE_preferences.h" + #include "BLO_readfile.h" + + #include "DNA_asset_types.h" + #include "DNA_space_types.h" + + #include "ED_datafiles.h" + #include "ED_fileselect.h" + #include "ED_screen.h" + + #include "IMB_imbuf.h" + #include "IMB_imbuf_types.h" + #include "IMB_thumbs.h" + + #include "PIL_time.h" + + #include "WM_api.h" + #include "WM_types.h" + + #include "UI_interface_icons.h" + #include "UI_resources.h" + + #include "atomic_ops.h" + + #include "file_indexer.h" + #include "file_intern.h" + #include "filelist.h" + + #define FILEDIR_NBR_ENTRIES_UNSET -1 + + /* ------------------FILELIST------------------------ */ + + struct FileListInternEntry { + FileListInternEntry *next, *prev; + + FileUID uid; + + eFileSel_File_Types typeflag; + /** ID type, in case typeflag has FILE_TYPE_BLENDERLIB set. */ + int blentype; + + char *relpath; + /** Optional argument for shortcuts, aliases etc. */ + char *redirection_path; + /** not strictly needed, but used during sorting, avoids to have to recompute it there... */ + char *name; + bool free_name; + + /** + * This is data from the current main, represented by this file. It's crucial that this is + * updated correctly on undo, redo and file reading (without UI). The space is responsible to + * take care of that. + */ + struct { + /** When showing local IDs (FILE_MAIN, FILE_MAIN_ASSET), the ID this file entry represents. */ + ID *id; + + /* For the few file types that have the preview already in memory. For others, there's delayed + * preview reading from disk. Non-owning pointer. */ + PreviewImage *preview_image; + } local_data; + + /** When the file represents an asset read from another file, it is stored here. + * Owning pointer. */ + AssetMetaData *imported_asset_data; + + /** Defined in BLI_fileops.h */ + eFileAttributes attributes; + BLI_stat_t st; + }; + + struct FileListIntern { + /** FileListInternEntry items. */ + ListBase entries; + FileListInternEntry **filtered; + + FileUID curr_uid; /* Used to generate UID during internal listing. */ + }; + + #define FILELIST_ENTRYCACHESIZE_DEFAULT 1024 /* Keep it a power of two! */ + struct FileListEntryCache { + size_t size; /* The size of the cache... */ + + int flags; + + /* This one gathers all entries from both block and misc caches. Used for easy bulk-freeing. */ + ListBase cached_entries; + + /* Block cache: all entries between start and end index. + * used for part of the list on display. */ + FileDirEntry **block_entries; + int block_start_index, block_end_index, block_center_index, block_cursor; + + /* Misc cache: random indices, FIFO behavior. + * NOTE: Not 100% sure we actually need that, time will say. */ + int misc_cursor; + int *misc_entries_indices; + GHash *misc_entries; + + /* Allows to quickly get a cached entry from its UID. */ + GHash *uids; + + /* Previews handling. */ + TaskPool *previews_pool; + ThreadQueue *previews_done; + /** Counter for previews that are not fully loaded and ready to display yet. So includes all + * previews either in `previews_pool` or `previews_done`. #filelist_cache_previews_update() makes + * previews in `preview_done` ready for display, so the counter is decremented there. */ + int previews_todo_count; + }; + + /** #FileListCache.flags */ + enum { + FLC_IS_INIT = 1 << 0, + FLC_PREVIEWS_ACTIVE = 1 << 1, + }; + + struct FileListEntryPreview { + char filepath[FILE_MAX]; + uint flags; + int index; + int attributes; /* from FileDirEntry. */ + int icon_id; + }; + + /* Dummy wrapper around FileListEntryPreview to ensure we do not access freed memory when freeing + * tasks' data (see T74609). */ + struct FileListEntryPreviewTaskData { + FileListEntryPreview *preview; + }; + + struct FileListFilter { + uint64_t filter; + uint64_t filter_id; + char filter_glob[FILE_MAXFILE]; + char filter_search[66]; /* + 2 for heading/trailing implicit '*' wildcards. */ + short flags; + + FileAssetCatalogFilterSettingsHandle *asset_catalog_filter; + }; + + /** #FileListFilter.flags */ + enum { + FLF_DO_FILTER = 1 << 0, + FLF_HIDE_DOT = 1 << 1, + FLF_HIDE_PARENT = 1 << 2, + FLF_HIDE_LIB_DIR = 1 << 3, + FLF_ASSETS_ONLY = 1 << 4, + }; + + struct FileListReadJob; + struct FileList { + FileDirEntryArr filelist; + + eFileSelectType type; + /* The library this list was created for. Stored here so we know when to re-read. */ + AssetLibraryReference *asset_library_ref; + AssetLibrary *asset_library; /* Non-owning pointer. */ + + short flags; + + short sort; + + FileListFilter filter_data; + + /** + * File indexer to use. Attribute is always set. + */ + const FileIndexerType *indexer; + + FileListIntern filelist_intern; + + FileListEntryCache filelist_cache; + + /* We need to keep those info outside of actual fi @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs