Skip to content

Commit

Permalink
Merge pull request #434 from mleotta/dev/add-import-mesh
Browse files Browse the repository at this point in the history
Add import mesh
  • Loading branch information
mleotta committed Apr 15, 2021
2 parents 16840c5 + f532381 commit 7263cd3
Show file tree
Hide file tree
Showing 9 changed files with 209 additions and 36 deletions.
3 changes: 3 additions & 0 deletions doc/release-notes/master.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,9 @@ TeleSculptor Application

* Added support for building against VTK 9.0.

* Added an option to import PLY mesh files like those exported from
TeleSculptor

* Added support for opening .ts (MPEG transport stream) video files.


Expand Down
2 changes: 1 addition & 1 deletion gui/ColorizeSurfaceOptions.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -323,7 +323,7 @@ void ColorizeSurfaceOptions::colorize()
{
this->LastColorizedFrame = colorizedFrame;

if (d->cameras->size() == 0)
if (!d->cameras || d->cameras->size() == 0)
{
d->UI.comboBoxColorDisplay->setEnabled(true);
emit colorModeChanged(d->UI.buttonGroup->checkedButton()->text());
Expand Down
75 changes: 62 additions & 13 deletions gui/MainWindow.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,10 @@ class MainWindowPrivate
const QString& description = QString(""),
int value = 0);

// If a project is active, prefix this string with the project name
// and underscore, otherwise just return the name.
QString addProjectPrefx(QString const& name) const;

void saveGeoOrigin(QString const& path);
kv::vector_3d centerLandmarks() const;
void shiftGeoOrigin(kv::vector_3d const& offset);
Expand Down Expand Up @@ -504,6 +508,18 @@ void MainWindowPrivate::shiftGeoOrigin(kv::vector_3d const& offset)
this->groundControlPointsHelper->updateViewsFromGCPs();
}

//-----------------------------------------------------------------------------
// If a project is active, prefix this string with the project name
// and underscore, otherwise just return the name.
QString MainWindowPrivate::addProjectPrefx(QString const& name) const
{
if (this->project)
{
return this->project->workingDir.dirName() + "_" + name;
}
return name;
}

//-----------------------------------------------------------------------------
void MainWindowPrivate::addTool(AbstractTool* tool, MainWindow* mainWindow)
{
Expand Down Expand Up @@ -1515,6 +1531,8 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags flags)
this, &MainWindow::openLandmarks);
connect(d->UI.actionImportGroundControlPoints, &QAction::triggered,
this, &MainWindow::openGroundControlPoints);
connect(d->UI.actionImportMesh, &QAction::triggered,
this, &MainWindow::openMesh);

connect(d->UI.actionShowWorldAxes, &QAction::toggled,
d->UI.worldView, &WorldView::setAxesVisible);
Expand Down Expand Up @@ -1568,6 +1586,8 @@ MainWindow::MainWindow(QWidget* parent, Qt::WindowFlags flags)
connect(d->UI.camera, &QAbstractSlider::valueChanged,
this, &MainWindow::setActiveFrame);

connect(d->UI.worldView, &WorldView::volumeEnabled,
this, &MainWindow::enableSaveVolume);
connect(d->UI.worldView, &WorldView::fusedMeshEnabled,
this, &MainWindow::enableSaveFusedMesh);

Expand Down Expand Up @@ -1768,6 +1788,20 @@ void MainWindow::openGroundControlPoints()
}
}

//-----------------------------------------------------------------------------
void MainWindow::openMesh()
{
auto const path = QFileDialog::getOpenFileName(
this, "Open Mesh File", QString(),
"PLY Files (*.ply);;"
"All Files (*)");

if (!path.isEmpty())
{
this->loadMesh(path);
}
}

//-----------------------------------------------------------------------------
void MainWindow::newProject()
{
Expand Down Expand Up @@ -2216,6 +2250,14 @@ void MainWindow::loadGroundControlPoints(QString const& path)
}
}

//-----------------------------------------------------------------------------
void MainWindow::loadMesh(QString const& path)
{
QTE_D();

d->UI.worldView->loadMesh(path);
}

//-----------------------------------------------------------------------------
void MainWindow::saveLandmarks()
{
Expand Down Expand Up @@ -2588,11 +2630,18 @@ void MainWindow::saveWebGLScene()
}

//-----------------------------------------------------------------------------
void MainWindow::enableSaveFusedMesh(bool state)
void MainWindow::enableSaveVolume(bool state)
{
QTE_D();

d->UI.actionExportVolume->setEnabled(state);
}

