32#include "RNA_prototypes.hh"
77 bool &r_attr_converted)
84 const std::optional<bke::AttributeMetaData> meta_data = attributes.
lookup_meta_data(name);
86 r_attr_converted =
false;
89 if (meta_data->domain == domain && meta_data->data_type ==
CD_PROP_FLOAT) {
90 r_attr_converted =
false;
95 attributes.
lookup<
float>(name, domain).varray.materialize(weight);
98 attributes.
add<
float>(
100 r_attr_converted =
true;
118 float weight, weight2;
126 const float value = bmd->
value;
127 const int mat = std::clamp(
int(bmd->
mat), -1, ctx->
object->
totcol - 1);
135 const float spread = bmd->
spread;
149 bool vert_weight_converted;
152 bool edge_weight_converted;
171 if (weight == 0.0f) {
206 if (weight == 0.0f) {
215 if (weight < 0.5f || weight2 < 0.5f) {
249 bweight_offset_edge);
254 BLI_assert(
bm->vtoolflagpool ==
nullptr &&
bm->etoolflagpool ==
nullptr &&
255 bm->ftoolflagpool ==
nullptr);
259 if (vert_weight_converted) {
260 result->attributes_for_write().remove(vert_weight_name);
262 if (edge_weight_converted) {
263 result->attributes_for_write().remove(edge_weight_name);
280 return (bmd->
value == 0.0f);
314 sub = &
col->column(
false);
319 const char *prop_name = edge_bevel ?
"edge_weight" :
"vertex_weight";
346 row = &layout->
row(
false);
378 row = &layout->
row(
false);
381 row = &layout->
row(
false);
385 row = &layout->
row(
false);
391 row = &layout->
row(
false);
395 row = &layout->
row(
false);
std::string BKE_attribute_calc_unique_name(const AttributeOwner &owner, blender::StringRef name)
struct CurveProfile * BKE_curveprofile_copy(const struct CurveProfile *profile)
void BKE_curveprofile_blend_read(struct BlendDataReader *reader, struct CurveProfile *profile)
struct CurveProfile * BKE_curveprofile_add(eCurveProfilePresets preset)
void BKE_curveprofile_blend_write(struct BlendWriter *writer, const struct CurveProfile *profile)
void BKE_curveprofile_free(struct CurveProfile *profile)
int CustomData_get_offset_named(const CustomData *data, eCustomDataType type, blender::StringRef name)
Mesh * BKE_mesh_from_bmesh_for_eval_nomain(BMesh *bm, const CustomData_MeshMasks *cd_mask_extra, const Mesh *me_settings)
BMesh * BKE_mesh_to_bmesh_ex(const Mesh *mesh, const BMeshCreateParams *create_params, const BMeshFromMeshParams *convert_params)
void BKE_modifier_copydata_generic(const ModifierData *md, ModifierData *md_dst, int flag)
@ eModifierTypeFlag_AcceptsCVs
@ eModifierTypeFlag_EnableInEditmode
@ eModifierTypeFlag_SupportsEditmode
@ eModifierTypeFlag_AcceptsMesh
MINLINE float dot_v3v3(const float a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define BLO_write_struct(writer, struct_name, data_ptr)
#define BLO_read_struct(reader, struct_name, ptr_p)
#define DNA_struct_default_get(struct_name)
@ MOD_BEVEL_PROFILE_CUSTOM
@ MOD_BEVEL_PROFILE_SUPERELLIPSE
@ MOD_BEVEL_HARDEN_NORMALS
@ MOD_BEVEL_INVERT_VGROUP
@ MOD_BEVEL_AFFECT_VERTICES
Object is a sort of wrapper for general info.
static void init_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void required_data_mask(ModifierData *, CustomData_MeshMasks *r_cddata_masks)
static void blend_read(BlendDataReader *, ModifierData *md)
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 init_data(ModifierData *md)
static void panel_register(ARegionType *region_type)
static void geometry_panel_draw(const bContext *, Panel *panel)
static std::string ensure_weight_attribute_meta_data(Mesh &mesh, const blender::StringRef name, const blender::bke::AttrDomain domain, bool &r_attr_converted)
static void shading_panel_draw(const bContext *, Panel *panel)
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)
static void free_data(ModifierData *md)
static void blend_read(BlendDataReader *reader, ModifierData *md)
static void profile_panel_draw(const bContext *, Panel *panel)
static void panel_draw(const bContext *, Panel *panel)
static void required_data_mask(ModifierData *md, CustomData_MeshMasks *r_cddata_masks)
static void blend_write(BlendWriter *writer, const ID *, const ModifierData *md)
ModifierTypeInfo modifierType_Bevel
void modifier_vgroup_ui(uiLayout *layout, PointerRNA *ptr, PointerRNA *ob_ptr, const StringRefNull vgroup_prop, const std::optional< StringRefNull > invert_vgroup_prop, const std::optional< StringRefNull > text)
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 MOD_get_vgroup(const Object *ob, const Mesh *mesh, const char *name, const MDeformVert **dvert, int *defgrp_index)
void uiTemplateCurveProfile(uiLayout *layout, PointerRNA *ptr, blender::StringRefNull propname)
void uiLayoutSetActive(uiLayout *layout, bool active)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiLayoutSetPropDecorate(uiLayout *layout, bool is_sep)
void BM_mesh_bevel(BMesh *bm, const float offset, const int offset_type, const int profile_type, const int segments, const float profile, const bool affect_type, const bool use_weights, const bool limit_offset, const MDeformVert *dvert, const int vertex_group, const int mat, const bool loop_slide, const bool mark_seam, const bool mark_sharp, const bool harden_normals, const int face_strength_mode, const int miter_outer, const int miter_inner, const float spread, const CurveProfile *custom_profile, const int vmesh_method, const int bweight_offset_vert, const int bweight_offset_edge)
#define BM_ELEM_CD_GET_FLOAT(ele, offset)
#define BM_elem_index_get(ele)
#define BM_elem_flag_enable(ele, hflag)
#define BM_ITER_MESH(ele, iter, bm, itype)
void BM_mesh_free(BMesh *bm)
BMesh Free Mesh.
bool BM_edge_loop_pair(BMEdge *e, BMLoop **r_la, BMLoop **r_lb)
BLI_INLINE bool BM_edge_is_manifold(const BMEdge *e) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMLoop * l_b
ATTR_WARN_UNUSED_RESULT const BMVert * v
static AttributeOwner from_id(ID *id)
static VArray ForSpan(Span< T > values)
GAttributeReader lookup(const StringRef attribute_id) const
int domain_size(const AttrDomain domain) const
std::optional< AttributeMetaData > lookup_meta_data(StringRef attribute_id) const
bool add(const StringRef attribute_id, const AttrDomain domain, const eCustomDataType data_type, const AttributeInit &initializer)
#define CD_MASK_ORIGINDEX
#define CD_MASK_MDEFORMVERT
bool allow_procedural_attribute_access(StringRef attribute_name)
void debug_randomize_mesh_order(Mesh *mesh)
int RNA_enum_get(PointerRNA *ptr, const char *name)
struct CustomData_MeshMasks cd_mask_extra
char edge_weight_name[64]
struct CurveProfile * custom_profile
char vertex_weight_name[64]
uiLayout & column(bool align)
void separator(float factor=1.0f, LayoutSeparatorType type=LayoutSeparatorType::Auto)
uiLayout & row(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)