Hello Geert,
Please check the following script:
import Metashape
from PySide2 import QtGui, QtCore, QtWidgets
class ProgDlg(QtWidgets.QDialog):
def __init__(self, parent):
QtWidgets.QDialog.__init__(self, parent)
self.setWindowTitle("Custom Processing")
self.btnQuit = QtWidgets.QPushButton("&Exit")
self.btnP1 = QtWidgets.QPushButton("&Process!")
self.pBar = QtWidgets.QProgressBar()
self.pBar.setTextVisible(False)
self.applyTxt = QtWidgets.QLabel("Apply to:")
self.radioBtn_all = QtWidgets.QRadioButton("All cameras")
self.radioBtn_sel = QtWidgets.QRadioButton("Selected cameras")
self.radioBtn_all.setChecked(True)
self.radioBtn_sel.setChecked(False)
self.intTxt = QtWidgets.QLabel("Input int:")
self.intEdt = QtWidgets.QLineEdit()
self.onlyInt = QtGui.QIntValidator()
self.intEdt.setPlaceholderText("input int here")
self.intEdt.setValidator(self.onlyInt)
layout = QtWidgets.QGridLayout()
#layout.setSpacing(5)
layout.addWidget(self.applyTxt, 0, 0)
layout.addWidget(self.radioBtn_all, 1, 0)
layout.addWidget(self.radioBtn_sel, 2, 0)
layout.addWidget(self.intTxt, 0, 1)
layout.addWidget(self.intEdt, 0, 2)
layout.addWidget(self.pBar, 3, 0)
layout.addWidget(self.btnP1, 3, 1)
layout.addWidget(self.btnQuit, 3, 2)
self.setLayout(layout)
proc = lambda : self.process()
QtCore.QObject.connect(self.btnP1, QtCore.SIGNAL("clicked()"), proc)
QtCore.QObject.connect(self.btnQuit, QtCore.SIGNAL("clicked()"), self, QtCore.SLOT("reject()"))
self.exec()
def process(self):
global app
print("Script started...")
self.btnP1.setDisabled(True)
self.btnQuit.setDisabled(True)
self.pBar.setValue(0)
my_int = self.intEdt.text()
if not my_int.isdigit():
print("Invalid input, script aborted")
return 0
my_int = int(my_int)
selected = False
if self.radioBtn_sel.isChecked():
selected = True
elif self.radioBtn_all.isChecked():
selected = False
doc = Metashape.app.document
chunk = doc.chunk #active chunk
if selected:
cameras = [camera for camera in chunk.cameras if camera.selected]
else:
cameras = chunk.cameras
processed = 0
for camera in cameras:
print(camera.label + " " + str(my_int))
processed += 1
self.pBar.setValue(processed / len(cameras) * 100)
app.processEvents() #update GUI
self.pBar.setValue(100)
self.btnP1.setDisabled(False)
self.btnQuit.setDisabled(False)
print("Script finished.")
return 1
def custom_process():
global app
app = QtWidgets.QApplication.instance()
parent = app.activeWindow()
dlg = ProgDlg(parent)
label = "Custom menu/Custom Processing"
Metashape.app.addMenuItem(label, custom_process)
print("To execute this script press {}".format(label))
It has the possibility of applying the processing to all or selected cameras and option to input int value. Some simple "processing" function is added that just print out the camera labels and input int.