/** * stack_do_constrain: * * Update stack_position and layer to reflect transiency * constraints */ static void stack_do_constrain (MetaStack *stack) { Constraint **constraints; /* It'd be nice if this were all faster, probably */ if (!stack->need_constrain) return; meta_topic (META_DEBUG_STACK, "Reapplying constraints\n"); constraints = g_new0 (Constraint*, stack->n_positions); create_constraints (constraints, stack->sorted); graph_constraints (constraints, stack->n_positions); apply_constraints (constraints, stack->n_positions); free_constraints (constraints, stack->n_positions); g_free (constraints); stack->need_constrain = FALSE; }
static int pose_constraints_clear_exec(bContext *C, wmOperator *op) { Object *ob= CTX_data_active_object(C); Scene *scene= CTX_data_scene(C); /* free constraints for all selected bones */ CTX_DATA_BEGIN(C, bPoseChannel*, pchan, selected_pchans) { free_constraints(&pchan->constraints); pchan->constflag &= ~(PCHAN_HAS_IK|PCHAN_HAS_CONST); }
SEXP test_constraints(SEXP k_p, SEXP A) { int k; struct constraintmatrix *AA; SEXP ret; k = INTEGER(k_p)[0]; AA = constraints_R2csdp(A); ret = constraints_csdp2R(k,AA); free_constraints(k,AA); UNPROTECT(1); return ret; }
void free_pose_channel(bPoseChannel *pchan) { // XXX this case here will need to be removed when the new motionpaths are ready if (pchan->path) { MEM_freeN(pchan->path); pchan->path= NULL; } if (pchan->mpath) { animviz_free_motionpath(pchan->mpath); pchan->mpath= NULL; } free_constraints(&pchan->constraints); if (pchan->prop) { IDP_FreeProperty(pchan->prop); MEM_freeN(pchan->prop); } }