56 "Use Render settings for object visibility, modifier settings, etc"},
61 "Use Viewport settings for object visibility, modifier settings, etc"},
62 {0,
nullptr, 0,
nullptr,
nullptr},
70 "Import each USD material as a unique Blender material"},
75 "If a material with the same name already exists, reference that instead of importing"},
76 {0,
nullptr, 0,
nullptr,
nullptr},
85 "Import USD attributes in the 'userProperties' namespace as Blender custom "
86 "properties. The namespace will be stripped from the property names"},
91 "Import all USD custom attributes as Blender custom properties. "
92 "Namespaces will be retained in the property names"},
93 {0,
nullptr, 0,
nullptr,
nullptr},
100 {0,
nullptr, 0,
nullptr,
nullptr},
108 "If a file with the same name already exists, use that instead of copying"},
110 {0,
nullptr, 0,
nullptr,
nullptr},
118 "Scheme = None. Export base mesh without subdivision"},
123 "Scheme = None. Export subdivided mesh"},
128 "Scheme = Catmull-Clark, when possible. "
129 "Reverts to exporting the subdivided mesh for the Simple subdivision type"},
130 {0,
nullptr, 0,
nullptr,
nullptr},
137 "Translate, Rotate, Scale",
138 "Export with translate, rotate, and scale Xform operators"},
142 "Translate, Orient, Scale",
143 "Export with translate, orient quaternion, and scale Xform operators"},
145 {0,
nullptr, 0,
nullptr,
nullptr},
156 {0,
nullptr, 0,
nullptr,
nullptr},
165 "Preserve file paths of textures from already imported USD files.\n"
166 "Export remaining textures to a 'textures' folder next to the USD file"},
171 "Export textures to a 'textures' folder next to the USD file"},
172 {0,
nullptr, 0,
nullptr,
nullptr}};
179 "Attempt to import 'allPurpose' materials."},
184 "Attempt to import 'preview' materials. "
185 "Load 'allPurpose' materials as a fallback"},
190 "Attempt to import 'full' materials. "
191 "Load 'allPurpose' or 'preview' materials, in that order, as a fallback"},
192 {0,
nullptr, 0,
nullptr,
nullptr},
202 "Scene meters per unit to 0.01"},
207 "Scene meters per unit to 0.001"},
215 "Specify a custom scene meters per unit value"},
216 {0,
nullptr, 0,
nullptr,
nullptr},
221struct USDOperatorOptions {
222 bool as_background_job;
225static void free_operator_customdata(
wmOperator *op)
236static void process_prim_path(
char *prim_path)
238 if (prim_path ==
nullptr || prim_path[0] ==
'\0') {
244 if (prim_path[0] ==
'/' && prim_path[1] ==
'\0') {
250 if (prim_path[0] !=
'/') {
251 const std::string prim_path_copy = std::string(prim_path);
261 options->as_background_job =
true;
275 free_operator_customdata(op);
283 const bool as_background_job = (
options !=
nullptr &&
options->as_background_job);
284 free_operator_customdata(op);
308 const bool generate_preview_surface =
RNA_boolean_get(op->
ptr,
"generate_preview_surface");
309 const bool generate_materialx_network =
RNA_boolean_get(op->
ptr,
"generate_materialx_network");
317 const bool export_custom_properties =
RNA_boolean_get(op->
ptr,
"export_custom_properties");
326 const int global_forward =
RNA_enum_get(op->
ptr,
"export_global_forward_selection");
327 const int global_up =
RNA_enum_get(op->
ptr,
"export_global_up_selection");
329 const bool convert_world_material =
RNA_boolean_get(op->
ptr,
"convert_world_material") &&
337 const int usdz_downscale_custom_size =
RNA_int_get(op->
ptr,
"usdz_downscale_custom_size");
350 bool use_original_paths =
false;
352 if (!export_textures) {
353 switch (textures_mode) {
355 export_textures =
false;
356 use_original_paths =
true;
359 export_textures =
true;
360 use_original_paths =
false;
363 use_original_paths =
false;
373 process_prim_path(root_prim_path);
376 RNA_string_get(op->
ptr,
"custom_properties_namespace", custom_properties_namespace);
379 params.export_animation = export_animation;
380 params.selected_objects_only = selected_objects_only;
381 params.visible_objects_only = visible_objects_only;
383 params.export_meshes = export_meshes;
384 params.export_lights = export_lights;
385 params.export_cameras = export_cameras;
386 params.export_curves = export_curves;
387 params.export_points = export_points;
388 params.export_volumes = export_volumes;
389 params.export_hair = export_hair;
390 params.export_uvmaps = export_uvmaps;
391 params.rename_uvmaps = rename_uvmaps;
392 params.export_normals = export_normals;
393 params.export_mesh_colors = export_mesh_colors;
394 params.export_materials = export_materials;
396 params.export_armatures = export_armatures;
397 params.export_shapekeys = export_shapekeys;
398 params.only_deform_bones = only_deform_bones;
400 params.convert_world_material = convert_world_material;
402 params.use_instancing = use_instancing;
403 params.export_custom_properties = export_custom_properties;
404 params.author_blender_name = author_blender_name;
405 params.allow_unicode = allow_unicode;
407 params.export_subdiv = export_subdiv;
410 params.generate_preview_surface = generate_preview_surface;
411 params.generate_materialx_network = generate_materialx_network;
412 params.export_textures = export_textures;
413 params.overwrite_textures = overwrite_textures;
414 params.relative_paths = relative_paths;
415 params.use_original_paths = use_original_paths;
417 params.triangulate_meshes = triangulate_meshes;
418 params.quad_method = quad_method;
419 params.ngon_method = ngon_method;
421 params.convert_orientation = convert_orientation;
424 params.xform_op_mode = xform_op_mode;
426 params.usdz_downscale_size = usdz_downscale_size;
427 params.usdz_downscale_custom_size = usdz_downscale_custom_size;
428 params.convert_scene_units = convert_scene_units;
429 params.custom_meters_per_unit = meters_per_unit;
431 params.merge_parent_xform = merge_parent_xform;
434 STRNCPY(
params.custom_properties_namespace, custom_properties_namespace);
461 sub = &
col->column(
true,
IFACE_(
"Blender Data"));
464 props_col->
prop(
ptr,
"custom_properties_namespace",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
469 sub = &
col->column(
true,
IFACE_(
"File References"));
472 col = &panel->column(
false);
475 col->prop(
ptr,
"export_global_forward_selection",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
486 col = &panel->column(
false);
565 if (
uiLayout *panel = layout->
panel(
C,
"USD_export_experimental",
true,
IFACE_(
"Experimental")))
574 free_operator_customdata(op);
595 if ((forward % 3) == (up % 3)) {
604 if ((forward % 3) == (up % 3)) {
605 RNA_enum_set(
ptr,
"export_global_forward_selection", (forward + 1) % 6);
611 ot->name =
"Export USD";
612 ot->description =
"Export current scene in a USD archive";
613 ot->idname =
"WM_OT_usd_export";
615 ot->invoke = wm_usd_export_invoke;
616 ot->exec = wm_usd_export_exec;
618 ot->ui = wm_usd_export_draw;
619 ot->cancel = wm_usd_export_cancel;
620 ot->check = wm_usd_export_check;
636 "selected_objects_only",
639 "Only export selected objects. Unselected parents of selected objects are "
640 "exported as empty transform");
643 "visible_objects_only",
646 "Only export visible objects. Invisible parents of exported objects are "
647 "exported as empty transforms");
657 "Export all frames in the render frame range, rather than only the current frame");
659 ot->srna,
"export_hair",
false,
"Hair",
"Export hair particle systems as USD curves");
661 ot->srna,
"export_uvmaps",
true,
"UV Maps",
"Include all mesh UV maps in the export");
666 "Rename active render UV map to \"st\" to match USD conventions");
668 "export_mesh_colors",
671 "Include mesh color attributes in the export");
676 "Include normals of exported meshes in the export");
681 "Export viewport settings of materials as USD preview materials, and export "
682 "material assignments as geometry subsets");
685 "export_subdivision",
686 rna_enum_usd_export_subdiv_mode_items,
689 "Choose how subdivision modifiers will be mapped to the USD subdivision scheme "
696 "Export armatures and meshes with armature modifiers as USD skeletons and "
703 "Only export deform bones and their parents");
706 ot->srna,
"export_shapekeys",
true,
"Shape Keys",
"Export shape keys as USD blend shapes");
712 "Export instanced objects as references in USD rather than real objects");
716 rna_enum_usd_export_evaluation_mode_items,
719 "Determines visibility of objects, modifier settings, and other areas where there "
720 "are different settings for viewport and rendering");
723 "generate_preview_surface",
725 "USD Preview Surface Network",
726 "Generate an approximate USD Preview Surface shader "
727 "representation of a Principled BSDF node network");
730 "generate_materialx_network",
733 "Generate a MaterialX network representation of the materials");
737 "convert_orientation",
739 "Convert Orientation",
740 "Convert orientation axis to a different convention to match other applications");
743 "export_global_forward_selection",
758 "If exporting materials, export textures referenced by material nodes "
759 "to a 'textures' directory in the same directory as the USD file");
762 "export_textures_mode",
763 rna_enum_usd_tex_export_mode_items,
766 "Texture export method");
769 "overwrite_textures",
771 "Overwrite Textures",
772 "Overwrite existing files when exporting textures");
778 "Use relative paths to reference external files (i.e. textures, volumes) in "
779 "USD, otherwise use absolute paths");
783 rna_enum_usd_xform_op_mode_items,
786 "The type of transform operators to write");
793 "If set, add a transform primitive with the given path to the stage "
794 "as the parent of all exported data");
797 "export_custom_properties",
800 "Export custom properties as USD attributes");
803 "custom_properties_namespace",
807 "If set, add the given namespace as a prefix to exported custom property names. "
808 "This only applies to property names that do not already have a prefix "
809 "(e.g., it would apply to name 'bar' but not 'foo:bar') and does not apply "
810 "to blender object and data names which are always exported in the "
811 "'userProperties:blender' namespace");
814 "author_blender_name",
817 "Author USD custom attributes containing the original Blender object and "
818 "object data names");
822 "convert_world_material",
825 "Convert the world material to a USD dome light. "
826 "Currently works for simple materials, consisting of an environment texture "
827 "connected to a background shader, with an optional vector multiply of the texture color");
834 "Preserve UTF-8 encoded characters when writing USD prim and property names "
835 "(requires software utilizing USD 24.03 or greater when opening the resulting files)");
841 RNA_def_boolean(
ot->srna,
"export_cameras",
true,
"Cameras",
"Export all cameras");
845 RNA_def_boolean(
ot->srna,
"export_points",
true,
"Point Clouds",
"Export all point clouds");
847 RNA_def_boolean(
ot->srna,
"export_volumes",
true,
"Volumes",
"Export all volumes");
850 "triangulate_meshes",
852 "Triangulate Meshes",
853 "Triangulate meshes during export");
860 "Method for splitting the quads into triangles");
867 "Method for splitting the n-gons into triangles");
870 "usdz_downscale_size",
871 rna_enum_usdz_downscale_size,
873 "USDZ Texture Downsampling",
874 "Choose a maximum size for all exported textures");
877 "usdz_downscale_custom_size",
881 "USDZ Custom Downscale Size",
882 "Custom size for downscaling exported textures",
887 "merge_parent_xform",
889 "Merge parent Xform",
890 "Merge USD primitives with their Xform parent if possible. USD does not allow "
891 "nested UsdGeomGprims, intermediary Xform prims will be defined to keep the USD "
892 "file valid when encountering object hierarchies.");
895 "convert_scene_units",
896 rna_enum_usd_convert_scene_units_items,
899 "Set the USD Stage meters per unit to the chosen measurement, or a custom value");
907 "Custom value for meters per unit in the USD Stage",
917 options->as_background_job =
true;
927 free_operator_customdata(op);
935 const bool as_background_job = (
options !=
nullptr &&
options->as_background_job);
936 free_operator_customdata(op);
939 const float light_intensity_scale =
RNA_float_get(op->
ptr,
"light_intensity_scale");
940 const bool apply_unit_conversion_scale =
RNA_boolean_get(op->
ptr,
"apply_unit_conversion_scale");
952 if (read_mesh_colors) {
955 if (read_mesh_attributes) {
972 const bool support_scene_instancing =
RNA_boolean_get(op->
ptr,
"support_scene_instancing");
1000 const bool create_world_material =
RNA_boolean_get(op->
ptr,
"create_world_material") &&
1006 const bool is_sequence =
false;
1008 int sequence_len = 1;
1020 params.prim_path_mask = prim_path_mask;
1022 params.light_intensity_scale = light_intensity_scale;
1023 params.apply_unit_conversion_scale = apply_unit_conversion_scale;
1025 params.mesh_read_flag = mesh_read_flag;
1027 params.is_sequence = is_sequence;
1028 params.sequence_len = sequence_len;
1032 params.import_visible_only = import_visible_only;
1033 params.import_defined_only = import_defined_only;
1035 params.import_cameras = import_cameras;
1036 params.import_curves = import_curves;
1037 params.import_lights = import_lights;
1038 params.import_materials = import_materials;
1039 params.import_all_materials = import_all_materials;
1041 params.import_points = import_points;
1042 params.import_subdiv = import_subdiv;
1043 params.import_volumes = import_volumes;
1046 params.create_world_material = create_world_material;
1047 params.support_scene_instancing = support_scene_instancing;
1049 params.import_shapes = import_shapes;
1050 params.import_skeletons = import_skeletons;
1053 params.validate_meshes = validate_meshes;
1054 params.merge_parent_xform = merge_parent_xform;
1056 params.import_guide = import_guide;
1057 params.import_proxy = import_proxy;
1058 params.import_render = import_render;
1060 params.import_usd_preview = import_usd_preview;
1061 params.set_material_blend = set_material_blend;
1062 params.mtl_purpose = mtl_purpose;
1063 params.mtl_name_collision_mode = mtl_name_collision_mode;
1064 params.import_textures_mode = import_textures_mode;
1065 params.tex_name_collision_mode = tex_name_collision_mode;
1067 params.attr_import_mode = attr_import_mode;
1084 free_operator_customdata(op);
1104 col = &panel->column(
false);
1109 col->prop(
ptr,
"apply_unit_conversion_scale",
UI_ITEM_NONE, std::nullopt, ICON_NONE);
1132 col = &panel->column(
true,
IFACE_(
"Display Purpose"));
1137 col = &panel->column(
true,
IFACE_(
"Material Purpose"));
1148 col = &panel->column(
false);
1181 row = &
col->row(
true);
1188 C,
"USD_import_instancing",
true,
IFACE_(
"Particles and Instancing")))
1197 ot->name =
"Import USD";
1198 ot->description =
"Import USD stage into current scene";
1199 ot->idname =
"WM_OT_usd_import";
1201 ot->invoke = wm_usd_import_invoke;
1202 ot->exec = wm_usd_import_exec;
1203 ot->cancel = wm_usd_import_cancel;
1205 ot->ui = wm_usd_import_draw;
1227 "Value by which to enlarge or shrink the objects with respect to the world's origin",
1235 "Update the scene's start and end frame to match those of the USD archive");
1251 "Import Subdivision Scheme",
1252 "Create subdivision surface modifiers based on the USD "
1253 "SubdivisionScheme attribute");
1256 "support_scene_instancing",
1259 "Import USD scene graph instances as collection instances");
1262 "import_visible_only",
1264 "Visible Primitives Only",
1265 "Do not import invisible USD primitives. "
1266 "Only applies to primitives with a non-animated visibility attribute. "
1267 "Primitives with animated visibility will always be imported");
1270 "create_collection",
1272 "Create Collection",
1273 "Add all imported objects to a new collection");
1275 RNA_def_boolean(
ot->srna,
"read_mesh_uvs",
true,
"UV Coordinates",
"Read mesh UV coordinates");
1278 ot->srna,
"read_mesh_colors",
true,
"Color Attributes",
"Read mesh color attributes");
1281 "read_mesh_attributes",
1284 "Read USD Primvars as mesh attributes");
1291 "Import only the primitive at the given path and its descendants. "
1292 "Multiple paths may be specified in a list delimited by commas or semicolons");
1294 RNA_def_boolean(
ot->srna,
"import_guide",
false,
"Guide",
"Import guide geometry");
1296 RNA_def_boolean(
ot->srna,
"import_proxy",
false,
"Proxy",
"Import proxy geometry");
1298 RNA_def_boolean(
ot->srna,
"import_render",
true,
"Render",
"Import final render geometry");
1301 "import_all_materials",
1303 "Import All Materials",
1304 "Also import materials that are not used by any geometry. "
1305 "Note that when this option is false, materials referenced "
1306 "by geometry will still be imported");
1309 "import_usd_preview",
1311 "Import USD Preview",
1312 "Convert UsdPreviewSurface shaders to Principled BSDF shader networks");
1315 "set_material_blend",
1317 "Set Material Blend",
1318 "If the Import USD Preview option is enabled, "
1319 "the material blend method will automatically be set based on the "
1320 "shader's opacity and opacityThreshold inputs");
1323 "light_intensity_scale",
1327 "Light Intensity Scale",
1328 "Scale for the intensity of imported lights",
1334 rna_enum_usd_mtl_purpose_items,
1337 "Attempt to import materials with the given purpose. "
1338 "If no material with this purpose is bound to the primitive, "
1339 "fall back on loading any other bound material");
1343 "mtl_name_collision_mode",
1344 rna_enum_usd_mtl_name_collision_mode_items,
1346 "Material Name Collision",
1347 "Behavior when the name of an imported material conflicts with an existing material");
1350 "import_textures_mode",
1351 rna_enum_usd_tex_import_mode_items,
1354 "Behavior when importing textures from a USDZ archive");
1357 "import_textures_dir",
1360 "Textures Directory",
1361 "Path to the directory where imported textures will be copied");
1365 "tex_name_collision_mode",
1366 rna_enum_usd_tex_name_collision_mode_items,
1368 "File Name Collision",
1369 "Behavior when the name of an imported texture file conflicts with an existing file");
1373 rna_enum_usd_attr_import_mode_items,
1375 "Custom Properties",
1376 "Behavior when importing USD attributes as Blender custom properties");
1383 "Ensure the data is valid "
1384 "(when disabled, data may be imported which causes crashes displaying or editing)");
1387 "create_world_material",
1390 "Convert the first discovered USD dome light to a world background shader");
1393 "import_defined_only",
1395 "Defined Primitives Only",
1396 "Import only defined USD primitives. When disabled this allows importing USD "
1397 "primitives which are not defined, such as those with an override specifier");
1400 "merge_parent_xform",
1402 "Merge parent Xform",
1403 "Allow USD primitives to merge with their Xform parent "
1404 "if they are the only child in the hierarchy");
1408 "apply_unit_conversion_scale",
1410 "Apply Unit Conversion Scale",
1411 "Scale the scene objects by the USD stage's meters per unit value. "
1412 "This scaling is applied in addition to the value specified in the Scale option");
1418 auto fh = std::make_unique<blender::bke::FileHandlerType>();
1419 STRNCPY(fh->idname,
"IO_FH_usd");
1420 STRNCPY(fh->import_operator,
"WM_OT_usd_import");
1421 STRNCPY(fh->export_operator,
"WM_OT_usd_export");
1422 STRNCPY(fh->label,
"Universal Scene Description");
1423 STRNCPY(fh->file_extensions_str,
".usd;.usda;.usdc;.usdz");
SpaceFile * CTX_wm_space_file(const bContext *C)
Object * CTX_data_edit_object(const bContext *C)
void BKE_report(ReportList *reports, eReportType type, const char *message)
bool BLI_path_extension_ensure(char *path, size_t path_maxncpy, const char *ext) ATTR_NONNULL(1
bool BLI_path_extension_check_n(const char *path,...) ATTR_NONNULL(1) ATTR_SENTINEL(0)
char * STRNCPY(char(&dst)[N], const char *src)
size_t BLI_snprintf(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
@ MOD_TRIANGULATE_QUAD_SHORTEDGE
@ MOD_TRIANGULATE_NGON_BEAUTY
@ MOD_MESHSEQ_READ_ATTRIBUTES
void ED_fileselect_ensure_default_filepath(bContext *C, wmOperator *op, const char *extension)
Read Guarded memory(de)allocation.
void uiLayoutSetActive(uiLayout *layout, bool active)
void uiLayoutSetEnabled(uiLayout *layout, bool enabled)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiLayoutSetPropDecorate(uiLayout *layout, bool is_sep)
static void set_frame_range(ImportJobData *data)
CCL_NAMESPACE_BEGIN struct Options options
void WM_OT_usd_import(wmOperatorType *ot)
void WM_OT_usd_export(wmOperatorType *ot)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void file_handler_add(std::unique_ptr< FileHandlerType > file_handler)
bool poll_file_object_drop(const bContext *C, blender::bke::FileHandlerType *)
wmOperatorStatus filesel_drop_import_invoke(bContext *C, wmOperator *op, const wmEvent *)
void usd_file_handler_add()
bool mode_set(bContext *C, eObjectMode mode)
void import_meshes(Main &bmain, const ufbx_scene &fbx, FbxElementMapping &mapping, const FBXImportParams ¶ms)
@ USD_SCENE_UNITS_MILLIMETERS
@ USD_SCENE_UNITS_CENTIMETERS
@ USD_SCENE_UNITS_KILOMETERS
static Collection * create_collection(Main *bmain, Collection *parent, const char *name)
@ USD_MTL_PURPOSE_PREVIEW
bool USD_import(const bContext *C, const char *filepath, const USDImportParams *params, bool as_background_job, ReportList *reports)
@ USD_TEX_NAME_COLLISION_USE_EXISTING
@ USD_TEX_NAME_COLLISION_OVERWRITE
void import_blendshapes(Main *bmain, Object *mesh_obj, const pxr::UsdPrim &prim, ReportList *reports, const bool import_anim)
bool USD_export(const bContext *C, const char *filepath, const USDExportParams *params, bool as_background_job, ReportList *reports)
@ USD_TEX_EXPORT_PRESERVE
@ USD_TEX_EXPORT_NEW_PATH
@ USD_MTL_NAME_COLLISION_MAKE_UNIQUE
@ USD_MTL_NAME_COLLISION_REFERENCE_EXISTING
eUSDZTextureDownscaleSize
@ USD_TEXTURE_SIZE_CUSTOM
MatBase< T, NumCol, NumRow > scale(const MatBase< T, NumCol, NumRow > &mat, const VectorT &scale)
const EnumPropertyItem io_transform_axis[]
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
bool RNA_struct_property_is_set_ex(PointerRNA *ptr, const char *identifier, bool use_ghost)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
int RNA_int_get(PointerRNA *ptr, const char *name)
char * RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, int fixedlen, int *r_len)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_property_update_runtime(PropertyRNA *prop, RNAPropertyUpdateFunc func)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
const EnumPropertyItem rna_enum_modifier_triangulate_ngon_method_items[]
const EnumPropertyItem rna_enum_modifier_triangulate_quad_method_items[]
PanelLayout panel(const bContext *C, blender::StringRef idname, bool default_closed)
void label(blender::StringRef name, int icon)
uiLayout & column(bool align)
void prop(PointerRNA *ptr, PropertyRNA *prop, int index, int value, eUI_Item_Flag flag, std::optional< blender::StringRef > name_opt, int icon, std::optional< blender::StringRef > placeholder=std::nullopt)
struct ReportList * reports
void WM_event_add_fileselect(bContext *C, wmOperator *op)
void WM_operator_properties_filesel(wmOperatorType *ot, const int filter, const short type, const eFileSel_Action action, const eFileSel_Flag flag, const short display, const short sort)
bool WM_operator_winactive(bContext *C)