Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/fcurve.c
| Show First 20 Lines • Show All 1,143 Lines • ▼ Show 20 Lines | else { | ||||
| return 0.0f; | return 0.0f; | ||||
| } | } | ||||
| /* if we're still here, we should be ok... */ | /* if we're still here, we should be ok... */ | ||||
| dtar->flag &= ~DTAR_FLAG_INVALID; | dtar->flag &= ~DTAR_FLAG_INVALID; | ||||
| return value; | return value; | ||||
| } | } | ||||
| /** | |||||
| * Same as 'dtar_get_prop_val'. but just get the RNA data. | |||||
| */ | |||||
| bool driver_get_variable_object( | |||||
| ChannelDriver *driver, DriverTarget *dtar, | |||||
| PointerRNA *id_ptr, PropertyRNA **r_prop) | |||||
| { | |||||
| PointerRNA ptr; | |||||
| PropertyRNA *prop; | |||||
| ID *id; | |||||
| int index = -1; | |||||
| /* sanity check */ | |||||
| if (ELEM(NULL, driver, dtar)) | |||||
| return 0.0f; | |||||
| id = dtar_id_ensure_proxy_from(dtar->id); | |||||
| /* error check for missing pointer... */ | |||||
| if (id == NULL) { | |||||
| if (G.debug & G_DEBUG) { | |||||
| printf("Error: driver has an invalid target to use (path = %s)\n", dtar->rna_path); | |||||
| } | |||||
| driver->flag |= DRIVER_FLAG_INVALID; | |||||
| dtar->flag |= DTAR_FLAG_INVALID; | |||||
| return 0.0f; | |||||
| } | |||||
| /* get RNA-pointer for the ID-block given in target */ | |||||
| RNA_id_pointer_create(id, id_ptr); | |||||
| /* get property to read from, and get value as appropriate */ | |||||
| if (dtar->rna_path == NULL || dtar->rna_path[0] == '\0') { | |||||
| prop = NULL; /* ok */ | |||||
| } | |||||
| else if (RNA_path_resolve_property_full(id_ptr, dtar->rna_path, &ptr, &prop, &index)) { | |||||
| /* ok */ | |||||
| } | |||||
| else { | |||||
| /* path couldn't be resolved */ | |||||
| if (G.debug & G_DEBUG) { | |||||
| printf("Driver Evaluation Error: cannot resolve target for %s -> %s\n", id->name, dtar->rna_path); | |||||
| } | |||||
| *r_prop = NULL; | |||||
| driver->flag |= DRIVER_FLAG_INVALID; | |||||
| dtar->flag |= DTAR_FLAG_INVALID; | |||||
| return false; | |||||
| } | |||||
| *r_prop = prop; | |||||
| /* if we're still here, we should be ok... */ | |||||
| dtar->flag &= ~DTAR_FLAG_INVALID; | |||||
| return true; | |||||
| } | |||||
| /* Helper function to obtain a pointer to a Pose Channel (for evaluating drivers) */ | /* Helper function to obtain a pointer to a Pose Channel (for evaluating drivers) */ | ||||
| static bPoseChannel *dtar_get_pchan_ptr(ChannelDriver *driver, DriverTarget *dtar) | static bPoseChannel *dtar_get_pchan_ptr(ChannelDriver *driver, DriverTarget *dtar) | ||||
| { | { | ||||
| ID *id; | ID *id; | ||||
| /* sanity check */ | /* sanity check */ | ||||
| if (ELEM(NULL, driver, dtar)) | if (ELEM(NULL, driver, dtar)) | ||||
| return NULL; | return NULL; | ||||
| ▲ Show 20 Lines • Show All 1,382 Lines • Show Last 20 Lines | |||||