Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/makesrna/intern/rna_mesh.c')
-rw-r--r--source/blender/makesrna/intern/rna_mesh.c49
1 files changed, 30 insertions, 19 deletions
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c
index f13132b5b7c..9d28666b8a0 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -365,8 +365,8 @@ static void rna_Mesh_update_positions_tag(Main *bmain, Scene *scene, PointerRNA
static int rna_MeshVertex_index_get(PointerRNA *ptr)
{
const Mesh *mesh = rna_mesh(ptr);
- const MVert *vert = (MVert *)ptr->data;
- const int index = (int)(vert - BKE_mesh_verts(mesh));
+ const float(*position)[3] = (const float(*)[3])ptr->data;
+ const int index = (int)(position - BKE_mesh_positions(mesh));
BLI_assert(index >= 0);
BLI_assert(index < mesh->totvert);
return index;
@@ -439,6 +439,16 @@ int rna_Mesh_loop_triangles_lookup_int(PointerRNA *ptr, int index, PointerRNA *r
return true;
}
+static void rna_MeshVertex_co_get(PointerRNA *ptr, float *value)
+{
+ copy_v3_v3(value, (const float *)ptr->data);
+}
+
+static void rna_MeshVertex_co_set(PointerRNA *ptr, const float *value)
+{
+ copy_v3_v3((float *)ptr->data, value);
+}
+
static void rna_MeshVertex_normal_get(PointerRNA *ptr, float *value)
{
Mesh *mesh = rna_mesh(ptr);
@@ -618,9 +628,9 @@ static void rna_MeshPolygon_normal_get(PointerRNA *ptr, float *values)
{
Mesh *me = rna_mesh(ptr);
MPoly *mp = (MPoly *)ptr->data;
- const MVert *verts = BKE_mesh_verts(me);
+ const float(*positions)[3] = BKE_mesh_positions(me);
const MLoop *loops = BKE_mesh_loops(me);
- BKE_mesh_calc_poly_normal(mp, loops + mp->loopstart, verts, values);
+ BKE_mesh_calc_poly_normal(mp, loops + mp->loopstart, positions, values);
}
static bool rna_MeshPolygon_hide_get(PointerRNA *ptr)
@@ -695,18 +705,18 @@ static void rna_MeshPolygon_center_get(PointerRNA *ptr, float *values)
{
Mesh *me = rna_mesh(ptr);
MPoly *mp = (MPoly *)ptr->data;
- const MVert *verts = BKE_mesh_verts(me);
+ const float(*positions)[3] = BKE_mesh_positions(me);
const MLoop *loops = BKE_mesh_loops(me);
- BKE_mesh_calc_poly_center(mp, loops + mp->loopstart, verts, values);
+ BKE_mesh_calc_poly_center(mp, loops + mp->loopstart, positions, values);
}
static float rna_MeshPolygon_area_get(PointerRNA *ptr)
{
Mesh *me = (Mesh *)ptr->owner_id;
MPoly *mp = (MPoly *)ptr->data;
- const MVert *verts = BKE_mesh_verts(me);
+ const float(*positions)[3] = BKE_mesh_positions(me);
const MLoop *loops = BKE_mesh_loops(me);
- return BKE_mesh_calc_poly_area(mp, loops + mp->loopstart, verts);
+ return BKE_mesh_calc_poly_area(mp, loops + mp->loopstart, positions);
}
static void rna_MeshPolygon_flip(ID *id, MPoly *mp)
@@ -733,13 +743,13 @@ static void rna_MeshLoopTriangle_normal_get(PointerRNA *ptr, float *values)
{
Mesh *me = rna_mesh(ptr);
MLoopTri *lt = (MLoopTri *)ptr->data;
- const MVert *verts = BKE_mesh_verts(me);
+ const float(*positions)[3] = BKE_mesh_positions(me);
const MLoop *loops = BKE_mesh_loops(me);
uint v1 = loops[lt->tri[0]].v;
uint v2 = loops[lt->tri[1]].v;
uint v3 = loops[lt->tri[2]].v;
- normal_tri_v3(values, verts[v1].co, verts[v2].co, verts[v3].co);
+ normal_tri_v3(values, positions[v1], positions[v2], positions[v3]);
}
static void rna_MeshLoopTriangle_split_normals_get(PointerRNA *ptr, float *values)
@@ -764,12 +774,12 @@ static float rna_MeshLoopTriangle_area_get(PointerRNA *ptr)
{
Mesh *me = rna_mesh(ptr);
MLoopTri *lt = (MLoopTri *)ptr->data;
- const MVert *verts = BKE_mesh_verts(me);
+ const float(*positions)[3] = BKE_mesh_positions(me);
const MLoop *loops = BKE_mesh_loops(me);
uint v1 = loops[lt->tri[0]].v;
uint v2 = loops[lt->tri[1]].v;
uint v3 = loops[lt->tri[2]].v;
- return area_tri_v3(verts[v1].co, verts[v2].co, verts[v3].co);
+ return area_tri_v3(positions[v1], positions[v2], positions[v3]);
}
static void rna_MeshLoopColor_color_get(PointerRNA *ptr, float *values)
@@ -835,19 +845,19 @@ static void rna_MeshVertex_groups_begin(CollectionPropertyIterator *iter, Pointe
static void rna_MeshVertex_undeformed_co_get(PointerRNA *ptr, float values[3])
{
Mesh *me = rna_mesh(ptr);
- MVert *mvert = (MVert *)ptr->data;
+ const float *position = (const float *)ptr->data;
const float(*orco)[3] = CustomData_get_layer(&me->vdata, CD_ORCO);
if (orco) {
const int index = rna_MeshVertex_index_get(ptr);
- /* orco is normalized to 0..1, we do inverse to match mvert->co */
+ /* orco is normalized to 0..1, we do inverse to match the vertex position */
float loc[3], size[3];
BKE_mesh_texspace_get(me->texcomesh ? me->texcomesh : me, loc, size);
madd_v3_v3v3v3(values, loc, orco[index], size);
}
else {
- copy_v3_v3(values, mvert->co);
+ copy_v3_v3(values, position);
}
}
@@ -1637,7 +1647,7 @@ static void rna_Mesh_vertices_begin(CollectionPropertyIterator *iter, PointerRNA
{
Mesh *mesh = rna_mesh(ptr);
rna_iterator_array_begin(
- iter, BKE_mesh_verts_for_write(mesh), sizeof(MVert), mesh->totvert, false, NULL);
+ iter, BKE_mesh_positions_for_write(mesh), sizeof(float[3]), mesh->totvert, false, NULL);
}
static int rna_Mesh_vertices_length(PointerRNA *ptr)
{
@@ -1652,7 +1662,7 @@ int rna_Mesh_vertices_lookup_int(PointerRNA *ptr, int index, PointerRNA *r_ptr)
}
r_ptr->owner_id = &mesh->id;
r_ptr->type = &RNA_MeshVertex;
- r_ptr->data = &BKE_mesh_verts_for_write(mesh)[index];
+ r_ptr->data = &BKE_mesh_positions_for_write(mesh)[index];
return true;
}
@@ -2230,13 +2240,14 @@ static void rna_def_mvert(BlenderRNA *brna)
PropertyRNA *prop;
srna = RNA_def_struct(brna, "MeshVertex", NULL);
- RNA_def_struct_sdna(srna, "MVert");
RNA_def_struct_ui_text(srna, "Mesh Vertex", "Vertex in a Mesh data-block");
RNA_def_struct_path_func(srna, "rna_MeshVertex_path");
RNA_def_struct_ui_icon(srna, ICON_VERTEXSEL);
prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
- RNA_def_property_ui_text(prop, "Location", "");
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_float_funcs(prop, "rna_MeshVertex_co_get", "rna_MeshVertex_co_set", NULL);
+ RNA_def_property_ui_text(prop, "Position", "");
RNA_def_property_update(prop, 0, "rna_Mesh_update_positions_tag");
prop = RNA_def_property(srna, "normal", PROP_FLOAT, PROP_DIRECTION);