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.
This commit is contained in:
2003-11-23 20:28:35 +00:00
parent f58d256a9c
commit d3563d23b7
4 changed files with 62 additions and 2 deletions

View File

@@ -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); 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); struct bConstraintChannel *find_constraint_channel (ListBase *list, const char *name);
void free_constraint_channels (ListBase *chanbase); void free_constraint_channels (ListBase *chanbase);
char constraint_has_target (struct bConstraint *con);
/* Constraint target/owner types */ /* Constraint target/owner types */
#define TARGET_OBJECT 1 // string is "" #define TARGET_OBJECT 1 // string is ""

View File

@@ -70,6 +70,62 @@ static void constraint_target_to_mat4 (Object *ob, const char *substring, float
/* Functions */ /* 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){ void unique_constraint_name (bConstraint *con, ListBase *list){
char tempname[64]; char tempname[64];
int number; int number;

View File

@@ -3716,7 +3716,7 @@ void draw_object(Base *base)
glColor3ubv(col2); glColor3ubv(col2);
for (curcon = list->first; curcon; curcon=curcon->next){ 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)); get_constraint_target(curcon, TARGET_OBJECT, NULL, tmat, size, bsystem_time(ob, 0, (float)(G.scene->r.cfra), ob->sf));
setlinestyle(3); setlinestyle(3);
glBegin(GL_LINES); glBegin(GL_LINES);

View File

@@ -491,7 +491,10 @@ static short detect_constraint_loop (Object *owner, const char* substring, int d
case CONSTRAINT_TYPE_TRACKTO: case CONSTRAINT_TYPE_TRACKTO:
{ {
bTrackToConstraint *data = curcon->data; 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 (typefrom != CONSTRAINT_TYPE_TRACKTO && typefrom != CONSTRAINT_TYPE_LOCKTRACK){
if (add_constraint_element (data->tar, data->subtarget, owner, substring)){ if (add_constraint_element (data->tar, data->subtarget, owner, substring)){