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:
authorBastien Montagne <montagne29@wanadoo.fr>2011-11-13 22:03:27 +0400
committerBastien Montagne <montagne29@wanadoo.fr>2011-11-13 22:03:27 +0400
commitfea58943ecf32daa5bd828656d5e1157e6de984a (patch)
tree34a57950730971670ff3b9fae32826609a41363e /source/blender/blenloader/intern/readfile.c
parentc491b8bf459bcb3bdc1e73fbe3c1f95ff096c335 (diff)
Moving all node angle-type values to radians. This also fixes [#29151] rotate node wrong input (mixing up radians and degrees).
Warning! Angles in nodes have just been moved to consistant Radians values (ANGLE subtype of RNA Float property). You will still see them as degrees in the GUI, though, unless you chose otherwise in Scene properties, Units panel. Conversion from degrees to radians for old files is obviously done at loading time, but if you use a mixed pipeline of trunk and releases, be carefull! Loading a 2.60.4 file (or higher) into any previous version of Blender, your angles in nodes will have odd values (well, radians interpreted as degrees)! And if you save such file in a pre-2.60.4 version, the angle node values will be converted again when loaded in Blender 2.60.4 or higher... This affects following nodes: * Compo: Rotate, Defocus, ChromaMatte, Glare and DirectionalBlur * Shader: Mapping And all future code using the TexMapping struct’s rotation part (its rot memember is now in radians).
Diffstat (limited to 'source/blender/blenloader/intern/readfile.c')
-rw-r--r--source/blender/blenloader/intern/readfile.c74
1 files changed, 72 insertions, 2 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 53df4bbecfa..1c4a4567401 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -7301,6 +7301,52 @@ static void do_version_ntree_tex_mapping_260(void *UNUSED(data), ID *UNUSED(id),
}
}
+static void do_versions_nodetree_convert_angle(bNodeTree *ntree)
+{
+ bNode *node;
+ for (node=ntree->nodes.first; node; node=node->next) {
+ if (node->type == CMP_NODE_ROTATE) {
+ /* Convert degrees to radians. */
+ bNodeSocket *sock = ((bNodeSocket*)node->inputs.first)->next;
+ ((bNodeSocketValueFloat*)sock->default_value)->value = DEG2RADF(((bNodeSocketValueFloat*)sock->default_value)->value);
+ }
+ else if (node->type == CMP_NODE_DBLUR) {
+ /* Convert degrees to radians. */
+ NodeDBlurData *ndbd= node->storage;
+ ndbd->angle = DEG2RADF(ndbd->angle);
+ ndbd->spin = DEG2RADF(ndbd->spin);
+ }
+ else if (node->type == CMP_NODE_DEFOCUS) {
+ /* Convert degrees to radians. */
+ NodeDefocus *nqd = node->storage;
+ /* XXX DNA char to float conversion seems to map the char value into the [0.0f, 1.0f] range... */
+ nqd->rotation = DEG2RADF(nqd->rotation*255.0f);
+ }
+ else if (node->type == CMP_NODE_CHROMA_MATTE) {
+ /* Convert degrees to radians. */
+ NodeChroma *ndc = node->storage;
+ ndc->t1 = DEG2RADF(ndc->t1);
+ ndc->t2 = DEG2RADF(ndc->t2);
+ }
+ else if (node->type == CMP_NODE_GLARE) {
+ /* Convert degrees to radians. */
+ NodeGlare* ndg = node->storage;
+ /* XXX DNA char to float conversion seems to map the char value into the [0.0f, 1.0f] range... */
+ ndg->angle_ofs = DEG2RADF(ndg->angle_ofs*255.0f);
+ }
+ /* XXX TexMapping struct is used by other nodes too (at least node_composite_mapValue),
+ * but not the rot part...
+ */
+ else if (node->type == SH_NODE_MAPPING) {
+ /* Convert degrees to radians. */
+ TexMapping* tmap = node->storage;
+ tmap->rot[0] = DEG2RADF(tmap->rot[0]);
+ tmap->rot[1] = DEG2RADF(tmap->rot[1]);
+ tmap->rot[2] = DEG2RADF(tmap->rot[2]);
+ }
+ }
+}
+
static void do_versions(FileData *fd, Library *lib, Main *main)
{
/* WATCH IT!!!: pointers from libdata have not been converted */
@@ -12412,9 +12458,29 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
ntreetype->foreach_nodetree(main, NULL, do_version_ntree_tex_mapping_260);
}
- /* put compatibility code here until next subversion bump */
- {
+ if (main->versionfile < 260 || (main->versionfile == 260 && main->subversionfile < 4)){
+ {
+ /* Convert node angles to radians! */
+ Scene *sce;
+ Material *mat;
+ bNodeTree *ntree;
+
+ for (sce=main->scene.first; sce; sce=sce->id.next) {
+ if (sce->nodetree)
+ do_versions_nodetree_convert_angle(sce->nodetree);
+ }
+
+ for (mat=main->mat.first; mat; mat=mat->id.next) {
+ if (mat->nodetree)
+ do_versions_nodetree_convert_angle(mat->nodetree);
+ }
+
+ for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next)
+ do_versions_nodetree_convert_angle(ntree);
+ }
+
{
+ /* Tomato compatibility code. */
bScreen *sc;
MovieClip *clip;
@@ -12475,6 +12541,10 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
+ /* put compatibility code here until next subversion bump */
+ {
+ }
+
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
/* WATCH IT 2!: Userdef struct init has to be in editors/interface/resources.c! */