Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/key.c
| Show First 20 Lines • Show All 814 Lines • ▼ Show 20 Lines | for (kb = key->block.first, keyblock_index = 0; kb; kb = kb->next, keyblock_index++) { | ||||
| if (kb != key->refkey) { | if (kb != key->refkey) { | ||||
| float icuval = kb->curval; | float icuval = kb->curval; | ||||
| /* only with value, and no difference allowed */ | /* only with value, and no difference allowed */ | ||||
| if (!(kb->flag & KEYBLOCK_MUTE) && icuval != 0.0f && kb->totelem == tot) { | if (!(kb->flag & KEYBLOCK_MUTE) && icuval != 0.0f && kb->totelem == tot) { | ||||
| KeyBlock *refb; | KeyBlock *refb; | ||||
| float weight, | float weight, | ||||
| *weights = per_keyblock_weights ? per_keyblock_weights[keyblock_index] : NULL; | *weights = per_keyblock_weights ? per_keyblock_weights[keyblock_index] : NULL; | ||||
| char *freefrom = NULL, *freereffrom = NULL; | char *freefrom = NULL; | ||||
| /* reference now can be any block */ | /* reference now can be any block */ | ||||
| refb = BLI_findlink(&key->block, kb->relative); | refb = BLI_findlink(&key->block, kb->relative); | ||||
| if (refb == NULL) { | if (refb == NULL) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| poin = basispoin; | poin = basispoin; | ||||
| from = key_block_get_data(key, actkb, kb, &freefrom); | from = key_block_get_data(key, actkb, kb, &freefrom); | ||||
| reffrom = key_block_get_data(key, actkb, refb, &freereffrom); | |||||
| /* For meshes, use the original values instead of the bmesh values to | |||||
| * maintain a constant offset. */ | |||||
| reffrom = refb->data; | |||||
| poin += start * poinsize; | poin += start * poinsize; | ||||
| reffrom += key->elemsize * start; // key elemsize yes! | reffrom += key->elemsize * start; // key elemsize yes! | ||||
| from += key->elemsize * start; | from += key->elemsize * start; | ||||
| for (b = start; b < end; b += step) { | for (b = start; b < end; b += step) { | ||||
| weight = weights ? (*weights * icuval) : icuval; | weight = weights ? (*weights * icuval) : icuval; | ||||
| Show All 29 Lines | if (kb != key->refkey) { | ||||
| (float *)from, | (float *)from, | ||||
| weight); | weight); | ||||
| break; | break; | ||||
| default: | default: | ||||
| /* should never happen */ | /* should never happen */ | ||||
| if (freefrom) { | if (freefrom) { | ||||
| MEM_freeN(freefrom); | MEM_freeN(freefrom); | ||||
| } | } | ||||
| if (freereffrom) { | |||||
| MEM_freeN(freereffrom); | |||||
| } | |||||
| BLI_assert(!"invalid 'cp[1]'"); | BLI_assert(!"invalid 'cp[1]'"); | ||||
| return; | return; | ||||
| } | } | ||||
| poin += *ofsp; | poin += *ofsp; | ||||
| cp += 2; | cp += 2; | ||||
| ofsp++; | ofsp++; | ||||
| } | } | ||||
| reffrom += elemsize; | reffrom += elemsize; | ||||
| from += elemsize; | from += elemsize; | ||||
| if (weights) { | if (weights) { | ||||
| weights++; | weights++; | ||||
| } | } | ||||
| } | } | ||||
| if (freefrom) { | if (freefrom) { | ||||
| MEM_freeN(freefrom); | MEM_freeN(freefrom); | ||||
| } | } | ||||
| if (freereffrom) { | |||||
| MEM_freeN(freereffrom); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| static void do_key(const int start, | static void do_key(const int start, | ||||
| int end, | int end, | ||||
| const int tot, | const int tot, | ||||
| ▲ Show 20 Lines • Show All 1,450 Lines • Show Last 20 Lines | |||||