54 #include "RNA_prototypes.h"
93 if (pose_bone ==
NULL) {
95 if (pose_bone ==
NULL) {
157 static void validate_pyconstraint_cb(
Main *bmain,
void *arg1,
void *arg2)
161 int index = *((
int *)arg2);
167 for (text = bmain->
texts.
first, i = 1; text && index != i; i++, text = text->
id.
next) {
175 static char *buildmenu_pyconstraints(
Main *bmain,
Text *con_text,
int *pyconindex)
184 sprintf(buf,
"Scripts: %%t|[None]%%x0|");
188 if (con_text ==
NULL) {
195 if (text == con_text) {
203 sprintf(buf,
"%%x%d", i);
222 static void update_pyconstraint_cb(
void *arg1,
void *arg2)
246 const char subtarget[],
257 if (
abs(index) < num_targets) {
258 index = num_targets -
abs(index);
261 index = num_targets - 1;
264 else if (index >= num_targets) {
265 index = num_targets - 1;
268 for (ct = targets.
first, i = 0; ct; ct = ct->
next, i++) {
291 bool check_targets =
true;
308 else if (
data->tar == owner) {
319 else if (
data->poletar == owner) {
328 check_targets =
false;
338 else if (
data->tar == owner) {
345 check_targets =
false;
363 check_targets =
false;
370 if (
data->upflag ==
data->trackflag) {
373 if (
data->upflag + 3 ==
data->trackflag) {
381 if (
data->reserved2 ==
data->reserved1) {
384 if (
data->reserved2 + 3 ==
data->reserved1) {
391 if (
data->lockflag ==
data->trackflag) {
394 if (
data->lockflag + 3 ==
data->trackflag) {
420 if (
data->object[0]) {
427 if (!tracking_object) {
458 if ((
data->cache_file ==
NULL) || (
data->object_path[0] ==
'\0')) {
466 for (ct = targets.
first; ct; ct = ct->
next) {
473 else if (ct->
tar == owner) {
537 else if (check_targets) {
550 switch (owner->
type) {
592 for (curcon = conlist->
first; curcon; curcon = curcon->
next) {
642 #define EDIT_CONSTRAINT_OWNER_OBJECT 0
643 #define EDIT_CONSTRAINT_OWNER_BONE 1
650 "Edit a constraint on the active object"},
674 C,
"Cannot edit constraints coming from linked data in a library override");
697 ot->
srna,
"constraint",
NULL,
MAX_NAME,
"Constraint",
"Name of the constraint to edit");
707 ot->
srna,
"report",
false,
"Report",
"Create a notification after the operation");
748 con = panel_ptr->
data;
760 if (r_retval !=
NULL) {
792 printf(
"constraint found = %p, %s\n", (
void *)con, (con) ? con->
name :
"<Not found>");
824 data->orglength = 0.0f;
842 ot->
name =
"Reset Original Length";
843 ot->
idname =
"CONSTRAINT_OT_stretchto_reset";
844 ot->
description =
"Reset original length of bone for Stretch To Constraint";
897 ot->
name =
"Reset Distance";
898 ot->
idname =
"CONSTRAINT_OT_limitdistance_reset";
899 ot->
description =
"Reset limiting distance for Limit Distance Constraint";
931 short flag_backup = con->
flag;
934 con->
flag = flag_backup;
947 printf(
"DEBUG: Child-Of Set Inverse - object = '%s'\n", (ob) ? ob->
id.
name + 2 :
"<None>");
976 ot->
idname =
"CONSTRAINT_OT_childof_set_inverse";
977 ot->
description =
"Set inverse correction for Child Of constraint";
1024 ot->
name =
"Clear Inverse";
1025 ot->
idname =
"CONSTRAINT_OT_childof_clear_inverse";
1026 ot->
description =
"Clear inverse correction for Child Of constraint";
1057 float standardRange = 1.0;
1076 standardRange = 100.0f;
1101 standardRange = 1.0f;
1149 ot->
name =
"Auto Animate Path";
1150 ot->
idname =
"CONSTRAINT_OT_followpath_path_animate";
1152 "Add default animation for path used by constraint if it isn't animated already";
1170 "First frame of path animation",
1179 "Number of frames that path animation should take",
1199 printf(
"DEBUG: ObjectSolver Set Inverse - object = '%s'\n", (ob) ? ob->
id.
name + 2 :
"<None>");
1201 op->
reports,
RPT_ERROR,
"Could not find constraint data for ObjectSolver Set Inverse");
1230 ot->
name =
"Set Inverse";
1231 ot->
idname =
"CONSTRAINT_OT_objectsolver_set_inverse";
1232 ot->
description =
"Set inverse correction for Object Solver constraint";
1286 ot->
name =
"Clear Inverse";
1287 ot->
idname =
"CONSTRAINT_OT_objectsolver_clear_inverse";
1288 ot->
description =
"Clear inverse correction for Object Solver constraint";
1452 strcpy(name, con->
name);
1487 ot->
name =
"Delete Constraint";
1488 ot->
idname =
"CONSTRAINT_OT_delete";
1489 ot->
description =
"Remove constraint from constraint stack";
1525 strcpy(name, con->
name);
1526 const bool is_first_constraint = con !=
constraints->first;
1559 if (is_first_constraint) {
1562 "Applied constraint was not first, result may not be as expected");
1586 ot->
name =
"Apply Constraint";
1587 ot->
idname =
"CONSTRAINT_OT_apply";
1588 ot->
description =
"Apply constraint and remove from the stack";
1622 strcpy(name, con->
name);
1671 ot->
name =
"Duplicate Constraint";
1673 ot->
description =
"Duplicate constraint at the same position in the stack";
1717 if (pchan == chan) {
1727 if (prev_ob == ob) {
1782 if (pchan != chan) {
1824 ot->
name =
"Copy Constraint To Selected";
1825 ot->
idname =
"CONSTRAINT_OT_copy_to_selected";
1826 ot->
description =
"Copy constraint to other selected objects/bones";
1849 if (con && con->
next) {
1878 ot->
name =
"Move Constraint Down";
1879 ot->
idname =
"CONSTRAINT_OT_move_down";
1880 ot->
description =
"Move constraint down in constraint stack";
1905 if (con && con->
prev) {
1934 ot->
name =
"Move Constraint Up";
1935 ot->
idname =
"CONSTRAINT_OT_move_up";
1960 if (new_index < 0) {
1987 ot->
name =
"Move Constraint to Index";
1988 ot->
idname =
"CONSTRAINT_OT_move_to_index";
1990 "Change the constraint's position in the list so it evaluates after the set number of "
2007 "The index to move the constraint to",
2028 if (prev_ob != ob) {
2047 ot->
name =
"Clear Pose Constraints";
2048 ot->
idname =
"POSE_OT_constraints_clear";
2049 ot->
description =
"Clear all the constraints for the selected bones";
2086 ot->
name =
"Clear Object Constraints";
2087 ot->
idname =
"OBJECT_OT_constraints_clear";
2088 ot->
description =
"Clear all the constraints for the active object only";
2117 if (pchan != chan) {
2122 if (prev_ob != ob) {
2142 ot->
name =
"Copy Constraints to Selected Bones";
2143 ot->
idname =
"POSE_OT_constraints_copy";
2144 ot->
description =
"Copy constraints to other selected bones";
2187 ot->
name =
"Copy Constraints to Selected Objects";
2188 ot->
idname =
"OBJECT_OT_constraints_copy";
2189 ot->
description =
"Copy constraints to other selected objects";
2211 bool only_curve =
false, only_mesh =
false, only_ob =
false;
2259 if (pchan != pchanact) {
2271 if (found ==
false) {
2282 (!only_curve && !only_mesh)) {
2287 if (pchan !=
NULL) {
2296 ((!only_mesh) || (ob->type ==
OB_MESH))) {
2317 if ((found ==
false) && (
add)) {
2342 BASACT(view_layer) = base;
2369 if (pchan ==
NULL) {
2417 menustr = buildmenu_pyconstraints(bmain,
NULL, &scriptint);
2424 validate_pyconstraint_cb(bmain, con->
data, &scriptint);
2468 short with_targets = 0;
2478 if (strstr(op->
idname,
"with_targets")) {
2490 short with_targets = 0;
2500 if (strstr(op->
idname,
"with_targets")) {
2529 return object_constraint_items;
2537 ot->
name =
"Add Constraint";
2539 ot->
idname =
"OBJECT_OT_constraint_add";
2566 ot->
name =
"Add Constraint (with Targets)";
2568 "Add a constraint to the active object, with target (where applicable) set to the "
2569 "selected objects/bones";
2570 ot->
idname =
"OBJECT_OT_constraint_add_with_targets";
2589 ot->
name =
"Add Constraint";
2591 ot->
idname =
"POSE_OT_constraint_add";
2608 ot->
name =
"Add Constraint (with Targets)";
2610 "Add a constraint to the active bone, with target (where applicable) set to the selected "
2612 ot->
idname =
"POSE_OT_constraint_add_with_targets";
2676 layout,
IFACE_(
"To Active Bone"), ICON_NONE,
"POSE_OT_ik_add",
"with_targets", 1);
2680 layout,
IFACE_(
"To Active Object"), ICON_NONE,
"POSE_OT_ik_add",
"with_targets", 1);
2686 layout,
IFACE_(
"To New Empty Object"), ICON_NONE,
"POSE_OT_ik_add",
"with_targets", 1);
2688 layout,
IFACE_(
"Without Targets"), ICON_NONE,
"POSE_OT_ik_add",
"with_targets", 0);
2712 ot->
name =
"Add IK to Bone";
2729 "Assign IK Constraint with targets derived from the select bones/objects");
2750 for (con = pchan->constraints.first; con; con =
next) {
2758 if (prev_ob != ob) {
2777 ot->
description =
"Remove all IK Constraints from selected bones";
typedef float(TangentPoint)[2]
void BIK_test_constraint(struct Object *ob, struct bConstraint *cons)
Blender kernel action and pose functionality.
void BKE_pose_tag_recalc(struct Main *bmain, struct bPose *pose)
struct bPoseChannel * BKE_pose_channel_active_or_first_selected(struct Object *ob)
struct bPoseChannel * BKE_pose_channel_active_if_layer_visible(struct Object *ob)
void BKE_pose_tag_update_constraint_flags(struct bPose *pose)
void BKE_pose_update_constraint_flags(struct bPose *pose)
struct Bone * BKE_armature_find_bone_name(struct bArmature *arm, const char *name)
struct bArmature * BKE_armature_from_object(struct Object *ob)
bool BKE_constraint_remove(ListBase *list, struct bConstraint *con)
struct bConstraint * BKE_constraint_copy_for_object(struct Object *ob, struct bConstraint *src)
void BKE_constraints_free(struct ListBase *list)
void BKE_constraint_targets_flush(struct bConstraint *con, struct ListBase *targets, bool no_copy)
struct bConstraint * BKE_constraint_add_for_object(struct Object *ob, const char *name, short type)
struct bConstraint * BKE_constraints_find_name(struct ListBase *list, const char *name)
int BKE_constraint_targets_get(struct bConstraint *con, struct ListBase *r_targets)
void BKE_constraints_copy(struct ListBase *dst, const struct ListBase *src, bool do_extern)
bool BKE_constraint_remove_ex(ListBase *list, struct Object *ob, struct bConstraint *con, bool clear_dep)
bool BKE_constraint_apply_and_remove_for_pose(struct Depsgraph *depsgraph, struct Scene *scene, ListBase *constraints, struct Object *ob, struct bConstraint *con, struct bPoseChannel *pchan)
bool BKE_constraint_is_nonlocal_in_liboverride(const struct Object *ob, const struct bConstraint *con)
bool BKE_constraint_apply_and_remove_for_object(struct Depsgraph *depsgraph, struct Scene *scene, ListBase *constraints, struct Object *ob, struct bConstraint *con)
struct bConstraint * BKE_constraints_active_get(struct ListBase *list)
struct bConstraint * BKE_constraint_copy_for_pose(struct Object *ob, struct bPoseChannel *pchan, struct bConstraint *src)
void BKE_constraints_active_set(ListBase *list, struct bConstraint *con)
struct bConstraint * BKE_constraint_add_for_pose(struct Object *ob, struct bPoseChannel *pchan, const char *name, short type)
#define CTX_DATA_BEGIN_WITH_ID(C, Type, instance, member, Type_id, instance_id)
struct Scene * CTX_data_scene(const bContext *C)
PointerRNA CTX_data_pointer_get(const bContext *C, const char *member)
#define CTX_DATA_BEGIN(C, Type, instance, member)
PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
struct Object * CTX_data_active_object(const bContext *C)
void CTX_wm_operator_poll_msg_set(struct bContext *C, const char *msg)
struct Main * CTX_data_main(const bContext *C)
struct bPoseChannel * CTX_data_active_pose_bone(const bContext *C)
struct FModifier * add_fmodifier(ListBase *modifiers, int type, struct FCurve *owner_fcu)
struct FCurve * BKE_fcurve_find(ListBase *list, const char rna_path[], int array_index)
General operations, lookup, etc. for blender objects.
void BKE_object_eval_constraints(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob)
struct Object * BKE_object_pose_armature_get(struct Object *ob)
struct Object * BKE_object_add(struct Main *bmain, struct ViewLayer *view_layer, int type, const char *name) ATTR_NONNULL(1
bool BKE_object_exists_check(struct Main *bmain, const struct Object *obtest)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
struct MovieTrackingTrack * BKE_tracking_track_get_named(struct MovieTracking *tracking, struct MovieTrackingObject *object, const char *name)
struct MovieTrackingObject * BKE_tracking_object_get_named(struct MovieTracking *tracking, const char *name)
struct MovieTrackingObject * BKE_tracking_object_get_camera(struct MovieTracking *tracking)
A dynamically sized string ADT.
DynStr * BLI_dynstr_new(void) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
char * BLI_dynstr_get_cstring(const DynStr *ds) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLI_dynstr_free(DynStr *ds) ATTR_NONNULL()
void BLI_dynstr_append(DynStr *__restrict ds, const char *cstr) ATTR_NONNULL()
#define LISTBASE_FOREACH(type, var, list)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void void bool BLI_listbase_link_move(ListBase *listbase, void *vlink, int step) ATTR_NONNULL()
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_insertlinkbefore(struct ListBase *listbase, void *vnextlink, void *vnewlink) ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void unit_m4(float m[4][4])
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3])
MINLINE void copy_v3_v3(float r[3], const float a[3])
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
int BPY_is_pyconstraint(struct Text *text)
void BPY_pyconstraint_update(struct Object *owner, struct bConstraint *con)
struct Depsgraph Depsgraph
void DEG_id_tag_update(struct ID *id, int flag)
void DEG_relations_tag_update(struct Main *bmain)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
@ ID_RECALC_COPY_ON_WRITE
#define ID_IS_LINKED(_id)
@ FMODIFIER_TYPE_GENERATOR
@ CONSTRAINT_OVERRIDE_LIBRARY_LOCAL
@ CONSTRAINT_TYPE_TRACKTO
@ CONSTRAINT_TYPE_CHILDOF
@ CONSTRAINT_TYPE_FOLLOWTRACK
@ CONSTRAINT_TYPE_OBJECTSOLVER
@ CONSTRAINT_TYPE_ARMATURE
@ CONSTRAINT_TYPE_SHRINKWRAP
@ CONSTRAINT_TYPE_ROTLIMIT
@ CONSTRAINT_TYPE_CAMERASOLVER
@ CONSTRAINT_TYPE_SPLINEIK
@ CONSTRAINT_TYPE_KINEMATIC
@ CONSTRAINT_TYPE_DISTLIMIT
@ CONSTRAINT_TYPE_LOCLIMIT
@ CONSTRAINT_TYPE_CLAMPTO
@ CONSTRAINT_TYPE_LOCKTRACK
@ CONSTRAINT_TYPE_SIZELIMIT
@ CONSTRAINT_TYPE_FOLLOWPATH
@ CONSTRAINT_TYPE_STRETCHTO
@ CONSTRAINT_TYPE_SAMEVOL
@ CONSTRAINT_TYPE_TRANSFORM_CACHE
@ CONSTRAINT_OBTYPE_OBJECT
@ CAMERASOLVER_ACTIVECLIP
@ CONSTRAINT_SPLINEIK_BOUND
@ OBJECTSOLVER_SET_INVERSE
Object is a sort of wrapper for general info.
#define BASACT(_view_layer)
void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode)
struct Object * ED_object_active_context(const struct bContext *C)
bool ED_operator_object_active_local_editable(struct bContext *C)
bool ED_operator_object_active_editable_ex(struct bContext *C, const Object *ob)
bool ED_operator_object_active_local_editable_posemode_exclusive(struct bContext *C)
bool ED_operator_object_active_editable(struct bContext *C)
bool ED_operator_posemode_exclusive(struct bContext *C)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
void uiItemBooleanO(uiLayout *layout, const char *name, int icon, const char *opname, const char *propname, int value)
struct uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
struct PointerRNA * UI_region_panel_custom_data_under_cursor(const struct bContext *C, const struct wmEvent *event)
void UI_popup_menu_end(struct bContext *C, struct uiPopupMenu *pup)
uiPopupMenu * UI_popup_menu_begin(struct bContext *C, const char *title, int icon) ATTR_NONNULL()
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint ** constraints
const Depsgraph * depsgraph
SyclQueue void void * src
SyclQueue void void size_t num_bytes void
bAction * ED_id_action_ensure(Main *bmain, ID *id)
FCurve * ED_action_fcurve_ensure(struct Main *bmain, struct bAction *act, const char group[], struct PointerRNA *ptr, const char rna_path[], const int array_index)
void(* MEM_freeN)(void *vmemh)
bool add(void *owner, const AttributeIDRef &attribute_id, eAttrDomain domain, eCustomDataType data_type, const AttributeInit &initializer)
void CONSTRAINT_OT_move_to_index(wmOperatorType *ot)
static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase *list, int type, const bool setTarget)
static int followpath_path_animate_exec(bContext *C, wmOperator *op)
static int followpath_path_animate_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static const EnumPropertyItem constraint_owner_items[]
static bool edit_constraint_invoke_properties(bContext *C, wmOperator *op, const wmEvent *event, int *r_retval)
static int stretchto_reset_exec(bContext *C, wmOperator *op)
void ED_object_constraint_active_set(Object *ob, bConstraint *con)
void ED_object_constraint_update(Main *bmain, Object *ob)
static void set_constraint_nth_target(bConstraint *con, Object *target, const char subtarget[], int index)
void OBJECT_OT_constraints_copy(wmOperatorType *ot)
void ED_object_constraint_tag_update(Main *bmain, Object *ob, bConstraint *con)
static bool constraint_copy_to_selected_poll(bContext *C)
void ED_object_constraint_copy_for_pose(Main *bmain, Object *ob_dst, bPoseChannel *pchan, bConstraint *con)
static int constraint_move_to_index_exec(bContext *C, wmOperator *op)
void CONSTRAINT_OT_copy(wmOperatorType *ot)
static int object_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
void ED_object_constraint_copy_for_object(Main *bmain, Object *ob_dst, bConstraint *con)
static void force_evaluation_if_constraint_disabled(bContext *C, Object *ob, bConstraint *con)
static int constraint_copy_to_selected_exec(bContext *C, wmOperator *op)
void OBJECT_OT_constraint_add_with_targets(wmOperatorType *ot)
static int childof_clear_inverse_exec(bContext *C, wmOperator *op)
static bool edit_constraint_liboverride_allowed_poll(bContext *C)
static int object_constraint_add_exec(bContext *C, wmOperator *op)
void CONSTRAINT_OT_delete(wmOperatorType *ot)
void CONSTRAINT_OT_stretchto_reset(wmOperatorType *ot)
static int stretchto_reset_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static bool edit_constraint_poll_generic(bContext *C, StructRNA *rna_type, const bool is_liboverride_allowed)
static void object_test_constraint(Main *bmain, Object *ob, bConstraint *con)
bool ED_object_constraint_move_to_index(Object *ob, bConstraint *con, const int index)
void POSE_OT_constraints_copy(wmOperatorType *ot)
#define EDIT_CONSTRAINT_OWNER_BONE
static int constraint_move_up_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void CONSTRAINT_OT_copy_to_selected(wmOperatorType *ot)
static int objectsolver_set_inverse_exec(bContext *C, wmOperator *op)
#define EDIT_CONSTRAINT_OWNER_OBJECT
static int constraint_move_down_exec(bContext *C, wmOperator *op)
void CONSTRAINT_OT_objectsolver_set_inverse(wmOperatorType *ot)
void OBJECT_OT_constraints_clear(wmOperatorType *ot)
void CONSTRAINT_OT_limitdistance_reset(wmOperatorType *ot)
static int objectsolver_set_inverse_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
void CONSTRAINT_OT_move_down(wmOperatorType *ot)
static int childof_set_inverse_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static const EnumPropertyItem * object_constraint_add_itemf(bContext *UNUSED(C), PointerRNA *UNUSED(ptr), PropertyRNA *UNUSED(prop), bool *r_free)
bConstraint * ED_object_constraint_active_get(Object *ob)
static void object_pose_tag_update(Main *bmain, Object *ob)
void POSE_OT_constraints_clear(wmOperatorType *ot)
static int pose_constraint_add_exec(bContext *C, wmOperator *op)
static int objectsolver_clear_inverse_exec(bContext *C, wmOperator *op)
void OBJECT_OT_constraint_add(wmOperatorType *ot)
static int constraint_move_to_index_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void ED_object_constraint_dependency_update(Main *bmain, Object *ob)
void CONSTRAINT_OT_apply(wmOperatorType *ot)
static int constraint_apply_exec(bContext *C, wmOperator *op)
static void edit_constraint_report_property(wmOperatorType *ot)
static int pose_ik_clear_exec(bContext *C, wmOperator *UNUSED(op))
void ED_object_constraint_link(Main *bmain, Object *ob_dst, ListBase *dst, ListBase *src)
static int limitdistance_reset_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static void test_constraint(Main *bmain, Object *owner, bPoseChannel *pchan, bConstraint *con, int type)
void CONSTRAINT_OT_move_up(wmOperatorType *ot)
static int object_constraint_copy_exec(bContext *C, wmOperator *UNUSED(op))
static bool edit_constraint_poll(bContext *C)
static void test_constraints(Main *bmain, Object *ob, bPoseChannel *pchan)
void POSE_OT_constraint_add_with_targets(wmOperatorType *ot)
static int pose_ik_add_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
void ED_object_constraint_dependency_tag_update(Main *bmain, Object *ob, bConstraint *con)
static int limitdistance_reset_exec(bContext *C, wmOperator *op)
static int pose_constraints_clear_exec(bContext *C, wmOperator *UNUSED(op))
static int objectsolver_clear_inverse_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static bool get_new_constraint_target(bContext *C, int con_type, Object **tar_ob, bPoseChannel **tar_pchan, bool add)
static int constraint_delete_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int childof_clear_inverse_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
static int childof_set_inverse_exec(bContext *C, wmOperator *op)
static int pose_constraint_copy_exec(bContext *C, wmOperator *op)
static int pose_ik_add_exec(bContext *C, wmOperator *op)
void POSE_OT_constraint_add(wmOperatorType *ot)
void POSE_OT_ik_add(wmOperatorType *ot)
static int constraint_move_down_invoke(bContext *C, wmOperator *op, const wmEvent *event)
ListBase * ED_object_constraint_active_list(Object *ob)
ListBase * ED_object_constraint_list_from_constraint(Object *ob, bConstraint *con, bPoseChannel **r_pchan)
static void edit_constraint_properties(wmOperatorType *ot)
void POSE_OT_ik_clear(wmOperatorType *ot)
ListBase * ED_object_pose_constraint_list(const bContext *C)
static int constraint_copy_exec(bContext *C, wmOperator *op)
static int constraint_move_up_exec(bContext *C, wmOperator *op)
void object_test_constraints(Main *bmain, Object *ob)
static int constraint_delete_exec(bContext *C, wmOperator *op)
void CONSTRAINT_OT_followpath_path_animate(wmOperatorType *ot)
void CONSTRAINT_OT_childof_set_inverse(wmOperatorType *ot)
static int constraint_type_get(Object *owner, bPoseChannel *pchan)
void CONSTRAINT_OT_objectsolver_clear_inverse(wmOperatorType *ot)
static bConstraint * edit_constraint_property_get(bContext *C, wmOperator *op, Object *ob, int type)
void CONSTRAINT_OT_childof_clear_inverse(wmOperatorType *ot)
static int constraint_apply_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int constraint_copy_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int constraint_copy_to_selected_invoke(bContext *C, wmOperator *op, const wmEvent *event)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
int RNA_int_get(PointerRNA *ptr, const char *name)
bool RNA_pointer_is_null(const PointerRNA *ptr)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
int RNA_enum_get(PointerRNA *ptr, const char *name)
const EnumPropertyItem rna_enum_constraint_type_items[]
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, int default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, int default_value, const char *ui_name, const char *ui_description)
char * RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop)
const EnumPropertyItem DummyRNA_NULL_items[]
struct bConstraintTarget * next
struct bConstraint * prev
struct bConstraint * next
struct bPoseChannel * next
int(* invoke)(struct bContext *, struct wmOperator *, const struct wmEvent *) ATTR_WARN_UNUSED_RESULT
bool(* poll)(struct bContext *) ATTR_WARN_UNUSED_RESULT
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
void WM_main_add_notifier(unsigned int type, void *reference)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
int WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))