//-----------------------------------------------------------------------------
void MainWindow::enableSaveFusedMesh(bool state)
{
QTE_D();

d->UI.actionExportFusedMesh->setEnabled(state);
d->UI.actionExportFusedMeshFrameColors->setEnabled(state);
}
Expand All @@ -2602,32 +2651,32 @@ void MainWindow::saveVolume()
{
QTE_D();

auto const name = d->project->workingDir.dirName();
auto const path = QFileDialog::getSaveFileName(
this, "Export Volume", name + QString("_volume.mha"),
this, "Export Volume", d->addProjectPrefx("volume.mha"),
"MetaImage (*.mha);;"
"All Files (*)");

if (!path.isEmpty())
{
d->UI.worldView->saveVolume(path);
d->project->volumePath = d->project->getContingentRelativePath(path);
d->project->config->set_value("volume_file",
kvPath(d->project->volumePath));
d->project->write();
if (d->project)
{
d->project->volumePath = d->project->getContingentRelativePath(path);
d->project->config->set_value("volume_file",
kvPath(d->project->volumePath));
d->project->config->set_value("ROI", d->roiToString());
d->project->write();
}
}

d->project->config->set_value("ROI", d->roiToString());
}

//-----------------------------------------------------------------------------
void MainWindow::saveFusedMesh()
{
QTE_D();

auto const name = d->project->workingDir.dirName();
auto const path = QFileDialog::getSaveFileName(
this, "Export Fused Mesh", name + QString("_fused_mesh.ply"),
this, "Export Fused Mesh", d->addProjectPrefx("fused_mesh.ply"),
"PLY File (*.ply);;"
"OBJ File (*.obj);;"
"LAS File (*.las);;"
Expand Down Expand Up @@ -2656,9 +2705,9 @@ void MainWindow::saveFusedMeshFrameColors()
{
QTE_D();

auto const name = d->project->workingDir.dirName();
auto const path = QFileDialog::getSaveFileName(
this, "Export Fused Mesh Frame Colors", name + QString("_fused_mesh_frame_colors.vtp"),
this, "Export Fused Mesh Frame Colors",
d->addProjectPrefx("fused_mesh_frame_colors.vtp"),
"VTK Polydata (*.vtp);;"
"All Files (*)");

Expand Down
3 changes: 3 additions & 0 deletions gui/MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public slots:
void openTracks();
void openLandmarks();
void openGroundControlPoints();
void openMesh();

void loadProject(QString const& path);
void loadImagery(QString const& path);
Expand All @@ -88,6 +89,7 @@ public slots:
void loadTracks(QString const& path);
void loadLandmarks(QString const& path);
void loadGroundControlPoints(QString const& path);
void loadMesh(QString const& path);

void saveCameras();
void saveCameras(QString const& path, bool writeToProject = true);
Expand All @@ -109,6 +111,7 @@ public slots:
void saveWebGLScene();

void saveVolume();
void enableSaveVolume(bool);
void enableSaveFusedMesh(bool);
void saveFusedMesh();
void saveFusedMeshFrameColors();
Expand Down
11 changes: 10 additions & 1 deletion gui/MainWindow.ui
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@
<addaction name="actionImportTracks"/>
<addaction name="actionImportLandmarks"/>
<addaction name="actionImportGroundControlPoints"/>
<addaction name="actionImportMesh"/>
</widget>
<addaction name="actionNewProject"/>
<addaction name="actionOpenProject"/>
Expand Down Expand Up @@ -544,7 +545,7 @@
<string>&amp;Masks...</string>
</property>
<property name="shortcut">
<string>Ctrl+O, M</string>
<string>Ctrl+O, K</string>
</property>
</action>
<action name="actionImportCameras">
Expand Down Expand Up @@ -579,6 +580,14 @@
<string>Ctrl+O, G</string>
</property>
</action>
<action name="actionImportMesh">
<property name="text">
<string>&amp;Mesh...</string>
</property>
<property name="shortcut">
<string>Ctrl+O, M</string>
</property>
</action>
<action name="actionIgnoreMetadata">
<property name="checkable">
<bool>true</bool>
Expand Down
8 changes: 8 additions & 0 deletions gui/VolumeOptions.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,14 @@ void VolumeOptions::setCurrentFrame(kwiver::vital::frame_id_t frame)
d->colorizeSurfaceOptions->setCurrentFrame(frame);
}

//-----------------------------------------------------------------------------
void VolumeOptions::setSurfaceColored(bool enabled)
{
QTE_D();

d->UI.checkBoxColorizeSurface->setChecked(enabled);
}

//-----------------------------------------------------------------------------
bool VolumeOptions::isColorOptionsEnabled()
{
Expand Down
1 change: 1 addition & 0 deletions gui/VolumeOptions.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ class VolumeOptions : public QWidget

void setCurrentFrame(kwiver::vital::frame_id_t);

void setSurfaceColored(bool enabled);
bool isColorOptionsEnabled();

signals:
Expand Down

0 comments on commit 7263cd3

Please sign in to comment.