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:
@@ -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 ""
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)){
|
||||||
|
|||||||
Reference in New Issue
Block a user