Added functionality for axonometric views in orthogrpahic projection tool
This commit is contained in:
parent
6e01e6c6e5
commit
ce5fad80dd
|
@ -56,7 +56,7 @@ using namespace std;
|
|||
|
||||
QString number_to_name(int j)
|
||||
{
|
||||
char * temp[] = {"Front","Right","Back","Left","Top","Bottom"};
|
||||
char * temp[] = {"Front","Right","Back","Left","Top","Bottom","Axonometric"};
|
||||
QString translated = QObject::tr(temp[j]);
|
||||
return translated;
|
||||
}
|
||||
|
@ -93,6 +93,44 @@ void rotate_coords(int& x, int& y, int i)
|
|||
y = t2;
|
||||
}
|
||||
|
||||
void rotate_coords(float & x, float & y, float angle)
|
||||
{
|
||||
float tx = x * cos(angle) - y * sin(angle);
|
||||
y = x * sin(angle) + y * cos(angle);
|
||||
x = tx;
|
||||
}
|
||||
|
||||
float dot(float * r, float * z)
|
||||
{
|
||||
return ( r[0]*z[0] + r[1]*z[1] + r[2]*z[2]);
|
||||
}
|
||||
|
||||
void cross(float * r, float * n, float * p)
|
||||
{
|
||||
p[0] = r[1]*n[2] - r[2]*n[1];
|
||||
p[1] = r[2]*n[0] - r[0]*n[2];
|
||||
p[2] = r[0]*n[1] - r[1]*n[0];
|
||||
}
|
||||
|
||||
void project(float * r, float * n, float * p)
|
||||
{
|
||||
// for r projected onto plane perpendicular to n
|
||||
// r x n is perpendicular to r and n (.: lies on plane)
|
||||
// then n x (r x n) is perpendicular to that and to n, is the projection
|
||||
float c[3];
|
||||
cross(r, n, c);
|
||||
cross(n, c, p);
|
||||
}
|
||||
|
||||
void normalise(float * r)
|
||||
{
|
||||
float m = 1/sqrt(r[0]*r[0] + r[1]*r[1] + r[2]*r[2]);
|
||||
r[0] *= m;
|
||||
r[1] *= m;
|
||||
r[2] *= m;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -109,8 +147,8 @@ orthoView::orthoView(std::string name, const char * targetpage, const char * sou
|
|||
x = 0;
|
||||
y = 0;
|
||||
dir = 0;
|
||||
angle = 0;
|
||||
active = true;
|
||||
axo = false;
|
||||
|
||||
Command::doCommand(Command::Doc,"App.activeDocument().addObject('Drawing::FeatureViewPart','%s')",myname.c_str());
|
||||
Command::doCommand(Command::Doc,"App.activeDocument().%s.Source = App.activeDocument().%s",myname.c_str(), sourcepart);
|
||||
|
@ -157,6 +195,7 @@ void orthoView::activate(bool state)
|
|||
|
||||
void orthoView::setDir(int i)
|
||||
{
|
||||
axo = false;
|
||||
dir = i;
|
||||
int vx = (dir == 1) - (dir == 3);
|
||||
int vy = (dir == 0) - (dir == 2);
|
||||
|
@ -176,6 +215,49 @@ void orthoView::setDir(int i)
|
|||
}
|
||||
|
||||
|
||||
void orthoView::setDir(float vx, float vy, float vz, float ang, int vert_index)
|
||||
{
|
||||
//calcCentre();
|
||||
vert[0] = 0;
|
||||
vert[1] = 0;
|
||||
vert[2] = 0;
|
||||
|
||||
switch(vert_index)
|
||||
{
|
||||
case 0:
|
||||
vert[1] = -1;
|
||||
break;
|
||||
case 1:
|
||||
vert[0] = 1;
|
||||
break;
|
||||
case 2:
|
||||
vert[1] = 1;
|
||||
break;
|
||||
case 3:
|
||||
vert[0] = -1;
|
||||
break;
|
||||
case 4:
|
||||
vert[2] = 1;
|
||||
break;
|
||||
case 5:
|
||||
vert[2] = -1;
|
||||
}
|
||||
|
||||
axo = true;
|
||||
n[0] = vx;
|
||||
n[1] = vy;
|
||||
n[2] = vz;
|
||||
angle = ang;
|
||||
setOrientation(0);
|
||||
|
||||
if (active)
|
||||
{
|
||||
Command::doCommand(Command::Doc,"App.activeDocument().%s.Direction = (%f,%f,%f)",myname.c_str(),vx,vy,vz);
|
||||
Command::doCommand(Command::Doc,"App.activeDocument().%s.Label = '%s'",myname.c_str(),number_to_name(6).toStdString().c_str());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void orthoView::setPos(float px, float py)
|
||||
{
|
||||
if (px != 0 && py !=0)
|
||||
|
@ -208,7 +290,7 @@ void orthoView::setOrientation(int orient)
|
|||
{
|
||||
orientation = orient;
|
||||
if (active)
|
||||
Command::doCommand(Command::Doc,"App.activeDocument().%s.Rotation = %d", myname.c_str(), (90*orientation+angle));
|
||||
Command::doCommand(Command::Doc,"App.activeDocument().%s.Rotation = %f", myname.c_str(), (90*orientation+angle));
|
||||
calcCentre();
|
||||
}
|
||||
|
||||
|
@ -226,6 +308,25 @@ void orthoView::calcCentre()
|
|||
float cy = mybox.CalcCenter().y;
|
||||
float cz = mybox.CalcCenter().z;
|
||||
|
||||
if (axo)
|
||||
{
|
||||
float p[3] = {cx, cy, cz};
|
||||
float n_p[3] = {n[0], -n[1], n[2]};
|
||||
float proj_p[3];
|
||||
float proj_y[3]; // will be the y axis of the projection
|
||||
float proj_x[3]; // will be the x axis of the projection
|
||||
|
||||
project(vert, n_p, proj_y);
|
||||
//project(p, n, proj_p);
|
||||
cross(proj_y, n_p, proj_x);
|
||||
normalise(proj_x);
|
||||
normalise(proj_y);
|
||||
x = -scale * dot(p, proj_x);
|
||||
y = scale * dot(p, proj_y);
|
||||
//rotate_coords(x, y, angle)
|
||||
}
|
||||
else
|
||||
{
|
||||
float coords[6][2] =
|
||||
{
|
||||
{-cx, cz}, //front
|
||||
|
@ -262,6 +363,7 @@ void orthoView::calcCentre()
|
|||
width = height;
|
||||
height = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -356,6 +458,10 @@ TaskOrthoViews::TaskOrthoViews(QWidget *parent)
|
|||
connect(ui->auto_tog, SIGNAL(stateChanged(int)), this, SLOT(toggle_auto(int)));
|
||||
connect(ui->primary, SIGNAL(activated(int)), this, SLOT(setPrimary(int)));
|
||||
|
||||
connect(ui->axoProj, SIGNAL(activated(int)), this, SLOT(axoChanged(int)));
|
||||
connect(ui->axoTop, SIGNAL(activated(int)), this, SLOT(axoTopChanged(int)));
|
||||
connect(ui->axoLeft, SIGNAL(activated(int)), this, SLOT(axoChanged(int)));
|
||||
connect(ui->flip, SIGNAL(clicked()), this, SLOT(axo_flip()));
|
||||
//these matrices contain information relating relative position on page to which view appears there, and in which orientation
|
||||
|
||||
//first matrix is for front, right, back, left. Only needs to contain positions above and below primary since in positions horizontally
|
||||
|
@ -385,6 +491,37 @@ TaskOrthoViews::TaskOrthoViews(QWidget *parent)
|
|||
map2[i][j][k] = temp2[i][j][k];
|
||||
}
|
||||
|
||||
float temp[3][6][4][4] =
|
||||
// isometric
|
||||
{{{{1,1,1,180},{-1,1,-1,180},{-1,1,1,180},{1,1,-1,180}}, // top face is the Right
|
||||
{{1,1,-1,60},{1,-1,1,240},{1,1,1,300},{1,-1,-1,120}}, // Front
|
||||
{{1,-1,-1,0},{-1,-1,1,0},{1,-1,1,0},{-1,-1,-1,0}}, // Left
|
||||
{{-1,1,1,60},{-1,-1,-1,240},{-1,-1,1,120},{-1,1,-1,300}}, // Back
|
||||
{{1,1,1,60},{1,-1,1,120},{-1,-1,1,240},{-1,1,1,300}}, // Top
|
||||
{{-1,1,-1,60},{1,1,-1,300},{1,-1,-1,240},{-1,-1,-1,120}}}, // Bottom
|
||||
|
||||
// dimetric
|
||||
{{{0.681,0.267,0.681,180},{-0.681,0.267,-0.681,180},{-0.681,0.267,0.681,180},{0.681,0.267,-0.681,180}}, // top face is the Right
|
||||
{{0.267,0.681,-0.681,0},{0.267,-0.681,0.681,0},{0.267,0.681,0.681,0},{0.267,-0.681,-0.681,0}}, // Front
|
||||
{{0.681,-0.267,-0.681,0},{-0.681,-0.267,0.681,0},{0.681,-0.267,0.681,0},{-0.681,-0.267,-0.681,0}}, // Left
|
||||
{{-0.267,0.681,0.681,180},{-0.267,-0.681,-0.681,180},{-0.267,-0.681,0.681,180},{-0.267,0.681,-0.681,180}}, // Back
|
||||
{{0.681,0.681,0.267,0},{0.681,-0.681,0.267,0},{-0.681,-0.681,0.267,0},{-0.681,0.681,0.267,0}}, // Top
|
||||
{{-0.681,0.681,-0.267,180},{0.681,0.681,-0.267,180},{0.681,-0.681,-0.267,180},{-0.681,-0.681,-0.267,180}}}, // Bottom
|
||||
|
||||
// trimetric
|
||||
{{{0.211,0.577,0.788,-98.8},{-0.211,0.577,-0.788,81.2},{-0.788,0.577,0.211,81.2},{0.788,0.577,-0.211,-98.8}}, // top face is the Right
|
||||
{{0.577,0.211,-0.788,81.2},{0.577,-0.211,0.788,-98.8},{0.577,0.788,0.211,-98.8},{0.577,-0.788,-0.211,81.2}}, // Front
|
||||
{{0.211,-0.577,-0.788,-98.8},{-0.211,-0.577,0.788,81.2},{0.788,-0.577,0.211,81.2},{-0.788,-0.577,-0.211,-98.8}}, // Left
|
||||
{{-0.577,0.211,0.788,81.2},{-0.577,-0.211,-0.788,-98.8},{-0.577,-0.788,0.211,-98.8},{-0.577,0.788,-0.211,81.2}}, // Back
|
||||
{{0.788,0.211,0.577,-98.8},{0.211,-0.788,0.577,81.2},{-0.788,-0.211,0.577,81.2},{-0.211,0.788,0.577,-98.8}}, // Top
|
||||
{{-0.788,0.211,-0.577,-98.8},{0.211,0.788,-0.577,81.2},{0.788,-0.211,-0.577,81.2},{-0.211,-0.788,-0.577,-98.8}}}}; // Bottom
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
for (int j = 0; j < 6; j++)
|
||||
for (int k = 0; k < 4; k++)
|
||||
for (int l = 0; l < 4; l++)
|
||||
axonometric[i][j][k][l] = temp[i][j][k][l];
|
||||
|
||||
//initialise variables
|
||||
|
||||
for (int i=0; i < 4; i++)
|
||||
|
@ -396,6 +533,7 @@ TaskOrthoViews::TaskOrthoViews(QWidget *parent)
|
|||
rotate = 0;
|
||||
proj = 1;
|
||||
autoscale = 1;
|
||||
axo_flipped = false;
|
||||
|
||||
//below are calculated in case autodims is deselected before these values are initialised.
|
||||
float max_dim = max(max(bbox.LengthX(), bbox.LengthY()), bbox.LengthZ());
|
||||
|
@ -437,7 +575,7 @@ void TaskOrthoViews::changeEvent(QEvent *e)
|
|||
|
||||
void TaskOrthoViews::pagesize(std::string& page_template)
|
||||
{
|
||||
/********update num_templates when adding extra templates*******************/
|
||||
// /********update num_templates when adding extra templates*******************/
|
||||
|
||||
const int num_templates = 2;
|
||||
std::string templates[num_templates] = {"A3_Landscape.svg", "A4_Landscape.svg"};
|
||||
|
@ -661,7 +799,7 @@ void TaskOrthoViews::validate_cbs()
|
|||
{
|
||||
if (!((i == 2)*(j == 2))) //don't enable the centre one!
|
||||
/********temporary if statement here, remove the following if to renable 'diagonal' checkboxes *******/
|
||||
if ((i-2) * (j-2) == 0)
|
||||
//if ((i-2) * (j-2) == 0)
|
||||
c_boxes[i][j]->setEnabled(true); //if this box's inner neighbour(s) are checked, then this one enabled
|
||||
}
|
||||
else
|
||||
|
@ -674,6 +812,7 @@ void TaskOrthoViews::validate_cbs()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void TaskOrthoViews::cb_toggled(bool toggle)
|
||||
{
|
||||
QString name = sender()->objectName().right(2);
|
||||
|
@ -693,19 +832,39 @@ void TaskOrthoViews::cb_toggled(bool toggle)
|
|||
}
|
||||
|
||||
int direction, rotation;
|
||||
view_data(dx, dy, direction, rotation);
|
||||
view_status[i][0] = 1;
|
||||
view_status[i][2] = dx;
|
||||
view_status[i][3] = dy;
|
||||
views[i]->activate(true);
|
||||
|
||||
if (abs(dx * dy) == 1)
|
||||
{
|
||||
set_axo();
|
||||
}
|
||||
else
|
||||
{
|
||||
view_data(dx, dy, direction, rotation);
|
||||
views[i]->setDir(direction);
|
||||
views[i]->setOrientation(rotation);
|
||||
}
|
||||
view_count += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (abs(dx) == 1 || abs(dy == 1))
|
||||
if (((abs(dx) == 1 || abs(dy) == 1)) && (dx*dy) == 0)
|
||||
{
|
||||
c_boxes[dx*2+2][dy*2+2]->setChecked(false);
|
||||
if (abs(dx) == 1)
|
||||
{
|
||||
c_boxes[dx+2][1]->setChecked(false);
|
||||
c_boxes[dx+2][3]->setChecked(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
c_boxes[1][dy+2]->setChecked(false);
|
||||
c_boxes[3][dy+2]->setChecked(false);
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
|
@ -837,6 +996,95 @@ void TaskOrthoViews::smooth(int i)
|
|||
Command::commitCommand();
|
||||
}
|
||||
|
||||
void TaskOrthoViews::axo_flip()
|
||||
{
|
||||
axo_flipped = !axo_flipped;
|
||||
set_axo();
|
||||
}
|
||||
|
||||
|
||||
void TaskOrthoViews::axoTopChanged(int i)
|
||||
{
|
||||
QStringList items;
|
||||
items << QString::fromUtf8("Front") << QString::fromUtf8("Right") << QString::fromUtf8("Back") << QString::fromUtf8("Left") << QString::fromUtf8("Top") << QString::fromUtf8("Bottom");
|
||||
|
||||
if (i == 0 || i == 2)
|
||||
{
|
||||
items.removeAt(0);
|
||||
items.removeAt(1);
|
||||
}
|
||||
else if (i == 1 || i == 3)
|
||||
{
|
||||
items.removeAt(1);
|
||||
items.removeAt(2);
|
||||
}
|
||||
else
|
||||
{
|
||||
items.removeAt(4);
|
||||
items.removeAt(4);
|
||||
}
|
||||
ui->axoLeft->clear();
|
||||
ui->axoLeft->addItems(items);
|
||||
set_axo();
|
||||
}
|
||||
|
||||
|
||||
void TaskOrthoViews::axoChanged(int i)
|
||||
{
|
||||
set_axo();
|
||||
}
|
||||
|
||||
|
||||
void TaskOrthoViews::set_axo()
|
||||
{
|
||||
float v[3];
|
||||
float angle;
|
||||
int proj, primary, left;
|
||||
|
||||
proj = ui->axoProj->currentIndex();
|
||||
primary = ui->axoTop->currentIndex();
|
||||
left = ui->axoLeft->currentIndex();
|
||||
|
||||
v[0] = axonometric[proj][primary][left][0];
|
||||
v[1] = axonometric[proj][primary][left][1];
|
||||
v[2] = axonometric[proj][primary][left][2];
|
||||
angle = axonometric[proj][primary][left][3];
|
||||
|
||||
if (axo_flipped && proj == 2)
|
||||
{
|
||||
int max_i = 2;
|
||||
int min_i = 2;
|
||||
float abs_v[3] = {abs(v[0]), abs(v[1]), abs(v[2])};
|
||||
|
||||
if (abs_v[0] < abs_v[1] && abs_v[0] < abs_v[2])
|
||||
min_i = 0;
|
||||
else if (abs_v[1] < abs_v[2])
|
||||
min_i = 1;
|
||||
|
||||
if (abs_v[0] > abs_v[1] && abs_v[0] > abs_v[2])
|
||||
max_i = 0;
|
||||
else if (abs_v[1] > abs_v[2])
|
||||
max_i = 1;
|
||||
|
||||
v[min_i] = ((v[min_i] > 0) - (v[min_i] < 0)) * abs_v[max_i];
|
||||
v[max_i] = ((v[max_i] > 0) - (v[max_i] < 0)) * abs_v[min_i];
|
||||
|
||||
if (((left == 0 || left == 1) && (primary == 1 || primary == 2)) ||
|
||||
((left == 2 || left == 3) && (primary == 0 || primary == 3)) ||
|
||||
((primary == 5) && (left == 0 || left == 2)) ||
|
||||
((primary == 4) && (left == 1 || left == 3)))
|
||||
{
|
||||
angle = - angle;
|
||||
}
|
||||
else
|
||||
{
|
||||
angle = (angle > 0) ? 98.8 : -81.2;
|
||||
}
|
||||
}
|
||||
views[3]->setDir(v[0],v[1],v[2], angle, primary);
|
||||
compute();
|
||||
}
|
||||
|
||||
|
||||
void TaskOrthoViews::toggle_auto(int i)
|
||||
{
|
||||
|
|
|
@ -41,6 +41,7 @@ public:
|
|||
|
||||
void activate(bool);
|
||||
void setDir(int);
|
||||
void setDir(float,float,float,float,int);
|
||||
void setPos(float = 0, float = 0);
|
||||
void setScale(float);
|
||||
void setOrientation(int);
|
||||
|
@ -61,11 +62,14 @@ private:
|
|||
std::string myname;
|
||||
Base::BoundBox3d mybox;
|
||||
int dir;
|
||||
int angle;
|
||||
float angle;
|
||||
float n[3];
|
||||
int orientation;
|
||||
float x, y;
|
||||
float pageX, pageY;
|
||||
float scale;
|
||||
bool axo;
|
||||
float vert[3];
|
||||
};
|
||||
|
||||
|
||||
|
@ -92,6 +96,9 @@ protected Q_SLOTS:
|
|||
void smooth(int);
|
||||
void toggle_auto(int);
|
||||
void data_entered();
|
||||
void axoChanged(int);
|
||||
void axoTopChanged(int);
|
||||
void axo_flip();
|
||||
|
||||
protected:
|
||||
void changeEvent(QEvent *);
|
||||
|
@ -103,6 +110,7 @@ private:
|
|||
void validate_cbs();
|
||||
void view_data(int, int, int &, int &);
|
||||
void updateSecondaries();
|
||||
void set_axo();
|
||||
|
||||
private:
|
||||
class Private;
|
||||
|
@ -114,6 +122,7 @@ private:
|
|||
|
||||
int map1[4][3][2]; //contains view directions and rotations for vertical secondary positions, for primaries 1,2,3,4
|
||||
int map2[4][3][2]; //contains view directions and rotations for H and V secondary positions, primaries 5,6
|
||||
float axonometric[3][6][4][4]; //contains view direction vectors and rotations for axonometric views
|
||||
|
||||
int view_status[4][4]; //matrix containing status of four orthoView objects (in use, axo, rel x, rel y)
|
||||
int view_count; //number of active views
|
||||
|
@ -127,6 +136,8 @@ private:
|
|||
|
||||
float horiz, vert; //centre-centre distances
|
||||
|
||||
bool axo_flipped;
|
||||
|
||||
float pagewidth, pageheight; //these are actually the available width and height, calculated in constructor.
|
||||
float pageh1, pageh2; //h1 - total usable page height, h2 - total height allowing for info box.
|
||||
int margin;
|
||||
|
|
|
@ -449,7 +449,7 @@
|
|||
</size>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<property name="enabled">
|
||||
|
@ -628,6 +628,181 @@
|
|||
<attribute name="title">
|
||||
<string>Axonometric</string>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="gridLayoutWidget">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>231</width>
|
||||
<height>196</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<item row="5" column="1">
|
||||
<widget class="QPushButton" name="flip">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Switch direction</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="axoProj">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Isometric</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Dimetric</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Trimetric</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="text">
|
||||
<string> Scale</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string> View projection</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string> Top face</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string> Left face</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="axoTop">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Front</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Right</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Back</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Left</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Top</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Bottom</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="axoLeft">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Right</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Left</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Top</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Bottom</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLineEdit" name="axoScale">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_12">
|
||||
<property name="text">
|
||||
<string> Trimetric -</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_11">
|
||||
<property name="text">
|
||||
<string> x / y</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="axoX">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="axoY">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
|
|
Loading…
Reference in New Issue
Block a user