[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33625] trunk/blender/source/blender: Lattices now have AnimData

Joshua Leung aligorith at gmail.com
Mon Dec 13 07:32:04 CET 2010


Revision: 33625
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33625
Author:   aligorith
Date:     2010-12-13 07:31:49 +0100 (Mon, 13 Dec 2010)

Log Message:
-----------
Lattices now have AnimData

This allows manual (point by point) animation of their control verts,
although many other settings cannot really be animated with any
visible effects yet. Interestingly, lattices also had IPO block
pointers, though they were never really used (AFAIK).

Todo:
- Animation Editor support has yet to be added. I've got a few other
things to add to, so will group those changes together.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/anim_sys.c
    trunk/blender/source/blender/blenkernel/intern/lattice.c
    trunk/blender/source/blender/blenkernel/intern/mball.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/makesdna/DNA_lattice_types.h
    trunk/blender/source/blender/makesrna/intern/rna_lattice.c

Modified: trunk/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim_sys.c	2010-12-13 05:02:23 UTC (rev 33624)
+++ trunk/blender/source/blender/blenkernel/intern/anim_sys.c	2010-12-13 06:31:49 UTC (rev 33625)
@@ -73,7 +73,7 @@
 	switch (GS(id->name)) {
 			/* has AnimData */
 		case ID_OB:
-		case ID_ME: case ID_MB: case ID_CU: case ID_AR:
+		case ID_ME: case ID_MB: case ID_CU: case ID_AR: case ID_LT:
 		case ID_KE:
 		case ID_PA:
 		case ID_MA: case ID_TE: case ID_NT:
@@ -1913,6 +1913,9 @@
 	/* armatures */
 	EVAL_ANIM_IDS(main->armature.first, ADT_RECALC_ANIM);
 	
+	/* lattices */
+	EVAL_ANIM_IDS(main->latt.first, ADT_RECALC_ANIM);
+	
 	/* meshes */
 	EVAL_ANIM_IDS(main->mesh.first, ADT_RECALC_ANIM);
 	

Modified: trunk/blender/source/blender/blenkernel/intern/lattice.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/lattice.c	2010-12-13 05:02:23 UTC (rev 33624)
+++ trunk/blender/source/blender/blenkernel/intern/lattice.c	2010-12-13 06:31:49 UTC (rev 33625)
@@ -49,6 +49,7 @@
 #include "DNA_curve_types.h"
 #include "DNA_key_types.h"
 
+#include "BKE_animsys.h"
 #include "BKE_anim.h"
 #include "BKE_cdderivedmesh.h"
 #include "BKE_displist.h"
@@ -203,10 +204,6 @@
 
 	ltn= copy_libblock(lt);
 	ltn->def= MEM_dupallocN(lt->def);
-		
-#if 0 // XXX old animation system
-	id_us_plus((ID *)ltn->ipo);
-#endif // XXX old animation system
 
 	ltn->key= copy_key(ltn->key);
 	if(ltn->key) ltn->key->from= (ID *)ltn;
@@ -233,6 +230,12 @@
 		MEM_freeN(editlt);
 		MEM_freeN(lt->editlatt);
 	}
+	
+	/* free animation data */
+	if (lt->adt) {
+		BKE_free_animdata(&lt->id);
+		lt->adt= NULL;
+	}
 }
 
 

