Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Poirier <theeth@yahoo.com>2003-11-23 23:28:35 +0300
committerMartin Poirier <theeth@yahoo.com>2003-11-23 23:28:35 +0300
commitd3563d23b7ce4b8da634a01e67660e4aa2a6d7ac (patch)
tree26a9be68cccc88cc8e7fa83d861a094062af2532 /source/blender
parentf58d256a9cd5b6a1cf920b63202e979b0e785308 (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')
-rw-r--r--source/blender/blenkernel/BKE_constraint.h1
-rw-r--r--source/blender/blenkernel/intern/constraint.c56
-rw-r--r--source/blender/src/drawobject.c2
-rw-r--r--source/blender/src/editconstraint.c5
4 files changed, 62 insertions, 2 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;
diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c
index 8fa67dbded7..6138f64c831 100644
--- a/source/blender/src/drawobject.c
+++ b/source/blender/src/drawobject.c
@@ -3716,7 +3716,7 @@ void draw_object(Base *base)
glColor3ubv(col2);
for (curcon = list->first; curcon; curcon=curcon->next){
- if ((curcon->flag & CONSTRAINT_EXPAND)&&(curcon->type!=CONSTRAINT_TYPE_NULL)){
+ if ((curcon->flag & CONSTRAINT_EXPAND)&&(curcon->type!=CONSTRAINT_TYPE_NULL)&&(constraint_has_target(curcon))){
get_constraint_target(curcon, TARGET_OBJECT, NULL, tmat, size, bsystem_time(ob, 0, (float)(G.scene->r.cfra), ob->sf));
setlinestyle(3);
glBegin(GL_LINES);
diff --git a/source/blender/src/editconstraint.c b/source/blender/src/editconstraint.c
index 4f3e4d40513..999a4d5f444 100644
--- a/source/blender/src/editconstraint.c
+++ b/source/blender/src/editconstraint.c
@@ -491,7 +491,10 @@ static short detect_constraint_loop (Object *owner, const char* substring, int d
case CONSTRAINT_TYPE_TRACKTO:
{
bTrackToConstraint *data = curcon->data;
- if (!exist_object(data->tar)) data->tar = NULL;
+ if (!exist_object(data->tar)) {
+ data->tar = NULL;
+ break;
+ }
if (typefrom != CONSTRAINT_TYPE_TRACKTO && typefrom != CONSTRAINT_TYPE_LOCKTRACK){
if (add_constraint_element (data->tar, data->subtarget, owner, substring)){