Added Freeze transform and improved transformation dialog

This commit is contained in:
Paolo Cignoni cignoni 2007-07-24 07:20:26 +00:00
parent 2eadcc094c
commit c6cb8e3309
5 changed files with 595 additions and 351 deletions

View File

@ -22,6 +22,9 @@
/****************************************************************************
History
$Log$
Revision 1.97 2007/07/24 07:20:20 cignoni
Added Freeze transform and improved transformation dialog
Revision 1.96 2007/04/20 10:09:56 cignoni
issue on vertex selection from face selection
@ -232,7 +235,8 @@ ExtraMeshFilterPlugin::ExtraMeshFilterPlugin()
FP_REMOVE_NON_MANIFOLD<<
FP_NORMAL_EXTRAPOLATION<<
FP_CLOSE_HOLES<<
FP_TRANSFORM;
FP_FREEZE_TRANSFORM<<
FP_TRANSFORM;
FilterType tt;
@ -295,6 +299,7 @@ const QString ExtraMeshFilterPlugin::ST(FilterType filter)
case FP_REORIENT : return QString("Re-orient");
case FP_INVERT_FACES: return QString("Invert Faces");
case FP_TRANSFORM: return QString("Apply Transform");
case FP_FREEZE_TRANSFORM: return QString("Freeze Current Matrix");
case FP_REMOVE_NON_MANIFOLD: return QString("Remove Non Manifold Faces");
case FP_NORMAL_EXTRAPOLATION: return QString("Compute normals for point sets");
case FP_CLOSE_HOLES: return QString("Close Holes");
@ -338,6 +343,7 @@ const QString ExtraMeshFilterPlugin::Info(FilterType filterID)
case FP_REORIENT : return tr("Re-orient in a consistent way all the faces of the mesh");
case FP_INVERT_FACES : return tr("Invert faces orientation, flip the normal of the mesh");
case FP_TRANSFORM : return tr("Apply transformation, you can rotate, translate or scale the mesh");
case FP_FREEZE_TRANSFORM : return tr("Freeze the current transformation matrix into the coords of the vertices of the mesh");
case FP_NORMAL_EXTRAPOLATION : return tr("Compute the normals of the vertices of a mesh without exploiting the triangle connectivity, useful for dataset with no faces");
case FP_CLOSE_HOLES : return tr("Close holes smaller than a given threshold");
default : assert(0);
@ -375,6 +381,7 @@ const int ExtraMeshFilterPlugin::getRequirements(QAction *action)
case FP_REMOVE_FACES_BY_EDGE:
case FP_CLUSTERING:
case FP_TRANSFORM:
case FP_FREEZE_TRANSFORM:
case FP_NORMAL_EXTRAPOLATION:
case FP_INVERT_FACES: return 0;
case FP_QUADRIC_SIMPLIFICATION:
@ -460,7 +467,10 @@ bool ExtraMeshFilterPlugin::getParameters(QAction *action, QWidget *parent, Mesh
{
case FP_TRANSFORM:
{
transformDialog->setMesh(&m.cm);
transformDialog->setMesh(m);
transformDialog->show();
transformDialog->resize(transformDialog->size());
int continueValue = transformDialog->exec();
if (continueValue == QDialog::Rejected)
return false;
@ -477,6 +487,7 @@ bool ExtraMeshFilterPlugin::getParameters(QAction *action, QWidget *parent, Mesh
case FP_LAPLACIAN_SMOOTH:
case FP_REMOVE_NON_MANIFOLD:
case FP_NORMAL_EXTRAPOLATION:
case FP_FREEZE_TRANSFORM:
return true; // no parameters
default :assert(0);
}
@ -604,15 +615,16 @@ bool ExtraMeshFilterPlugin::applyFilter(QAction *filter, MeshModel &m, FilterPar
m.clearDataMask(MeshModel::MM_FACETOPO | MeshModel::MM_BORDERFLAG);
}
if (filter->text() == ST(FP_TRANSFORM) ) {
Matrix44f matrix= par.getMatrix44("Transform");
Log(GLLogStream::Info,
transformDialog->getLog().toAscii().data());
vcg::tri::UpdatePosition<CMeshO>::Matrix(m.cm, matrix);
if (filter->text() == ST(FP_FREEZE_TRANSFORM) ) {
vcg::tri::UpdatePosition<CMeshO>::Matrix(m.cm, m.cm.Tr);
vcg::tri::UpdateNormals<CMeshO>::PerVertexNormalizedPerFace(m.cm);
vcg::tri::UpdateBounding<CMeshO>::Box(m.cm);
m.cm.Tr.SetIdentity();
}
if (filter->text() == ST(FP_TRANSFORM) ) {
Matrix44f matrix= par.getMatrix44("Transform");
Log(GLLogStream::Info, qPrintable(transformDialog->getLog()) );
m.cm.Tr=matrix;
}

View File

@ -22,6 +22,9 @@
****************************************************************************/
/* History
$Log$
Revision 1.44 2007/07/24 07:20:18 cignoni
Added Freeze transform and improved transformation dialog
Revision 1.43 2007/04/16 09:25:29 cignoni
** big change **
Added Layers managemnt.
@ -110,6 +113,7 @@ class ExtraMeshFilterPlugin : public QObject, public MeshFilterInterface
FP_REORIENT ,
FP_INVERT_FACES,
FP_TRANSFORM,
FP_FREEZE_TRANSFORM,
FP_CLOSE_HOLES_TRIVIAL,
FP_CLOSE_HOLES
} ;
@ -133,8 +137,6 @@ class ExtraMeshFilterPlugin : public QObject, public MeshFilterInterface
protected:
// RefineDialog *refineDialog;
// DecimatorDialog *decimatorDialog;
TransformDialog *transformDialog;
GenericELDialog *genericELD;

View File

@ -26,6 +26,9 @@
/*
$Log$
Revision 1.4 2007/07/24 07:20:20 cignoni
Added Freeze transform and improved transformation dialog
Revision 1.3 2006/03/29 07:30:54 zifnab1974
use fabs instead of abs for floats, needed for gcc 3.4.5
@ -61,7 +64,7 @@ Revision 1.7 2006/01/22 16:40:38 mariolatronico
#include <vcg/complex/trimesh/update/bounding.h>
#include <QRegExp>
#include <QRegExpValidator>
#include <QtGui>
TransformDialog::TransformDialog() : QDialog() {
setupUi(this);
@ -97,6 +100,7 @@ TransformDialog::TransformDialog() : QDialog() {
connect(zScaleLE, SIGNAL(returnPressed()), this, SLOT(on_okButton_pressed()) );
connect(rotateLE, SIGNAL(returnPressed()), this, SLOT(on_okButton_pressed()) );
// connect(freezeButton, SIGNAL(buttonClicked()), this, SLOT(freeze()) );
// default to AXIS_X for rotation and Move transformation
rotateAxis = AXIS_X;
@ -106,8 +110,34 @@ TransformDialog::TransformDialog() : QDialog() {
setScale();
setRotate();
tableWidget->setColumnCount(4);
tableWidget->setRowCount(4);
tableWidget->horizontalHeader()->hide();
tableWidget->verticalHeader()->hide();
for(int i=0;i<4;i++)
{
tableWidget->setColumnWidth(i,40);
tableWidget->setRowHeight(i,18);
}
}
void TransformDialog::showEvent ( QShowEvent * event )
{
for(int i=0;i<4;i++)
{
tableWidget->setColumnWidth(i,tableWidget->width()/4 - 2);
tableWidget->setRowHeight(i,tableWidget->height()/4 - 2);
}
}
void TransformDialog::resizeEvent ( QResizeEvent * event )
{
for(int i=0;i<4;i++)
{
tableWidget->setColumnWidth(i,tableWidget->width()/4 - 2);
tableWidget->setRowHeight(i,tableWidget->height()/4 - 2);
}
}
TransformDialog::~TransformDialog() {
delete whichTransformBG;
delete rotateBG;
@ -117,14 +147,21 @@ vcg::Matrix44f& TransformDialog::getTransformation() {
return matrix;
}
void TransformDialog::setMesh(CMeshO *mesh) {
void TransformDialog::setMesh(MeshModel &m) {
matrix=m.cm.Tr;
CMeshO *mesh=&m.cm;
this->mesh = mesh;
this->bbox = mesh->bbox;
vcg::tri::UpdateBounding<CMeshO>::Box(*mesh);
minBbox = mesh->bbox.min;
maxBbox = mesh->bbox.max;
for(int ii=0;ii<4;++ii)
for(int jj=0;jj<4;++jj)
tableWidget->setItem(ii,jj,new QTableWidgetItem(QString::number(m.cm.Tr[ii][jj])) );
}
QString& TransformDialog::getLog() {
@ -329,7 +366,8 @@ void TransformDialog::on_okButton_pressed() {
//matrix = matrix * currentMatrix;
// store the current matrix as matrix because we left
// the values in the line edit widgets
matrix = currentMatrix;
if(absoluteRB->isChecked()) matrix = currentMatrix;
else matrix=matrix*currentMatrix;
accept();
}
@ -371,3 +409,8 @@ void TransformDialog::on_rotateZUpPB_clicked()
rotateDial->setValue(90);
xAxisRB->setChecked(true);
}
// Freezing means that
void TransformDialog::freeze ( )
{
}

View File

@ -26,6 +26,9 @@
/*
$Log$
Revision 1.2 2007/07/24 07:20:24 cignoni
Added Freeze transform and improved transformation dialog
Revision 1.1 2006/01/30 20:43:57 giec
Added filter dialog files
@ -115,6 +118,7 @@ private slots:
// Rotate X / Z Up push buttons: simply fill Rotate fields
void on_rotateZUpPB_clicked();
void on_rotateXUpPB_clicked();
void freeze();
public:
@ -123,9 +127,8 @@ public:
// used to compute transformation on meshfilter.cpp
Matrix44f& getTransformation();
void setMesh(CMeshO *mesh);
void setMesh(MeshModel &m);
QString& getLog();
private: // members
CMeshO *mesh;
Point3f minBbox, maxBbox; // min and max of bounding box
@ -146,6 +149,9 @@ private: // functions
void setRotate(int value = 180); //
void setScale(QString x = "1.0", QString y = "1.0", QString z = "1.0");
void resizeEvent ( QResizeEvent * event );
void showEvent ( QShowEvent * event );
};

View File

@ -1,15 +1,12 @@
<ui version="4.0" >
<author></author>
<comment></comment>
<exportmacro></exportmacro>
<class>TransformDialog</class>
<widget class="QDialog" name="TransformDialog" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>598</width>
<height>526</height>
<width>672</width>
<height>666</height>
</rect>
</property>
<property name="windowTitle" >
@ -18,287 +15,520 @@
<property name="windowIcon" >
<iconset>../../../meshlab/images/eye128.png</iconset>
</property>
<layout class="QGridLayout" >
<layout class="QVBoxLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="1" column="2" >
<widget class="QGroupBox" name="scaleBox" >
<property name="title" >
<string>Scale</string>
<item>
<layout class="QHBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="1" column="0" >
<widget class="QPushButton" name="scaleUnitPB" >
<property name="text" >
<string>Scale to unit box</string>
</property>
</widget>
</item>
<item row="0" column="0" >
<layout class="QGridLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="2" column="0" >
<widget class="QLabel" name="zScaleLBL" >
<property name="text" >
<string>Z</string>
</property>
<property name="buddy" >
<cstring>zScaleLE</cstring>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLineEdit" name="yScaleLE" />
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="xScaleLE" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="yScaleLBL" >
<property name="text" >
<string>Y</string>
</property>
<property name="buddy" >
<cstring>yScaleLE</cstring>
</property>
</widget>
</item>
<item row="0" column="0" >
<widget class="QLabel" name="xScaleLBL" >
<property name="text" >
<string>X</string>
</property>
<property name="buddy" >
<cstring>xScaleLE</cstring>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QLineEdit" name="zScaleLE" />
</item>
<item row="3" column="0" colspan="2" >
<widget class="QCheckBox" name="uniformScaleCB" >
<property name="text" >
<string>Uniform</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<property name="spacing" >
<number>6</number>
</property>
<item>
<widget class="QRadioButton" name="isRotateRB" >
<property name="text" >
<string>Rotate</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="isMoveRB" >
<property name="text" >
<string>Move</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="isScaleRB" >
<property name="text" >
<string>Scale</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="1" >
<widget class="QGroupBox" name="rotateBox" >
<property name="title" >
<string>Rotate</string>
<item>
<layout class="QHBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="1" column="0" >
<widget class="QDial" name="rotateDial" >
<property name="maximum" >
<number>359</number>
</property>
<property name="sliderPosition" >
<number>180</number>
</property>
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="invertedAppearance" >
<bool>true</bool>
</property>
<property name="invertedControls" >
<bool>true</bool>
</property>
<property name="wrapping" >
<bool>true</bool>
</property>
<property name="notchesVisible" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="5" column="0" >
<widget class="QPushButton" name="rotateZUpPB" >
<property name="text" >
<string>Rotate Z Up</string>
</property>
</widget>
</item>
<item row="4" column="0" >
<widget class="QPushButton" name="rotateXUpPB" >
<property name="text" >
<string>Rotate X Up</string>
</property>
</widget>
</item>
<item row="3" column="0" >
<widget class="QGroupBox" name="centerRotateBox" >
<property name="title" >
<string>Center</string>
</property>
<layout class="QGridLayout" >
<property name="spacing" >
<number>6</number>
</property>
<item>
<layout class="QVBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<widget class="QGroupBox" name="rotateBox" >
<property name="title" >
<string>Rotate</string>
</property>
<layout class="QVBoxLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<layout class="QHBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<layout class="QVBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<widget class="QRadioButton" name="xAxisRB" >
<property name="text" >
<string>X</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="yAxisRB" >
<property name="text" >
<string>Y</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="zAxisRB" >
<property name="text" >
<string>Z</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QDial" name="rotateDial" >
<property name="maximum" >
<number>359</number>
</property>
<property name="sliderPosition" >
<number>180</number>
</property>
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="invertedAppearance" >
<bool>true</bool>
</property>
<property name="invertedControls" >
<bool>true</bool>
</property>
<property name="wrapping" >
<bool>true</bool>
</property>
<property name="notchesVisible" >
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLineEdit" name="rotateLE" >
<property name="text" >
<string>0.0</string>
</property>
<property name="maxLength" >
<number>10</number>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="centerRotateBox" >
<property name="title" >
<string>Rotation Center</string>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="1" column="0" >
<widget class="QRadioButton" name="originRotateRB" >
<property name="text" >
<string>Origin</string>
</property>
</widget>
</item>
<item row="0" column="0" >
<widget class="QRadioButton" name="centerRotateRB" >
<property name="text" >
<string>Mesh Center</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="rotateXUpPB" >
<property name="text" >
<string>Rotate X Up</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="rotateZUpPB" >
<property name="text" >
<string>Rotate Z Up</string>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" >
<size>
<width>16</width>
<height>56</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_2" >
<property name="title" >
<string>Transformation mode</string>
</property>
<layout class="QVBoxLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<widget class="QRadioButton" name="absoluteRB" >
<property name="text" >
<string>Absolute</string>
</property>
<property name="checked" >
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="relativeRB" >
<property name="text" >
<string>Relative</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QVBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<layout class="QHBoxLayout" >
<property name="margin" >
<number>9</number>
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="0" column="0" >
<widget class="QRadioButton" name="centerRotateRB" >
<property name="text" >
<string>Mesh Center</string>
<item>
<widget class="QGroupBox" name="moveBox" >
<property name="title" >
<string>Move</string>
</property>
<layout class="QVBoxLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<layout class="QGridLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="2" column="1" >
<widget class="QLineEdit" name="zMoveLE" />
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="xMoveLE" />
</item>
<item row="2" column="0" >
<widget class="QLabel" name="zMoveLBL" >
<property name="text" >
<string>Z</string>
</property>
<property name="buddy" >
<cstring>zMoveLE</cstring>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLineEdit" name="yMoveLE" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="yMoveLBL" >
<property name="text" >
<string>Y</string>
</property>
<property name="buddy" >
<cstring>yMoveLE</cstring>
</property>
</widget>
</item>
<item row="0" column="0" >
<widget class="QLabel" name="xMoveLBL" >
<property name="text" >
<string>X</string>
</property>
<property name="buddy" >
<cstring>xMoveLE</cstring>
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QPushButton" name="mvCenterOriginPB" >
<property name="text" >
<string>Move center to origin</string>
</property>
</widget>
</item>
<item>
<spacer>
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" >
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="1" column="0" >
<widget class="QRadioButton" name="originRotateRB" >
<property name="text" >
<string>Origin</string>
<item>
<widget class="QGroupBox" name="scaleBox" >
<property name="title" >
<string>Scale</string>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="0" column="0" >
<layout class="QGridLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="2" column="0" >
<widget class="QLabel" name="zScaleLBL" >
<property name="text" >
<string>Z</string>
</property>
<property name="buddy" >
<cstring>zScaleLE</cstring>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLineEdit" name="yScaleLE" />
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="xScaleLE" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="yScaleLBL" >
<property name="text" >
<string>Y</string>
</property>
<property name="buddy" >
<cstring>yScaleLE</cstring>
</property>
</widget>
</item>
<item row="0" column="0" >
<widget class="QLabel" name="xScaleLBL" >
<property name="text" >
<string>X</string>
</property>
<property name="buddy" >
<cstring>xScaleLE</cstring>
</property>
</widget>
</item>
<item row="2" column="1" >
<widget class="QLineEdit" name="zScaleLE" />
</item>
<item row="3" column="0" colspan="2" >
<widget class="QCheckBox" name="uniformScaleCB" >
<property name="text" >
<string>Uniform</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0" >
<widget class="QPushButton" name="scaleUnitPB" >
<property name="text" >
<string>Scale to unit box</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item row="2" column="0" >
<widget class="QLineEdit" name="rotateLE" >
<property name="text" >
<string>0.0</string>
</property>
<property name="maxLength" >
<number>10</number>
</property>
</widget>
</item>
<item row="0" column="0" >
<layout class="QHBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<widget class="QRadioButton" name="xAxisRB" >
<property name="text" >
<string>X</string>
</item>
<item>
<widget class="QGroupBox" name="groupBox" >
<property name="toolTip" >
<string/>
</property>
<property name="title" >
<string>Current Transformation Matrix</string>
</property>
<layout class="QVBoxLayout" >
<property name="margin" >
<number>4</number>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="yAxisRB" >
<property name="text" >
<string>Y</string>
<property name="spacing" >
<number>3</number>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="zAxisRB" >
<property name="text" >
<string>Z</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<item>
<widget class="QTableWidget" name="tableWidget" >
<property name="font" >
<font>
<pointsize>9</pointsize>
</font>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<layout class="QGridLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="1" column="0" >
<widget class="QLabel" name="bboxMaxLBL" >
<property name="sizePolicy" >
<sizepolicy>
<hsizetype>5</hsizetype>
<vsizetype>5</vsizetype>
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>Bounding Box Max</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QLabel" name="bboxValueMinLBL" >
<property name="text" >
<string>bboxValueMinLBL</string>
</property>
</widget>
</item>
<item row="0" column="0" >
<widget class="QLabel" name="bboxMinLBL" >
<property name="text" >
<string>Bounding Box Min</string>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLabel" name="bboxValueMaxLBL" >
<property name="sizePolicy" >
<sizepolicy>
<hsizetype>5</hsizetype>
<vsizetype>5</vsizetype>
<horstretch>2</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>bboxValueMaxLBL</string>
</property>
</widget>
</item>
<item row="2" column="0" >
<spacer>
<property name="orientation" >
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" >
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</item>
</layout>
</item>
<item row="1" column="0" >
<widget class="QGroupBox" name="moveBox" >
<property name="title" >
<string>Move</string>
</property>
<layout class="QGridLayout" >
<property name="margin" >
<number>9</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="1" column="0" >
<widget class="QPushButton" name="mvCenterOriginPB" >
<property name="text" >
<string>Move center to origin</string>
</property>
</widget>
</item>
<item row="0" column="0" >
<layout class="QGridLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item row="2" column="1" >
<widget class="QLineEdit" name="zMoveLE" />
</item>
<item row="0" column="1" >
<widget class="QLineEdit" name="xMoveLE" />
</item>
<item row="2" column="0" >
<widget class="QLabel" name="zMoveLBL" >
<property name="text" >
<string>Z</string>
</property>
<property name="buddy" >
<cstring>zMoveLE</cstring>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLineEdit" name="yMoveLE" />
</item>
<item row="1" column="0" >
<widget class="QLabel" name="yMoveLBL" >
<property name="text" >
<string>Y</string>
</property>
<property name="buddy" >
<cstring>yMoveLE</cstring>
</property>
</widget>
</item>
<item row="0" column="0" >
<widget class="QLabel" name="xMoveLBL" >
<property name="text" >
<string>X</string>
</property>
<property name="buddy" >
<cstring>xMoveLE</cstring>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="3" column="0" colspan="3" >
<item>
<layout class="QHBoxLayout" >
<property name="margin" >
<number>0</number>
@ -320,93 +550,44 @@
</spacer>
</item>
<item>
<widget class="QPushButton" name="okButton" >
<widget class="QPushButton" name="applyButton" >
<property name="text" >
<string>OK</string>
<string>Apply</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="cancelButton" >
<widget class="QPushButton" name="closeButton" >
<property name="text" >
<string>Cancel</string>
<string>Close</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="3" >
<layout class="QGridLayout" >
<property name="margin" >
<number>0</number>
<item>
<widget class="QTextBrowser" name="textBrowser" >
<property name="font" >
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="spacing" >
<number>6</number>
<property name="html" >
<string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;style type="text/css">
p, li { white-space: pre-wrap; }
&lt;/style>&lt;/head>&lt;body style=" font-family:'Lucida Grande'; font-size:11pt; font-weight:400; font-style:normal; text-decoration:none;">
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:13pt;">&lt;span style=" font-size:11pt;">MeshLab keeps for each layer/mesh a current trasformation matrix &lt;/span>&lt;span style=" font-size:11pt; font-weight:600; font-style:italic;">T&lt;/span>&lt;span style=" font-size:11pt;">: &lt;/span>&lt;span style=" font-size:11pt; font-weight:600; font-style:italic;">T&lt;/span>&lt;span style=" font-size:11pt;"> is used in rendering and alignment. The &lt;/span>&lt;span style=" font-size:11pt; font-weight:600; font-style:italic;">T&lt;/span>&lt;span style=" font-size:11pt;"> matrix is usually &lt;/span>&lt;span style=" font-size:11pt; font-weight:600; font-style:italic;">NOT&lt;/span>&lt;span style=" font-size:11pt;"> saved when you export the mesh into a generic format.&lt;/span>&lt;/p>
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">With this dialog you can change &lt;span style=" font-weight:600; font-style:italic;">T&lt;/span> &lt;/p>
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">When the transformation mode is set to relative all the computations involves the &lt;span style=" font-weight:600; font-style:italic;">T&lt;/span> Matrix (e.g. the &lt;/p>
&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>
&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">To actually change the coords of the mesh and baking the matrix into the mesh itself you have to use the &lt;span style=" font-weight:600; font-style:italic;">freeze&lt;/span> filter (in that case &lt;span style=" font-weight:600; font-style:italic;">T&lt;/span> become the Identity).&lt;/p>&lt;/body>&lt;/html></string>
</property>
<item row="1" column="0" >
<widget class="QLabel" name="bboxMaxLBL" >
<property name="text" >
<string>Bounding Box Max</string>
</property>
</widget>
</item>
<item row="0" column="0" >
<widget class="QLabel" name="bboxMinLBL" >
<property name="text" >
<string>Bounding Box Min</string>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QLabel" name="bboxValueMaxLBL" >
<property name="text" >
<string>bboxValueMaxLBL</string>
</property>
</widget>
</item>
<item row="0" column="1" >
<widget class="QLabel" name="bboxValueMinLBL" >
<property name="text" >
<string>bboxValueMinLBL</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="0" colspan="3" >
<layout class="QHBoxLayout" >
<property name="margin" >
<number>0</number>
</property>
<property name="spacing" >
<number>6</number>
</property>
<item>
<widget class="QRadioButton" name="isMoveRB" >
<property name="text" >
<string>Move</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="isRotateRB" >
<property name="text" >
<string>Rotate</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="isScaleRB" >
<property name="text" >
<string>Scale</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<pixmapfunction></pixmapfunction>
<tabstops>
<tabstop>isMoveRB</tabstop>
<tabstop>isRotateRB</tabstop>
@ -418,7 +599,7 @@
<resources/>
<connections>
<connection>
<sender>cancelButton</sender>
<sender>closeButton</sender>
<signal>clicked()</signal>
<receiver>TransformDialog</receiver>
<slot>reject()</slot>