#include #include #include #include #include #include #include #include #include #include #include #include "cameras.h" #include "./ui/cameradialog.h" #include "profile.h" #include "./ui/mainwindow.h" #include "./ui/profiledialog.h" #include "imagepipeline.h" const char* organziation = "UVOS"; const char* application = "UVOS"; const char* version = "UVOS"; std::vector showCameraSelectionDialog(bool* accepted = nullptr) { std::vector ret; CameraDialog diag(cam::Camera::getAvailableCameras()); diag.show(); if(diag.exec() == QDialog::Accepted) { ret = diag.getDescriptions(); if(accepted) *accepted = true; } else if(accepted) { *accepted = false; } return ret; } void showProfileDialog(Cameras* cameras) { qDebug()<<__FUNCTION__; cameras->stop(); ProfileDialog diag(cameras); diag.show(); diag.exec(); } int main(int argc, char *argv[]) { QApplication a(argc, argv); QCoreApplication::setOrganizationName("UVOS"); QCoreApplication::setOrganizationDomain("uvos.xyz"); QCoreApplication::setApplicationName("LubircantThiknessMapperUi"); QCoreApplication::setApplicationVersion("0.1"); QSplashScreen splash(QPixmap(":/images/splash.png")); splash.show(); QDir().mkpath(Profile::profileLocation()); QDir().mkpath(CameraSetup::camerasLocation()); qRegisterMetaType("cv::Mat"); qRegisterMetaType("size_t"); qRegisterMetaType("Image"); QSettings settings(QSettings::IniFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName()); uvosled led; int uvosledRet = uvosled_connect(&led); if(uvosledRet >= 0) { uvosled_poweron(&led); // Give cameras some time to power on // TODO: figure out how to do this better sleep(10); } Cameras cameras(uvosledRet < 0 ? nullptr : &led); ImagePipeline pipe(&cameras); MainWindow w; QObject::connect(&cameras, &Cameras::cameraAdded, &w, &MainWindow::addCamera); QObject::connect(&cameras, &Cameras::cameraRemoved, &w, &MainWindow::removeCamera); QObject::connect(&w, &MainWindow::sigCapture, [&cameras](){cameras.start(); cameras.trigger();}); QObject::connect(&w, &MainWindow::sigChooseCameras, [&cameras]() { bool accepted; std::vector descs = showCameraSelectionDialog(&accepted); if(accepted) cameras.setCameras(descs); }); QObject::connect(&w, &MainWindow::sigEditProfiles, [&cameras, &w](){showProfileDialog(&cameras); w.refreshProfiles();}); QObject::connect(&pipe, &ImagePipeline::sigResult, w.mainImageViewer(), &CvImageViewer::setImage, Qt::QueuedConnection); QObject::connect(&w, &MainWindow::sigProfile, [&pipe](QString name) { Profile profile; profile.load(name); pipe.setProfile(profile); }); cameras.load(settings); splash.hide(); w.show(); if(uvosledRet < 0) QMessageBox::warning(&w, "UVOS LED", "Can not connect to the UVOS LED device"); if(cameras.getCameras().empty()) { QMessageBox::information(&w, "Cameras", "No cameras configured, please choose at least one camera."); cameras.setCameras(showCameraSelectionDialog()); } pipe.setProfile(w.getProfileName()); int ret = a.exec(); cameras.store(settings); if(uvosledRet >= 0) uvosled_poweroff(&led); return ret; }