Toggle between Connected and Normal PET.

Alt-C during transform (hotkey subject to change)

No visual clue right now other than what is transformed and it gets resetted everytime (not kept as a global flag).

So, still a lot to do regarding that.
This commit is contained in:
2005-04-07 18:28:41 +00:00
parent 17db0f5cd5
commit dac6c90742
3 changed files with 41 additions and 14 deletions

View File

@@ -128,15 +128,22 @@ int LastMode = TFM_TRANSLATION;
/* ************************** Functions *************************** */ /* ************************** Functions *************************** */
static void qsort_trans_data(TransData *head, TransData *tail) { static void qsort_trans_data(TransInfo *t, TransData *head, TransData *tail) {
TransData pivot = *head; TransData pivot = *head;
TransData *ihead = head; TransData *ihead = head;
TransData *itail = tail; TransData *itail = tail;
short connected = t->flag & T_PROP_CONNECTED;
while (head < tail) while (head < tail)
{ {
while ((tail->dist >= pivot.dist) && (head < tail)) if (connected) {
tail--; while ((tail->dist >= pivot.dist) && (head < tail))
tail--;
}
else {
while ((tail->rdist >= pivot.rdist) && (head < tail))
tail--;
}
if (head != tail) if (head != tail)
{ {
@@ -144,8 +151,14 @@ static void qsort_trans_data(TransData *head, TransData *tail) {
head++; head++;
} }
while ((head->dist <= pivot.dist) && (head < tail)) if (connected) {
head++; while ((head->dist <= pivot.dist) && (head < tail))
head++;
}
else {
while ((head->rdist <= pivot.rdist) && (head < tail))
head++;
}
if (head != tail) if (head != tail)
{ {
@@ -156,10 +169,10 @@ static void qsort_trans_data(TransData *head, TransData *tail) {
*head = pivot; *head = pivot;
if (ihead < head) { if (ihead < head) {
qsort_trans_data(ihead, head-1); qsort_trans_data(t, ihead, head-1);
} }
if (itail > head) { if (itail > head) {
qsort_trans_data(head+1, itail); qsort_trans_data(t, head+1, itail);
} }
} }
@@ -171,7 +184,7 @@ static void sort_trans_data_dist(TransInfo *t) {
start++; start++;
i++; i++;
} }
qsort_trans_data(start, t->data + t->total - 1); qsort_trans_data(t, start, t->data + t->total - 1);
} }
static void sort_trans_data(TransInfo *t) static void sort_trans_data(TransInfo *t)
@@ -635,7 +648,7 @@ static void calc_distanceCurveVerts(TransData *head, TransData *tail) {
} }
} }
else { else {
td->dist = 1000000.0f; td->dist = MAXFLOAT;
td->flag |= TD_NOTCONNECTED; td->flag |= TD_NOTCONNECTED;
} }
} }
@@ -1059,7 +1072,7 @@ static void createTransEditVerts(TransInfo *t)
} }
else { else {
tob->flag |= TD_NOTCONNECTED; tob->flag |= TD_NOTCONNECTED;
tob->dist = 10000000.0f; tob->dist = MAXFLOAT;
} }
} }
@@ -1750,8 +1763,16 @@ void Transform(int mode, int context)
Trans.redraw = 1; Trans.redraw = 1;
break; break;
case CKEY: case CKEY:
stopConstraint(&Trans); if (G.qual & LR_ALTKEY) {
Trans.redraw = 1; Trans.flag ^= T_PROP_CONNECTED;
sort_trans_data_dist(&Trans);
calculatePropRatio(&Trans);
Trans.redraw= 1;
}
else {
stopConstraint(&Trans);
Trans.redraw = 1;
}
break; break;
case XKEY: case XKEY:
if ((Trans.flag & T_NO_CONSTRAINT)==0) { if ((Trans.flag & T_NO_CONSTRAINT)==0) {

View File

@@ -164,7 +164,8 @@ typedef struct TransInfo {
#define T_NULL_ONE 512 #define T_NULL_ONE 512
#define T_NO_ZERO 1024 #define T_NO_ZERO 1024
#define T_PROP_EDIT 2048 #define T_PROP_EDIT 2048
#define T_PROP_CONNECTED 4096
/* transinfo->con->mode */ /* transinfo->con->mode */

View File

@@ -722,6 +722,7 @@ void calculatePropRatio(TransInfo *t)
TransData *td = t->data; TransData *td = t->data;
int i; int i;
float dist; float dist;
short connected = t->flag & T_PROP_CONNECTED;
extern int prop_mode; extern int prop_mode;
if (t->flag & T_PROP_EDIT) { if (t->flag & T_PROP_EDIT) {
@@ -729,7 +730,11 @@ void calculatePropRatio(TransInfo *t)
if (td->flag & TD_SELECTED) { if (td->flag & TD_SELECTED) {
td->factor = 1.0f; td->factor = 1.0f;
} }
else if (td->flag & TD_NOTCONNECTED || td->dist > t->propsize) { else if ((connected &&
(td->flag & TD_NOTCONNECTED || td->dist > t->propsize))
||
(connected == 0 &&
td->rdist > t->propsize)) {
/* /*
The elements are sorted according to their dist member in the array, The elements are sorted according to their dist member in the array,
that means we can stop when it finds one element outside of the propsize. that means we can stop when it finds one element outside of the propsize.