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
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-07-28 20:47:12 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-07-28 20:47:12 +0400
commitc8b6533ddaf421b51d44af7de4816f41086c9510 (patch)
treeef0508137b4f30d678200b56ae64e23fc68a009b /source
parent2c8d7921bc6bc32dd1fa24e3e00cc717c4ed5ccb (diff)
Fix #23071: making vertex parent not correct with subsurf modifier, now it
also uses the final derivedmesh for the coordinates in edit mode.
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenkernel/intern/object.c59
1 files changed, 25 insertions, 34 deletions
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 81799a5409d..39e02ee584d 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1837,47 +1837,38 @@ static void give_parvert(Object *par, int nr, float *vec)
if(par->type==OB_MESH) {
Mesh *me= par->data;
- em = BKE_mesh_get_editmesh(me);
+ DerivedMesh *dm;
- if(em) {
- EditVert *eve;
+ em = BKE_mesh_get_editmesh(me);
+ dm = (em)? em->derivedFinal: par->derivedFinal;
- for(eve= em->verts.first; eve; eve= eve->next) {
- if(eve->keyindex==nr) {
- memcpy(vec, eve->co, sizeof(float)*3);
- break;
+ if(dm) {
+ MVert *mvert= dm->getVertArray(dm);
+ int *index = (int *)dm->getVertDataArray(dm, CD_ORIGINDEX);
+ int i, count = 0, vindex, numVerts = dm->getNumVerts(dm);
+
+ /* get the average of all verts with (original index == nr) */
+ for(i = 0; i < numVerts; i++) {
+ vindex= (index)? index[i]: i;
+
+ if(vindex == nr) {
+ add_v3_v3(vec, mvert[i].co);
+ count++;
}
}
- BKE_mesh_end_editmesh(me, em);
- }
- else {
- DerivedMesh *dm = par->derivedFinal;
-
- if(dm) {
- MVert *mvert= dm->getVertArray(dm);
- int *index = (int *)dm->getVertDataArray(dm, CD_ORIGINDEX);
- int i, count = 0, vindex, numVerts = dm->getNumVerts(dm);
-
- /* get the average of all verts with (original index == nr) */
- for(i = 0; i < numVerts; i++) {
- vindex= (index)? index[i]: i;
-
- if(vindex == nr) {
- add_v3_v3(vec, mvert[i].co);
- count++;
- }
- }
- if (count==0) {
- /* keep as 0,0,0 */
- } else if(count > 0) {
- mul_v3_fl(vec, 1.0f / count);
- } else {
- /* use first index if its out of range */
- dm->getVertCo(dm, 0, vec);
- }
+ if (count==0) {
+ /* keep as 0,0,0 */
+ } else if(count > 0) {
+ mul_v3_fl(vec, 1.0f / count);
+ } else {
+ /* use first index if its out of range */
+ dm->getVertCo(dm, 0, vec);
}
}
+
+ if(em)
+ BKE_mesh_end_editmesh(me, em);
}
else if (ELEM(par->type, OB_CURVE, OB_SURF)) {
Nurb *nu;