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/blenloader/intern/readfile.c')
-rw-r--r--source/blender/blenloader/intern/readfile.c156
1 files changed, 55 insertions, 101 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index a44c1228c79..661a520832f 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -71,7 +71,6 @@
#include "DNA_fileglobal_types.h"
#include "DNA_group_types.h"
#include "DNA_ipo_types.h"
-#include "DNA_ika_types.h"
#include "DNA_image_types.h"
#include "DNA_key_types.h"
#include "DNA_lattice_types.h"
@@ -108,11 +107,12 @@
#include "BKE_bad_level_calls.h" // for reopen_text build_seqar (from WHILE_SEQ) open_plugin_seq set_rects_butspace check_imasel_copy
-#include "BKE_armature.h" // for precalc_bonelist_irestmats
#include "BKE_action.h"
+#include "BKE_armature.h"
#include "BKE_constraint.h"
#include "BKE_curve.h"
#include "BKE_deform.h"
+#include "BKE_depsgraph.h"
#include "BKE_effect.h" // for give_parteff
#include "BKE_global.h" // for G
#include "BKE_property.h" // for get_property
@@ -1240,42 +1240,6 @@ static void direct_link_scriptlink(FileData *fd, ScriptLink *slink)
}
}
-/* ************ READ IKA ***************** */
-
-static void lib_link_ika(FileData *fd, Main *main)
-{
- Ika *ika;
- int a;
- Deform *def;
-
- ika= main->ika.first;
- while(ika) {
- if(ika->id.flag & LIB_NEEDLINK) {
-
- ika->parent= newlibadr(fd, ika->id.lib, ika->parent);
-
- a= ika->totdef;
- def= ika->def;
- while(a--) {
- def->ob= newlibadr(fd, ika->id.lib, def->ob);
- def++;
- }
- ika->id.flag -= LIB_NEEDLINK;
- }
- ika= ika->id.next;
- }
-}
-
-static void direct_link_ika(FileData *fd, Ika *ika)
-{
- link_list(fd, &ika->limbbase);
-
- ika->def= newdataadr(fd, ika->def);
-
- /* error from V.138 and older */
- if(ika->def==0) ika->totdef= 0;
-}
-
/* ************ READ ARMATURE ***************** */
static void lib_link_nlastrips(FileData *fd, ID *id, ListBase *striplist)
@@ -1285,7 +1249,7 @@ static void lib_link_nlastrips(FileData *fd, ID *id, ListBase *striplist)
for (strip=striplist->first; strip; strip=strip->next){
strip->act = newlibadr_us(fd, id->lib, strip->act);
strip->ipo = newlibadr(fd, id->lib, strip->ipo);
- };
+ }
}
static void lib_link_constraint_channels(FileData *fd, ID *id, ListBase *chanbase)
@@ -1302,7 +1266,8 @@ static void lib_link_constraints(FileData *fd, ID *id, ListBase *conlist)
bConstraint *con;
for (con = conlist->first; con; con=con->next) {
- /* patch for error introduced by changing constraints (dunno how) */
+ /* patch for error introduced by changing constraints (dunno how) */
+ /* if con->data type changes, dna cannot resolve the pointer! (ton) */
if(con->data==NULL) {
con->type= CONSTRAINT_TYPE_NULL;
}
@@ -1386,35 +1351,31 @@ static void direct_link_constraints(FileData *fd, ListBase *lb)
link_list(fd, lb);
for (cons=lb->first; cons; cons=cons->next) {
cons->data = newdataadr(fd, cons->data);
- switch (cons->type) {
- default:
- break;
- }
- // Link data
}
}
+/* unused */
static void lib_link_bone(FileData *fd, ID *id, Bone *bone)
{
- Bone *curBone;
-
-// lib_link_constraints(fd, id, &bone->constraints);
+// Bone *curBone;
- for (curBone=bone->childbase.first; curBone; curBone=curBone->next) {
- lib_link_bone(fd, id, curBone);
- }
+// for (curBone=bone->childbase.first; curBone; curBone=curBone->next) {
+// lib_link_bone(fd, id, curBone);
+// }
}
-static void lib_link_pose(FileData *fd, ID *id, bPose *pose)
+static void lib_link_pose(FileData *fd, Object *ob, bPose *pose)
{
bPoseChannel *chan;
-
+ bArmature *arm= ob->data;
if (!pose)
return;
for (chan = pose->chanbase.first; chan; chan=chan->next) {
- lib_link_constraints(fd, id, &chan->constraints);
+ lib_link_constraints(fd, (ID *)ob, &chan->constraints);
+ // hurms... loop in a loop, but yah... later... (ton)
+ chan->bone= get_named_bone(arm, chan->name);
}
}
@@ -1430,9 +1391,9 @@ static void lib_link_armature(FileData *fd, Main *main)
arm->id.flag -= LIB_NEEDLINK;
}
- for (bone=arm->bonebase.first; bone; bone=bone->next) {
- lib_link_bone(fd, &arm->id, bone);
- }
+// for (bone=arm->bonebase.first; bone; bone=bone->next) {
+// lib_link_bone(fd, &arm->id, bone);
+// }
arm= arm->id.next;
}
@@ -2188,7 +2149,7 @@ static void lib_link_object(FileData *fd, Main *main)
/* if id.us==0 a new base will be created later on */
/* WARNING! Also check expand_object(), should reflect the stuff below. */
- lib_link_pose(fd, &ob->id, ob->pose);
+ lib_link_pose(fd, ob, ob->pose);
lib_link_constraints(fd, &ob->id, &ob->constraints);
lib_link_nlastrips(fd, &ob->id, &ob->nlastrips);
lib_link_constraint_channels(fd, &ob->id, &ob->constraintChannels);
@@ -2302,6 +2263,8 @@ static void direct_link_pose(FileData *fd, bPose *pose) {
link_list(fd, &pose->chanbase);
for (chan = pose->chanbase.first; chan; chan=chan->next) {
+ chan->bone= NULL;
+ chan->parent= newdataadr(fd, chan->parent);
direct_link_constraints(fd, &chan->constraints);
}
@@ -3224,9 +3187,6 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, int flag, ID
case ID_LT:
direct_link_latt(fd, (Lattice *)id);
break;
- case ID_IK:
- direct_link_ika(fd, (Ika *)id);
- break;
case ID_WO:
direct_link_world(fd, (World *)id);
break;
@@ -3313,9 +3273,9 @@ static int map_223_keybd_code_to_224_keybd_code(int code)
}
}
-static void do_versions(Main *main)
+static void do_versions(FileData *fd, Main *main)
{
- /* watch it: pointers from libdata have not been converted */
+ /* WATCH IT!!!: pointers from libdata have not been converted */
if(main->versionfile == 100) {
/* tex->extend and tex->imageflag have changed: */
@@ -3524,23 +3484,9 @@ static void do_versions(Main *main)
if(main->versionfile <= 165) {
Mesh *me= main->mesh.first;
TFace *tface;
- Ika *ika= main->ika.first;
- Deform *def;
int nr;
char *cp;
- while(ika) {
- ika->xyconstraint= .5;
-
- def= ika->def;
- nr= ika->totdef;
- while(nr--) {
- if(def->fac==0.0) def->fac= 1.0;
- def++;
- }
- ika= ika->id.next;
- }
-
while(me) {
if(me->tface) {
nr= me->totface;
@@ -4021,12 +3967,6 @@ static void do_versions(Main *main)
ob = ob->id.next;
}
- /* Precalculate rest position matrices for old armatures. -rvo
- */
- for (arm= main->armature.first; arm; arm= arm->id.next) {
- precalc_bonelist_irestmats (&arm->bonebase);
- }
-
/* Began using alpha component of vertex colors, but
* old file vertex colors are undefined, reset them
* to be fully opaque. -zr
@@ -4129,17 +4069,6 @@ static void do_versions(Main *main)
sound->packedfile = NULL;
}
}
-
- /* Clear some (now) unused pose flags */
- for (ob=main->object.first; ob; ob=ob->id.next){
- if (ob->pose){
- bPoseChannel *pchan;
- for (pchan=ob->pose->chanbase.first; pchan; pchan=pchan->next){
- pchan->flag &= ~(POSE_UNUSED1|POSE_UNUSED2|POSE_UNUSED3|POSE_UNUSED4|POSE_UNUSED5);
- }
- }
- }
-
/* Make sure that old subsurf meshes don't have zero subdivision level for rendering */
for (me=main->mesh.first; me; me=me->id.next){
if ((me->flag & ME_SUBSURF) && (me->subdivr==0))
@@ -4761,7 +4690,33 @@ static void do_versions(Main *main)
}
}
}
+ if(main->versionfile <= 237) {
+ bArmature *arm;
+ bPoseChannel *pchan;
+ Object *ob;
+
+ // armature recode checks
+ for(arm= main->armature.first; arm; arm= arm->id.next) {
+ where_is_armature(arm);
+ }
+ for(ob= main->object.first; ob; ob= ob->id.next) {
+ // btw. armature_rebuild_pose is further only called on leave editmode
+ if(ob->pose) {
+ ob->pose->flag |= POSE_RECALC;
+ ob->recalc |= OB_RECALC;
+
+ /* initialize for IK caching. we check for zero, so new saved files go fine */
+ pchan= ob->pose->chanbase.first;
+ if(pchan && pchan->ik_mat[0][0]==0.0 && pchan->ik_mat[0][1]==0.0 && pchan->ik_mat[0][2]==0.0) {
+ for(; pchan; pchan= pchan->next)
+ Mat3One(pchan->ik_mat);
+ }
+ }
+ }
+ }
+ /* WATCH IT!!!: pointers from libdata have not been converted yet here! */
+
/* don't forget to set version number in blender.c! */
}
@@ -4780,7 +4735,6 @@ static void lib_link_all(FileData *fd, Main *main)
lib_link_world(fd, main);
lib_link_lamp(fd, main);
lib_link_latt(fd, main);
- lib_link_ika(fd, main);
lib_link_text(fd, main);
lib_link_camera(fd, main);
lib_link_sound(fd, main);
@@ -4861,7 +4815,7 @@ BlendFileData *blo_read_file_internal(FileData *fd, BlendReadError *error_r)
}
/* before read_libraries */
- do_versions(bfd->main);
+ do_versions(fd, bfd->main);
read_libraries(fd, &fd->mainlist);
blo_join_main(&fd->mainlist);
@@ -5142,8 +5096,6 @@ static void expand_bones(FileData *fd, Main *mainvar, Bone *bone)
{
Bone *curBone;
-// expand_constraints(fd, main, &bone->constraints);
-
for (curBone = bone->childbase.first; curBone; curBone=curBone->next) {
expand_bones(fd, mainvar, curBone);
}
@@ -5522,6 +5474,8 @@ void BLO_script_library_append(BlendHandle *bh, char *dir, char *name, int idcod
G.main= mainlist.first;
lib_link_all(fd, G.main);
+
+ DAG_scene_sort(G.scene);
}
/* append to G.scene */
@@ -5647,7 +5601,7 @@ void BLO_library_append(SpaceFile *sfile, char *dir, int idcode)
/* restore the 'last loaded filename' */
BLI_strncpy(G.sce, filename, sizeof(filename));
-
+ DAG_scene_sort(G.scene);
}
/* ************* READ LIBRARY ************** */
@@ -5764,10 +5718,10 @@ static void read_libraries(FileData *basefd, ListBase *mainlist)
/* some mains still have to be read, then
* versionfile is still zero! */
- if(mainptr->versionfile) do_versions(mainptr);
+ if(mainptr->versionfile) do_versions(mainptr->curlib->filedata, mainptr);
if(mainptr->curlib->filedata) blo_freefiledata(mainptr->curlib->filedata);
- mainptr->curlib->filedata= 0;
+ mainptr->curlib->filedata= NULL;
mainptr= mainptr->next;
}