From 6483069a84fc335283ffe400f5a85c9be46a0a80 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 5 Nov 2011 00:59:50 +0000 Subject: Fix #29138: changing game engine physics type from soft body to occluder, navmesh or no collision did not clear flag properly, causing soft body to still be partially applied. --- source/blender/makesrna/intern/rna_object.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 7e2700629ad..be2375f5716 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -901,11 +901,11 @@ static void rna_GameObjectSettings_physics_type_set(PointerRNA *ptr, int value) break; case OB_BODY_TYPE_OCCLUDER: ob->gameflag |= OB_OCCLUDER; - ob->gameflag &= ~(OB_SENSOR|OB_COLLISION|OB_DYNAMIC|OB_NAVMESH); + ob->gameflag &= ~(OB_SENSOR|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION|OB_DYNAMIC|OB_NAVMESH); break; case OB_BODY_TYPE_NAVMESH: ob->gameflag |= OB_NAVMESH; - ob->gameflag &= ~(OB_SENSOR|OB_COLLISION|OB_DYNAMIC|OB_OCCLUDER); + ob->gameflag &= ~(OB_SENSOR|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION|OB_DYNAMIC|OB_OCCLUDER); if (ob->type == OB_MESH) { /* could be moved into mesh UI but for now ensure mesh data layer */ @@ -914,7 +914,7 @@ static void rna_GameObjectSettings_physics_type_set(PointerRNA *ptr, int value) break; case OB_BODY_TYPE_NO_COLLISION: - ob->gameflag &= ~(OB_SENSOR|OB_COLLISION|OB_OCCLUDER|OB_DYNAMIC|OB_NAVMESH); + ob->gameflag &= ~(OB_SENSOR|OB_RIGID_BODY|OB_SOFT_BODY|OB_COLLISION|OB_OCCLUDER|OB_DYNAMIC|OB_NAVMESH); break; case OB_BODY_TYPE_STATIC: ob->gameflag |= OB_COLLISION; -- cgit v1.2.3 From 62f22185546e80b661424b45c88006f8b592d8b1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 5 Nov 2011 05:44:52 +0000 Subject: macro formatting & remve some unused code. --- source/blender/makesrna/RNA_access.h | 54 ++++++++++++++++++----------- source/blender/makesrna/intern/makesrna.c | 41 ++++++++++++---------- source/blender/makesrna/intern/rna_access.c | 44 +++++++++++------------ source/blender/makesrna/intern/rna_color.c | 25 ++++++------- 4 files changed, 90 insertions(+), 74 deletions(-) (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 204f7b0b0ec..7adfc9a5c16 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -874,37 +874,49 @@ int RNA_collection_length(PointerRNA *ptr, const char *name); void RNA_collection_add(PointerRNA *ptr, const char *name, PointerRNA *r_value); void RNA_collection_clear(PointerRNA *ptr, const char *name); -#define RNA_BEGIN(sptr, itemptr, propname) \ - { \ - CollectionPropertyIterator rna_macro_iter; \ - for(RNA_collection_begin(sptr, propname, &rna_macro_iter); rna_macro_iter.valid; RNA_property_collection_next(&rna_macro_iter)) { \ +#define RNA_BEGIN(sptr, itemptr, propname) \ + { \ + CollectionPropertyIterator rna_macro_iter; \ + for(RNA_collection_begin(sptr, propname, &rna_macro_iter); \ + rna_macro_iter.valid; \ + RNA_property_collection_next(&rna_macro_iter)) \ + { \ PointerRNA itemptr= rna_macro_iter.ptr; -#define RNA_END \ - } \ - RNA_property_collection_end(&rna_macro_iter); \ +#define RNA_END \ + } \ + RNA_property_collection_end(&rna_macro_iter); \ } -#define RNA_PROP_BEGIN(sptr, itemptr, prop) \ - { \ - CollectionPropertyIterator rna_macro_iter; \ - for(RNA_property_collection_begin(sptr, prop, &rna_macro_iter); rna_macro_iter.valid; RNA_property_collection_next(&rna_macro_iter)) { \ +#define RNA_PROP_BEGIN(sptr, itemptr, prop) \ + { \ + CollectionPropertyIterator rna_macro_iter; \ + for(RNA_property_collection_begin(sptr, prop, &rna_macro_iter); \ + rna_macro_iter.valid; \ + RNA_property_collection_next(&rna_macro_iter)) \ + { \ PointerRNA itemptr= rna_macro_iter.ptr; -#define RNA_PROP_END \ - } \ - RNA_property_collection_end(&rna_macro_iter); \ +#define RNA_PROP_END \ + } \ + RNA_property_collection_end(&rna_macro_iter); \ } -#define RNA_STRUCT_BEGIN(sptr, prop) \ - { \ - CollectionPropertyIterator rna_macro_iter; \ - for(RNA_property_collection_begin(sptr, RNA_struct_iterator_property(sptr->type), &rna_macro_iter); rna_macro_iter.valid; RNA_property_collection_next(&rna_macro_iter)) { \ +#define RNA_STRUCT_BEGIN(sptr, prop) \ + { \ + CollectionPropertyIterator rna_macro_iter; \ + for(RNA_property_collection_begin( \ + sptr, \ + RNA_struct_iterator_property(sptr->type), \ + &rna_macro_iter); \ + rna_macro_iter.valid; \ + RNA_property_collection_next(&rna_macro_iter)) \ + { \ PropertyRNA *prop= rna_macro_iter.ptr.data; -#define RNA_STRUCT_END \ - } \ - RNA_property_collection_end(&rna_macro_iter); \ +#define RNA_STRUCT_END \ + } \ + RNA_property_collection_end(&rna_macro_iter); \ } /* check if the idproperty exists, for operators */ diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index adedcbb18b3..891b62f7c79 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -70,25 +70,28 @@ static int replace_if_different(char *tmpfile, const char *dep_files[]) { // return 0; // use for testing had edited rna -#define REN_IF_DIFF \ - { \ - FILE *file_test= fopen(orgfile, "rb"); \ - if(file_test) { \ - fclose(file_test); \ - if(fp_org) fclose(fp_org); \ - if(fp_new) fclose(fp_new); \ - if(remove(orgfile) != 0) { \ - fprintf(stderr, "%s:%d, Remove Error (%s): \"%s\"\n", __FILE__, __LINE__, strerror(errno), orgfile); \ - return -1; \ - } \ - } \ - } \ - if(rename(tmpfile, orgfile) != 0) { \ - fprintf(stderr, "%s:%d, Rename Error (%s): \"%s\" -> \"%s\"\n", __FILE__, __LINE__, strerror(errno), tmpfile, orgfile); \ - return -1; \ - } \ - remove(tmpfile); \ - return 1; \ +#define REN_IF_DIFF \ + { \ + FILE *file_test= fopen(orgfile, "rb"); \ + if(file_test) { \ + fclose(file_test); \ + if(fp_org) fclose(fp_org); \ + if(fp_new) fclose(fp_new); \ + if(remove(orgfile) != 0) { \ + fprintf(stderr, "%s:%d, Remove Error (%s): \"%s\"\n", \ + __FILE__, __LINE__, strerror(errno), orgfile); \ + return -1; \ + } \ + } \ + } \ + if(rename(tmpfile, orgfile) != 0) { \ + fprintf(stderr, "%s:%d, Rename Error (%s): \"%s\" -> \"%s\"\n", \ + __FILE__, __LINE__, strerror(errno), tmpfile, orgfile); \ + return -1; \ + } \ + remove(tmpfile); \ + return 1; \ + /* end REN_IF_DIFF */ diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c index a33efda38d0..793d0112af7 100644 --- a/source/blender/makesrna/intern/rna_access.c +++ b/source/blender/makesrna/intern/rna_access.c @@ -2930,28 +2930,28 @@ int RNA_property_collection_raw_array(PointerRNA *ptr, PropertyRNA *prop, Proper return 1; } -#define RAW_GET(dtype, var, raw, a) \ -{ \ - switch(raw.type) { \ - case PROP_RAW_CHAR: var = (dtype)((char*)raw.array)[a]; break; \ - case PROP_RAW_SHORT: var = (dtype)((short*)raw.array)[a]; break; \ - case PROP_RAW_INT: var = (dtype)((int*)raw.array)[a]; break; \ - case PROP_RAW_FLOAT: var = (dtype)((float*)raw.array)[a]; break; \ - case PROP_RAW_DOUBLE: var = (dtype)((double*)raw.array)[a]; break; \ - default: var = (dtype)0; \ - } \ -} - -#define RAW_SET(dtype, raw, a, var) \ -{ \ - switch(raw.type) { \ - case PROP_RAW_CHAR: ((char*)raw.array)[a] = (char)var; break; \ - case PROP_RAW_SHORT: ((short*)raw.array)[a] = (short)var; break; \ - case PROP_RAW_INT: ((int*)raw.array)[a] = (int)var; break; \ - case PROP_RAW_FLOAT: ((float*)raw.array)[a] = (float)var; break; \ - case PROP_RAW_DOUBLE: ((double*)raw.array)[a] = (double)var; break; \ - default: break; \ - } \ +#define RAW_GET(dtype, var, raw, a) \ +{ \ + switch(raw.type) { \ + case PROP_RAW_CHAR: var = (dtype)((char*)raw.array)[a]; break; \ + case PROP_RAW_SHORT: var = (dtype)((short*)raw.array)[a]; break; \ + case PROP_RAW_INT: var = (dtype)((int*)raw.array)[a]; break; \ + case PROP_RAW_FLOAT: var = (dtype)((float*)raw.array)[a]; break; \ + case PROP_RAW_DOUBLE: var = (dtype)((double*)raw.array)[a]; break; \ + default: var = (dtype)0; \ + } \ +} + +#define RAW_SET(dtype, raw, a, var) \ +{ \ + switch(raw.type) { \ + case PROP_RAW_CHAR: ((char*)raw.array)[a] = (char)var; break; \ + case PROP_RAW_SHORT: ((short*)raw.array)[a] = (short)var; break; \ + case PROP_RAW_INT: ((int*)raw.array)[a] = (int)var; break; \ + case PROP_RAW_FLOAT: ((float*)raw.array)[a] = (float)var; break; \ + case PROP_RAW_DOUBLE: ((double*)raw.array)[a] = (double)var; break; \ + default: break; \ + } \ } int RNA_raw_type_sizeof(RawPropertyType type) diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c index 59d23b7a878..60144e0cf7f 100644 --- a/source/blender/makesrna/intern/rna_color.c +++ b/source/blender/makesrna/intern/rna_color.c @@ -167,19 +167,20 @@ static char *rna_ColorRampElement_path(PointerRNA *ptr) /* helper macro for use here to try and get the path * - this calls the standard code for getting a path to a texture... */ -#define COLRAMP_GETPATH \ -{ \ -prop= RNA_struct_find_property(&ramp_ptr, "elements"); \ -if (prop) { \ -index= RNA_property_collection_lookup_index(&ramp_ptr, prop, ptr); \ -if (index >= 0) { \ -char *texture_path= rna_ColorRamp_path(&ramp_ptr); \ -path= BLI_sprintfN("%s.elements[%d]", texture_path, index); \ -MEM_freeN(texture_path); \ -} \ -} \ + +#define COLRAMP_GETPATH \ +{ \ + prop= RNA_struct_find_property(&ramp_ptr, "elements"); \ + if (prop) { \ + index= RNA_property_collection_lookup_index(&ramp_ptr, prop, ptr); \ + if (index >= 0) { \ + char *texture_path= rna_ColorRamp_path(&ramp_ptr); \ + path= BLI_sprintfN("%s.elements[%d]", texture_path, index); \ + MEM_freeN(texture_path); \ + } \ + } \ } - + /* determine the path from the ID-block to the ramp */ // FIXME: this is a very slow way to do it, but it will have to suffice... if (ptr->id.data) { -- cgit v1.2.3 From e5647ea196c360905d8f0e1c1b2fad1745cb5cf5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sat, 5 Nov 2011 08:40:07 +0000 Subject: py operators - don't use the screen as an operators ID anymore, screen's don't store operator instances and operator functions have access to the context if they need the current screen. also add some more py api file descriptions. --- source/blender/makesrna/intern/rna_wm.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c index c7f7fe5feea..dfbdafd7d18 100644 --- a/source/blender/makesrna/intern/rna_wm.c +++ b/source/blender/makesrna/intern/rna_wm.c @@ -821,7 +821,7 @@ static int operator_execute(bContext *C, wmOperator *op) void *ret; int result; - RNA_pointer_create(&CTX_wm_screen(C)->id, op->type->ext.srna, op, &opr); + RNA_pointer_create(NULL, op->type->ext.srna, op, &opr); func= &rna_Operator_execute_func; /* RNA_struct_find_function(&opr, "execute"); */ RNA_parameter_list_create(&list, &opr, func); @@ -847,7 +847,7 @@ static int operator_check(bContext *C, wmOperator *op) void *ret; int result; - RNA_pointer_create(&CTX_wm_screen(C)->id, op->type->ext.srna, op, &opr); + RNA_pointer_create(NULL, op->type->ext.srna, op, &opr); func= &rna_Operator_check_func; /* RNA_struct_find_function(&opr, "check"); */ RNA_parameter_list_create(&list, &opr, func); @@ -872,7 +872,7 @@ static int operator_invoke(bContext *C, wmOperator *op, wmEvent *event) void *ret; int result; - RNA_pointer_create(&CTX_wm_screen(C)->id, op->type->ext.srna, op, &opr); + RNA_pointer_create(NULL, op->type->ext.srna, op, &opr); func= &rna_Operator_invoke_func; /* RNA_struct_find_function(&opr, "invoke"); */ RNA_parameter_list_create(&list, &opr, func); @@ -899,7 +899,7 @@ static int operator_modal(bContext *C, wmOperator *op, wmEvent *event) void *ret; int result; - RNA_pointer_create(&CTX_wm_screen(C)->id, op->type->ext.srna, op, &opr); + RNA_pointer_create(NULL, op->type->ext.srna, op, &opr); func= &rna_Operator_modal_func; /* RNA_struct_find_function(&opr, "modal"); */ RNA_parameter_list_create(&list, &opr, func); @@ -923,7 +923,7 @@ static void operator_draw(bContext *C, wmOperator *op) ParameterList list; FunctionRNA *func; - RNA_pointer_create(&CTX_wm_screen(C)->id, op->type->ext.srna, op, &opr); + RNA_pointer_create(NULL, op->type->ext.srna, op, &opr); func= &rna_Operator_draw_func; /* RNA_struct_find_function(&opr, "draw"); */ RNA_parameter_list_create(&list, &opr, func); @@ -944,7 +944,7 @@ static int operator_cancel(bContext *C, wmOperator *op) void *ret; int result; - RNA_pointer_create(&CTX_wm_screen(C)->id, op->type->ext.srna, op, &opr); + RNA_pointer_create(NULL, op->type->ext.srna, op, &opr); func= &rna_Operator_cancel_func; /* RNA_struct_find_function(&opr, "cancel"); */ RNA_parameter_list_create(&list, &opr, func); -- cgit v1.2.3 From 98841291173614410fca3b9db1cd0ee320d9eb84 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 5 Nov 2011 13:00:39 +0000 Subject: Code refactoring: split camera functions from object.c into new camera.c. --- source/blender/makesrna/intern/rna_camera_api.c | 2 ++ source/blender/makesrna/intern/rna_main_api.c | 1 + 2 files changed, 3 insertions(+) (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/intern/rna_camera_api.c b/source/blender/makesrna/intern/rna_camera_api.c index bf3db58e35e..2af0524861a 100644 --- a/source/blender/makesrna/intern/rna_camera_api.c +++ b/source/blender/makesrna/intern/rna_camera_api.c @@ -36,6 +36,8 @@ #ifdef RNA_RUNTIME #include "DNA_scene_types.h" + +#include "BKE_camera.h" #include "BKE_context.h" #include "BKE_object.h" diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c index 1b80e33b40c..83ce4d2da06 100644 --- a/source/blender/makesrna/intern/rna_main_api.c +++ b/source/blender/makesrna/intern/rna_main_api.c @@ -43,6 +43,7 @@ #ifdef RNA_RUNTIME #include "BKE_main.h" +#include "BKE_camera.h" #include "BKE_curve.h" #include "BKE_mesh.h" #include "BKE_armature.h" -- cgit v1.2.3 From 647447db58ed7d3abd0ddeb627110069042e28fe Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 5 Nov 2011 13:11:49 +0000 Subject: Code refactoring: split lamp functions from object.c into new lamp.c. --- source/blender/makesrna/intern/rna_main_api.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c index 83ce4d2da06..dfa368d6b94 100644 --- a/source/blender/makesrna/intern/rna_main_api.c +++ b/source/blender/makesrna/intern/rna_main_api.c @@ -47,6 +47,7 @@ #include "BKE_curve.h" #include "BKE_mesh.h" #include "BKE_armature.h" +#include "BKE_lamp.h" #include "BKE_library.h" #include "BKE_object.h" #include "BKE_material.h" -- cgit v1.2.3 From 440c1c2c1745b6d4acd13f405643100cb913fb3b Mon Sep 17 00:00:00 2001 From: Joshua Leung Date: Sun, 6 Nov 2011 05:46:45 +0000 Subject: As discussed on the mailing list, removing the non-functional, incompatible, and unmaintainable Time Offset cruft. - Slow Parenting lives another day (just), although it now carries appropriate cautionary disclaimers. It's only really for the Game Engine nowadays, as that's the only place where it can possibly work with any reliability. - "Animation Hacks" panel is now "Relations Extras". I could've merged the two panels, though I figured these options weren't that frequently used to justify taking up screen-space by default along with the panel --- source/blender/makesrna/intern/rna_object.c | 44 ++++++++--------------------- 1 file changed, 12 insertions(+), 32 deletions(-) (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index be2375f5716..6e797146f12 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -2210,13 +2210,20 @@ static void rna_def_object(BlenderRNA *brna) rna_def_animviz_common(srna); rna_def_motionpath_common(srna); - /* duplicates */ - // XXX: evil old crap + /* slow parenting */ + // XXX: evil old crap prop= RNA_def_property(srna, "use_slow_parent", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "partype", PARSLOW); - RNA_def_property_ui_text(prop, "Slow Parent", "Create a delay in the parent relationship"); + RNA_def_property_ui_text(prop, "Slow Parent", "Create a delay in the parent relationship (Beware: this isn't renderfarm safe and may be invalid after jumping around the timeline)"); RNA_def_property_update(prop, NC_OBJECT|ND_DRAW, "rna_Object_internal_update"); - + + prop= RNA_def_property(srna, "slow_parent_offset", PROP_FLOAT, PROP_NONE|PROP_UNIT_TIME); + RNA_def_property_float_sdna(prop, NULL, "sf"); + RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); + RNA_def_property_ui_text(prop, "Slow Parent Offset", "Amount of delay in the parent relationship"); + RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update"); + + /* duplicates */ prop= RNA_def_property(srna, "dupli_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_bitflag_sdna(prop, NULL, "transflag"); RNA_def_property_enum_items(prop, dupli_items); @@ -2285,34 +2292,7 @@ static void rna_def_object(BlenderRNA *brna) prop= RNA_def_property(srna, "is_duplicator", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "transflag", OB_DUPLI); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - - /* time offset */ - prop= RNA_def_property(srna, "time_offset", PROP_FLOAT, PROP_NONE|PROP_UNIT_TIME); - RNA_def_property_float_sdna(prop, NULL, "sf"); - RNA_def_property_range(prop, MINAFRAMEF, MAXFRAMEF); - RNA_def_property_ui_text(prop, "Time Offset", "Animation offset in frames for F-Curve and dupligroup instances"); - RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update"); - - prop= RNA_def_property(srna, "use_time_offset_edit", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_OB); - RNA_def_property_ui_text(prop, "Time Offset Edit", - "Use time offset when inserting keys and display time offset for F-Curve and action views"); - - prop= RNA_def_property(srna, "use_time_offset_parent", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_PARENT); - RNA_def_property_ui_text(prop, "Time Offset Parent", "Apply the time offset to this object's parent relationship"); - RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update"); - - prop= RNA_def_property(srna, "use_time_offset_particle", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_PARTICLE); - RNA_def_property_ui_text(prop, "Time Offset Particle", "Let the time offset work on the particle effect"); - RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update"); - - prop= RNA_def_property(srna, "use_time_offset_add_parent", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "ipoflag", OB_OFFS_PARENTADD); - RNA_def_property_ui_text(prop, "Time Offset Add Parent", "Add the parent's time offset value"); - RNA_def_property_update(prop, NC_OBJECT|ND_TRANSFORM, "rna_Object_internal_update"); - + /* drawing */ prop= RNA_def_property(srna, "draw_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "dt"); -- cgit v1.2.3 From 96d73bfdcfd74bfccd58bf02ae25b64577fce904 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 7 Nov 2011 01:38:32 +0000 Subject: replace VECCOPY with copy_v3_v3, same for 2d copy, also added vec copy functions for int & char. --- source/blender/makesrna/intern/rna_armature.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c index e67ab012dc9..1ea1a4e3e7b 100644 --- a/source/blender/makesrna/intern/rna_armature.c +++ b/source/blender/makesrna/intern/rna_armature.c @@ -283,7 +283,7 @@ static void rna_EditBone_connected_check(EditBone *ebone) if(ebone->parent) { if(ebone->flag & BONE_CONNECTED) { /* Attach this bone to its parent */ - VECCOPY(ebone->head, ebone->parent->tail); + copy_v3_v3(ebone->head, ebone->parent->tail); if(ebone->flag & BONE_ROOTSEL) ebone->parent->flag |= BONE_TIPSEL; @@ -350,7 +350,7 @@ static void rna_EditBone_matrix_get(PointerRNA *ptr, float *values) sub_v3_v3v3(delta, ebone->tail, ebone->head); vec_roll_to_mat3(delta, ebone->roll, tmat); copy_m4_m3(mat, tmat); - VECCOPY(mat[3], ebone->head); + copy_v3_v3(mat[3], ebone->head); memcpy(values, mat, 16 * sizeof(float)); } @@ -363,12 +363,12 @@ static void rna_Armature_editbone_transform_update(Main *bmain, Scene *scene, Po /* update our parent */ if(ebone->parent && ebone->flag & BONE_CONNECTED) - VECCOPY(ebone->parent->tail, ebone->head) + copy_v3_v3(ebone->parent->tail, ebone->head); /* update our children if necessary */ for(child = arm->edbo->first; child; child=child->next) if(child->parent == ebone && (child->flag & BONE_CONNECTED)) - VECCOPY(child->head, ebone->tail); + copy_v3_v3(child->head, ebone->tail); if(arm->flag & ARM_MIRROR_EDIT) { eboflip= ED_armature_bone_get_mirrored(arm->edbo, ebone); @@ -381,12 +381,12 @@ static void rna_Armature_editbone_transform_update(Main *bmain, Scene *scene, Po /* update our parent */ if(eboflip->parent && eboflip->flag & BONE_CONNECTED) - VECCOPY(eboflip->parent->tail, eboflip->head); + copy_v3_v3(eboflip->parent->tail, eboflip->head); /* update our children if necessary */ for(child = arm->edbo->first; child; child=child->next) if(child->parent == eboflip && (child->flag & BONE_CONNECTED)) - VECCOPY (child->head, eboflip->tail); + copy_v3_v3 (child->head, eboflip->tail); } } -- cgit v1.2.3 From 27d42c63d9b507b1771ed5a7923c389c719b877b Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 7 Nov 2011 12:55:18 +0000 Subject: Camera tracking integration =========================== Commiting camera tracking integration gsoc project into trunk. This commit includes: - Bundled version of libmv library (with some changes against official repo, re-sync with libmv repo a bit later) - New datatype ID called MovieClip which is optimized to work with movie clips (both of movie files and image sequences) and doing camera/motion tracking operations. - New editor called Clip Editor which is currently used for motion/tracking stuff only, but which can be easily extended to work with masks too. This editor supports: * Loading movie files/image sequences * Build proxies with different size for loaded movie clip, also supports building undistorted proxies to increase speed of playback in undistorted mode. * Manual lens distortion mode calibration using grid and grease pencil * Supervised 2D tracking using two different algorithms KLT and SAD. * Basic algorithm for feature detection * Camera motion solving. scene orientation - New constraints to "link" scene objects with solved motions from clip: * Follow Track (make object follow 2D motion of track with given name or parent object to reconstructed 3D position of track) * Camera Solver to make camera moving in the same way as reconstructed camera This commit NOT includes changes from tomato branch: - New nodes (they'll be commited as separated patch) - Automatic image offset guessing for image input node and image editor (need to do more tests and gather more feedback) - Code cleanup in libmv-capi. It's not so critical cleanup, just increasing readability and understanadability of code. Better to make this chaneg when Keir will finish his current patch. More details about this project can be found on this page: http://wiki.blender.org/index.php/User:Nazg-gul/GSoC-2011 Further development of small features would be done in trunk, bigger/experimental features would first be implemented in tomato branch. --- source/blender/makesrna/RNA_access.h | 1 + source/blender/makesrna/intern/CMakeLists.txt | 2 + source/blender/makesrna/intern/makesrna.c | 2 + source/blender/makesrna/intern/rna_ID.c | 2 + source/blender/makesrna/intern/rna_constraint.c | 72 +++ source/blender/makesrna/intern/rna_internal.h | 3 + source/blender/makesrna/intern/rna_main.c | 7 + source/blender/makesrna/intern/rna_main_api.c | 54 ++ source/blender/makesrna/intern/rna_movieclip.c | 278 +++++++++ source/blender/makesrna/intern/rna_scene.c | 25 +- source/blender/makesrna/intern/rna_screen.c | 5 + source/blender/makesrna/intern/rna_space.c | 293 +++++++++ source/blender/makesrna/intern/rna_tracking.c | 772 ++++++++++++++++++++++++ source/blender/makesrna/intern/rna_ui_api.c | 19 + source/blender/makesrna/intern/rna_userdef.c | 109 ++++ 15 files changed, 1640 insertions(+), 4 deletions(-) create mode 100644 source/blender/makesrna/intern/rna_movieclip.c create mode 100644 source/blender/makesrna/intern/rna_tracking.c (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h index 7adfc9a5c16..b40c2936bd5 100644 --- a/source/blender/makesrna/RNA_access.h +++ b/source/blender/makesrna/RNA_access.h @@ -471,6 +471,7 @@ extern StructRNA RNA_SpaceTimeline; extern StructRNA RNA_SpaceUVEditor; extern StructRNA RNA_SpaceUserPreferences; extern StructRNA RNA_SpaceView3D; +extern StructRNA RNA_SpaceClipEditor; extern StructRNA RNA_Speaker; extern StructRNA RNA_SpeedControlSequence; extern StructRNA RNA_Spline; diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt index ab69addbbdb..1667ca17e37 100644 --- a/source/blender/makesrna/intern/CMakeLists.txt +++ b/source/blender/makesrna/intern/CMakeLists.txt @@ -59,6 +59,7 @@ set(DEFSRC rna_mesh.c rna_meta.c rna_modifier.c + rna_movieclip.c rna_nla.c rna_nodetree.c rna_object.c @@ -82,6 +83,7 @@ set(DEFSRC rna_text.c rna_texture.c rna_timeline.c + rna_tracking.c rna_ui.c rna_userdef.c rna_vfont.c diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 891b62f7c79..533d1e2c929 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -2479,6 +2479,8 @@ static RNAProcessItem PROCESS_ITEMS[]= { {"rna_vfont.c", NULL, RNA_def_vfont}, {"rna_wm.c", "rna_wm_api.c", RNA_def_wm}, {"rna_world.c", NULL, RNA_def_world}, + {"rna_movieclip.c", NULL, RNA_def_movieclip}, + {"rna_tracking.c", NULL, RNA_def_tracking}, {NULL, NULL}}; static void rna_generate(BlenderRNA *brna, FILE *f, const char *filename, const char *api_filename) diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c index e4692d32338..eed178b238d 100644 --- a/source/blender/makesrna/intern/rna_ID.c +++ b/source/blender/makesrna/intern/rna_ID.c @@ -143,6 +143,7 @@ short RNA_type_to_ID_code(StructRNA *type) if(RNA_struct_is_a(type, &RNA_VectorFont)) return ID_VF; if(RNA_struct_is_a(type, &RNA_World)) return ID_WO; if(RNA_struct_is_a(type, &RNA_WindowManager)) return ID_WM; + if(RNA_struct_is_a(type, &RNA_MovieClip)) return ID_MC; return 0; } @@ -177,6 +178,7 @@ StructRNA *ID_code_to_RNA_type(short idcode) case ID_VF: return &RNA_VectorFont; case ID_WO: return &RNA_World; case ID_WM: return &RNA_WindowManager; + case ID_MC: return &RNA_MovieClip; default: return &RNA_ID; } } diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c index fdbb4f09f93..e1e4f3929b2 100644 --- a/source/blender/makesrna/intern/rna_constraint.c +++ b/source/blender/makesrna/intern/rna_constraint.c @@ -64,9 +64,11 @@ EnumPropertyItem constraint_type_items[] ={ {CONSTRAINT_TYPE_TRACKTO, "TRACK_TO", ICON_CONSTRAINT_DATA, "Track To", "Legacy tracking constraint prone to twisting artifacts"}, {0, "", 0, "Relationship", ""}, {CONSTRAINT_TYPE_ACTION, "ACTION", ICON_CONSTRAINT_DATA, "Action", ""}, + {CONSTRAINT_TYPE_CAMERASOLVER, "CAMERA_SOLVER", ICON_CONSTRAINT_DATA, "Camera Solver", ""}, {CONSTRAINT_TYPE_CHILDOF, "CHILD_OF", ICON_CONSTRAINT_DATA, "Child Of", ""}, {CONSTRAINT_TYPE_MINMAX, "FLOOR", ICON_CONSTRAINT_DATA, "Floor", ""}, {CONSTRAINT_TYPE_FOLLOWPATH, "FOLLOW_PATH", ICON_CONSTRAINT_DATA, "Follow Path", ""}, + {CONSTRAINT_TYPE_FOLLOWTRACK, "FOLLOW_TRACK", ICON_CONSTRAINT_DATA, "Follow Track", ""}, {CONSTRAINT_TYPE_PIVOT, "PIVOT", ICON_CONSTRAINT_DATA, "Pivot", ""}, {CONSTRAINT_TYPE_RIGIDBODYJOINT, "RIGID_BODY_JOINT", ICON_CONSTRAINT_DATA, "Rigid Body Joint", ""}, {CONSTRAINT_TYPE_PYTHON, "SCRIPT", ICON_CONSTRAINT_DATA, "Script", ""}, @@ -156,6 +158,10 @@ static StructRNA *rna_ConstraintType_refine(struct PointerRNA *ptr) return &RNA_CopyTransformsConstraint; case CONSTRAINT_TYPE_PIVOT: return &RNA_PivotConstraint; + case CONSTRAINT_TYPE_FOLLOWTRACK: + return &RNA_FollowTrackConstraint; + case CONSTRAINT_TYPE_CAMERASOLVER: + return &RNA_CameraSolverConstraint; default: return &RNA_UnknownType; } @@ -2026,6 +2032,70 @@ static void rna_def_constraint_pivot(BlenderRNA *brna) RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update"); } +static void rna_def_constraint_follow_track(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem reference_items[] = { + {FOLLOWTRACK_TRACK, "TRACK", 0, "Track", "Use 2D track position as reference"}, + {FOLLOWTRACK_BUNDLE, "BUNDLE", 0, "Bundle", "Use 3D reconstructed bundle position as reference"}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "FollowTrackConstraint", "Constraint"); + RNA_def_struct_ui_text(srna, "Follow Track Constraint", "Locks motion to the target motion track"); + RNA_def_struct_sdna_from(srna, "bFollowTrackConstraint", "data"); + + /* movie clip */ + prop= RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "clip"); + RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update"); + + /* track */ + prop= RNA_def_property(srna, "track", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "track"); + RNA_def_property_ui_text(prop, "Track", "Movie tracking track to follow"); + RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update"); + + /* reference */ + prop= RNA_def_property(srna, "reference", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "reference"); + RNA_def_property_enum_items(prop, reference_items); + RNA_def_property_ui_text(prop, "Reference", "Reference source to follow"); + RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update"); + + /* use default clip */ + prop= RNA_def_property(srna, "use_active_clip", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", FOLLOWTRACK_ACTIVECLIP); + RNA_def_property_ui_text(prop, "Active Clip", "Use active clip defined in scene"); + RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update"); +} + +static void rna_def_constraint_camera_solver(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "CameraSolverConstraint", "Constraint"); + RNA_def_struct_ui_text(srna, "Follow Track Constraint", "Locks motion to the reconstructed camera movenment"); + RNA_def_struct_sdna_from(srna, "bCameraSolverConstraint", "data"); + + /* movie clip */ + prop= RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "clip"); + RNA_def_property_ui_text(prop, "Movie Clip", "Movie Clip to get tracking data from"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_dependency_update"); + + /* use default clip */ + prop= RNA_def_property(srna, "use_active_clip", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", CAMERASOLVER_ACTIVECLIP); + RNA_def_property_ui_text(prop, "Active Clip", "Use active clip defined in scene"); + RNA_def_property_update(prop, NC_OBJECT|ND_CONSTRAINT, "rna_Constraint_update"); +} + /* base struct for constraints */ void RNA_def_constraint(BlenderRNA *brna) { @@ -2136,6 +2206,8 @@ void RNA_def_constraint(BlenderRNA *brna) rna_def_constraint_damped_track(brna); rna_def_constraint_spline_ik(brna); rna_def_constraint_pivot(brna); + rna_def_constraint_follow_track(brna); + rna_def_constraint_camera_solver(brna); } #endif diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h index 2e3b371c3f3..a137ddc6bc0 100644 --- a/source/blender/makesrna/intern/rna_internal.h +++ b/source/blender/makesrna/intern/rna_internal.h @@ -177,6 +177,8 @@ void RNA_def_userdef(struct BlenderRNA *brna); void RNA_def_vfont(struct BlenderRNA *brna); void RNA_def_wm(struct BlenderRNA *brna); void RNA_def_world(struct BlenderRNA *brna); +void RNA_def_movieclip(struct BlenderRNA *brna); +void RNA_def_tracking(struct BlenderRNA *brna); /* Common Define functions */ @@ -290,6 +292,7 @@ void RNA_def_main_armatures(BlenderRNA *brna, PropertyRNA *cprop); void RNA_def_main_actions(BlenderRNA *brna, PropertyRNA *cprop); void RNA_def_main_particles(BlenderRNA *brna, PropertyRNA *cprop); void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop); +void RNA_def_main_movieclips(BlenderRNA *brna, PropertyRNA *cprop); /* ID Properties */ diff --git a/source/blender/makesrna/intern/rna_main.c b/source/blender/makesrna/intern/rna_main.c index 076bdfe1964..be03da6839d 100644 --- a/source/blender/makesrna/intern/rna_main.c +++ b/source/blender/makesrna/intern/rna_main.c @@ -245,6 +245,12 @@ static void rna_Main_wm_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) rna_iterator_listbase_begin(iter, &bmain->wm, NULL); } +static void rna_Main_movieclips_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +{ + Main *bmain= (Main*)ptr->data; + rna_iterator_listbase_begin(iter, &bmain->movieclip, NULL); +} + #ifdef UNIT_TEST static PointerRNA rna_Test_test_get(PointerRNA *ptr) @@ -307,6 +313,7 @@ void RNA_def_main(BlenderRNA *brna) {"actions", "Action", "rna_Main_action_begin", "Actions", "Action datablocks", RNA_def_main_actions}, {"particles", "ParticleSettings", "rna_Main_particle_begin", "Particles", "Particle datablocks", RNA_def_main_particles}, {"grease_pencil", "GreasePencil", "rna_Main_gpencil_begin", "Grease Pencil", "Grease Pencil datablocks", RNA_def_main_gpencil}, + {"movieclips", "MovieClip", "rna_Main_movieclips_begin", "Movie Clips", "Movie Clip datablocks", RNA_def_main_movieclips}, {NULL, NULL, NULL, NULL, NULL, NULL}}; int i; diff --git a/source/blender/makesrna/intern/rna_main_api.c b/source/blender/makesrna/intern/rna_main_api.c index dfa368d6b94..f568f6de855 100644 --- a/source/blender/makesrna/intern/rna_main_api.c +++ b/source/blender/makesrna/intern/rna_main_api.c @@ -66,6 +66,7 @@ #include "BKE_node.h" #include "BKE_depsgraph.h" #include "BKE_speaker.h" +#include "BKE_movieclip.h" #include "DNA_armature_types.h" #include "DNA_camera_types.h" @@ -85,6 +86,7 @@ #include "DNA_particle_types.h" #include "DNA_vfont_types.h" #include "DNA_node_types.h" +#include "DNA_movieclip_types.h" #include "ED_screen.h" @@ -521,6 +523,26 @@ void rna_Main_particles_remove(Main *bmain, ReportList *reports, ParticleSetting /* XXX python now has invalid pointer? */ } +MovieClip *rna_Main_movieclip_load(Main *UNUSED(bmain), ReportList *reports, const char *filepath) +{ + MovieClip *clip; + + errno= 0; + clip= BKE_add_movieclip_file(filepath); + + if(!clip) + BKE_reportf(reports, RPT_ERROR, "Can't read: \"%s\", %s.", filepath, errno ? strerror(errno) : "Unable to load movie clip"); + + return clip; +} + +void rna_Main_movieclips_remove(Main *bmain, MovieClip *clip) +{ + unlink_movieclip(bmain, clip); + free_libblock(&bmain->movieclip, clip); + /* XXX python now has invalid pointer? */ +} + /* tag functions, all the same */ void rna_Main_cameras_tag(Main *bmain, int value) { tag_main_lb(&bmain->camera, value); } void rna_Main_scenes_tag(Main *bmain, int value) { tag_main_lb(&bmain->scene, value); } @@ -550,6 +572,7 @@ void rna_Main_armatures_tag(Main *bmain, int value) { tag_main_lb(&bmain->armatu void rna_Main_actions_tag(Main *bmain, int value) { tag_main_lb(&bmain->action, value); } void rna_Main_particles_tag(Main *bmain, int value) { tag_main_lb(&bmain->particle, value); } void rna_Main_gpencil_tag(Main *bmain, int value) { tag_main_lb(&bmain->gpencil, value); } +void rna_Main_movieclips_tag(Main *bmain, int value) { tag_main_lb(&bmain->text, value); } static int rna_Main_cameras_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_CA); } static int rna_Main_scenes_is_updated_get(PointerRNA *ptr) { return DAG_id_type_tagged(ptr->data, ID_SCE); } @@ -1468,5 +1491,36 @@ void RNA_def_main_gpencil(BlenderRNA *brna, PropertyRNA *cprop) RNA_def_property_boolean_funcs(prop, "rna_Main_gpencil_is_updated_get", NULL); } +void RNA_def_main_movieclips(BlenderRNA *brna, PropertyRNA *cprop) +{ + StructRNA *srna; + FunctionRNA *func; + PropertyRNA *parm; + + RNA_def_property_srna(cprop, "BlendDataMovieClips"); + srna= RNA_def_struct(brna, "BlendDataMovieClips", NULL); + RNA_def_struct_sdna(srna, "Main"); + RNA_def_struct_ui_text(srna, "Main Movie Clips", "Collection of movie clips"); + + func= RNA_def_function(srna, "tag", "rna_Main_movieclips_tag"); + parm= RNA_def_boolean(func, "value", 0, "Value", ""); + RNA_def_property_flag(parm, PROP_REQUIRED); + + func= RNA_def_function(srna, "remove", "rna_Main_movieclips_remove"); + RNA_def_function_ui_description(func, "Remove a movie clip from the current blendfile."); + parm= RNA_def_pointer(func, "clip", "MovieClip", "", "Movie clip to remove"); + RNA_def_property_flag(parm, PROP_REQUIRED|PROP_NEVER_NULL); + + /* load func */ + func= RNA_def_function(srna, "load", "rna_Main_movieclip_load"); + RNA_def_function_flag(func, FUNC_USE_REPORTS); + RNA_def_function_ui_description(func, "Add a new movie clip to the main database from a file"); + parm= RNA_def_string_file_path(func, "filepath", "Path", FILE_MAXDIR + FILE_MAXFILE, "", "path for the datablock"); + RNA_def_property_flag(parm, PROP_REQUIRED); + /* return type */ + parm= RNA_def_pointer(func, "clip", "MovieClip", "", "New movie clip datablock"); + RNA_def_function_return(func, parm); +} + #endif diff --git a/source/blender/makesrna/intern/rna_movieclip.c b/source/blender/makesrna/intern/rna_movieclip.c new file mode 100644 index 00000000000..afdf3cd9c46 --- /dev/null +++ b/source/blender/makesrna/intern/rna_movieclip.c @@ -0,0 +1,278 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor(s): Blender Foundation, + * Sergey Sharybin + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file blender/makesrna/intern/rna_movieclip.c + * \ingroup RNA + */ + + +#include +#include + +#include "MEM_guardedalloc.h" + +#include "BKE_movieclip.h" +#include "BKE_tracking.h" + +#include "RNA_define.h" + +#include "rna_internal.h" + +#include "DNA_movieclip_types.h" +#include "DNA_scene_types.h" + +#include "WM_types.h" + +#include "IMB_imbuf_types.h" +#include "IMB_imbuf.h" + +#ifdef RNA_RUNTIME + +#include "BKE_depsgraph.h" + +static void rna_MovieClip_reload_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + + BKE_movieclip_reload(clip); + DAG_id_tag_update(&clip->id, 0); +} + +static void rna_MovieClip_size_get(PointerRNA *ptr, int *values) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + + values[0]= clip->lastsize[0]; + values[1]= clip->lastsize[1]; +} + +static void rna_MovieClip_resolution_get(PointerRNA *ptr, float *values) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + ImBuf *ibuf; + + ibuf= BKE_movieclip_get_ibuf(clip, NULL); + if (ibuf) { + values[0]= ibuf->ppm[0]; + values[1]= ibuf->ppm[1]; + + IMB_freeImBuf(ibuf); + } + else { + values[0]= 0; + values[1]= 0; + } +} + +#else + +static void rna_def_movieclip_proxy(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static const EnumPropertyItem clip_tc_items[]= { + {IMB_TC_NONE, "NONE", 0, "No TC in use", ""}, + {IMB_TC_RECORD_RUN, "RECORD_RUN", 0, "Record Run", "use images in the order as they are recorded"}, + {IMB_TC_FREE_RUN, "FREE_RUN", 0, "Free Run", "use global timestamp written by recording device"}, + {IMB_TC_INTERPOLATED_REC_DATE_FREE_RUN, "FREE_RUN_REC_DATE", 0, "Free Run (rec date)", "interpolate a global timestamp using the record date and time written by recording device"}, + {0, NULL, 0, NULL, NULL}}; + + srna = RNA_def_struct(brna, "MovieClipProxy", NULL); + RNA_def_struct_ui_text(srna, "Movie Clip Proxy", "Proxy parameters for a movie clip"); + RNA_def_struct_sdna(srna, "MovieClipProxy"); + + /* build proxy sized */ + prop= RNA_def_property(srna, "build_25", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "build_size_flag", IMB_PROXY_25); + RNA_def_property_ui_text(prop, "25%", "Build 25% proxy resolution"); + + prop= RNA_def_property(srna, "build_50", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "build_size_flag", IMB_PROXY_50); + RNA_def_property_ui_text(prop, "50%", "Build 50% proxy resolution"); + + prop= RNA_def_property(srna, "build_75", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "build_size_flag", IMB_PROXY_75); + RNA_def_property_ui_text(prop, "75%", "Build 75% proxy resolution"); + + prop= RNA_def_property(srna, "build_100", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "build_size_flag", IMB_PROXY_100); + RNA_def_property_ui_text(prop, "100%", "Build 100% proxy resolution"); + + prop= RNA_def_property(srna, "build_undistorted", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "build_flag", MCLIP_PROXY_BUILD_UNDISTORT); + RNA_def_property_ui_text(prop, "Build Undistorted", "Also build undistorted proxies for selected sizes"); + + /* build timecodes */ + prop= RNA_def_property(srna, "build_record_run", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "build_tc_flag", IMB_TC_RECORD_RUN); + RNA_def_property_ui_text(prop, "Rec Run", "Build record run time code index"); + + prop= RNA_def_property(srna, "build_free_run", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "build_tc_flag", IMB_TC_FREE_RUN); + RNA_def_property_ui_text(prop, "Free Run", "Build free run time code index"); + + prop= RNA_def_property(srna, "build_free_run_rec_date", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "build_tc_flag", IMB_TC_INTERPOLATED_REC_DATE_FREE_RUN); + RNA_def_property_ui_text(prop, "Free Run (Rec Date)", "Build free run time code index using Record Date/Time"); + + /* quality of proxied image */ + prop= RNA_def_property(srna, "quality", PROP_INT, PROP_UNSIGNED); + RNA_def_property_int_sdna(prop, NULL, "quality"); + RNA_def_property_ui_text(prop, "Quality", "JPEG Quality of proxies to build"); + RNA_def_property_ui_range(prop, 1, 100, 1, 0); + + prop= RNA_def_property(srna, "timecode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "tc"); + RNA_def_property_enum_items(prop, clip_tc_items); + RNA_def_property_ui_text(prop, "Timecode", ""); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* directory */ + prop= RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH); + RNA_def_property_string_sdna(prop, NULL, "dir"); + RNA_def_property_ui_text(prop, "Directory", "Location to store the proxy files"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_MovieClip_reload_update"); +} + +static void rna_def_moviecliUser(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem clip_render_size_items[] = { + {MCLIP_PROXY_RENDER_SIZE_25, "PROXY_25", 0, "Proxy size 25%", ""}, + {MCLIP_PROXY_RENDER_SIZE_50, "PROXY_50", 0, "Proxy size 50%", ""}, + {MCLIP_PROXY_RENDER_SIZE_75, "PROXY_75", 0, "Proxy size 75%", ""}, + {MCLIP_PROXY_RENDER_SIZE_100, "PROXY_100", 0, "Proxy size 100%", ""}, + {MCLIP_PROXY_RENDER_SIZE_FULL, "FULL", 0, "No proxy, full render", ""}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "MovieClipUser", NULL); + RNA_def_struct_ui_text(srna, "Movie Clip User", "Parameters defining how a MovieClip datablock is used by another datablock"); + + prop= RNA_def_property(srna, "current_frame", PROP_INT, PROP_TIME); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_int_sdna(prop, NULL, "framenr"); + RNA_def_property_range(prop, MINAFRAME, MAXFRAME); + RNA_def_property_ui_text(prop, "Current Frame", "Current frame number in movie or image sequence"); + + /* render size */ + prop= RNA_def_property(srna, "proxy_render_size", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "render_size"); + RNA_def_property_enum_items(prop, clip_render_size_items); + RNA_def_property_ui_text(prop, "Proxy render size", "Draw preview using full resolution or different proxy resolutions"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* render undistorted */ + prop= RNA_def_property(srna, "use_render_undistorted", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "render_flag", MCLIP_PROXY_RENDER_UNDISTORT); + RNA_def_property_ui_text(prop, "Render Undistorted", "Draw preview using undistorted proxy"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); +} + +static void rna_def_movieClipScopes(BlenderRNA *brna) +{ + StructRNA *srna; + + srna= RNA_def_struct(brna, "MovieClipScopes", NULL); + RNA_def_struct_ui_text(srna, "MovieClipScopes", "Scopes for statistical view of a movie clip"); +} + + +static void rna_def_movieclip(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem clip_source_items[]= { + {MCLIP_SRC_SEQUENCE, "SEQUENCE", 0, "Image Sequence", "Multiple image files, as a sequence"}, + {MCLIP_SRC_MOVIE, "MOVIE", 0, "Movie File", "Movie file"}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "MovieClip", "ID"); + RNA_def_struct_ui_text(srna, "MovieClip", "MovieClip datablock referencing an external movie file"); + RNA_def_struct_ui_icon(srna, ICON_SEQUENCE); + + prop= RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH); + RNA_def_property_string_sdna(prop, NULL, "name"); + RNA_def_property_ui_text(prop, "File Path", "Filename of the text file"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_MovieClip_reload_update"); + + prop= RNA_def_property(srna, "tracking", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "MovieTracking"); + + prop= RNA_def_property(srna, "proxy", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "MovieClipProxy"); + + /* use proxy */ + prop= RNA_def_property(srna, "use_proxy", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MCLIP_USE_PROXY); + RNA_def_property_ui_text(prop, "Use Proxy / Timecode", "Use a preview proxy and/or timecode index for this clip"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + prop= RNA_def_int_vector(srna, "size" , 2 , NULL , 0, 0, "Size" , "Width and height in pixels, zero when image data cant be loaded" , 0 , 0); + RNA_def_property_int_funcs(prop, "rna_MovieClip_size_get" , NULL, NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop= RNA_def_float_vector(srna, "resolution" , 2 , NULL , 0, 0, "Resolution" , "X/Y pixels per meter" , 0 , 0); + RNA_def_property_float_funcs(prop, "rna_MovieClip_resolution_get", NULL, NULL); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + prop= RNA_def_property(srna, "display_aspect", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "aspx"); + RNA_def_property_array(prop, 2); + RNA_def_property_range(prop, 0.1f, 5000.0f); + RNA_def_property_ui_range(prop, 0.1f, 5000.0f, 1, 2); + RNA_def_property_ui_text(prop, "Display Aspect", "Display Aspect for this clip, does not affect rendering"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* source */ + prop= RNA_def_property(srna, "source", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, clip_source_items); + RNA_def_property_ui_text(prop, "Source", "Where the clip comes from"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + + /* custom proxy directory */ + prop= RNA_def_property(srna, "use_proxy_custom_directory", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", MCLIP_USE_PROXY_CUSTOM_DIR); + RNA_def_property_ui_text(prop, "Proxy Custom Directory", "Use a custom directory to store data"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_MovieClip_reload_update"); + + /* grease pencil */ + prop= RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "gpd"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_struct_type(prop, "GreasePencil"); + RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for this movie clip"); +} + +void RNA_def_movieclip(BlenderRNA *brna) +{ + rna_def_movieclip(brna); + rna_def_movieclip_proxy(brna); + rna_def_moviecliUser(brna); + rna_def_movieClipScopes(brna); +} + +#endif diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 63fce2d9edb..4245d606f61 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -1074,6 +1074,15 @@ static void rna_Scene_update_active_object_data(Main *UNUSED(bmain), Scene *scen } } +static void rna_SceneCamera_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + Scene *scene= (Scene*)ptr->id.data; + Object *camera= scene->camera; + + if(camera) + DAG_id_tag_update(&camera->id, 0); +} + #else static void rna_def_transform_orientation(BlenderRNA *brna) @@ -2428,13 +2437,13 @@ static void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_int_sdna(prop, NULL, "xsch"); RNA_def_property_range(prop, 4, 10000); RNA_def_property_ui_text(prop, "Resolution X", "Number of horizontal pixels in the rendered image"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneCamera_update"); prop= RNA_def_property(srna, "resolution_y", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ysch"); RNA_def_property_range(prop, 4, 10000); RNA_def_property_ui_text(prop, "Resolution Y", "Number of vertical pixels in the rendered image"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneCamera_update"); prop= RNA_def_property(srna, "resolution_percentage", PROP_INT, PROP_PERCENTAGE); RNA_def_property_int_sdna(prop, NULL, "size"); @@ -2459,13 +2468,13 @@ static void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "xasp"); RNA_def_property_range(prop, 1.0f, 200.0f); RNA_def_property_ui_text(prop, "Pixel Aspect X", "Horizontal aspect ratio - for anamorphic or non-square pixel output"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneCamera_update"); prop= RNA_def_property(srna, "pixel_aspect_y", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "yasp"); RNA_def_property_range(prop, 1.0f, 200.0f); RNA_def_property_ui_text(prop, "Pixel Aspect Y", "Vertical aspect ratio - for anamorphic or non-square pixel output"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, "rna_SceneCamera_update"); /* JPEG and AVI JPEG */ @@ -3752,6 +3761,14 @@ void RNA_def_scene(BlenderRNA *brna) RNA_def_property_struct_type(prop, "TransformOrientation"); RNA_def_property_ui_text(prop, "Transform Orientations", ""); + /* acctive MovieClip */ + prop= RNA_def_property(srna, "active_clip", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "clip"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_struct_type(prop, "MovieClip"); + RNA_def_property_ui_text(prop, "Active Movie Clip", "Active movie clip used for constraints and viewport drawing"); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); + /* Nestled Data */ rna_def_tool_settings(brna); rna_def_unit_settings(brna); diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c index 795ea417d90..c8792ef30f3 100644 --- a/source/blender/makesrna/intern/rna_screen.c +++ b/source/blender/makesrna/intern/rna_screen.c @@ -288,6 +288,11 @@ static void rna_def_screen(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_NODES); RNA_def_property_ui_text(prop, "Node Editors", ""); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update"); + + prop= RNA_def_property(srna, "use_play_clip_editors", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "redraws_flag", TIME_CLIPS); + RNA_def_property_ui_text(prop, "Clip Editors", ""); + RNA_def_property_update(prop, NC_SPACE|ND_SPACE_TIME, "rna_Screen_redraw_update"); } void RNA_def_screen(BlenderRNA *brna) diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 0dc4ca343fe..580f759c38f 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -70,6 +70,7 @@ EnumPropertyItem space_type_items[] = { {SPACE_LOGIC, "LOGIC_EDITOR", 0, "Logic Editor", ""}, {SPACE_CONSOLE, "CONSOLE", 0, "Python Console", ""}, {SPACE_USERPREF, "USER_PREFERENCES", 0, "User Preferences", ""}, + {SPACE_CLIP, "CLIP_EDITOR", 0, "Clip Editor", ""}, {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem draw_channels_items[] = { @@ -126,6 +127,7 @@ EnumPropertyItem viewport_shade_items[] = { #include "ED_screen.h" #include "ED_view3d.h" #include "ED_sequencer.h" +#include "ED_clip.h" #include "IMB_imbuf_types.h" @@ -166,6 +168,8 @@ static StructRNA* rna_Space_refine(struct PointerRNA *ptr) return &RNA_SpaceConsole; case SPACE_USERPREF: return &RNA_SpaceUserPreferences; + case SPACE_CLIP: + return &RNA_SpaceClipEditor; default: return &RNA_Space; } @@ -883,6 +887,15 @@ static void rna_BackgroundImage_opacity_set(PointerRNA *ptr, float value) bgpic->blend = 1.0f - value; } +static BGpic *rna_BackgroundImage_add(View3D *v3d) +{ + BGpic *bgpic= ED_view3D_background_image_add(v3d);; + + WM_main_add_notifier(NC_SPACE|ND_SPACE_VIEW3D, NULL); + + return bgpic; +} + /* Space Node Editor */ static int rna_SpaceNodeEditor_node_tree_poll(PointerRNA *ptr, PointerRNA value) @@ -955,6 +968,34 @@ static EnumPropertyItem *rna_SpaceProperties_texture_context_itemf(bContext *C, return item; } +static void rna_SpaceClipEditor_clip_set(PointerRNA *ptr, PointerRNA value) +{ + SpaceClip *sc= (SpaceClip*)(ptr->data); + + ED_space_clip_set(NULL, sc, (MovieClip*)value.data); +} + +static void rna_SpaceClipEditor_clip_mode_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + SpaceClip *sc= (SpaceClip*)(ptr->data); + + sc->scopes.ok= 0; +} + +static void rna_SpaceClipEditor_lock_selection_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + SpaceClip *sc= (SpaceClip*)(ptr->data); + + sc->xlockof= 0.f; + sc->ylockof= 0.f; +} + +static void rna_SpaceClipEditor_view_type_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + ScrArea *sa= rna_area_from_space(ptr); + ED_area_tag_refresh(sa); +} + #else static void rna_def_space(BlenderRNA *brna) @@ -1170,21 +1211,46 @@ static void rna_def_background_image(BlenderRNA *brna) {(1< +#include + +#include "MEM_guardedalloc.h" + +#include "BKE_movieclip.h" +#include "BKE_tracking.h" + +#include "RNA_define.h" + +#include "rna_internal.h" + +#include "DNA_movieclip_types.h" +#include "DNA_scene_types.h" + +#include "WM_types.h" + +#ifdef RNA_RUNTIME + +#include "BKE_depsgraph.h" +#include "BKE_node.h" + +#include "IMB_imbuf.h" + +#include "WM_api.h" + +static void rna_tracking_tracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + rna_iterator_listbase_begin(iter, &clip->tracking.tracks, NULL); +} + +static void rna_tracking_tracks_add(MovieTracking *tracking, int frame, int number) +{ + int a; + + for(a= 0; aid.data; + + return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingTrack, clip->tracking.act_track); +} + +static void rna_tracking_active_track_set(PointerRNA *ptr, PointerRNA value) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + MovieTrackingTrack *track= (MovieTrackingTrack *)value.data; + int index= BLI_findindex(&clip->tracking.tracks, track); + + if(index>=0) clip->tracking.act_track= track; + else clip->tracking.act_track= NULL; +} + +void rna_trackingTrack_name_set(PointerRNA *ptr, const char *value) +{ + MovieClip *clip= (MovieClip *)ptr->id.data; + MovieTrackingTrack *track= (MovieTrackingTrack *)ptr->data; + BLI_strncpy(track->name, value, sizeof(track->name)); + + BKE_track_unique_name(&clip->tracking, track); +} + +static void rna_tracking_trackerPattern_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + MovieTrackingTrack *track= (MovieTrackingTrack *)ptr->data; + + BKE_tracking_clamp_track(track, CLAMP_PAT_DIM); +} + +static void rna_tracking_trackerSearch_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + MovieTrackingTrack *track= (MovieTrackingTrack *)ptr->data; + + BKE_tracking_clamp_track(track, CLAMP_SEARCH_DIM); +} + +static void rna_tracking_trackerAlgorithm_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + MovieTrackingTrack *track= (MovieTrackingTrack *)ptr->data; + + if(track->tracker==TRACKER_KLT) + BKE_tracking_clamp_track(track, CLAMP_PYRAMID_LEVELS); + else + BKE_tracking_clamp_track(track, CLAMP_SEARCH_DIM); +} + +static void rna_tracking_trackerPyramid_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr) +{ + MovieTrackingTrack *track= (MovieTrackingTrack *)ptr->data; + + BKE_tracking_clamp_track(track, CLAMP_PYRAMID_LEVELS); +} + +static int rna_tracking_markers_length(PointerRNA *ptr) +{ + MovieTrackingTrack *track= (MovieTrackingTrack *)ptr->data; + + return track->markersnr; +} + +static float rna_trackingCamera_focal_mm_get(PointerRNA *ptr) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + MovieTrackingCamera *camera= &clip->tracking.camera; + float val= camera->focal; + + if(clip->lastsize[0]) + val= val*camera->sensor_width/(float)clip->lastsize[0]; + + return val; +} + +static void rna_trackingCamera_focal_mm_set(PointerRNA *ptr, float value) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + MovieTrackingCamera *camera= &clip->tracking.camera; + + if(clip->lastsize[0]) + value= clip->lastsize[0]*value/camera->sensor_width; + + camera->focal= value; +} + +static int rna_track_2d_stabilization(CollectionPropertyIterator *UNUSED(iter), void *data) +{ + MovieTrackingTrack *track= (MovieTrackingTrack*)data; + + if((track->flag&TRACK_USE_2D_STAB)==0) + return 1; + + return 0; +} + +static void rna_tracking_stabTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + rna_iterator_listbase_begin(iter, &clip->tracking.tracks, rna_track_2d_stabilization); +} + +static int rna_tracking_stabTracks_active_index_get(PointerRNA *ptr) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + return clip->tracking.stabilization.act_track; +} + +static void rna_tracking_stabTracks_active_index_set(PointerRNA *ptr, int value) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + clip->tracking.stabilization.act_track= value; +} + +static void rna_tracking_stabTracks_active_index_range(PointerRNA *ptr, int *min, int *max) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + + *min= 0; + *max= clip->tracking.stabilization.tot_track-1; + *max= MAX2(0, *max); +} + +static void rna_tracking_flushUpdate(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr) +{ + MovieClip *clip= (MovieClip*)ptr->id.data; + MovieTrackingStabilization *stab= &clip->tracking.stabilization; + + stab->ok= 0; + + nodeUpdateID(scene->nodetree, &clip->id); + + WM_main_add_notifier(NC_SCENE|ND_NODES, NULL); + DAG_id_tag_update(&clip->id, 0); +} + +/* API */ + +static MovieTrackingMarker *rna_trackingTrack_marker_find_frame(MovieTrackingTrack *track, int framenr) +{ + return BKE_tracking_get_marker(track, framenr); +} + +#else + +static int rna_matrix_dimsize_4x4[]= {4, 4}; + +static void rna_def_trackingSettings(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem speed_items[] = { + {0, "FASTEST", 0, "Fastest", "Track as fast as it's possible"}, + {TRACKING_SPEED_DOUBLE, "DOUBLE", 0, "Double", "Track with double speed"}, + {TRACKING_SPEED_REALTIME, "REALTIME", 0, "Realtime", "Track with realtime speed"}, + {TRACKING_SPEED_HALF, "HALF", 0, "Half", "Track with half of realtime speed"}, + {TRACKING_SPEED_QUARTER, "QUARTER", 0, "Quarter", "Track with quarter of realtime speed"}, + {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem cleanup_items[] = { + {TRACKING_CLEAN_SELECT, "SELECT", 0, "Select", "Select unclean tracks"}, + {TRACKING_CLEAN_DELETE_TRACK, "DELETE_TRACK", 0, "Delete Track", "Delete unclean tracks"}, + {TRACKING_CLEAN_DELETE_SEGMENT, "DELETE_SEGMENTS", 0, "Delete Segments", "Delete unclean segments of tracks"}, + {0, NULL, 0, NULL, NULL} + }; + + srna= RNA_def_struct(brna, "MovieTrackingSettings", NULL); + RNA_def_struct_ui_text(srna, "Movie tracking settings", "Match moving settings"); + + /* speed */ + prop= RNA_def_property(srna, "speed", PROP_ENUM, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_enum_items(prop, speed_items); + RNA_def_property_ui_text(prop, "Speed", "Speed to make tracking with"); + + /* limit frames */ + prop= RNA_def_property(srna, "frames_limit", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_int_sdna(prop, NULL, "frames_limit"); + RNA_def_property_range(prop, 0, INT_MAX); + RNA_def_property_ui_text(prop, "Frames Limit", "Amount of frames to be tracked during single tracking operation"); + + /* adjust frames */ + prop= RNA_def_property(srna, "frames_adjust", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_int_sdna(prop, NULL, "adjframes"); + RNA_def_property_range(prop, 0, INT_MAX); + RNA_def_property_ui_text(prop, "Adjust Frames", "Automatically re-adjust marker position using position on each N frames. 0 means only keyframed position is used"); + + /* margin */ + prop= RNA_def_property(srna, "margin", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_int_sdna(prop, NULL, "margin"); + RNA_def_property_range(prop, 0, 300); + RNA_def_property_ui_text(prop, "Margin", "Margin for markers from image boundary"); + + /* keyframe_a */ + prop= RNA_def_property(srna, "keyframe_a", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_int_sdna(prop, NULL, "keyframe1"); + RNA_def_property_ui_text(prop, "Keyframe A", "First keyframe used for reconstruction initialization"); + + /* keyframe_b */ + prop= RNA_def_property(srna, "keyframe_b", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_int_sdna(prop, NULL, "keyframe2"); + RNA_def_property_ui_text(prop, "Keyframe B", "Second keyframe used for reconstruction initialization"); + + /* tool settings */ + + /* distance */ + prop= RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_float_sdna(prop, NULL, "dist"); + RNA_def_property_ui_text(prop, "Distance", "Distance between two bundles used for scene scaling"); + + /* frames count */ + prop= RNA_def_property(srna, "clean_frames", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_int_sdna(prop, NULL, "clean_frames"); + RNA_def_property_range(prop, 0, INT_MAX); + RNA_def_property_ui_text(prop, "Tracked Frames", "Effect on tracks which are tracked less than the specified amount of frames"); + + /* reprojection error */ + prop= RNA_def_property(srna, "clean_error", PROP_FLOAT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_float_sdna(prop, NULL, "clean_error"); + RNA_def_property_range(prop, 0, FLT_MAX); + RNA_def_property_ui_text(prop, "Reprojection Error", "Effect on tracks which have a larger reprojection error"); + + /* cleanup action */ + prop= RNA_def_property(srna, "clean_action", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "clean_action"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_enum_items(prop, cleanup_items); + RNA_def_property_ui_text(prop, "Action", "Cleanup action to execute"); +} + +static void rna_def_trackingCamera(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem camera_units_items[] = { + {CAMERA_UNITS_PX, "PIXELS", 0, "px", "Use pixels for units of focal length"}, + {CAMERA_UNITS_MM, "MILLIMETERS", 0, "mm", "Use millimeters for units of focal length"}, + {0, NULL, 0, NULL, NULL}}; + + srna= RNA_def_struct(brna, "MovieTrackingCamera", NULL); + RNA_def_struct_ui_text(srna, "Movie tracking camera data", "Match-moving camera data for tracking"); + + /* Sensor */ + prop= RNA_def_property(srna, "sensor_width", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "sensor_width"); + RNA_def_property_range(prop, 0.0f, 500.0f); + RNA_def_property_ui_text(prop, "Sensor", "Width of CCD sensor in millimeters"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, NULL); + + /* Focal Length */ + prop= RNA_def_property(srna, "focal_length", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "focal"); + RNA_def_property_range(prop, 0.0f, 5000.0f); + RNA_def_property_float_funcs(prop, "rna_trackingCamera_focal_mm_get", "rna_trackingCamera_focal_mm_set", NULL); + RNA_def_property_ui_text(prop, "Focal Length", "Camera's focal length"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, NULL); + + /* Focal Length in pixels */ + prop= RNA_def_property(srna, "focal_length_pixels", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "focal"); + RNA_def_property_range(prop, 0.0f, 5000.0f); + RNA_def_property_ui_text(prop, "Focal Length", "Camera's focal length"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, NULL); + + /* Units */ + prop= RNA_def_property(srna, "units", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "units"); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_enum_items(prop, camera_units_items); + RNA_def_property_ui_text(prop, "Units", "Units used for camera focal length"); + + /* Principal Point */ + prop= RNA_def_property(srna, "principal", PROP_FLOAT, PROP_NONE); + RNA_def_property_array(prop, 2); + RNA_def_property_float_sdna(prop, NULL, "principal"); + RNA_def_property_ui_text(prop, "Principal Point", "Optical center of lens"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, NULL); + + /* Radial distortion parameters */ + prop= RNA_def_property(srna, "k1", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "k1"); + RNA_def_property_ui_range(prop, -10, 10, .1, 3); + RNA_def_property_ui_text(prop, "K1", "First coefficient of third order polynomial radial distortion"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_flushUpdate"); + + prop= RNA_def_property(srna, "k2", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "k2"); + RNA_def_property_ui_range(prop, -10, 10, .1, 3); + RNA_def_property_ui_text(prop, "K2", "Second coefficient of third order polynomial radial distortion"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_flushUpdate"); + + prop= RNA_def_property(srna, "k3", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "k3"); + RNA_def_property_ui_range(prop, -10, 10, .1, 3); + RNA_def_property_ui_text(prop, "K3", "Third coefficient of third order polynomial radial distortion"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_flushUpdate"); + + /* pixel aspect */ + prop= RNA_def_property(srna, "pixel_aspect", PROP_FLOAT, PROP_XYZ); + RNA_def_property_float_sdna(prop, NULL, "pixel_aspect"); + RNA_def_property_range(prop, 0.1f, 5000.0f); + RNA_def_property_ui_range(prop, 0.1f, 5000.0f, 1, 2); + RNA_def_property_ui_text(prop, "Pixel Aspect", "Pixel aspect ratio"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate"); +} + +static void rna_def_trackingMarker(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "MovieTrackingMarker", NULL); + RNA_def_struct_ui_text(srna, "Movie tracking marker data", "Match-moving marker data for tracking"); + + /* position */ + prop= RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION); + RNA_def_property_array(prop, 2); + RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 5); + RNA_def_property_float_sdna(prop, NULL, "pos"); + RNA_def_property_ui_text(prop, "Position", "Marker position at frame in normalized coordinates"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, NULL); + + /* frame */ + prop= RNA_def_property(srna, "frame", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* can't be safty edited for now, need to re-sort markers array after change */ + RNA_def_property_int_sdna(prop, NULL, "framenr"); + RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, NULL); + + /* enable */ + prop= RNA_def_property(srna, "enable", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", MARKER_DISABLED); + RNA_def_property_ui_text(prop, "Enable", "Is marker enabled for current frame"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, NULL); +} + +static void rna_def_trackingTrack(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + FunctionRNA *func; + PropertyRNA *parm; + + static EnumPropertyItem tracker_items[] = { + {TRACKER_SAD, "SAD", 0, "SAD", "Sum of Absolute Differences tracker"}, + {TRACKER_KLT, "KLT", 0, "KLT", "Kanade–Lucas–Tomasi racker"}, + {0, NULL, 0, NULL, NULL}}; + + rna_def_trackingMarker(brna); + + srna= RNA_def_struct(brna, "MovieTrackingTrack", NULL); + RNA_def_struct_ui_text(srna, "Movie tracking track data", "Match-moving track data for tracking"); + RNA_def_struct_ui_icon(srna, ICON_ANIM_DATA); + + /* name */ + prop= RNA_def_property(srna, "name", PROP_STRING, PROP_NONE); + RNA_def_property_ui_text(prop, "Name", "Unique name of track"); + RNA_def_property_string_funcs(prop, NULL, NULL, "rna_trackingTrack_name_set"); + RNA_def_property_string_maxlength(prop, MAX_ID_NAME); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, NULL); + RNA_def_struct_name_property(srna, prop); + + /* Pattern */ + prop= RNA_def_property(srna, "pattern_min", PROP_FLOAT, PROP_TRANSLATION); + RNA_def_property_array(prop, 2); + RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 5); + RNA_def_property_float_sdna(prop, NULL, "pat_min"); + RNA_def_property_ui_text(prop, "Pattern Min", "Left-bottom corner of pattern area in normalized coordinates relative to marker position"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_trackerPattern_update"); + + prop= RNA_def_property(srna, "pattern_max", PROP_FLOAT, PROP_TRANSLATION); + RNA_def_property_array(prop, 2); + RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 5); + RNA_def_property_float_sdna(prop, NULL, "pat_max"); + RNA_def_property_ui_text(prop, "Pattern Max", "Right-bottom corner of pattern area in normalized coordinates relative to marker position"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_trackerPattern_update"); + + /* Search */ + prop= RNA_def_property(srna, "search_min", PROP_FLOAT, PROP_TRANSLATION); + RNA_def_property_array(prop, 2); + RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 5); + RNA_def_property_float_sdna(prop, NULL, "search_min"); + RNA_def_property_ui_text(prop, "Search Min", "Left-bottom corner of search area in normalized coordinates relative to marker position"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_trackerSearch_update"); + + prop= RNA_def_property(srna, "search_max", PROP_FLOAT, PROP_TRANSLATION); + RNA_def_property_array(prop, 2); + RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 5); + RNA_def_property_float_sdna(prop, NULL, "search_max"); + RNA_def_property_ui_text(prop, "Search Max", "Right-bottom corner of search area in normalized coordinates relative to marker position"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_trackerSearch_update"); + + /* tracking algorithm */ + prop= RNA_def_property(srna, "tracker", PROP_ENUM, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_enum_items(prop, tracker_items); + RNA_def_property_ui_text(prop, "Tracker", "Tracking algorithm to use"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_trackerAlgorithm_update"); + + /* pyramid level for pyramid klt tracking */ + prop= RNA_def_property(srna, "pyramid_levels", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_int_sdna(prop, NULL, "pyramid_levels"); + RNA_def_property_range(prop, 1, 16); + RNA_def_property_ui_text(prop, "Pyramid levels", "Number of pyramid levels for KLT tracking"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_trackerPyramid_update"); + + /* minmal correlation - only used for SAD tracker */ + prop= RNA_def_property(srna, "minimum_correlation", PROP_FLOAT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); + RNA_def_property_float_sdna(prop, NULL, "minimum_correlation"); + RNA_def_property_range(prop, -1.0f, 1.0f); + RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.1, 3); + RNA_def_property_ui_text(prop, "Correlation", "Minimal value of correlation between mathed pattern and reference which is still treated as successful tracking"); + + /* markers */ + prop= RNA_def_property(srna, "markers", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "MovieTrackingMarker"); + RNA_def_property_collection_sdna(prop, NULL, "markers", "markersnr"); + RNA_def_property_collection_funcs(prop, NULL, NULL, NULL, NULL, "rna_tracking_markers_length", NULL, NULL, NULL); + RNA_def_property_ui_text(prop, "Markers", "Collection of markers in track"); + + /* ** channels ** */ + + /* use_red_channel */ + prop= RNA_def_property(srna, "use_red_channel", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", TRACK_DISABLE_RED); + RNA_def_property_ui_text(prop, "Use Red Channel", "Use red channel from footage for tracking"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* use_green_channel */ + prop= RNA_def_property(srna, "use_green_channel", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", TRACK_DISABLE_GREEN); + RNA_def_property_ui_text(prop, "Use Green Channel", "Use green channel from footage for tracking"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* use_blue_channel */ + prop= RNA_def_property(srna, "use_blue_channel", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", TRACK_DISABLE_BLUE); + RNA_def_property_ui_text(prop, "Use Blue Channel", "Use blue channel from footage for tracking"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* has bundle */ + prop= RNA_def_property(srna, "has_bundle", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACK_HAS_BUNDLE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Has Bundle", "True if track has a valid bundle"); + + /* bundle position */ + prop= RNA_def_property(srna, "bundle", PROP_FLOAT, PROP_TRANSLATION); + RNA_def_property_array(prop, 3); + RNA_def_property_float_sdna(prop, NULL, "bundle_pos"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Bundle", "Position of bundle reconstructed from this track"); + + /* hide */ + prop= RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACK_HIDDEN); + RNA_def_property_ui_text(prop, "Hide", "Track is hidden"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* locked */ + prop= RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACK_LOCKED); + RNA_def_property_ui_text(prop, "Lock", "Track is locked and all changes to it are disabled"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* custom color */ + prop= RNA_def_property(srna, "use_custom_color", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACK_CUSTOMCOLOR); + RNA_def_property_ui_text(prop, "Custom Color", "Use custom color instead of theme-defined"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* color */ + prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Color", "Color of the track in the Clip Editor"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, NULL); + + /* average error */ + prop= RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "error"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Average Error", "Average error of re-projection"); + + /* ** api ** */ + + func= RNA_def_function(srna, "marker_find_frame", "rna_trackingTrack_marker_find_frame"); + RNA_def_function_ui_description(func, "Get marker for specified frame"); + parm= RNA_def_int(func, "frame", 1, MINFRAME, MAXFRAME, "Frame", "type for the new spline", MINFRAME, MAXFRAME); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Marker for specified frame"); + RNA_def_function_return(func, parm); +} + +static void rna_def_trackingStabilization(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "MovieTrackingStabilization", NULL); + RNA_def_struct_ui_text(srna, "Movie tracking stabilization data", "Match-moving stabilization data for tracking"); + + /* 2d stabilization */ + prop= RNA_def_property(srna, "use_2d_stabilization", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_2D_STABILIZATION); + RNA_def_property_ui_text(prop, "Use 2D stabilization", "Use 2D stabilization for footage"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate"); + + /* tracks */ + prop= RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_funcs(prop, "rna_tracking_stabTracks_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0, 0); + RNA_def_property_struct_type(prop, "MovieTrackingTrack"); + RNA_def_property_ui_text(prop, "Tracks", "Collection of tracks used for stabilization"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate"); + + /* rotation track */ + prop= RNA_def_property(srna, "rotation_track", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "rot_track"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Rotation Track", "Track used to compensate rotation"); + RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, "rna_tracking_flushUpdate"); + + /* active track index */ + prop= RNA_def_property(srna, "active_track_index", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "act_track"); + RNA_def_property_int_funcs(prop, "rna_tracking_stabTracks_active_index_get", "rna_tracking_stabTracks_active_index_set", "rna_tracking_stabTracks_active_index_range"); + RNA_def_property_ui_text(prop, "Active Track Index", "Index of active track in stabilization tracks list"); + + /* autoscale */ + prop= RNA_def_property(srna, "use_autoscale", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_AUTOSCALE); + RNA_def_property_ui_text(prop, "Autoscale", "Automatically scale footage to cover unfilled areas when stabilizating"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate"); + + /* max scale */ + prop= RNA_def_property(srna, "scale_max", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "maxscale"); + RNA_def_property_range(prop, 0.0f, 10.0f); + RNA_def_property_ui_text(prop, "Miximal Scale", "Maximal value for scale factor"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate"); + + /* influence_location */ + prop= RNA_def_property(srna, "influence_location", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "locinf"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Location Influence", "Influence of stabilization algorithm on footage location"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate"); + + /* influence_scale */ + prop= RNA_def_property(srna, "influence_scale", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "scaleinf"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Scale Influence", "Influence of stabilization algorithm on footage scale"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate"); + + /* influence_rotation */ + prop= RNA_def_property(srna, "influence_rotation", PROP_FLOAT, PROP_FACTOR); + RNA_def_property_float_sdna(prop, NULL, "rotinf"); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Rotation Influence", "Influence of stabilization algorithm on footage rotation"); + RNA_def_property_update(prop, NC_MOVIECLIP|ND_DISPLAY, "rna_tracking_flushUpdate"); +} + +static void rna_def_reconstructedCamera(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "MovieReconstructedCamera", NULL); + RNA_def_struct_ui_text(srna, "Movie tracking reconstructed camera data", "Match-moving reconstructed camera data from tracker"); + + /* frame */ + prop= RNA_def_property(srna, "frame", PROP_INT, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_int_sdna(prop, NULL, "framenr"); + RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on"); + + /* matrix */ + prop= RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX); + RNA_def_property_float_sdna(prop, NULL, "mat"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_multi_array(prop, 2, rna_matrix_dimsize_4x4); + RNA_def_property_ui_text(prop, "Matrix", "Worldspace transformation matrix"); + + /* average_error */ + prop= RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "error"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Average Error", "Average error of resonctruction"); +} + +static void rna_def_trackingReconstruction(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + rna_def_reconstructedCamera(brna); + + srna= RNA_def_struct(brna, "MovieTrackingReconstruction", NULL); + RNA_def_struct_ui_text(srna, "Movie tracking reconstruction data", "Match-moving reconstruction data from tracker"); + + /* is_valid */ + prop= RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_RECONSTRUCTED); + RNA_def_property_ui_text(prop, "Reconstructed", "Is tracking data contains valid reconstruction information"); + + /* average_error */ + prop= RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "error"); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Average Error", "Average error of resonctruction"); + + /* cameras */ + prop= RNA_def_property(srna, "cameras", PROP_COLLECTION, PROP_NONE); + RNA_def_property_struct_type(prop, "MovieReconstructedCamera"); + RNA_def_property_collection_sdna(prop, NULL, "cameras", "camnr"); + RNA_def_property_ui_text(prop, "Cameras", "Collection of solved cameras"); +} + +static void rna_def_trackingTracks(BlenderRNA *brna, PropertyRNA *cprop) +{ + StructRNA *srna; + FunctionRNA *func; + PropertyRNA *prop; + + RNA_def_property_srna(cprop, "MovieTrackingTracks"); + srna= RNA_def_struct(brna, "MovieTrackingTracks", NULL); + RNA_def_struct_sdna(srna, "MovieTracking"); + RNA_def_struct_ui_text(srna, "Movie Tracks", "Collection of movie tracking tracks"); + + func= RNA_def_function(srna, "add", "rna_tracking_tracks_add"); + RNA_def_function_ui_description(func, "Add a number of tracks to this movie clip"); + RNA_def_int(func, "frame", 1, MINFRAME, MAXFRAME, "Frame", "Frame number to add tracks on", MINFRAME, MAXFRAME); + RNA_def_int(func, "count", 1, 0, INT_MAX, "Number", "Number of tracks to add to the movie clip", 0, INT_MAX); + + /* active track */ + prop= RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "MovieTrackingTrack"); + RNA_def_property_pointer_funcs(prop, "rna_tracking_active_track_get", "rna_tracking_active_track_set", NULL, NULL); + RNA_def_property_flag(prop, PROP_EDITABLE|PROP_NEVER_UNLINK); + RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object"); +} + +static void rna_def_tracking(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + rna_def_trackingSettings(brna); + rna_def_trackingCamera(brna); + rna_def_trackingTrack(brna); + rna_def_trackingStabilization(brna); + rna_def_trackingReconstruction(brna); + + srna= RNA_def_struct(brna, "MovieTracking", NULL); + RNA_def_struct_ui_text(srna, "Movie tracking data", "Match-moving data for tracking"); + + /* settings */ + prop= RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "MovieTrackingSettings"); + + /* camera properties */ + prop= RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "MovieTrackingCamera"); + + /* tracks */ + prop= RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_funcs(prop, "rna_tracking_tracks_begin", "rna_iterator_listbase_next", "rna_iterator_listbase_end", "rna_iterator_listbase_get", 0, 0, 0, 0); + RNA_def_property_struct_type(prop, "MovieTrackingTrack"); + RNA_def_property_ui_text(prop, "Tracks", "Collection of tracks in this tracking data object"); + rna_def_trackingTracks(brna, prop); + + /* stabilization */ + prop= RNA_def_property(srna, "stabilization", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "MovieTrackingStabilization"); + + /* reconstruction */ + prop= RNA_def_property(srna, "reconstruction", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "MovieTrackingReconstruction"); +} + +void RNA_def_tracking(BlenderRNA *brna) +{ + rna_def_tracking(brna); +} + +#endif diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index 25c673a168f..5ab9c334016 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -397,6 +397,25 @@ void RNA_api_ui_layout(StructRNA *srna) RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL); RNA_def_boolean(func, "compact", 0, "", "Use more compact layout"); + func= RNA_def_function(srna, "template_movieclip", "uiTemplateMovieClip"); + RNA_def_function_ui_description(func, "Item(s). User interface for selecting movie clips and their source paths"); + RNA_def_function_flag(func, FUNC_USE_CONTEXT); + api_ui_item_rna_common(func); + RNA_def_boolean(func, "compact", 0, "", "Use more compact layout"); + + func= RNA_def_function(srna, "template_track", "uiTemplateTrack"); + RNA_def_function_ui_description(func, "Item. A movie-track widget to preview tracking image."); + api_ui_item_rna_common(func); + + func= RNA_def_function(srna, "template_marker", "uiTemplateMarker"); + RNA_def_function_ui_description(func, "Item. A widget to control single marker settings."); + api_ui_item_rna_common(func); + parm= RNA_def_pointer(func, "clip_user", "MovieClipUser", "", ""); + RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL); + parm= RNA_def_pointer(func, "track", "MovieTrackingTrack", "", ""); + RNA_def_property_flag(parm, PROP_REQUIRED|PROP_RNAPTR|PROP_NEVER_NULL); + RNA_def_boolean(func, "compact", 0, "", "Use more compact layout"); + func= RNA_def_function(srna, "template_list", "uiTemplateList"); RNA_def_function_ui_description(func, "Item. A list widget to display data. e.g. vertexgroups"); RNA_def_function_flag(func, FUNC_USE_CONTEXT); diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index fc9c8a241c6..e4e1c78ab3e 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -1030,8 +1030,21 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna) RNA_def_property_range(prop, 1, 5); RNA_def_property_ui_text(prop, "Outline Width", ""); RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "bundle_solid", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "bundle_solid"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Bundle Solid", ""); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "camera_path", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "camera_path"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Camera Path", ""); + RNA_def_property_update(prop, 0, "rna_userdef_update"); } + static void rna_def_userdef_theme_space_graph(BlenderRNA *brna) { StructRNA *srna; @@ -1741,6 +1754,94 @@ static void rna_def_userdef_theme_colorset(BlenderRNA *brna) RNA_def_property_update(prop, 0, "rna_userdef_update"); } +static void rna_def_userdef_theme_space_clip(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + /* space_clip */ + + srna= RNA_def_struct(brna, "ThemeClipEditor", NULL); + RNA_def_struct_sdna(srna, "ThemeSpace"); + RNA_def_struct_ui_text(srna, "Theme Clip Editor", "Theme settings for the Movie Clip Editor"); + + rna_def_userdef_theme_spaces_main(srna, SPACE_CLIP); + + prop= RNA_def_property(srna, "marker_outline", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "marker_outline"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Marker Outline Color", "Color of marker's outile"); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "marker", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "marker"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Marker Color", "Color of marker"); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "active_marker", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "act_marker"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Active Marker", "Color of active marker"); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "selected_marker", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "sel_marker"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Selected Marker", "Color of sleected marker"); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "disabled_marker", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "dis_marker"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Disabled Marker", "Color of disabled marker"); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "locked_marker", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "lock_marker"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Locked Marker", "Color of locked marker"); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "path_before", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "path_before"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Path Before", "Color of path before current frame"); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "path_after", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "path_after"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Path After", "Color of path after current frame"); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Grid", ""); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "frame_current", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_float_sdna(prop, NULL, "cframe"); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Current Frame", ""); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "handle_vertex", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Handle Vertex", ""); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "handle_vertex_select", PROP_FLOAT, PROP_COLOR_GAMMA); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Handle Vertex Select", ""); + RNA_def_property_update(prop, 0, "rna_userdef_update"); + + prop= RNA_def_property(srna, "handle_vertex_size", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, 0, 255); + RNA_def_property_ui_text(prop, "Handle Vertex Size", ""); + RNA_def_property_update(prop, 0, "rna_userdef_update"); +} + static void rna_def_userdef_themes(BlenderRNA *brna) { StructRNA *srna; @@ -1765,6 +1866,7 @@ static void rna_def_userdef_themes(BlenderRNA *brna) {15, "INFO", ICON_INFO, "Info", ""}, {16, "FILE_BROWSER", ICON_FILESEL, "File Browser", ""}, {17, "CONSOLE", ICON_CONSOLE, "Python Console", ""}, + {20, "CLIP_EDITOR", ICON_CLIP, "Movie Clip Editor", ""}, {0, NULL, 0, NULL, NULL}}; srna= RNA_def_struct(brna, "Theme", NULL); @@ -1887,6 +1989,12 @@ static void rna_def_userdef_themes(BlenderRNA *brna) RNA_def_property_collection_sdna(prop, NULL, "tarm", ""); RNA_def_property_struct_type(prop, "ThemeBoneColorSet"); RNA_def_property_ui_text(prop, "Bone Color Sets", ""); + + prop= RNA_def_property(srna, "clip_editor", PROP_POINTER, PROP_NONE); + RNA_def_property_flag(prop, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "tclip"); + RNA_def_property_struct_type(prop, "ThemeClipEditor"); + RNA_def_property_ui_text(prop, "Clip Editor", ""); } static void rna_def_userdef_addon(BlenderRNA *brna) @@ -1926,6 +2034,7 @@ static void rna_def_userdef_dothemes(BlenderRNA *brna) rna_def_userdef_theme_space_userpref(brna); rna_def_userdef_theme_space_console(brna); rna_def_userdef_theme_space_logic(brna); + rna_def_userdef_theme_space_clip(brna); rna_def_userdef_theme_colorset(brna); rna_def_userdef_themes(brna); } -- cgit v1.2.3 From 7b43abb90e2895292e183fcbca7140447025acd7 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 7 Nov 2011 12:56:05 +0000 Subject: Camera tracking integration =========================== Rest of changes from camera tracking gsoc project. This commit includes: - New compositor nodes: * Movie Clip input node * Movie Undistortion node * Transformation node * 2D stabilization node - Slight changes in existing node to prevent code duplication --- source/blender/makesrna/intern/rna_nodetree.c | 78 ++++++++++++++++++++++ .../blender/makesrna/intern/rna_nodetree_types.h | 4 ++ 2 files changed, 82 insertions(+) (limited to 'source/blender/makesrna') diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index 1445cf3b537..f024ad3addd 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -2414,6 +2414,84 @@ static void def_cmp_ycc(StructRNA *srna) RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); } +static void def_cmp_movieclip(StructRNA *srna) +{ + PropertyRNA *prop; + + prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "id"); + RNA_def_property_struct_type(prop, "MovieClip"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Movie Clip", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); + + RNA_def_struct_sdna_from(srna, "MovieClipUser", "storage"); +} + +static void def_cmp_stabilize2d(StructRNA *srna) +{ + PropertyRNA *prop; + + static EnumPropertyItem filter_type_items[] = { + {0, "NEAREST", 0, "Nearest", ""}, + {1, "BILINEAR", 0, "Bilinear", ""}, + {2, "BICUBIC", 0, "Bicubic", ""}, + {0, NULL, 0, NULL, NULL}}; + + prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "id"); + RNA_def_property_struct_type(prop, "MovieClip"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Movie Clip", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); + + prop = RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "custom1"); + RNA_def_property_enum_items(prop, filter_type_items); + RNA_def_property_ui_text(prop, "Filter", "Method to use to filter stabilization"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); +} + +static void def_cmp_moviedistortion(StructRNA *srna) +{ + PropertyRNA *prop; + + static EnumPropertyItem distortion_type_items[] = { + {0, "UNDISTORT", 0, "Undistort", ""}, + {1, "DISTORT", 0, "Distort", ""}, + {0, NULL, 0, NULL, NULL}}; + + prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE); + RNA_def_property_pointer_sdna(prop, NULL, "id"); + RNA_def_property_struct_type(prop, "MovieClip"); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Movie Clip", ""); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); + + prop = RNA_def_property(srna, "distortion_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "custom1"); + RNA_def_property_enum_items(prop, distortion_type_items); + RNA_def_property_ui_text(prop, "Distortion", "Distortion to use to filter image"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); +} + +static void dev_cmd_transform(StructRNA *srna) +{ + PropertyRNA *prop; + + static EnumPropertyItem filter_type_items[] = { + {0, "NEAREST", 0, "Nearest", ""}, + {1, "BILINEAR", 0, "Bilinear", ""}, + {2, "BICUBIC", 0, "Bicubic", ""}, + {0, NULL, 0, NULL, NULL}}; + + prop = RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "custom1"); + RNA_def_property_enum_items(prop, filter_type_items); + RNA_def_property_ui_text(prop, "Filter", "Method to use to filter transform"); + RNA_def_property_update(prop, NC_NODE|NA_EDITED, "rna_Node_update"); +} + /* -- Texture Nodes --------------------------------------------------------- */ diff --git a/source/blender/makesrna/intern/rna_nodetree_types.h b/source/blender/makesrna/intern/rna_nodetree_types.h index 1bbf47db094..2545826cd46 100644 --- a/source/blender/makesrna/intern/rna_nodetree_types.h +++ b/source/blender/makesrna/intern/rna_nodetree_types.h @@ -117,6 +117,10 @@ DefNode( CompositorNode, CMP_NODE_COLOR_MATTE, def_cmp_color_matte, "COLOR DefNode( CompositorNode, CMP_NODE_DIST_MATTE, def_cmp_distance_matte, "DISTANCE_MATTE", DistanceMatte, "Distance Matte", "" ) DefNode( CompositorNode, CMP_NODE_COLORBALANCE, def_cmp_colorbalance, "COLORBALANCE", ColorBalance, "Color Balance", "" ) DefNode( CompositorNode, CMP_NODE_HUECORRECT, def_cmp_huecorrect, "HUECORRECT", HueCorrect, "Hue Correct", "" ) +DefNode( CompositorNode, CMP_NODE_MOVIECLIP, def_cmp_movieclip, "MOVIECLIP", MovieClip, "MovieClip", "" ) +DefNode( CompositorNode, CMP_NODE_TRANSFORM, dev_cmd_transform, "TRANSFORM", Transform, "Transform", "" ) +DefNode( CompositorNode, CMP_NODE_STABILIZE2D, def_cmp_stabilize2d, "STABILIZE2D", Stabilize, "Stabilize 2D", "" ) +DefNode( CompositorNode, CMP_NODE_MOVIEDISTORTION,def_cmp_moviedistortion,"MOVIEDISTORTION",MovieDistortion, "Movie Distortion", "" ) DefNode( TextureNode, TEX_NODE_OUTPUT, def_tex_output, "OUTPUT", Output, "Output", "" ) DefNode( TextureNode, TEX_NODE_CHECKER, 0, "CHECKER", Checker, "Checker", "" ) -- cgit v1.2.3