Skip to content

Commit a8542b3

Browse files
author
Alexander Schiewe
committed
Add checkbox to the mesh transform dialog that allows to transform all meshes at once.
1 parent 78c0dc9 commit a8542b3

File tree

4 files changed

+100
-19
lines changed

4 files changed

+100
-19
lines changed

ImageVis3D/UI/ImageVis3D_WindowHandling.cpp

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,14 +1045,28 @@ void MainWindow::SetMeshScaleAndBias() {
10451045
void MainWindow::ApplMeshTransform(ScaleAndBiasDlg* sender) {
10461046
if (!m_pActiveRenderWin || !sender) return;
10471047

1048-
sender->m_pMesh->ScaleAndBias(sender->scaleVec, sender->biasVec);
1048+
if (sender->GetApplyAll()) {
1049+
auto meshes = m_pActiveRenderWin->GetRendererMeshes();
1050+
for (size_t i = 0; i < meshes.size(); ++i) {
1051+
meshes[i]->ScaleAndBias(sender->scaleVec, sender->biasVec);
1052+
}
1053+
} else {
1054+
sender->m_pMesh->ScaleAndBias(sender->scaleVec, sender->biasVec);
1055+
}
10491056
m_pActiveRenderWin->RendererSchedule3DWindowRedraws();
10501057
}
10511058

10521059
void MainWindow::ApplyMatrixMeshTransform(ScaleAndBiasDlg* sender) {
10531060
if (!m_pActiveRenderWin || !sender) return;
10541061

1055-
sender->m_pMesh->Transform(sender->GetExpertTransform());
1062+
if (sender->GetApplyAll()) {
1063+
auto meshes = m_pActiveRenderWin->GetRendererMeshes();
1064+
for (size_t i = 0; i < meshes.size(); ++i) {
1065+
meshes[i]->Transform(sender->GetExpertTransform());
1066+
}
1067+
} else {
1068+
sender->m_pMesh->Transform(sender->GetExpertTransform());
1069+
}
10561070
m_pActiveRenderWin->RendererSchedule3DWindowRedraws();
10571071
}
10581072

@@ -1062,8 +1076,16 @@ void MainWindow::RestoreMeshTransform(ScaleAndBiasDlg* sender) {
10621076
LuaClassInstance ds = m_pActiveRenderWin->GetRendererDataset();
10631077
vector<shared_ptr<Mesh>> meshes = ss->cexecRet<vector<shared_ptr<Mesh>>>(
10641078
ds.fqName() + ".getMeshes");
1065-
const shared_ptr<Mesh> m = meshes[sender->m_index];
1066-
m_pActiveRenderWin->RendererReloadMesh(sender->m_index, m);
1079+
1080+
if (sender->GetApplyAll()) {
1081+
for (size_t i = 0; i < meshes.size(); ++i) {
1082+
const shared_ptr<Mesh> m = meshes[i];
1083+
m_pActiveRenderWin->RendererReloadMesh(i, m);
1084+
}
1085+
} else {
1086+
const shared_ptr<Mesh> m = meshes[sender->m_index];
1087+
m_pActiveRenderWin->RendererReloadMesh(sender->m_index, m);
1088+
}
10671089
m_pActiveRenderWin->RendererSchedule3DWindowRedraws();
10681090
}
10691091

@@ -1078,21 +1100,44 @@ void MainWindow::SaveMeshTransform(ScaleAndBiasDlg* sender) {
10781100
pleaseWait.SetText("Saving transformation to UVF file...");
10791101
pleaseWait.AttachLabel(&m_MasterController);
10801102

1081-
const FLOATMATRIX4& m = m_pActiveRenderWin->GetRendererMeshes()[sender->m_index]->GetTransformFromOriginal();
1082-
const FLOATVECTOR4& c = m_pActiveRenderWin->GetRendererMeshes()[sender->m_index]->GetDefaultColor();
1083-
10841103
m_pActiveRenderWin->SetDatasetIsInvalid(true);
10851104

1086-
if (!ss->cexecRet<bool>(ds.fqName() + ".geomTransformToFile",
1087-
static_cast<size_t>(sender->m_index), m, c)) {
1105+
if (sender->GetApplyAll()) {
1106+
auto meshes = m_pActiveRenderWin->GetRendererMeshes();
1107+
bool error = false;
1108+
for (size_t i = 0; i < meshes.size(); ++i) {
1109+
const FLOATMATRIX4& m = meshes[i]->GetTransformFromOriginal();
1110+
const FLOATVECTOR4& c = meshes[i]->GetDefaultColor();
1111+
1112+
if (!ss->cexecRet<bool>(ds.fqName() + ".geomTransformToFile", i, m, c)) {
1113+
error = true;
1114+
break;
1115+
} else {
1116+
meshes[i]->DeleteTransformFromOriginal();
1117+
}
1118+
}
10881119
pleaseWait.close();
1089-
ShowCriticalDialog("Transform Save Failed.",
1090-
"Could not save geometry transform to the UVF file, "
1091-
"maybe the file is write protected? For details please "
1092-
"check the debug log ('Help | Debug Window').");
1120+
if (error) {
1121+
ShowCriticalDialog("Transform Save Failed.",
1122+
"Could not save geometry transform to the UVF file, "
1123+
"maybe the file is write protected? For details please "
1124+
"check the debug log ('Help | Debug Window').");
1125+
}
10931126
} else {
1094-
m_pActiveRenderWin->GetRendererMeshes()[sender->m_index]->DeleteTransformFromOriginal();
1095-
pleaseWait.close();
1127+
const FLOATMATRIX4& m = m_pActiveRenderWin->GetRendererMeshes()[sender->m_index]->GetTransformFromOriginal();
1128+
const FLOATVECTOR4& c = m_pActiveRenderWin->GetRendererMeshes()[sender->m_index]->GetDefaultColor();
1129+
1130+
if (!ss->cexecRet<bool>(ds.fqName() + ".geomTransformToFile",
1131+
static_cast<size_t>(sender->m_index), m, c)) {
1132+
pleaseWait.close();
1133+
ShowCriticalDialog("Transform Save Failed.",
1134+
"Could not save geometry transform to the UVF file, "
1135+
"maybe the file is write protected? For details please "
1136+
"check the debug log ('Help | Debug Window').");
1137+
} else {
1138+
m_pActiveRenderWin->GetRendererMeshes()[sender->m_index]->DeleteTransformFromOriginal();
1139+
pleaseWait.close();
1140+
}
10961141
}
10971142

10981143
m_pActiveRenderWin->SetDatasetIsInvalid(false);

ImageVis3D/UI/ScaleAndBiasDlg.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,11 @@ void ScaleAndBiasDlg::ToggleExpertView() {
233233
resize(QSize(0,0));
234234
}
235235

236-
FLOATMATRIX4 ScaleAndBiasDlg::GetExpertTransform() {
236+
bool ScaleAndBiasDlg::GetApplyAll() const {
237+
return checkBox_applyAll->isChecked();
238+
}
239+
240+
FLOATMATRIX4 ScaleAndBiasDlg::GetExpertTransform() const {
237241
FLOATMATRIX4 m;
238242
m.m11 =float(atof(lineEdit_m11->text().toAscii()));
239243
m.m21 =float(atof(lineEdit_m21->text().toAscii()));

ImageVis3D/UI/ScaleAndBiasDlg.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ class ScaleAndBiasDlg : public QDialog, protected Ui_ScaleAndBiasDlg
6262
FLOATVECTOR3 scaleVec;
6363
FLOATVECTOR3 biasVec;
6464

65-
FLOATMATRIX4 GetExpertTransform();
65+
bool GetApplyAll() const;
66+
FLOATMATRIX4 GetExpertTransform() const;
6667
void SetExpertTransform(const FLOATMATRIX4& m);
6768

6869
size_t m_index;

ImageVis3D/UI/UI/ScaleAndBiasDlg.ui

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
<rect>
1010
<x>0</x>
1111
<y>0</y>
12-
<width>457</width>
13-
<height>631</height>
12+
<width>471</width>
13+
<height>637</height>
1414
</rect>
1515
</property>
1616
<property name="contextMenuPolicy">
@@ -792,22 +792,47 @@
792792
<property name="margin">
793793
<number>0</number>
794794
</property>
795+
<item>
796+
<widget class="QCheckBox" name="checkBox_applyAll">
797+
<property name="text">
798+
<string>Apply option to all meshes</string>
799+
</property>
800+
</widget>
801+
</item>
795802
<item>
796803
<widget class="QPushButton" name="pushButton_Save">
804+
<property name="minimumSize">
805+
<size>
806+
<width>96</width>
807+
<height>0</height>
808+
</size>
809+
</property>
797810
<property name="text">
798811
<string>Save To File</string>
799812
</property>
800813
</widget>
801814
</item>
802815
<item>
803816
<widget class="QPushButton" name="pushButton_Restore">
817+
<property name="minimumSize">
818+
<size>
819+
<width>96</width>
820+
<height>0</height>
821+
</size>
822+
</property>
804823
<property name="text">
805824
<string>Restore From File</string>
806825
</property>
807826
</widget>
808827
</item>
809828
<item>
810829
<widget class="QPushButton" name="pushButton_apply">
830+
<property name="minimumSize">
831+
<size>
832+
<width>96</width>
833+
<height>0</height>
834+
</size>
835+
</property>
811836
<property name="text">
812837
<string>Apply</string>
813838
</property>
@@ -850,6 +875,12 @@
850875
</item>
851876
<item>
852877
<widget class="QPushButton" name="pushButton_close">
878+
<property name="minimumSize">
879+
<size>
880+
<width>96</width>
881+
<height>0</height>
882+
</size>
883+
</property>
853884
<property name="text">
854885
<string>Close</string>
855886
</property>

0 commit comments

Comments
 (0)