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:
@@ -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) {
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
Reference in New Issue
Block a user