731 lines
31 KiB
Python
731 lines
31 KiB
Python
# Class for settings editing UI
|
|
import os
|
|
import pydoc
|
|
import shutil
|
|
import sys
|
|
import time
|
|
from configparser import ConfigParser
|
|
from datetime import datetime
|
|
from os import path
|
|
|
|
import Metashape
|
|
from PySide2 import QtCore, QtGui, QtWidgets
|
|
from PySide2.QtCore import *
|
|
from PySide2.QtGui import *
|
|
from PySide2.QtWidgets import *
|
|
|
|
import AutoFTG.autoftg_main as autoftg_main
|
|
from AutoFTG.qtresources_rc2 import *
|
|
|
|
selected_camera = None
|
|
|
|
class Ui_DialogAddEditCam(QtWidgets.QDialog):
|
|
def __init__(self, parent, camnew, camname):
|
|
global camOrigName
|
|
camOrigName = camname
|
|
QtWidgets.QDialog.__init__(self, parent)
|
|
self.setObjectName(u"DialogAddEditCam")
|
|
appIcon = QIcon()
|
|
appIcon.addFile(u":/icons/AutoFTG-appicon.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.setWindowIcon(appIcon)
|
|
self.resize(480, 270)
|
|
sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
|
sizePolicy.setHorizontalStretch(0)
|
|
sizePolicy.setVerticalStretch(0)
|
|
sizePolicy.setHeightForWidth(self.sizePolicy().hasHeightForWidth())
|
|
self.setSizePolicy(sizePolicy)
|
|
self.setMinimumSize(QSize(480, 270))
|
|
self.setMaximumSize(QSize(480, 270))
|
|
font = QFont()
|
|
font.setFamily(u"Segoe UI")
|
|
font.setPointSize(10)
|
|
self.setFont(font)
|
|
self.setWindowTitle(u"Add/Edit Camera")
|
|
appIcon = QIcon()
|
|
appIcon.addFile(u":/icons/AutoFTG-appicon.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.setWindowIcon(appIcon)
|
|
self.gridLayoutWidget = QWidget(self)
|
|
self.gridLayoutWidget.setObjectName(u"gridLayoutWidget")
|
|
self.gridLayoutWidget.setGeometry(QRect(10, 10, 461, 251))
|
|
self.gridLayout = QGridLayout(self.gridLayoutWidget)
|
|
self.gridLayout.setSpacing(5)
|
|
self.gridLayout.setContentsMargins(10, 10, 10, 10)
|
|
self.gridLayout.setObjectName(u"gridLayout")
|
|
self.gridLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.comboBox_2 = QComboBox(self.gridLayoutWidget)
|
|
icon1 = QIcon()
|
|
icon1.addFile(u":/icons/icons8-camera-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox_2.addItem(icon1, u"Standard")
|
|
icon2 = QIcon()
|
|
icon2.addFile(u":/icons/icons8-slr-small-lens-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox_2.addItem(icon2, u"DSLR")
|
|
icon3 = QIcon()
|
|
icon3.addFile(u":/icons/icons8-camera-on-tripod-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox_2.addItem(icon3, u"Special")
|
|
icon4 = QIcon()
|
|
icon4.addFile(u":/icons/icons8-quadcopter-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox_2.addItem(icon4, u"Drone")
|
|
icon5 = QIcon()
|
|
icon5.addFile(u":/icons/icons8-touchscreen-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox_2.addItem(icon5, u"SmartPhone")
|
|
icon6 = QIcon()
|
|
icon6.addFile(u":/icons/icons8-gopro-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox_2.addItem(icon6, u"SportCam")
|
|
self.comboBox_2.setObjectName(u"comboBox_2")
|
|
self.comboBox_2.setFont(font)
|
|
self.comboBox_2.setIconSize(QSize(24, 24))
|
|
|
|
self.gridLayout.addWidget(self.comboBox_2, 3, 1, 1, 1)
|
|
|
|
self.lineEdit_2 = QLineEdit(self.gridLayoutWidget)
|
|
self.lineEdit_2.setObjectName(u"lineEdit_2")
|
|
self.lineEdit_2.setFont(font)
|
|
self.lineEdit_2.setPlaceholderText(u"Camera name")
|
|
|
|
self.gridLayout.addWidget(self.lineEdit_2, 0, 1, 1, 1)
|
|
|
|
self.horizontalLayout_2 = QHBoxLayout()
|
|
self.horizontalLayout_2.setSpacing(5)
|
|
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
|
|
self.lineEdit_3 = QLineEdit(self.gridLayoutWidget)
|
|
self.lineEdit_3.setObjectName(u"lineEdit_3")
|
|
sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
|
|
sizePolicy1.setHorizontalStretch(0)
|
|
sizePolicy1.setVerticalStretch(0)
|
|
sizePolicy1.setHeightForWidth(self.lineEdit_3.sizePolicy().hasHeightForWidth())
|
|
self.lineEdit_3.setSizePolicy(sizePolicy1)
|
|
self.lineEdit_3.setMinimumSize(QSize(0, 28))
|
|
self.lineEdit_3.setMaximumSize(QSize(16777215, 28))
|
|
font1 = QFont()
|
|
font1.setFamily(u"Segoe UI")
|
|
font1.setPointSize(8)
|
|
self.lineEdit_3.setFont(font1)
|
|
self.lineEdit_3.setPlaceholderText(u"Choose calibration XML file...")
|
|
|
|
self.horizontalLayout_2.addWidget(self.lineEdit_3)
|
|
|
|
self.pushButton_3 = QPushButton(self.gridLayoutWidget)
|
|
self.pushButton_3.setObjectName(u"pushButton_3")
|
|
sizePolicy2 = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum)
|
|
sizePolicy2.setHorizontalStretch(0)
|
|
sizePolicy2.setVerticalStretch(0)
|
|
sizePolicy2.setHeightForWidth(self.pushButton_3.sizePolicy().hasHeightForWidth())
|
|
self.pushButton_3.setSizePolicy(sizePolicy2)
|
|
self.pushButton_3.setFont(font1)
|
|
self.pushButton_3.setToolTip(u"Choose XML calibration file...")
|
|
self.pushButton_3.setText(u"Browse")
|
|
icon7 = QIcon()
|
|
icon7.addFile(u":/icons/icons8-images-folder-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.pushButton_3.setIcon(icon7)
|
|
self.pushButton_3.setIconSize(QSize(24, 24))
|
|
|
|
self.horizontalLayout_2.addWidget(self.pushButton_3)
|
|
|
|
|
|
self.gridLayout.addLayout(self.horizontalLayout_2, 5, 1, 1, 1)
|
|
|
|
self.label_3 = QLabel(self.gridLayoutWidget)
|
|
self.label_3.setObjectName(u"label_3")
|
|
sizePolicy3 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
|
|
sizePolicy3.setHorizontalStretch(0)
|
|
sizePolicy3.setVerticalStretch(0)
|
|
sizePolicy3.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth())
|
|
self.label_3.setSizePolicy(sizePolicy3)
|
|
font2 = QFont()
|
|
font2.setFamily(u"Segoe UI")
|
|
font2.setPointSize(10)
|
|
font2.setBold(True)
|
|
font2.setWeight(75)
|
|
self.label_3.setFont(font2)
|
|
self.label_3.setText(u"Camera Name")
|
|
|
|
self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1)
|
|
|
|
self.horizontalLayout = QHBoxLayout()
|
|
self.horizontalLayout.setSpacing(5)
|
|
self.horizontalLayout.setObjectName(u"horizontalLayout")
|
|
self.pushButton = QPushButton(self.gridLayoutWidget)
|
|
self.pushButton.setObjectName(u"pushButton")
|
|
sizePolicy.setHeightForWidth(self.pushButton.sizePolicy().hasHeightForWidth())
|
|
self.pushButton.setSizePolicy(sizePolicy)
|
|
self.pushButton.setMinimumSize(QSize(0, 0))
|
|
self.pushButton.setMaximumSize(QSize(90, 30))
|
|
self.pushButton.setText(u"Cancel")
|
|
icon8 = QIcon()
|
|
icon8.addFile(u":/icons/icons8-close-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.pushButton.setIcon(icon8)
|
|
self.pushButton.setIconSize(QSize(20, 20))
|
|
|
|
self.horizontalLayout.addWidget(self.pushButton)
|
|
|
|
self.pushButton_2 = QPushButton(self.gridLayoutWidget)
|
|
self.pushButton_2.setObjectName(u"pushButton_2")
|
|
sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth())
|
|
self.pushButton_2.setSizePolicy(sizePolicy)
|
|
self.pushButton_2.setMinimumSize(QSize(0, 0))
|
|
self.pushButton_2.setMaximumSize(QSize(90, 30))
|
|
self.pushButton_2.setText(u"Save")
|
|
icon9 = QIcon()
|
|
icon9.addFile(u":/icons/icons8-save-all-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.pushButton_2.setIcon(icon9)
|
|
self.pushButton_2.setIconSize(QSize(20, 20))
|
|
|
|
self.horizontalLayout.addWidget(self.pushButton_2)
|
|
|
|
|
|
self.gridLayout.addLayout(self.horizontalLayout, 7, 0, 1, 2)
|
|
|
|
self.label = QLabel(self.gridLayoutWidget)
|
|
self.label.setObjectName(u"label")
|
|
sizePolicy3.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
|
|
self.label.setSizePolicy(sizePolicy3)
|
|
self.label.setFont(font)
|
|
self.label.setText(u"Type")
|
|
|
|
self.gridLayout.addWidget(self.label, 2, 0, 1, 1)
|
|
|
|
self.label_4 = QLabel(self.gridLayoutWidget)
|
|
self.label_4.setObjectName(u"label_4")
|
|
sizePolicy3.setHeightForWidth(self.label_4.sizePolicy().hasHeightForWidth())
|
|
self.label_4.setSizePolicy(sizePolicy3)
|
|
font3 = QFont()
|
|
font3.setFamily(u"Segoe UI")
|
|
font3.setPointSize(9)
|
|
self.label_4.setFont(font3)
|
|
self.label_4.setText(u"Resolution")
|
|
|
|
self.gridLayout.addWidget(self.label_4, 4, 0, 1, 1)
|
|
|
|
self.label_7 = QLabel(self.gridLayoutWidget)
|
|
self.label_7.setObjectName(u"label_7")
|
|
self.label_7.setFont(font3)
|
|
self.label_7.setText(u"Description")
|
|
|
|
self.gridLayout.addWidget(self.label_7, 1, 0, 1, 1)
|
|
|
|
self.line = QFrame(self.gridLayoutWidget)
|
|
self.line.setObjectName(u"line")
|
|
self.line.setFrameShape(QFrame.HLine)
|
|
self.line.setFrameShadow(QFrame.Sunken)
|
|
|
|
self.gridLayout.addWidget(self.line, 6, 0, 1, 2)
|
|
|
|
self.comboBox = QComboBox(self.gridLayoutWidget)
|
|
icon10 = QIcon()
|
|
icon10.addFile(u":/icons/icons8-full-page-view-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox.addItem(icon10, u"Frame")
|
|
icon11 = QIcon()
|
|
icon11.addFile(u":/icons/icons8-video-wall-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox.addItem(icon11, u"Fisheye")
|
|
icon12 = QIcon()
|
|
icon12.addFile(u":/icons/icons8-live-photos-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox.addItem(icon12, u"Spherical")
|
|
icon13 = QIcon()
|
|
icon13.addFile(u":/icons/icons8-aperture-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox.addItem(icon13, u"Cylindical")
|
|
icon14 = QIcon()
|
|
icon14.addFile(u":/icons/icons8-ios-application-placeholder-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.comboBox.addItem(icon14, u"RPC")
|
|
self.comboBox.setObjectName(u"comboBox")
|
|
self.comboBox.setFont(font)
|
|
self.comboBox.setIconSize(QSize(24, 24))
|
|
|
|
self.gridLayout.addWidget(self.comboBox, 2, 1, 1, 1)
|
|
|
|
self.label_5 = QLabel(self.gridLayoutWidget)
|
|
self.label_5.setObjectName(u"label_5")
|
|
sizePolicy3.setHeightForWidth(self.label_5.sizePolicy().hasHeightForWidth())
|
|
self.label_5.setSizePolicy(sizePolicy3)
|
|
self.label_5.setText(u"Callibration")
|
|
|
|
self.gridLayout.addWidget(self.label_5, 5, 0, 1, 1)
|
|
|
|
self.label_2 = QLabel(self.gridLayoutWidget)
|
|
self.label_2.setObjectName(u"label_2")
|
|
sizePolicy3.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
|
|
self.label_2.setSizePolicy(sizePolicy3)
|
|
self.label_2.setFont(font3)
|
|
self.label_2.setText(u"Sub-Type")
|
|
|
|
self.gridLayout.addWidget(self.label_2, 3, 0, 1, 1)
|
|
|
|
self.horizontalLayout_3 = QHBoxLayout()
|
|
self.horizontalLayout_3.setSpacing(5)
|
|
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
|
|
self.lineEdit = QLineEdit(self.gridLayoutWidget)
|
|
self.lineEdit.setObjectName(u"lineEdit")
|
|
self.lineEdit.setMaximumSize(QSize(50, 16777215))
|
|
self.lineEdit.setFont(font)
|
|
self.lineEdit.setText(u"0")
|
|
|
|
self.horizontalLayout_3.addWidget(self.lineEdit)
|
|
|
|
self.label_6 = QLabel(self.gridLayoutWidget)
|
|
self.label_6.setObjectName(u"label_6")
|
|
self.label_6.setText(u"MP")
|
|
|
|
self.horizontalLayout_3.addWidget(self.label_6)
|
|
|
|
|
|
self.gridLayout.addLayout(self.horizontalLayout_3, 4, 1, 1, 1)
|
|
|
|
self.lineEdit_4 = QLineEdit(self.gridLayoutWidget)
|
|
self.lineEdit_4.setObjectName(u"lineEdit_4")
|
|
self.lineEdit_4.setFont(font)
|
|
self.lineEdit_4.setPlaceholderText(u"Description of camera (optional)")
|
|
|
|
self.gridLayout.addWidget(self.lineEdit_4, 1, 1, 1, 1)
|
|
|
|
QWidget.setTabOrder(self.lineEdit_2, self.lineEdit_4)
|
|
QWidget.setTabOrder(self.lineEdit_4, self.comboBox)
|
|
QWidget.setTabOrder(self.comboBox, self.comboBox_2)
|
|
QWidget.setTabOrder(self.comboBox_2, self.lineEdit)
|
|
QWidget.setTabOrder(self.lineEdit, self.lineEdit_3)
|
|
QWidget.setTabOrder(self.lineEdit_3, self.pushButton_3)
|
|
QWidget.setTabOrder(self.pushButton_3, self.pushButton_2)
|
|
QWidget.setTabOrder(self.pushButton_2, self.pushButton)
|
|
|
|
if camnew == True:
|
|
autoftg_main.cameraXmlSource = ''
|
|
autoftg_main.cameraXmlDest = ''
|
|
self.setWindowTitle(u"Add New Camera")
|
|
self.pushButton_2.setText(u"Add Camera")
|
|
else:
|
|
selCamType = autoftg_main.camCfg.get(camname, "Description")
|
|
selCamType = autoftg_main.camCfg.get(camname, "Type")
|
|
selCamSubType = autoftg_main.camCfg.get(camname, "SubType")
|
|
selCamRes = autoftg_main.camCfg.get(camname, "Resolution")
|
|
selCamFile = autoftg_main.camCfg.get(camname, "File")
|
|
autoftg_main.cameraXmlSource = selCamFile
|
|
autoftg_main.cameraXmlDest = selCamFile
|
|
self.lineEdit_2.setText(camname)
|
|
self.comboBox.setCurrentText(selCamType)
|
|
self.comboBox_2.setCurrentText(selCamSubType)
|
|
self.lineEdit.setText(selCamRes)
|
|
self.lineEdit_3.setText(selCamFile)
|
|
self.setWindowTitle(u"Edit Camera")
|
|
self.pushButton_2.setText(u"Save Changes")
|
|
|
|
QtCore.QObject.connect(self.pushButton_3, QtCore.SIGNAL("clicked()"), self.selectCameraFile)
|
|
QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("clicked()"), self.saveCamera)
|
|
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("reject()"))
|
|
|
|
self.exec()
|
|
|
|
|
|
def selectCameraFile(self):
|
|
autoftg_main.cameraXmlSource = Metashape.app.getOpenFileName(hint="Select Camera Calibration", dir=str(autoftg_main.selected_data_folder), filter="Metashape Camera Calibration (*.xml)")
|
|
camXmlFile = os.path.basename(autoftg_main.cameraXmlSource)
|
|
autoftg_main.cameraXmlDest = autoftg_main.camCfgPath + camXmlFile
|
|
self.lineEdit_3.setText(camXmlFile)
|
|
|
|
|
|
def saveCamera(self):
|
|
cameraNameAdd = self.lineEdit_2.text()
|
|
camDesc = self.lineEdit_4.text()
|
|
cameraTypeAdd = self.comboBox.currentText()
|
|
cameraSubTypeAdd = self.comboBox_2.currentText()
|
|
cameraResAdd = self.lineEdit.text()
|
|
cameraFileAdd = self.lineEdit_3.text()
|
|
if cameraNameAdd == "" or cameraNameAdd == None:
|
|
Metashape.app.messageBox("Error! No camera name entered...")
|
|
else:
|
|
if self.lineEdit_3.text() != "" or self.lineEdit_3.text() != None:
|
|
self.copyXml()
|
|
else:
|
|
cameraFileAdd = "None"
|
|
autoftg_main.saveCamConfig(camOrigName, cameraNameAdd, camDesc, cameraTypeAdd, cameraSubTypeAdd, cameraResAdd, cameraFileAdd)
|
|
autoftg_main.camCfgLoad()
|
|
autoftg_main.cameraXmlSource = ''
|
|
autoftg_main.cameraXmlDest = ''
|
|
self.close()
|
|
|
|
|
|
def copyXml(self):
|
|
if autoftg_main.cameraXmlSource != autoftg_main.cameraXmlDest:
|
|
cameraXmlDestExists = os.path.isfile(autoftg_main.cameraXmlDest)
|
|
if cameraXmlDestExists == False:
|
|
try:
|
|
shutil.copy2(autoftg_main.cameraXmlSource, autoftg_main.cameraXmlDest)
|
|
except:
|
|
Metashape.app.messageBox("Error! Could not copy calibration file...")
|
|
else:
|
|
try:
|
|
os.remove(autoftg_main.cameraXmlDest)
|
|
except:
|
|
Metashape.app.messageBox("Error! Failed to remove old calibration file...")
|
|
|
|
try:
|
|
shutil.copy2(autoftg_main.cameraXmlSource, autoftg_main.cameraXmlDest)
|
|
except:
|
|
Metashape.app.messageBox("Error! Failed to copy calibration file...")
|
|
|
|
|
|
def closeCameraDialog(self):
|
|
autoftg_main.camCfgLoad()
|
|
self.close()
|
|
|
|
|
|
class Ui_dialogCamGui(QtWidgets.QDialog):
|
|
def __init__(self, parent):
|
|
QtWidgets.QDialog.__init__(self, parent)
|
|
self.setObjectName(u"dialogCamGui")
|
|
self.resize(350, 300)
|
|
self.setWindowTitle(u"Cameras Editor")
|
|
appIcon = QIcon()
|
|
appIcon.addFile(u":/icons/AutoFTG-appicon.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.setWindowIcon(appIcon)
|
|
layoutMain = QtWidgets.QVBoxLayout() # creating layout
|
|
menuico00 = QIcon()
|
|
menuico00.addFile(u":/icons/icons8-full-page-view-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico1 = QIcon()
|
|
menuico1.addFile(u":/icons/icons8-panorama-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico2 = QIcon()
|
|
menuico2.addFile(u":/icons/icons8-aperture-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico3 = QIcon()
|
|
menuico3.addFile(u":/icons/icons8-video-stabilization-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico4 = QIcon()
|
|
menuico4.addFile(u":/icons/icons8-touchscreen-48.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico5 = QIcon()
|
|
menuico5.addFile(u":/icons/icons8-quadcopter-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico6 = QIcon()
|
|
menuico6.addFile(u":/icons/icons8-add-camera-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico7 = QIcon()
|
|
menuico7.addFile(u":/icons/icons8-design-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico8 = QIcon()
|
|
menuico8.addFile(u":/icons/icons8-no-camera-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico9 = QIcon()
|
|
menuico9.addFile(u":/icons/icons8-ios-application-placeholder-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
icoTripod = QIcon()
|
|
icoTripod.addFile(u":/icons/icons8-camera-on-tripod-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
font1 = QFont()
|
|
font1.setPointSize(10)
|
|
self.verticalLayoutWidget_2 = QWidget()
|
|
self.verticalLayoutWidget_2.setObjectName(u"verticalLayoutWidget_2")
|
|
self.verticalLayoutWidget_2.setGeometry(QRect(10, 10, 331, 211))
|
|
self.vLayout_Main = QVBoxLayout(self.verticalLayoutWidget_2)
|
|
self.vLayout_Main.setObjectName(u"vLayout_Main")
|
|
self.vLayout_Main.setContentsMargins(0, 0, 0, 0)
|
|
self.hLayoutCamEdit = QHBoxLayout()
|
|
self.hLayoutCamEdit.setObjectName(u"hLayoutCamEdit")
|
|
self.listWidgetCam = QListWidget(self.verticalLayoutWidget_2)
|
|
self.listWidgetCam.setObjectName(u"listWidgetCam")
|
|
self.listWidgetCam.setFont(font1)
|
|
self.listWidgetCam.setFrameShape(QFrame.StyledPanel)
|
|
self.listWidgetCam.setFrameShadow(QFrame.Plain)
|
|
self.listWidgetCam.setDefaultDropAction(Qt.IgnoreAction)
|
|
self.listWidgetCam.setIconSize(QSize(20, 20))
|
|
for camera in autoftg_main.cam_list:
|
|
lcam_type = str(autoftg_main.camCfg.get(camera, 'Type'))
|
|
lcam_stype = str(autoftg_main.camCfg.get(camera, "SubType"))
|
|
lcam_res = str(autoftg_main.camCfg.get(camera, 'Resolution'))
|
|
lcam_desc = str(autoftg_main.camCfg.get(camera, 'Description'))
|
|
self.listWidgetCamItem = QListWidgetItem(camera, self.listWidgetCam)
|
|
self.listWidgetCamItem.setText(str(camera))
|
|
# <html><head/><body><p><b>Processing error!</span></p></body></html>
|
|
if lcam_stype == "Drone":
|
|
self.listWidgetCamItem.setIcon(menuico5)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_stype == "SmartPhone":
|
|
self.listWidgetCamItem.setIcon(menuico4)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_stype == "Special":
|
|
self.listWidgetCamItem.setIcon(icoTripod)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_type == "Fisheye":
|
|
self.listWidgetCamItem.setIcon(menuico1)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_type == "Cylindrical":
|
|
self.listWidgetCamItem.setIcon(menuico2)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_type == "Spherical":
|
|
self.listWidgetCamItem.setIcon(menuico3)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_type == "RPC":
|
|
self.listWidgetCamItem.setIcon(menuico9)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
else:
|
|
self.listWidgetCamItem.setIcon(menuico00)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
|
|
self.hLayoutCamEdit.addWidget(self.listWidgetCam)
|
|
|
|
self.vLayout_CamBtn = QVBoxLayout()
|
|
self.vLayout_CamBtn.setObjectName(u"vLayout_CamBtn")
|
|
sizePolicy = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
|
sizePolicy.setHorizontalStretch(0)
|
|
sizePolicy.setVerticalStretch(0)
|
|
|
|
self.btnRemoveCam = QPushButton(self.verticalLayoutWidget_2)
|
|
self.btnRemoveCam.setObjectName(u"btnRemoveCam")
|
|
sizePolicy.setHeightForWidth(self.btnRemoveCam.sizePolicy().hasHeightForWidth())
|
|
self.btnRemoveCam.setSizePolicy(sizePolicy)
|
|
self.btnRemoveCam.setText(u" Remove")
|
|
self.btnRemoveCam.setIcon(menuico8)
|
|
self.btnRemoveCam.setIconSize(QSize(24, 24))
|
|
|
|
self.vLayout_CamBtn.addWidget(self.btnRemoveCam)
|
|
|
|
self.btnEditCam = QPushButton(self.verticalLayoutWidget_2)
|
|
self.btnEditCam.setObjectName(u"btnEditCam")
|
|
sizePolicy.setHeightForWidth(self.btnEditCam.sizePolicy().hasHeightForWidth())
|
|
self.btnEditCam.setSizePolicy(sizePolicy)
|
|
self.btnEditCam.setText(u" Edit")
|
|
self.btnEditCam.setIcon(menuico7)
|
|
self.btnEditCam.setIconSize(QSize(24, 24))
|
|
|
|
self.vLayout_CamBtn.addWidget(self.btnEditCam)
|
|
|
|
self.btnAddNewCam = QPushButton(self.verticalLayoutWidget_2)
|
|
self.btnAddNewCam.setObjectName(u"btnAddNewCam")
|
|
sizePolicy.setHeightForWidth(self.btnAddNewCam.sizePolicy().hasHeightForWidth())
|
|
self.btnAddNewCam.setSizePolicy(sizePolicy)
|
|
self.btnAddNewCam.setText(u" Add")
|
|
self.btnAddNewCam.setIcon(menuico6)
|
|
self.btnAddNewCam.setIconSize(QSize(24, 24))
|
|
|
|
self.vLayout_CamBtn.addWidget(self.btnAddNewCam)
|
|
|
|
self.hLayoutCamEdit.addLayout(self.vLayout_CamBtn)
|
|
|
|
layoutMain.addLayout(self.hLayoutCamEdit)
|
|
|
|
self.hLayout_MainBtn = QHBoxLayout()
|
|
self.hLayout_MainBtn.setObjectName(u"hLayout_MainBtn")
|
|
self.btnMainClose = QPushButton(self.verticalLayoutWidget_2)
|
|
self.btnMainClose.setObjectName(u"btnMainClose")
|
|
sizePolicy1 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Minimum)
|
|
sizePolicy1.setHorizontalStretch(0)
|
|
sizePolicy1.setVerticalStretch(0)
|
|
sizePolicy1.setHeightForWidth(self.btnMainClose.sizePolicy().hasHeightForWidth())
|
|
self.btnMainClose.setSizePolicy(sizePolicy1)
|
|
self.btnMainClose.setText(u"Close")
|
|
|
|
self.hLayout_MainBtn.addWidget(self.btnMainClose)
|
|
|
|
layoutMain.addLayout(self.hLayout_MainBtn)
|
|
|
|
self.setLayout(layoutMain)
|
|
|
|
QtCore.QObject.connect(self.btnAddNewCam, QtCore.SIGNAL("clicked()"), self.addNewCam)
|
|
QtCore.QObject.connect(self.btnEditCam, QtCore.SIGNAL("clicked()"), self.editSelCamera)
|
|
QtCore.QObject.connect(self.btnRemoveCam, QtCore.SIGNAL("clicked()"), self.removeSelCamera)
|
|
QtCore.QObject.connect(self.btnMainClose, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("reject()"))
|
|
|
|
self.exec()
|
|
|
|
|
|
def refreshCamList(self):
|
|
self.listWidgetCam.clear()
|
|
menuico00 = QIcon()
|
|
menuico00.addFile(u":/icons/icons8-full-page-view-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico1 = QIcon()
|
|
menuico1.addFile(u":/icons/icons8-panorama-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico2 = QIcon()
|
|
menuico2.addFile(u":/icons/icons8-aperture-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico3 = QIcon()
|
|
menuico3.addFile(u":/icons/icons8-video-stabilization-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico4 = QIcon()
|
|
menuico4.addFile(u":/icons/icons8-touchscreen-48.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico5 = QIcon()
|
|
menuico5.addFile(u":/icons/icons8-quadcopter-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico6 = QIcon()
|
|
menuico6.addFile(u":/icons/icons8-add-camera-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico7 = QIcon()
|
|
menuico7.addFile(u":/icons/icons8-design-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico8 = QIcon()
|
|
menuico8.addFile(u":/icons/icons8-no-camera-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
menuico9 = QIcon()
|
|
menuico9.addFile(u":/icons/icons8-ios-application-placeholder-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
icoTripod = QIcon()
|
|
icoTripod.addFile(u":/icons/icons8-camera-on-tripod-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
for camera in autoftg_main.cam_list:
|
|
lcam_type = str(autoftg_main.camCfg.get(camera, 'Type'))
|
|
lcam_stype = str(autoftg_main.camCfg.get(camera, "SubType"))
|
|
lcam_res = str(autoftg_main.camCfg.get(camera, 'Resolution'))
|
|
lcam_desc = str(autoftg_main.camCfg.get(camera, 'Description'))
|
|
self.listWidgetCamItem = QListWidgetItem(camera, self.listWidgetCam)
|
|
self.listWidgetCamItem.setText(str(camera))
|
|
# <html><head/><body><p><b>Processing error!</span></p></body></html>
|
|
if lcam_stype == "Drone":
|
|
self.listWidgetCamItem.setIcon(menuico5)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_stype == "SmartPhone":
|
|
self.listWidgetCamItem.setIcon(menuico4)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_stype == "Special":
|
|
self.listWidgetCamItem.setIcon(icoTripod)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_type == "Fisheye":
|
|
self.listWidgetCamItem.setIcon(menuico1)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_type == "Cylindrical":
|
|
self.listWidgetCamItem.setIcon(menuico2)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_type == "Spherical":
|
|
self.listWidgetCamItem.setIcon(menuico3)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
elif lcam_type == "RPC":
|
|
self.listWidgetCamItem.setIcon(menuico9)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
else:
|
|
self.listWidgetCamItem.setIcon(menuico00)
|
|
self.listWidgetCamItem.setToolTip("<html><head/><body><p><b>Type: " + lcam_type + "</b><br>SubType: " + lcam_stype + "<br>Res.: " + lcam_res + "MP" + "<br>Desc.: " + lcam_desc)
|
|
|
|
|
|
|
|
def addNewCam(self):
|
|
autoftg_main.addCameraDialog(camnew=True, camname="")
|
|
self.refreshCamList()
|
|
|
|
|
|
def editSelCamera(self):
|
|
# defaultItem = self.listWidgetCam.isItemSelected("Default")
|
|
if self.listWidgetCam.currentRow() > 1:
|
|
selCamName = self.listWidgetCam.currentItem().text()
|
|
autoftg_main.addCameraDialog(camnew=False, camname=selCamName)
|
|
self.refreshCamList()
|
|
|
|
elif self.listWidgetCam.currentRow() <= 1:
|
|
Metashape.app.messageBox("Default cameras can not be edited.")
|
|
|
|
else:
|
|
Metashape.app.messageBox("No camera selected...")
|
|
|
|
|
|
def removeSelCamera(self):
|
|
if self.listWidgetCam.currentRow() > 1:
|
|
del_cam = self.listWidgetCam.currentItem().text()
|
|
remove_confirm = Metashape.app.getBool("Remove selected camera?\n\nSelected: " + del_cam)
|
|
if remove_confirm == True:
|
|
autoftg_main.removeCamConfig(del_cam)
|
|
self.refreshCamList()
|
|
|
|
elif self.listWidgetCam.currentRow() <= 1:
|
|
Metashape.app.messageBox("Default cameras can not be removed.")
|
|
|
|
else:
|
|
Metashape.app.messageBox("No camera selected...")
|
|
|
|
|
|
class Ui_dialogChooseCamera(QtWidgets.QDialog):
|
|
def __init__(self, parent):
|
|
QtWidgets.QDialog.__init__(self, parent)
|
|
self.setObjectName(u"dialogChooseCamera")
|
|
self.resize(320, 300)
|
|
self.setWindowTitle(u"Choose Camera")
|
|
appIcon = QIcon()
|
|
appIcon.addFile(u":/icons/AutoFTG-appicon.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.setWindowIcon(appIcon)
|
|
sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
|
|
self.setSizePolicy(sizePolicy)
|
|
self.setMinimumSize(QSize(320, 300))
|
|
self.setMaximumSize(QSize(320, 300))
|
|
self.setWindowTitle(u"Choose Camera")
|
|
self.verticalLayoutWidget = QWidget(self)
|
|
self.verticalLayoutWidget.setObjectName(u"verticalLayoutWidget")
|
|
self.verticalLayoutWidget.setGeometry(QRect(10, 10, 301, 281))
|
|
self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget)
|
|
self.verticalLayout.setSpacing(5)
|
|
self.verticalLayout.setContentsMargins(10, 10, 10, 10)
|
|
self.verticalLayout.setObjectName(u"verticalLayout")
|
|
self.verticalLayout.setSizeConstraint(QLayout.SetDefaultConstraint)
|
|
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
|
|
self.label = QLabel(self.verticalLayoutWidget)
|
|
self.label.setObjectName(u"label")
|
|
font = QFont()
|
|
font.setPointSize(11)
|
|
self.label.setFont(font)
|
|
self.label.setText(u"Select Camera")
|
|
|
|
self.verticalLayout.addWidget(self.label)
|
|
|
|
self.listWidget = QListWidget(self.verticalLayoutWidget)
|
|
icon = QIcon()
|
|
icon.addFile(u":/icons/icons8-full-page-view-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
icon1 = QIcon()
|
|
icon1.addFile(u":/icons/icons8-panorama-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
icon2 = QIcon()
|
|
icon2.addFile(u":/icons/icons8-aperture-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
icon3 = QIcon()
|
|
icon3.addFile(u":/icons/icons8-video-stabilization-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
icon4 = QIcon()
|
|
icon4.addFile(u":/icons/icons8-touchscreen-48.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
icon5 = QIcon()
|
|
icon5.addFile(u":/icons/icons8-quadcopter-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
icon5a = QIcon()
|
|
icon5a.addFile(u":/icons/icons8-ios-application-placeholder-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
icoTripod = QIcon()
|
|
icoTripod.addFile(u":/icons/icons8-camera-on-tripod-96.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
font1 = QFont()
|
|
font1.setPointSize(10)
|
|
for cam in autoftg_main.cam_list:
|
|
icon_type = autoftg_main.camCfg.get(cam, "Type")
|
|
icon_subtype = autoftg_main.camCfg.get(cam, "SubType")
|
|
self.listwidget = QListWidgetItem(self.listWidget)
|
|
self.listwidget.setText(cam)
|
|
if icon_subtype == "SmartPhone":
|
|
self.listwidget.setIcon(icon4)
|
|
elif icon_subtype == "Drone":
|
|
self.listwidget.setIcon(icon5)
|
|
elif icon_subtype == "Special":
|
|
self.listwidget.setIcon(icoTripod)
|
|
else:
|
|
if icon_type == "Fisheye":
|
|
self.listwidget.setIcon(icon1)
|
|
elif icon_type == "Spherical":
|
|
self.listwidget.setIcon(icon3)
|
|
elif icon_type == "Cylindrical":
|
|
self.listwidget.setIcon(icon2)
|
|
elif icon_type == "RPC":
|
|
self.listwidget.setIcon(icon5a)
|
|
else:
|
|
self.listwidget.setIcon(icon)
|
|
|
|
self.listWidget.setObjectName(u"listWidget")
|
|
self.listWidget.setFont(font1)
|
|
self.listWidget.setFrameShape(QFrame.StyledPanel)
|
|
self.listWidget.setFrameShadow(QFrame.Plain)
|
|
self.listWidget.setDefaultDropAction(Qt.IgnoreAction)
|
|
self.listWidget.setIconSize(QSize(20, 20))
|
|
|
|
self.verticalLayout.addWidget(self.listWidget)
|
|
|
|
self.horizontalLayout_2 = QHBoxLayout()
|
|
self.horizontalLayout_2.setSpacing(5)
|
|
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
|
|
self.pushButton_2 = QPushButton(self.verticalLayoutWidget)
|
|
self.pushButton_2.setObjectName(u"pushButton_2")
|
|
icon5 = QIcon()
|
|
icon5.addFile(u":/icons/icons8-close-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.pushButton_2.setIcon(icon5)
|
|
self.pushButton_2.setText(u"Cancel")
|
|
|
|
self.horizontalLayout_2.addWidget(self.pushButton_2)
|
|
|
|
self.pushButton = QPushButton(self.verticalLayoutWidget)
|
|
self.pushButton.setObjectName(u"pushButton")
|
|
icon6 = QIcon()
|
|
icon6.addFile(u":/icons/icons8-done-50.png", QSize(), QIcon.Normal, QIcon.Off)
|
|
self.pushButton.setIcon(icon6)
|
|
self.pushButton.setText(u"Ok")
|
|
|
|
self.horizontalLayout_2.addWidget(self.pushButton)
|
|
|
|
self.verticalLayout.addLayout(self.horizontalLayout_2)
|
|
|
|
self.listWidget.setCurrentRow(autoftg_main.cam_list.index(autoftg_main.selected_camera))
|
|
|
|
self.listWidget.setSortingEnabled(False)
|
|
|
|
QtCore.QObject.connect(self.pushButton, QtCore.SIGNAL("clicked()"), self.selectCam)
|
|
QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("reject()"))
|
|
|
|
self.exec()
|
|
|
|
def selectCam(self):
|
|
autoftg_main.selected_camera = self.listWidget.currentItem().text()
|
|
self.close()
|
|
|
|
|