64 # define ASSERT_IS_VALID_MESH(mesh) \
65 (BLI_assert((mesh == nullptr) || (BKE_mesh_is_valid(mesh) == true)))
67 # define ASSERT_IS_VALID_MESH(mesh)
76 MLoop *mloop, *allloop;
103 int count = index[2] != index[3] ? 4 : 3;
105 mloop[0].
v = index[0];
106 mloop[1].
v = index[1];
107 mloop[2].
v = index[2];
109 mloop[3].
v = index[3];
113 mpoly->
loopstart = (int)(mloop - allloop);
131 MEdge **r_alledge,
int *r_totedge,
const MPoly *mpoly,
MLoop *mloop,
const int totpoly)
133 int totedge = *r_totedge;
143 for (i = 0, mp = mpoly; i < totpoly; i++, mp++) {
152 MEdge *medge = *r_alledge;
153 for (i = 0; i < totedge; i++, medge++) {
162 uint e_index = totedge;
164 *r_alledge = medge = (
MEdge *)(*r_alledge ?
166 sizeof(
MEdge) * (totedge + totedge_new)) :
170 totedge += totedge_new;
183 *r_totedge = totedge;
185 for (i = 0, mp = mpoly; i < totpoly; i++, mp++) {
189 for (j = 0; j < mp->
totloop; j++,
l++) {
220 int a,
b, ofs, vertcount, startvert, totvert = 0, totedge = 0, totloop = 0, totpoly = 0;
221 int p1, p2, p3, p4, *index;
222 const bool conv_polys = (
231 totvert += dl->parts * dl->nr;
232 totedge += dl->parts * (dl->nr - 1);
234 else if (dl->type ==
DL_POLY) {
236 totvert += dl->parts * dl->nr;
237 totedge += dl->parts * dl->nr;
240 else if (dl->type ==
DL_SURF) {
241 if (dl->parts != 0) {
243 totvert += dl->parts * dl->nr;
244 tot = (((dl->flag &
DL_CYCL_U) ? 1 : 0) + (dl->nr - 1)) *
245 (((dl->flag &
DL_CYCL_V) ? 1 : 0) + (dl->parts - 1));
268 totpoly,
sizeof(
MLoop[4]),
"nurbs_init mloop");
273 totpoly,
sizeof(
MLoopUV[4]),
"nurbs_init mloopuv");
280 const bool is_smooth = (dl->rt &
CU_SMOOTH) != 0;
283 startvert = vertcount;
284 a = dl->parts * dl->nr;
293 for (
a = 0;
a < dl->parts;
a++) {
295 for (
b = 1;
b < dl->nr;
b++) {
296 medge->
v1 = startvert + ofs +
b - 1;
297 medge->
v2 = startvert + ofs +
b;
304 else if (dl->type ==
DL_POLY) {
306 startvert = vertcount;
307 a = dl->parts * dl->nr;
316 for (
a = 0;
a < dl->parts;
a++) {
318 for (
b = 0;
b < dl->nr;
b++) {
319 medge->
v1 = startvert + ofs +
b;
320 if (
b == dl->nr - 1) {
321 medge->
v2 = startvert + ofs;
324 medge->
v2 = startvert + ofs +
b + 1;
333 startvert = vertcount;
346 mloop[0].
v = startvert + index[0];
347 mloop[1].
v = startvert + index[2];
348 mloop[2].
v = startvert + index[1];
349 mpoly->
loopstart = (int)(mloop - (*r_allloop));
354 for (
int i = 0; i < 3; i++, mloopuv++) {
355 mloopuv->
uv[0] = (mloop[i].
v - startvert) / (
float)(dl->nr - 1);
356 mloopuv->
uv[1] = 0.0f;
368 else if (dl->type ==
DL_SURF) {
369 startvert = vertcount;
370 a = dl->parts * dl->nr;
379 for (
a = 0;
a < dl->parts;
a++) {
381 if ((dl->flag &
DL_CYCL_V) == 0 &&
a == dl->parts - 1) {
386 p1 = startvert + dl->nr *
a;
387 p2 = p1 + dl->nr - 1;
393 p2 = startvert + dl->nr *
a;
399 if ((dl->flag &
DL_CYCL_V) &&
a == dl->parts - 1) {
400 p3 -= dl->parts * dl->nr;
401 p4 -= dl->parts * dl->nr;
404 for (;
b < dl->nr;
b++) {
409 mpoly->
loopstart = (int)(mloop - (*r_allloop));
414 int orco_sizeu = dl->nr - 1;
415 int orco_sizev = dl->parts - 1;
428 for (
int i = 0; i < 4; i++, mloopuv++) {
430 int v = mloop[i].
v - startvert;
432 mloopuv->
uv[0] = (
v / dl->nr) / (
float)orco_sizev;
433 mloopuv->
uv[1] = (
v % dl->nr) / (
float)orco_sizeu;
436 if ((
ELEM(i, 1, 2)) && mloopuv->
uv[0] == 0.0f) {
437 mloopuv->
uv[0] = 1.0f;
439 if ((
ELEM(i, 0, 1)) && mloopuv->
uv[1] == 0.0f) {
440 mloopuv->
uv[1] = 1.0f;
464 *r_totpoly = totpoly;
465 *r_totloop = totloop;
466 *r_totedge = totedge;
467 *r_totvert = totvert;
496 int totvert, totedge, totloop, totpoly;
529 const char *uvname =
"UVMap";
570 VertLink *vl = MEM_cnew<VertLink>(
"VertLink");
577 VertLink *vl = MEM_cnew<VertLink>(
"VertLink");
597 ListBase edges = {
nullptr,
nullptr};
601 for (i = 0, mp = mpoly; i < mpoly_len; i++, mp++) {
604 for (j = 0; j < mp->
totloop; j++, ml++) {
611 for (i = 0; i < medge_len; i++, med++) {
612 if (edge_users[i] == edge_users_test) {
613 EdgeLink *edl = MEM_cnew<EdgeLink>(
"EdgeLink");
623 while (edges.
first) {
626 ListBase polyline = {
nullptr,
nullptr};
630 uint startVert = med_current->
v1;
631 uint endVert = med_current->
v2;
649 if (med->
v1 == endVert) {
657 else if (med->
v2 == endVert) {
665 else if (med->
v1 == startVert) {
673 else if (med->
v2 == startVert) {
687 if (startVert == endVert) {
700 nu = MEM_new<Nurb>(
"MeshNurb", blender::dna::shallow_zero_initialize());
712 for (i = 0, bp = nu->
bp; i < totpoly; i++, bp++, vl = (
VertLink *)vl->
next) {
733 ListBase nurblist = {
nullptr,
nullptr};
738 if (nurblist.
first) {
773 point_positions.finish();
791 ob->
data = pointcloud;
818 for (
int i = 0; i < me->
totvert; i++, mvert++) {
873 Curve *temp_curve = (
Curve *)temp_object->data;
890 ID *final_object_data =
static_cast<ID *
>(temp_object->
data);
900 const bool object_data_stored_in_data_eval = final_object_data == temp_object->
runtime.
data_eval;
903 if (!object_data_stored_in_data_eval) {
922 Object bevel_object = blender::dna::shallow_zero_initialize();
924 bevel_object = blender::dna::shallow_copy(*
curve.
bevobj);
931 Object taper_object = blender::dna::shallow_zero_initialize();
954 return geometry_set_eval->get_curves_for_read();
983 ID *temp_data =
static_cast<ID *
>(temp_object->
data);
987 if (temp_data != temp_object->
data) {
1025 if (mball->
mat !=
nullptr) {
1026 for (
int i = mball->
totcol; i-- > 0;) {
1055 const bool preserve_origindex)
1065 Object object_for_eval = blender::dna::shallow_copy(*
object);
1072 if (preserve_origindex) {
1084 const bool preserve_all_data_layers,
1085 const bool preserve_origindex)
1087 if (preserve_all_data_layers || preserve_origindex) {
1095 if (editmesh_eval_final !=
nullptr) {
1096 mesh_input = editmesh_eval_final;
1104 const bool preserve_all_data_layers,
1105 const bool preserve_origindex)
1107 Mesh *new_mesh =
nullptr;
1108 switch (object->
type) {
1119 depsgraph,
object, preserve_all_data_layers, preserve_origindex);
1125 if (new_mesh ==
nullptr) {
1150 if (*id_p ==
nullptr) {
1161 if (*id_p ==
nullptr) {
1165 const int cb_flag = cb_data->
cb_flag;
1180 bool preserve_all_data_layers)
1185 if (
mesh ==
nullptr) {
1189 return mesh_in_bmain;
1234 return mesh_in_bmain;
1240 Key *key = mesh_src->
key;
1243 if (!mesh_src->
key) {
1250 "vertex size mismatch (mesh/dm) '%s' (%d != %d)",
1263 "vertex size mismatch (Mesh '%s':%d != KeyBlock '%s':%d)",
1272 memcpy(array, kb->
data,
sizeof(
float[3]) * (
size_t)mesh_src->
totvert);
1287 const bool use_virtual_modifiers,
1288 const bool build_shapekey_layers)
1305 if (build_shapekey_layers && me->
key &&
1312 float(*deformedVerts)[3] =
nullptr;
1314 if (use_virtual_modifiers) {
1319 md_eval_virt = md_eval_virt->
next) {
1330 if (deformedVerts ==
nullptr) {
1333 mti_virt->
deformVerts(md_eval_virt, &mectx, mesh_temp, deformedVerts, numVerts);
1338 if (deformedVerts ==
nullptr) {
1345 if (build_shapekey_layers) {
1350 if (deformedVerts !=
nullptr) {
1354 if (build_shapekey_layers) {
1361 if (mesh_temp !=
result) {
1366 if (deformedVerts !=
nullptr) {
1379 if (!mesh_dst->
key) {
1384 for (i = 0; i < tot; i++) {
1390 if (kb->
uid == layer->
uid) {
1409 if (kb->
uid == actshape_uid) {
1412 for (j = 0; j < mesh_src->
totvert; j++, kbcos++, mvert++) {
1417 for (j = 0; j < kb->
totelem; j++,
cos++, kbcos++) {
1431 CLOG_ERROR(&
LOG,
"lost a shapekey layer: '%s'! (bmesh internal error)", kb->
name);
1440 bool take_ownership)
1447 Mesh tmp = blender::dna::shallow_copy(*mesh_dst);
1448 int totvert, totedge , totloop, totpoly;
1449 bool did_shapekeys =
false;
1452 if (take_ownership ) {
1458 if (!has_any_referenced_layers) {
1505 did_shapekeys =
true;
1551 if (totloop == mesh_dst->
totloop) {
1598 if (take_ownership) {
1615 int a, totvert = mesh_src->
totvert;
1619 if (totvert == 0 || mesh_dst->
totvert == 0 || mesh_dst->
totvert != totvert) {
1629 fp = (
float *)kb->
data;
1630 mvert = mesh_src->
mvert;
1632 for (
a = 0;
a < kb->
totelem;
a++, fp += 3, mvert++) {
typedef float(TangentPoint)[2]
struct Curve * BKE_curve_add(struct Main *bmain, const char *name, int type)
short BKE_curve_type_get(const struct Curve *cu)
void BKE_curve_texspace_calc(struct Curve *cu)
Low-level operations for curves.
bool CustomData_merge(const struct CustomData *source, struct CustomData *dest, eCustomDataMask mask, eCDAllocType alloctype, int totelem)
void CustomData_free(struct CustomData *data, int totelem)
int CustomData_number_of_layers(const struct CustomData *data, int type)
bool CustomData_free_layer(struct CustomData *data, int type, int totelem, int index)
void CustomData_copy(const struct CustomData *source, struct CustomData *dest, eCustomDataMask mask, eCDAllocType alloctype, int totelem)
bool CustomData_has_layer(const struct CustomData *data, int type)
int CustomData_get_named_layer_index(const struct CustomData *data, int type, const char *name)
void * CustomData_set_layer(const struct CustomData *data, int type, void *ptr)
int CustomData_get_layer_index_n(const struct CustomData *data, int type, int n)
void * CustomData_add_layer_named(struct CustomData *data, int type, eCDAllocType alloctype, void *layer, int totelem, const char *name)
bool CustomData_has_referenced(const struct CustomData *data)
void * CustomData_get_layer_n(const struct CustomData *data, int type, int n)
void * CustomData_get_layer(const struct CustomData *data, int type)
void * CustomData_add_layer(struct CustomData *data, int type, eCDAllocType alloctype, void *layer, int totelem)
void CustomData_realloc(struct CustomData *data, int totelem)
const CustomData_MeshMasks CD_MASK_MESH
void CustomData_free_typemask(struct CustomData *data, int totelem, eCustomDataMask mask)
void CustomData_reset(struct CustomData *data)
void CustomData_update_typemap(struct CustomData *data)
display list (or rather multi purpose list) stuff.
void BKE_displist_make_curveTypes(struct Depsgraph *depsgraph, const struct Scene *scene, struct Object *ob, bool for_render)
void BKE_keyblock_convert_to_mesh(const struct KeyBlock *kb, struct MVert *mvert, int totvert)
struct KeyBlock * BKE_keyblock_add(struct Key *key, const char *name)
@ LIB_ID_COPY_SET_COPIED_ON_WRITE
@ LIB_ID_CREATE_NO_USER_REFCOUNT
struct ID * BKE_id_copy_ex(struct Main *bmain, const struct ID *id, struct ID **r_newid, int flag)
void id_us_min(struct ID *id)
void * BKE_id_new_nomain(short type, const char *name)
void BKE_id_free(struct Main *bmain, void *idv)
void id_us_ensure_real(struct ID *id)
void id_us_plus(struct ID *id)
void BKE_library_foreach_ID_link(struct Main *bmain, struct ID *id, LibraryIDLinkCallback callback, void *user_data, int flag)
General operations, lookup, etc. for materials.
struct Material * BKE_object_material_get(struct Object *ob, short act)
void BKE_id_materials_copy(struct Main *bmain, struct ID *id_src, struct ID *id_dst)
struct Mesh * BKE_mesh_copy_for_eval(const struct Mesh *source, bool reference)
void BKE_mesh_poly_edgehash_insert(struct EdgeHash *ehash, const struct MPoly *mp, const struct MLoop *mloop)
struct Mesh * BKE_mesh_add(struct Main *bmain, const char *name)
void BKE_mesh_vert_coords_apply(struct Mesh *mesh, const float(*vert_coords)[3])
void BKE_mesh_assert_normals_dirty_or_calculated(const struct Mesh *mesh)
struct Mesh * BKE_mesh_new_nomain(int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len)
void BKE_mesh_update_customdata_pointers(struct Mesh *me, bool do_ensure_tess_cd)
void BKE_mesh_texspace_copy_from_object(struct Mesh *me, struct Object *ob)
void BKE_mesh_clear_derived_normals(struct Mesh *mesh)
void BKE_mesh_texspace_calc(struct Mesh *me)
float(* BKE_mesh_vert_coords_alloc(const struct Mesh *mesh, int *r_vert_len))[3]
void BKE_mesh_calc_edges(struct Mesh *mesh, bool keep_existing_edges, bool select_new_edges)
struct Mesh * mesh_create_eval_final(struct Depsgraph *depsgraph, const struct Scene *scene, struct Object *ob, const struct CustomData_MeshMasks *dataMask)
void BKE_mesh_runtime_clear_geometry(struct Mesh *mesh)
struct Mesh * mesh_get_eval_final(struct Depsgraph *depsgraph, const struct Scene *scene, struct Object *ob, const struct CustomData_MeshMasks *dataMask)
void BKE_mesh_wrapper_ensure_mdata(struct Mesh *me)
struct Mesh * BKE_mesh_wrapper_ensure_subdivision(struct Mesh *me)
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
bool BKE_modifier_is_enabled(const struct Scene *scene, struct ModifierData *md, int required_mode)
struct ModifierData * BKE_modifiers_get_virtual_modifierlist(const struct Object *ob, struct VirtualModifierData *data)
@ eModifierTypeType_OnlyDeform
General operations, lookup, etc. for blender objects.
void BKE_object_free_modifiers(struct Object *ob, int flag)
struct Mesh * BKE_object_get_editmesh_eval_final(const struct Object *object)
struct Mesh * BKE_object_get_evaluated_mesh(const struct Object *object)
void BKE_object_free_derived_caches(struct Object *ob)
void BKE_object_runtime_free_data(struct Object *object)
void BKE_object_runtime_reset(struct Object *object)
General operations for point clouds.
void * BKE_pointcloud_add(struct Main *bmain, const char *name)
const char * POINTCLOUD_ATTR_POSITION
void BLI_edgehash_free(EdgeHash *eh, EdgeHashFreeFP free_value)
BLI_INLINE void BLI_edgehashIterator_getKey(EdgeHashIterator *ehi, unsigned int *r_v0, unsigned int *r_v1)
EdgeHashIterator * BLI_edgehashIterator_new(EdgeHash *eh) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
int BLI_edgehash_len(const EdgeHash *eh) ATTR_WARN_UNUSED_RESULT
BLI_INLINE void BLI_edgehashIterator_step(EdgeHashIterator *ehi)
#define BLI_EDGEHASH_SIZE_GUESS_FROM_POLYS(totpoly)
void BLI_edgehashIterator_free(EdgeHashIterator *ehi)
bool BLI_edgehash_haskey(const EdgeHash *eh, unsigned int v0, unsigned int v1) ATTR_WARN_UNUSED_RESULT
BLI_INLINE bool BLI_edgehashIterator_isDone(const EdgeHashIterator *ehi)
EdgeHash * BLI_edgehash_new_ex(const char *info, unsigned int nentries_reserve)
void * BLI_edgehash_lookup(const EdgeHash *eh, unsigned int v0, unsigned int v1) ATTR_WARN_UNUSED_RESULT
BLI_INLINE void BLI_edgehashIterator_setValue(EdgeHashIterator *ehi, void *val)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int max_ii(int a, int b)
MINLINE void copy_v3_v3(float r[3], const float a[3])
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
#define POINTER_AS_UINT(i)
#define POINTER_FROM_UINT(i)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define CLOG_ERROR(clg_ref,...)
struct Depsgraph Depsgraph
bool DEG_is_original_id(const struct ID *id)
bool DEG_is_evaluated_object(const struct Object *object)
struct ID * DEG_get_original_id(struct ID *id)
struct Object * DEG_get_evaluated_object(const struct Depsgraph *depsgraph, struct Object *object)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
#define CD_MASK_ORIGINDEX
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to curves
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert * v
void materialize(MutableSpan< T > r_span) const
GVArray lookup_or_default(const AttributeIDRef &attribute_id, const eAttrDomain domain, const eCustomDataType data_type, const void *default_value=nullptr) const
static CurvesGeometry & wrap(::CurvesGeometry &dna_struct)
const Depsgraph * depsgraph
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
void BKE_mesh_from_metaball(ListBase *lb, Mesh *me)
Mesh * BKE_mesh_new_nomain_from_curve(const Object *ob)
void BKE_pointcloud_from_mesh(Mesh *me, PointCloud *pointcloud)
void BKE_mesh_from_pointcloud(const PointCloud *pointcloud, Mesh *me)
static Mesh * mesh_new_from_mesh_object(Depsgraph *depsgraph, Object *object, const bool preserve_all_data_layers, const bool preserve_origindex)
static void add_shapekey_layers(Mesh *mesh_dest, Mesh *mesh_src)
Mesh * BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph, Scene *scene, Object *ob_eval, ModifierData *md_eval, const bool use_virtual_modifiers, const bool build_shapekey_layers)
void BKE_pointcloud_to_mesh(Main *bmain, Depsgraph *depsgraph, Scene *UNUSED(scene), Object *ob)
void BKE_mesh_nomain_to_meshkey(Mesh *mesh_src, Mesh *mesh_dst, KeyBlock *kb)
static void appendPolyLineVert(ListBase *lb, uint index)
void BKE_mesh_edges_set_draw_render(Mesh *mesh)
void BKE_mesh_to_pointcloud(Main *bmain, Depsgraph *depsgraph, Scene *UNUSED(scene), Object *ob)
static void curve_to_mesh_eval_ensure(Object &object)
static void mesh_copy_texture_space_from_curve_type(const Curve *cu, Mesh *me)
static int foreach_libblock_make_original_callback(LibraryIDLinkCallbackData *cb_data)
static Mesh * mesh_new_from_evaluated_curve_type_object(const Object *evaluated_object)
void BKE_mesh_to_curve(Main *bmain, Depsgraph *depsgraph, Scene *UNUSED(scene), Object *ob)
static Mesh * mesh_new_from_curve_type_object(const Object *object)
void BKE_mesh_to_curve_nurblist(const Mesh *me, ListBase *nurblist, const int edge_users_test)
static void prependPolyLineVert(ListBase *lb, uint index)
static Object * object_for_curve_to_mesh_create(const Object *object)
static void shapekey_layers_to_keyblocks(Mesh *mesh_src, Mesh *mesh_dst, int actshape_uid)
static Mesh * mesh_new_from_mesh_object_with_layers(Depsgraph *depsgraph, Object *object, const bool preserve_origindex)
static Mesh * mesh_new_from_mball_object(Object *object)
static void make_edges_mdata_extend(MEdge **r_alledge, int *r_totedge, const MPoly *mpoly, MLoop *mloop, const int totpoly)
static const Curves * get_evaluated_curves_from_object(const Object *object)
static Mesh * mesh_new_from_mesh(Object *object, Mesh *mesh)
Mesh * BKE_mesh_new_from_object(Depsgraph *depsgraph, Object *object, const bool preserve_all_data_layers, const bool preserve_origindex)
static int foreach_libblock_make_usercounts_callback(LibraryIDLinkCallbackData *cb_data)
Mesh * BKE_mesh_new_nomain_from_curve_displist(const Object *ob, const ListBase *dispbase)
Mesh * BKE_mesh_new_from_object_to_bmain(Main *bmain, Depsgraph *depsgraph, Object *object, bool preserve_all_data_layers)
static int mesh_nurbs_displist_to_mdata(const Curve *cu, const ListBase *dispbase, MVert **r_allvert, int *r_totvert, MEdge **r_alledge, int *r_totedge, MLoop **r_allloop, MPoly **r_allpoly, MLoopUV **r_alluv, int *r_totloop, int *r_totpoly)
#define ASSERT_IS_VALID_MESH(mesh)
void BKE_mesh_nomain_to_mesh(Mesh *mesh_src, Mesh *mesh_dst, Object *ob, const CustomData_MeshMasks *mask, bool take_ownership)
static void object_for_curve_to_mesh_free(Object *temp_object)
INLINE Rall1d< T, V, S > cos(const Rall1d< T, V, S > &arg)
Mesh * curve_to_wire_mesh(const CurvesGeometry &curve)
MutableAttributeAccessor pointcloud_attributes_for_write(PointCloud &pointcloud)
AttributeAccessor mesh_attributes(const Mesh &mesh)
MutableAttributeAccessor mesh_attributes_for_write(Mesh &mesh)
SymEdge< T > * prev(const SymEdge< T > *se)
vec_base< float, 3 > float3
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
MutableSpan< float3 > positions
Map< AttributeIDRef, GMutableSpan > point_attributes
struct EditFont * editfont
struct BMEditMesh * edit_mesh
ListBase vertex_group_names
int vertex_group_active_index
struct ModifierData * next
bool(* isDisabled)(const struct Scene *scene, struct ModifierData *md, bool userRenderParams)
struct Mesh *(* modifyMesh)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *mesh)
void(* deformVerts)(struct ModifierData *md, const struct ModifierEvalContext *ctx, struct Mesh *mesh, float(*vertexCos)[3], int numVerts)
struct CurveCache * curve_cache
struct GeometrySet * geometry_set_eval