Modified: trunk/blender/source/blender/blenkernel/intern/mball.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mball.c	2010-12-13 05:02:23 UTC (rev 33624)
+++ trunk/blender/source/blender/blenkernel/intern/mball.c	2010-12-13 06:31:49 UTC (rev 33625)
@@ -86,7 +86,10 @@
 {
 	unlink_mball(mb);	
 	
-	if(mb->adt) BKE_free_animdata((ID *)mb);
+	if(mb->adt) {
+		BKE_free_animdata((ID *)mb);
+		mb->adt = NULL;
+	}
 	if(mb->mat) MEM_freeN(mb->mat);
 	if(mb->bb) MEM_freeN(mb->bb);
 	BLI_freelistN(&mb->elems);

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2010-12-13 05:02:23 UTC (rev 33624)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2010-12-13 06:31:49 UTC (rev 33625)
@@ -3421,6 +3421,7 @@
 	lt= main->latt.first;
 	while(lt) {
 		if(lt->id.flag & LIB_NEEDLINK) {
+			if(lt->adt) lib_link_animdata(fd, &lt->id, lt->adt);
 			
 			lt->ipo= newlibadr_us(fd, lt->id.lib, lt->ipo); // XXX depreceated - old animation system
 			lt->key= newlibadr_us(fd, lt->id.lib, lt->key);
@@ -3439,6 +3440,9 @@
 	direct_link_dverts(fd, lt->pntsu*lt->pntsv*lt->pntsw, lt->dvert);
 	
 	lt->editlatt= NULL;
+	
+	lt->adt = newdataadr(fd, lt->adt);
+	direct_link_animdata(fd, lt->adt);
 }
 
 
@@ -11766,6 +11770,9 @@
 {
 	expand_doit(fd, mainvar, lt->ipo); // XXX depreceated - old animation system
 	expand_doit(fd, mainvar, lt->key);
+	
+	if (lt->adt)
+		expand_animdata(fd, mainvar, lt->adt);
 }
 
 

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c	2010-12-13 05:02:23 UTC (rev 33624)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c	2010-12-13 06:31:49 UTC (rev 33625)
@@ -1557,7 +1557,10 @@
 			/* write LibData */
 			writestruct(wd, ID_LT, "Lattice", 1, lt);
 			if (lt->id.properties) IDP_WriteProperty(lt->id.properties, wd);
-
+			
+			/* write animdata */
+			if (lt->adt) write_animdata(wd, lt->adt);
+			
 			/* direct data */
 			writestruct(wd, DATA, "BPoint", lt->pntsu*lt->pntsv*lt->pntsw, lt->def);
 			

Modified: trunk/blender/source/blender/makesdna/DNA_lattice_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_lattice_types.h	2010-12-13 05:02:23 UTC (rev 33624)
+++ trunk/blender/source/blender/makesdna/DNA_lattice_types.h	2010-12-13 06:31:49 UTC (rev 33625)
@@ -31,6 +31,7 @@
 
 #include "DNA_ID.h"
 
+struct AnimData;
 struct BPoint;
 struct Ipo;
 struct Key;
@@ -46,6 +47,7 @@
 
 typedef struct Lattice {
 	ID id;
+	struct AnimData *adt;
 	
 	short pntsu, pntsv, pntsw, flag;
 	short opntsu, opntsv, opntsw, pad2;
@@ -56,7 +58,7 @@
 	
 	struct BPoint *def;
 	
-	struct Ipo *ipo;
+	struct Ipo *ipo;  /* XXX: depreceated... old animation system */
 	struct Key *key;
 	
 	struct MDeformVert *dvert;

Modified: trunk/blender/source/blender/makesrna/intern/rna_lattice.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_lattice.c	2010-12-13 05:02:23 UTC (rev 33624)
+++ trunk/blender/source/blender/makesrna/intern/rna_lattice.c	2010-12-13 06:31:49 UTC (rev 33625)
@@ -180,7 +180,34 @@
 		strcpy(lt->editlatt->latt->vgroup, value);
 }
 
+/* annoying, but is a consequence of RNA structures... */
+static char *rna_LatticePoint_path(PointerRNA *ptr)
+{
+	Lattice *lt= (Lattice*)ptr->id.data;
+	void *point= ptr->data;
+	BPoint *points = NULL;
+	
+	if (lt->editlatt && lt->editlatt->latt->def)
+		points = lt->editlatt->latt->def;
+	else
+		points = lt->def;
+	
+	if (points && point) {
+		int tot= lt->pntsu*lt->pntsv*lt->pntsw;
+		
+		/* only return index if in range */
+		if ((point >= (void *)points) && (point < (void *)(points + tot))) {
+			int pt_index = (int)((BPoint *)point - points);
+			
+			return BLI_sprintfN("points[%d]", pt_index);
+		}
+	}
+	else {
+		return BLI_strdup("");
+	}
+}
 
+
 #else
 
 static void rna_def_latticepoint(BlenderRNA *brna)
@@ -191,6 +218,7 @@
 	srna= RNA_def_struct(brna, "LatticePoint", NULL);
 	RNA_def_struct_sdna(srna, "BPoint");
 	RNA_def_struct_ui_text(srna, "LatticePoint", "Point in the lattice grid");
+	RNA_def_struct_path_func(srna, "rna_LatticePoint_path");
 
 	prop= RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
 	RNA_def_property_array(prop, 3);
@@ -287,6 +315,9 @@
 	RNA_def_property_struct_type(prop, "LatticePoint");
 	RNA_def_property_collection_funcs(prop, "rna_Lattice_points_begin", "rna_iterator_array_next", "rna_iterator_array_end", "rna_iterator_array_get", 0, 0, 0);
 	RNA_def_property_ui_text(prop, "Points", "Points of the lattice");
+	
+	/* pointers */
+	rna_def_animdata_common(srna);
 }
 
 void RNA_def_lattice(BlenderRNA *brna)





More information about the Bf-blender-cvs mailing list