[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39878] trunk/blender/source/blender/ editors: Fix #28280: Insert Hook wrong index

Sergey Sharybin g.ulairi at gmail.com
Fri Sep 2 17:19:30 CEST 2011


Revision: 39878
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39878
Author:   nazgul
Date:     2011-09-02 15:19:30 +0000 (Fri, 02 Sep 2011)
Log Message:
-----------
Fix #28280: Insert Hook wrong index

Use quite easy and stupid approach like it used for shape keys:
re-make editmesh (editcurve or editlattice) before creating index array
for hook or storing vertex index in parenting object.

Even if hook was added in "current" edit mode, it should be re-mapped on
loading edit data because topology could be changed after it was created.
Such kind of re-loading edit structures is the easiest way for now to
update keyindexes to relevant state.

Also, fixed bug with not re-mapping indices for vertex-parented objects.
Really old error, not sure why it wasn't noticed yet.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/editmesh.c
    trunk/blender/source/blender/editors/object/object_hook.c
    trunk/blender/source/blender/editors/object/object_relations.c

Modified: trunk/blender/source/blender/editors/mesh/editmesh.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh.c	2011-09-02 14:55:06 UTC (rev 39877)
+++ trunk/blender/source/blender/editors/mesh/editmesh.c	2011-09-02 15:19:30 UTC (rev 39878)
@@ -1099,7 +1099,7 @@
 		int j;
 
 		for (ob=G.main->object.first; ob; ob=ob->id.next) {
-			if (ob->parent==ob && ELEM(ob->partype, PARVERT1,PARVERT3)) {
+			if (ob->parent==obedit && ELEM(ob->partype, PARVERT1,PARVERT3)) {
 				
 				/* duplicate code from below, make it function later...? */
 				if (!vertMap) {

Modified: trunk/blender/source/blender/editors/object/object_hook.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_hook.c	2011-09-02 14:55:06 UTC (rev 39877)
+++ trunk/blender/source/blender/editors/object/object_hook.c	2011-09-02 15:19:30 UTC (rev 39878)
@@ -64,6 +64,7 @@
 
 #include "ED_curve.h"
 #include "ED_mesh.h"
+#include "ED_lattice.h"
 #include "ED_screen.h"
 
 #include "WM_types.h"
@@ -292,7 +293,7 @@
 	return totvert;
 }
 
-static int object_hook_index_array(Object *obedit, int *tot, int **indexar, char *name, float *cent_r)
+static int object_hook_index_array(Scene *scene, Object *obedit, int *tot, int **indexar, char *name, float *cent_r)
 {
 	*indexar= NULL;
 	*tot= 0;
@@ -302,8 +303,13 @@
 		case OB_MESH:
 		{
 			Mesh *me= obedit->data;
-			EditMesh *em = BKE_mesh_get_editmesh(me);
+			EditMesh *em;
 
+			load_editMesh(scene, obedit);
+			make_editMesh(scene, obedit);
+
+			em = BKE_mesh_get_editmesh(me);
+
 			/* check selected vertices first */
 			if( return_editmesh_indexar(em, tot, indexar, cent_r)) {
 				BKE_mesh_end_editmesh(me, em);
@@ -316,10 +322,17 @@
 		}
 		case OB_CURVE:
 		case OB_SURF:
+			load_editNurb(obedit);
+			make_editNurb(obedit);
+
 			return return_editcurve_indexar(obedit, tot, indexar, cent_r);
 		case OB_LATTICE:
 		{
 			Lattice *lt= obedit->data;
+
+			load_editLatt(obedit);
+			make_editLatt(obedit);
+
 			return return_editlattice_indexar(lt->editlatt->latt, tot, indexar, cent_r);
 		}
 		default:
@@ -427,7 +440,7 @@
 	int tot, ok, *indexar;
 	char name[32];
 	
-	ok = object_hook_index_array(obedit, &tot, &indexar, name, cent);
+	ok = object_hook_index_array(scene, obedit, &tot, &indexar, name, cent);
 	
 	if (!ok) return;	// XXX error("Requires selected vertices or active Vertex Group");
 	
@@ -760,7 +773,7 @@
 	
 	/* assign functionality */
 	
-	if(!object_hook_index_array(ob, &tot, &indexar, name, cent)) {
+	if(!object_hook_index_array(CTX_data_scene(C), ob, &tot, &indexar, name, cent)) {
 		BKE_report(op->reports, RPT_WARNING, "Requires selected vertices or active vertex group");
 		return OPERATOR_CANCELLED;
 	}

Modified: trunk/blender/source/blender/editors/object/object_relations.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_relations.c	2011-09-02 14:55:06 UTC (rev 39877)
+++ trunk/blender/source/blender/editors/object/object_relations.c	2011-09-02 15:19:30 UTC (rev 39878)
@@ -91,6 +91,8 @@
 
 #include "ED_armature.h"
 #include "ED_curve.h"
+#include "ED_lattice.h"
+#include "ED_mesh.h"
 #include "ED_keyframing.h"
 #include "ED_object.h"
 #include "ED_screen.h"
@@ -122,8 +124,13 @@
 	
 	if(obedit->type==OB_MESH) {
 		Mesh *me= obedit->data;
-		EditMesh *em = BKE_mesh_get_editmesh(me);
+		EditMesh *em;
 
+		load_editMesh(scene, obedit);
+		make_editMesh(scene, obedit);
+
+		em = BKE_mesh_get_editmesh(me);
+
 		eve= em->verts.first;
 		while(eve) {
 			if(eve->f & 1) {
@@ -140,7 +147,12 @@
 		BKE_mesh_end_editmesh(me, em);
 	}
 	else if(ELEM(obedit->type, OB_SURF, OB_CURVE)) {
-		ListBase *editnurb= curve_get_editcurve(obedit);
+		ListBase *editnurb;
+
+		load_editNurb(obedit);
+		make_editNurb(obedit);
+
+		editnurb= curve_get_editcurve(obedit);
 		
 		cu= obedit->data;
 
@@ -180,8 +192,13 @@
 		}
 	}
 	else if(obedit->type==OB_LATTICE) {
-		Lattice *lt= obedit->data;
-		
+		Lattice *lt;
+
+		load_editLatt(obedit);
+		make_editLatt(obedit);
+
+		lt= obedit->data;
+
 		a= lt->editlatt->latt->pntsu*lt->editlatt->latt->pntsv*lt->editlatt->latt->pntsw;
 		bp= lt->editlatt->latt->def;
 		while(a--) {




More information about the Bf-blender-cvs mailing list