Driver Editing Tweaks:
* Updating dependencies for drivers now clears the disabled status of the relevant Driver FCurve too * Changing the type of ID-block used for Driver Targets and Keying Set Paths will now clear the pointer to the ID-block if it is of the wrong type.
This commit is contained in:
@@ -801,8 +801,13 @@ float driver_get_target_value (ChannelDriver *driver, DriverTarget *dtar)
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (G.f & G_DEBUG)
|
||||
printf("Driver Evaluation Error: cannot resolve target for %s -> %s \n", id->name, path);
|
||||
else {
|
||||
if (G.f & G_DEBUG)
|
||||
printf("Driver Evaluation Error: cannot resolve target for %s -> %s \n", id->name, path);
|
||||
|
||||
driver->flag |= DRIVER_FLAG_INVALID;
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
@@ -924,8 +929,8 @@ static float evaluate_driver (ChannelDriver *driver, float evaltime)
|
||||
}
|
||||
|
||||
/* use the final posed locations */
|
||||
mat4_to_quat( q1,pchan->pose_mat);
|
||||
mat4_to_quat( q2,pchan2->pose_mat);
|
||||
mat4_to_quat(q1, pchan->pose_mat);
|
||||
mat4_to_quat(q2, pchan2->pose_mat);
|
||||
|
||||
invert_qt(q1);
|
||||
mul_qt_qtqt(quat, q1, q2);
|
||||
|
||||
@@ -279,6 +279,7 @@ static void driver_update_flags_cb (bContext *C, void *fcu_v, void *dummy_v)
|
||||
ChannelDriver *driver= fcu->driver;
|
||||
|
||||
/* clear invalid flags */
|
||||
fcu->flag &= ~FCURVE_DISABLED; // XXX?
|
||||
driver->flag &= ~DRIVER_FLAG_INVALID;
|
||||
}
|
||||
|
||||
|
||||
@@ -78,6 +78,16 @@ static int rna_ksPath_id_editable(PointerRNA *ptr)
|
||||
return (ksp->idtype)? PROP_EDITABLE : 0;
|
||||
}
|
||||
|
||||
static void rna_ksPath_id_type_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
KS_Path *data= (KS_Path*)(ptr->data);
|
||||
|
||||
/* set the driver type, then clear the id-block if the type is invalid */
|
||||
data->idtype= value;
|
||||
if ((data->id) && (GS(data->id->name) != data->idtype))
|
||||
data->id= NULL;
|
||||
}
|
||||
|
||||
static void rna_ksPath_RnaPath_get(PointerRNA *ptr, char *value)
|
||||
{
|
||||
KS_Path *ksp= (KS_Path *)ptr->data;
|
||||
@@ -179,6 +189,7 @@ static void rna_def_keyingset_path(BlenderRNA *brna)
|
||||
RNA_def_property_enum_sdna(prop, NULL, "idtype");
|
||||
RNA_def_property_enum_items(prop, id_type_items);
|
||||
RNA_def_property_enum_default(prop, ID_OB);
|
||||
RNA_def_property_enum_funcs(prop, NULL, "rna_ksPath_id_type_set", NULL);
|
||||
RNA_def_property_ui_text(prop, "ID Type", "Type of ID-block that can be used.");
|
||||
|
||||
/* Group */
|
||||
|
||||
@@ -111,6 +111,16 @@ static int rna_DriverTarget_id_editable(PointerRNA *ptr)
|
||||
return (dtar->idtype)? PROP_EDITABLE : 0;
|
||||
}
|
||||
|
||||
static void rna_DriverTarget_id_type_set(PointerRNA *ptr, int value)
|
||||
{
|
||||
DriverTarget *data= (DriverTarget*)(ptr->data);
|
||||
|
||||
/* set the driver type, then clear the id-block if the type is invalid */
|
||||
data->idtype= value;
|
||||
if ((data->id) && (GS(data->id->name) != data->idtype))
|
||||
data->id= NULL;
|
||||
}
|
||||
|
||||
static void rna_DriverTarget_RnaPath_get(PointerRNA *ptr, char *value)
|
||||
{
|
||||
DriverTarget *dtar= (DriverTarget *)ptr->data;
|
||||
@@ -568,6 +578,7 @@ static void rna_def_drivertarget(BlenderRNA *brna)
|
||||
RNA_def_property_enum_sdna(prop, NULL, "idtype");
|
||||
RNA_def_property_enum_items(prop, id_type_items);
|
||||
RNA_def_property_enum_default(prop, ID_OB);
|
||||
RNA_def_property_enum_funcs(prop, NULL, "rna_DriverTarget_id_type_set", NULL);
|
||||
RNA_def_property_ui_text(prop, "ID Type", "Type of ID-block that can be used.");
|
||||
//RNA_def_property_update(prop, 0, "rna_ChannelDriver_update_data"); // XXX disabled for now, until we can turn off auto updates
|
||||
|
||||
|
||||
Reference in New Issue
Block a user