[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [30845] trunk/blender/source/blender/ blenkernel/intern/object.c: Fix #23071: making vertex parent not correct with subsurf modifier, now it
Brecht Van Lommel
brecht at blender.org
Wed Jul 28 18:47:12 CEST 2010
Revision: 30845
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=30845
Author: blendix
Date: 2010-07-28 18:47:12 +0200 (Wed, 28 Jul 2010)
Log Message:
-----------
Fix #23071: making vertex parent not correct with subsurf modifier, now it
also uses the final derivedmesh for the coordinates in edit mode.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/object.c
Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c 2010-07-28 16:46:49 UTC (rev 30844)
+++ trunk/blender/source/blender/blenkernel/intern/object.c 2010-07-28 16:47:12 UTC (rev 30845)
@@ -1837,47 +1837,38 @@
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;
- }
- }
- 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);
+ 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;
+ /* 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(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;
More information about the Bf-blender-cvs
mailing list