38#include "RNA_prototypes.hh"
70 if (runtime_data_v ==
nullptr) {
74 if (runtime_data->
subdiv !=
nullptr) {
89 if (runtime_data ==
nullptr) {
105 runtime_data->
subdiv, subdiv_settings, mesh);
106 runtime_data->
subdiv = subdiv;
130 ignore_control_edges);
151 const int level =
multires_get_level(scene,
object, mmd, use_render_params, ignore_simplify);
175 runtime_data->
subdiv =
nullptr;
184#if !defined(WITH_OPENSUBDIV)
191 if (subdiv_settings.
level == 0) {
196 if (subdiv ==
nullptr) {
233 memcpy(
data, mesh->corner_normals().data(), mesh->corner_normals().size_in_bytes());
247 if (subdiv != runtime_data->
subdiv) {
261#if !defined(WITH_OPENSUBDIV)
270 if (subdiv_settings.
level == 0) {
282 if (subdiv ==
nullptr) {
288 if (subdiv != runtime_data->
subdiv) {
342 op_ptr = layout->
op(
"OBJECT_OT_multires_subdivide",
350 row = &layout->
row(
false);
351 op_ptr = row->
op(
"OBJECT_OT_multires_subdivide",
358 op_ptr = row->
op(
"OBJECT_OT_multires_subdivide",
368 layout->
op(
"OBJECT_OT_multires_unsubdivide",
IFACE_(
"Unsubdivide"), ICON_NONE);
369 layout->
op(
"OBJECT_OT_multires_higher_levels_delete",
IFACE_(
"Delete Higher"), ICON_NONE);
383 row = &layout->
row(
false);
384 row->
op(
"OBJECT_OT_multires_reshape",
IFACE_(
"Reshape"), ICON_NONE);
386 row = &layout->
row(
false);
387 op_ptr = row->
op(
"OBJECT_OT_multires_base_apply",
IFACE_(
"Apply Base"), ICON_NONE);
389 op_ptr = row->
op(
"OBJECT_OT_multires_base_apply",
IFACE_(
"Conform Base"), ICON_NONE);
404 layout->
op(
"OBJECT_OT_multires_rebuild_subdiv",
IFACE_(
"Rebuild Subdivisions"), ICON_NONE);
408 row = &
col->row(
false);
410 row->
op(
"OBJECT_OT_multires_external_pack",
IFACE_(
"Pack External"), ICON_NONE);
411 col->use_property_split_set(
true);
412 row = &
col->row(
false);
416 col->op(
"OBJECT_OT_multires_external_save",
IFACE_(
"Save External..."), ICON_NONE);
436 col->active_set(
true);
459 "MultiresModifierData",
461 &RNA_MultiresModifier,
Object * CTX_data_active_object(const bContext *C)
CustomData interface, see also DNA_customdata_types.h.
void CustomData_free_layers(CustomData *data, eCustomDataType type)
void * CustomData_get_layer_for_write(CustomData *data, eCustomDataType type, int totelem)
bool CustomData_has_layer(const CustomData *data, eCustomDataType type)
void * CustomData_add_layer(CustomData *data, eCustomDataType type, eCDAllocType alloctype, int totelem)
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
@ eModifierTypeFlag_SupportsMapping
@ eModifierTypeFlag_RequiresOriginalData
@ eModifierTypeFlag_AcceptsMesh
void BKE_modifier_set_error(const Object *ob, ModifierData *md, const char *format,...) ATTR_PRINTF_FORMAT(3
@ MOD_APPLY_IGNORE_SIMPLIFY
void BKE_multires_subdiv_settings_init(blender::bke::subdiv::Settings *settings, const MultiresModifierData *mmd)
void BKE_multires_subdiv_mesh_settings_init(blender::bke::subdiv::ToMeshSettings *mesh_settings, const Scene *scene, const Object *object, const MultiresModifierData *mmd, bool use_render_params, bool ignore_simplify, bool ignore_control_edges)
int multires_get_level(const Scene *scene, const Object *ob, const MultiresModifierData *mmd, bool render, bool ignore_simplify)
Mesh * BKE_subdiv_to_ccg_mesh(blender::bke::subdiv::Subdiv &subdiv, const SubdivToCCGSettings &settings, const Mesh &coarse_mesh)
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
Scene * DEG_get_evaluated_scene(const Depsgraph *graph)
#define DNA_struct_default_get(struct_name)
@ eMultiresModifierFlag_UseSculptBaseMesh
@ eMultiresModifierFlag_UseCustomNormals
Object is a sort of wrapper for general info.
@ UI_PANEL_DATA_EXPAND_ROOT
@ UI_SUBPANEL_DATA_EXPAND_1
Read Guarded memory(de)allocation.
static void deform_matrices(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions, blender::MutableSpan< blender::float3x3 > matrices)
static void init_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void panel_draw(const bContext *, Panel *panel)
static void copy_data(const ModifierData *md, ModifierData *target, const int flag)
static Mesh * modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
static void free_data(ModifierData *md)
static void advanced_panel_draw(const bContext *, Panel *panel)
static void free_runtime_data(void *runtime_data_v)
static void init_data(ModifierData *md)
static void generate_panel_draw(const bContext *, Panel *panel)
static blender::bke::subdiv::Subdiv * subdiv_descriptor_ensure(MultiresModifierData *mmd, const blender::bke::subdiv::Settings *subdiv_settings, const Mesh *mesh)
static void panel_register(ARegionType *region_type)
static void free_runtime_data(void *runtime_data_v)
static Mesh * multires_as_ccg(MultiresModifierData *mmd, const ModifierEvalContext *ctx, Mesh *mesh, blender::bke::subdiv::Subdiv *subdiv)
static void copy_data(const ModifierData *md_src, ModifierData *md_dst, const int flag)
static Mesh * modify_mesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh)
ModifierTypeInfo modifierType_Multires
static void free_data(ModifierData *md)
static Mesh * multires_as_mesh(MultiresModifierData *mmd, const ModifierEvalContext *ctx, Mesh *mesh, blender::bke::subdiv::Subdiv *subdiv)
static void shape_panel_draw(const bContext *, Panel *panel)
static void advanced_panel_draw(const bContext *, Panel *panel)
static void subdivisions_panel_draw(const bContext *, Panel *panel)
static void multires_ccg_settings_init(SubdivToCCGSettings *settings, const MultiresModifierData *mmd, const ModifierEvalContext *ctx, Mesh *mesh)
static MultiresRuntimeData * multires_ensure_runtime(MultiresModifierData *mmd)
static void deform_matrices(ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, blender::MutableSpan< blender::float3 > positions, blender::MutableSpan< blender::float3x3 >)
static void panel_draw(const bContext *C, Panel *panel)
PanelType * modifier_subpanel_register(ARegionType *region_type, const char *name, const char *label, PanelDrawFn draw_header, PanelDrawFn draw, PanelType *parent)
PanelType * modifier_panel_register(ARegionType *region_type, ModifierType type, PanelDrawFn draw)
PointerRNA * modifier_panel_get_property_pointers(Panel *panel, PointerRNA *r_ob_ptr)
void modifier_error_message_draw(uiLayout *layout, PointerRNA *ptr)
void UI_block_lock_clear(uiBlock *block)
void UI_block_lock_set(uiBlock *block, bool val, const char *lockstr)
BMesh const char void * data
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void free(Subdiv *subdiv)
void displacement_attach_from_multires(Subdiv *subdiv, const Mesh *mesh, const MultiresModifierData *mmd)
void deform_coarse_vertices(Subdiv *subdiv, const Mesh *coarse_mesh, MutableSpan< float3 > vert_positions)
Mesh * subdiv_to_mesh(Subdiv *subdiv, const ToMeshSettings *settings, const Mesh *coarse_mesh)
Subdiv * update_from_mesh(Subdiv *subdiv, const Settings *settings, const Mesh *mesh)
void mesh_set_custom_normals_normalized(Mesh &mesh, MutableSpan< float3 > corner_normals)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
int RNA_int_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)
blender::bke::subdiv::Subdiv * subdiv
struct SculptSession * sculpt
struct SculptSession::@300305335361021334214041350300054316061376210174 multires
MultiresModifierData * modifier
uiLayout & column(bool align)
void active_set(bool active)
void separator(float factor=1.0f, LayoutSeparatorType type=LayoutSeparatorType::Auto)
void enabled_set(bool enabled)
uiLayout & row(bool align)
PointerRNA op(wmOperatorType *ot, std::optional< blender::StringRef > name, int icon, blender::wm::OpCallContext context, eUI_Item_Flag flag)
void use_property_split_set(bool value)
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)