diff options
author | Martin Poirier <theeth@yahoo.com> | 2003-11-23 23:28:35 +0300 |
---|---|---|
committer | Martin Poirier <theeth@yahoo.com> | 2003-11-23 23:28:35 +0300 |
commit | d3563d23b7ce4b8da634a01e67660e4aa2a6d7ac (patch) | |
tree | 26a9be68cccc88cc8e7fa83d861a094062af2532 /source/blender/blenkernel | |
parent | f58d256a9cd5b6a1cf920b63202e979b0e785308 (diff) |
No line for constraint without target
Code notes:
The constraint_has_target can be used to test if a constraint has a target at all.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_constraint.h | 1 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/constraint.c | 56 |
2 files changed, 57 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_constraint.h b/source/blender/blenkernel/BKE_constraint.h index 0a878d93ebe..6570f547e48 100644 --- a/source/blender/blenkernel/BKE_constraint.h +++ b/source/blender/blenkernel/BKE_constraint.h @@ -55,6 +55,7 @@ void do_constraint_channels (struct ListBase *conbase, struct ListBase *chanbase short get_constraint_target (struct bConstraint *con, short ownertype, void *ownerdata, float mat[][4], float size[3], float time); struct bConstraintChannel *find_constraint_channel (ListBase *list, const char *name); void free_constraint_channels (ListBase *chanbase); +char constraint_has_target (struct bConstraint *con); /* Constraint target/owner types */ #define TARGET_OBJECT 1 // string is "" diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 10e29759347..9e9a0c51405 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -70,6 +70,62 @@ static void constraint_target_to_mat4 (Object *ob, const char *substring, float /* Functions */ +char constraint_has_target (bConstraint *con) { + switch (con->type){ + case CONSTRAINT_TYPE_TRACKTO: + { + bTrackToConstraint *data = con->data; + if (data->tar) + return 1; + } + break; + case CONSTRAINT_TYPE_KINEMATIC: + { + bKinematicConstraint *data = con->data; + if (data->tar) + return 1; + } + break; + case CONSTRAINT_TYPE_FOLLOWPATH: + { + bFollowPathConstraint *data = con->data; + if (data->tar) + return 1; + } + break; + case CONSTRAINT_TYPE_ROTLIKE: + { + bRotateLikeConstraint *data = con->data; + if (data->tar) + return 1; + } + break; + case CONSTRAINT_TYPE_LOCLIKE: + { + bLocateLikeConstraint *data = con->data; + if (data->tar) + return 1; + } + break; + case CONSTRAINT_TYPE_ACTION: + { + bActionConstraint *data = con->data; + if (data->tar) + return 1; + } + break; + case CONSTRAINT_TYPE_LOCKTRACK: + { + bLockTrackConstraint *data = con->data; + if (data->tar) + return 1; + } + break; + } + // Unknown types or CONSTRAINT_TYPE_NULL or no target + return 0; +} + void unique_constraint_name (bConstraint *con, ListBase *list){ char tempname[64]; int number; |