PaIRS-UniNa 0.2.2__cp39-cp39-win_amd64.whl → 0.2.3__cp39-cp39-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- PaIRS_UniNa/Changes.txt +7 -0
- PaIRS_UniNa/Explorer.py +65 -8
- PaIRS_UniNa/Input_Tab_CalVi.py +2 -2
- PaIRS_UniNa/Input_Tab_tools.py +2 -1
- PaIRS_UniNa/Output_Tab.py +1 -1
- PaIRS_UniNa/TabTools.py +7 -2
- PaIRS_UniNa/Whatsnew.py +12 -9
- PaIRS_UniNa/_PaIRS_PIV.pyd +0 -0
- PaIRS_UniNa/__init__.py +2 -2
- PaIRS_UniNa/addwidgets_ps.py +2 -1
- PaIRS_UniNa/gPaIRS.py +48 -6
- PaIRS_UniNa/icons/restore_undo.png +0 -0
- PaIRS_UniNa/ui_gPairs.py +45 -23
- PaIRS_UniNa/whatsnew.txt +3 -2
- {PaIRS_UniNa-0.2.2.dist-info → PaIRS_UniNa-0.2.3.dist-info}/METADATA +9 -7
- {PaIRS_UniNa-0.2.2.dist-info → PaIRS_UniNa-0.2.3.dist-info}/RECORD +19 -18
- {PaIRS_UniNa-0.2.2.dist-info → PaIRS_UniNa-0.2.3.dist-info}/WHEEL +1 -1
- {PaIRS_UniNa-0.2.2.dist-info → PaIRS_UniNa-0.2.3.dist-info}/top_level.txt +0 -1
- {PaIRS_UniNa-0.2.2.dist-info → PaIRS_UniNa-0.2.3.dist-info}/LICENSE +0 -0
PaIRS_UniNa/Changes.txt
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
********* Changes to version 0.2.2 (0.2.3 - 2024.11.06) **********
|
|
2
|
+
- Fixed bug in the functionality for replicating processes with changed input folders introduced in version v0.2.2.
|
|
3
|
+
|
|
4
|
+
- Fixed bug in the compatibility check for the common region in disparity and stereoscopic PIV analysis steps.
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
1
8
|
********* Changes to version 0.2.1 (0.2.2 - 2024.10.15) **********
|
|
2
9
|
- [!!! Critical !!!] Fixed critical errors in the calculation of Reynolds stresses for stereoscopic PIV processes. Please consider reviewing the results from processes executed with version 0.2.1, as the w'w', u'w', and v'w' stresses were incorrectly calculated.
|
|
3
10
|
|
PaIRS_UniNa/Explorer.py
CHANGED
|
@@ -1123,6 +1123,7 @@ class StepButtonBar(QWidget):
|
|
|
1123
1123
|
self.buttonSize = buttonSize
|
|
1124
1124
|
|
|
1125
1125
|
self.buttons={}
|
|
1126
|
+
self.labels={}
|
|
1126
1127
|
for type in buttonData:
|
|
1127
1128
|
if type==StepTypes.null: continue
|
|
1128
1129
|
data=buttonData[type]
|
|
@@ -1139,7 +1140,7 @@ class StepButtonBar(QWidget):
|
|
|
1139
1140
|
button.released.connect(lambda btn=button: btn.setStyleSheet("QToolButton { border: none; background: none;} QToolButton::menu-indicator { image: none; }"))
|
|
1140
1141
|
setattr(button,'initialStyle',button.styleSheet())
|
|
1141
1142
|
button.setToolTip(data['name'])
|
|
1142
|
-
button.setStatusTip(
|
|
1143
|
+
button.setStatusTip(button.toolTip())
|
|
1143
1144
|
|
|
1144
1145
|
button.setCheckable(True)
|
|
1145
1146
|
def buttonIcon(b,d):
|
|
@@ -1164,6 +1165,16 @@ class StepButtonBar(QWidget):
|
|
|
1164
1165
|
setattr(button,'buttonData',data)
|
|
1165
1166
|
|
|
1166
1167
|
self.buttons[type]=button
|
|
1168
|
+
|
|
1169
|
+
label = QLabel(self)
|
|
1170
|
+
label.setPixmap(TreeIcons.pixmaps[data['icon']])
|
|
1171
|
+
label.setFixedSize(self.buttonSize[1], self.buttonSize[1])
|
|
1172
|
+
label.setScaledContents(True)
|
|
1173
|
+
label.setToolTip(data['name']+' (mandatory step)')
|
|
1174
|
+
label.setStatusTip(label.toolTip())
|
|
1175
|
+
self.buttonLayout.addWidget(label)
|
|
1176
|
+
self.labels[type]=label
|
|
1177
|
+
|
|
1167
1178
|
self.buttonLayout.addSpacerItem(QSpacerItem(self.buttonSize[0], 0, QSizePolicy.Minimum, QSizePolicy.Expanding))
|
|
1168
1179
|
|
|
1169
1180
|
def setButtonIcon(self,button:QToolButton):
|
|
@@ -1205,7 +1216,12 @@ class ProcessTree(PaIRSTree):
|
|
|
1205
1216
|
self.setIconSize(QSize(firstLevelHeight-4, firstLevelHeight-4))
|
|
1206
1217
|
|
|
1207
1218
|
if self.FlagBin:
|
|
1208
|
-
columns=["#","Deleted processes"]
|
|
1219
|
+
columns=["#","Deleted processes"]
|
|
1220
|
+
self.setStyleSheet("""
|
|
1221
|
+
QHeaderView::section {
|
|
1222
|
+
color: red;
|
|
1223
|
+
}
|
|
1224
|
+
""")
|
|
1209
1225
|
else:
|
|
1210
1226
|
columns=["#","Processes"]
|
|
1211
1227
|
self.setColumnCount(len(columns))
|
|
@@ -1224,6 +1240,7 @@ class ProcessTree(PaIRSTree):
|
|
|
1224
1240
|
|
|
1225
1241
|
self.linkedIcon=QIcon(QPixmap(icons_path+"linked.png").scaled(QSize(secondLevelIconSize,secondLevelIconSize),mode=Qt.TransformationMode.SmoothTransformation))
|
|
1226
1242
|
self.uneditedIcon=QIcon(QPixmap(icons_path+"unedited.png").scaled(QSize(secondLevelIconSize,secondLevelIconSize),mode=Qt.TransformationMode.SmoothTransformation))
|
|
1243
|
+
self.undoneIcon=QIcon(QPixmap(icons_path+"undo.png").scaled(QSize(secondLevelIconSize,secondLevelIconSize),mode=Qt.TransformationMode.SmoothTransformation))
|
|
1227
1244
|
|
|
1228
1245
|
self.initialStyleSheet=self.styleSheet()
|
|
1229
1246
|
self.FlagExternalDrag=False
|
|
@@ -1908,6 +1925,20 @@ class ProcessTree(PaIRSTree):
|
|
|
1908
1925
|
self.gui.w_Input.setINPwarn(ind_new)
|
|
1909
1926
|
ITE:ITEpar=self.Explorer.ITEfromInd(ind_new)
|
|
1910
1927
|
self.Explorer.setITElayout(ITE)
|
|
1928
|
+
|
|
1929
|
+
TABname=self.gui.w_Input.TABname
|
|
1930
|
+
self.gui.bridge(TABname,ind_new)
|
|
1931
|
+
for w in self.gui.tabWidgets:
|
|
1932
|
+
w:gPaIRS_Tab
|
|
1933
|
+
if w!=self.gui.w_Input:
|
|
1934
|
+
currpar=w.TABpar.duplicate()
|
|
1935
|
+
TABind_new=w.TABpar_at(ind_new)
|
|
1936
|
+
if TABind_new and not TABind_new.FlagNone:
|
|
1937
|
+
w.TABpar.copyfrom(TABind_new)
|
|
1938
|
+
w.adjustTABpar()
|
|
1939
|
+
w.adjustTABparInd()
|
|
1940
|
+
w.TABpar.copyfrom(currpar)
|
|
1941
|
+
self.gui.bridge(w.TABname,ind_new)
|
|
1911
1942
|
#item_child=item.child(j)
|
|
1912
1943
|
#item_child.setSelected(True)
|
|
1913
1944
|
#self.setCurrentItem(item_child)
|
|
@@ -2323,6 +2354,7 @@ class PaIRS_Explorer(gPaIRS_Tab):
|
|
|
2323
2354
|
self.processTree.editingFinished=lambda: self.arrangeCurrentProcess(self.processTree)
|
|
2324
2355
|
self.binTree.editingFinished=lambda: self.arrangeCurrentProcess(self.binTree)
|
|
2325
2356
|
self.inheritance=lambda: None
|
|
2357
|
+
self.undoInd=None
|
|
2326
2358
|
return
|
|
2327
2359
|
|
|
2328
2360
|
def binButton_action(self,FlagTreeSelection=True):
|
|
@@ -2418,12 +2450,14 @@ class PaIRS_Explorer(gPaIRS_Tab):
|
|
|
2418
2450
|
ITEs=tree.itemList[0][index]
|
|
2419
2451
|
for c in list(stepData):
|
|
2420
2452
|
b:QToolButton=self.stepButtonBar.buttons[c]
|
|
2453
|
+
lab:QLabel=self.stepButtonBar.labels[c]
|
|
2421
2454
|
#b.label.setVisible(c in allData[0]['mandatory'])
|
|
2422
2455
|
nsteps=len(ITEs[0].children)
|
|
2423
2456
|
self.setProcessFlagRun(ITEs[0].ind)
|
|
2424
2457
|
if c in ITEs[0].children:
|
|
2425
2458
|
ind=list(ITEs[0].children).index(c)
|
|
2426
|
-
b.setVisible(c not in ITEs[0].mandatory)
|
|
2459
|
+
b.setVisible(c not in ITEs[0].mandatory) #b.setVisible(True)
|
|
2460
|
+
lab.setVisible(c in ITEs[0].mandatory)
|
|
2427
2461
|
flagRunnable=all([ITEs[j].flagRun==0 for j in range(ind+2,nsteps+1)]) if ind<nsteps else True
|
|
2428
2462
|
flagRunnable=flagRunnable and ITEs[ind+1].flagRun==0 and ITEs[0].flagRun!=-2 #and len(ITEs[ind+1].link)==0
|
|
2429
2463
|
b.setEnabled(flagRunnable)
|
|
@@ -2431,6 +2465,7 @@ class PaIRS_Explorer(gPaIRS_Tab):
|
|
|
2431
2465
|
else:
|
|
2432
2466
|
flagRunnable=False
|
|
2433
2467
|
b.setVisible(False)
|
|
2468
|
+
lab.setVisible(False)
|
|
2434
2469
|
b.setEnabled(False)
|
|
2435
2470
|
b.setChecked(False)
|
|
2436
2471
|
b.setButtonIcon()
|
|
@@ -2444,8 +2479,10 @@ class PaIRS_Explorer(gPaIRS_Tab):
|
|
|
2444
2479
|
else:
|
|
2445
2480
|
self.ITEpar.FlagNone=True
|
|
2446
2481
|
for c in list(stepData):
|
|
2447
|
-
b=self.stepButtonBar.buttons[c]
|
|
2482
|
+
b:QToolButton=self.stepButtonBar.buttons[c]
|
|
2483
|
+
lab:QLabel=self.stepButtonBar.labels[c]
|
|
2448
2484
|
b.setVisible(False)
|
|
2485
|
+
lab.setVisible(False)
|
|
2449
2486
|
return index, child
|
|
2450
2487
|
|
|
2451
2488
|
def setProcessFlagRun(self,ind):
|
|
@@ -2519,6 +2556,10 @@ class PaIRS_Explorer(gPaIRS_Tab):
|
|
|
2519
2556
|
ITEs=tree.itemList[0][r]
|
|
2520
2557
|
c=list(ITEs[0].children.keys()).index(b.buttonData['type'])
|
|
2521
2558
|
child=item.child(c)
|
|
2559
|
+
if b.buttonData['type'] in ITEs[0].mandatory:
|
|
2560
|
+
tree.setCurrentItem(child)
|
|
2561
|
+
self.processTree_item_selection(tree)
|
|
2562
|
+
return
|
|
2522
2563
|
ITE:ITEpar=ITEs[c+1]
|
|
2523
2564
|
if len(ITE.link)>0:
|
|
2524
2565
|
global FlagReturn
|
|
@@ -2646,13 +2687,23 @@ class PaIRS_Explorer(gPaIRS_Tab):
|
|
|
2646
2687
|
|
|
2647
2688
|
def ITEfromInd(self,ind:list):
|
|
2648
2689
|
return self.projectTree.itemList[1][ind[0]][ind[1]][ind[2]][ind[3]+1]
|
|
2649
|
-
|
|
2690
|
+
|
|
2691
|
+
def cancelUndo(self,ind:list=None):
|
|
2692
|
+
if ind is None:
|
|
2693
|
+
ind=[self.TREpar.project, self.TREpar.tree, self.TREpar.process, self.TREpar.step-1 if self.TREpar.step else -1, -1]
|
|
2694
|
+
if self.undoInd and self.undoInd[:-1]!=ind[:-1]:
|
|
2695
|
+
self.undoInd[-1]=-1
|
|
2696
|
+
self.gui.checkProcesses(FlagInit=True,ind=self.undoInd)
|
|
2697
|
+
self.setITElayout(self.ITEfromInd(self.undoInd))
|
|
2698
|
+
self.undoInd=None
|
|
2699
|
+
|
|
2650
2700
|
def setITElayout(self,ITE:ITEpar=None):
|
|
2651
2701
|
if ITE is None:
|
|
2652
2702
|
FlagCurrentITE=True
|
|
2653
2703
|
ITE=self.ITEpar
|
|
2654
2704
|
else: FlagCurrentITE=False
|
|
2655
2705
|
if ITE.FlagNone: return
|
|
2706
|
+
self.cancelUndo(ITE.ind)
|
|
2656
2707
|
FlagDone=True
|
|
2657
2708
|
warningMessage=''
|
|
2658
2709
|
ITEs=self.ITEsfromInd(ITE.ind)
|
|
@@ -2670,10 +2721,12 @@ class PaIRS_Explorer(gPaIRS_Tab):
|
|
|
2670
2721
|
TABpar_ind=w.TABpar
|
|
2671
2722
|
else:
|
|
2672
2723
|
TABpar_ind:TABpar=w.TABpar_at(ITE.ind)
|
|
2673
|
-
if
|
|
2724
|
+
if not TABpar_ind: continue
|
|
2674
2725
|
if TABpar_ind.FlagNone: continue
|
|
2675
|
-
if
|
|
2676
|
-
|
|
2726
|
+
if w.TABname=='Calibration':
|
|
2727
|
+
ITE.ncam=TABpar_ind.ncam
|
|
2728
|
+
ITE.progress=len(TABpar_ind.calList)
|
|
2729
|
+
if TABpar_ind.OptionDone==0: pass
|
|
2677
2730
|
FlagDone=FlagDone and TABpar_ind.OptionDone!=0
|
|
2678
2731
|
if not TABpar_ind.OptionDone==1 and not TABpar_ind.FlagNone:
|
|
2679
2732
|
if TABpar_ind.warningMessage=='': continue
|
|
@@ -2740,9 +2793,13 @@ class PaIRS_Explorer(gPaIRS_Tab):
|
|
|
2740
2793
|
tree=[self.processTree,self.binTree][ITE.ind[1]]
|
|
2741
2794
|
item:QTreeWidgetItem=tree.topLevelItem(ITE.ind[2])
|
|
2742
2795
|
item=item.child(ITE.ind[3])
|
|
2796
|
+
TREind=[self.TREpar.project, self.TREpar.tree, self.TREpar.process, self.TREpar.step-1 if self.TREpar.step else -1, -1]
|
|
2743
2797
|
if len(ITE.link)==0:
|
|
2744
2798
|
if self.gui and ITE.flagRun==0 and len(self.gui.ui.tabAreaWidget.TABpar_prev_at(ITE.ind))<=1:
|
|
2745
2799
|
item.setIcon(0,self.processTree.uneditedIcon)
|
|
2800
|
+
elif self.gui and TREind[:-1]==ITE.ind[:-1] and self.gui.ui.tabAreaWidget.TABpar.ind[-1]<len(self.gui.w_Input.TABpar_prev_at(ITE.ind))-1:
|
|
2801
|
+
item.setIcon(0,self.processTree.undoneIcon)
|
|
2802
|
+
self.undoInd=self.gui.ui.tabAreaWidget.TABpar.ind
|
|
2746
2803
|
else:
|
|
2747
2804
|
item.setIcon(0,QIcon())
|
|
2748
2805
|
else:
|
PaIRS_UniNa/Input_Tab_CalVi.py
CHANGED
|
@@ -422,7 +422,7 @@ class Input_Tab_CalVi(gPaIRS_Tab):
|
|
|
422
422
|
|
|
423
423
|
def button_delete_action(self):
|
|
424
424
|
source_rows=[]
|
|
425
|
-
[source_rows.append(i) for i in self.
|
|
425
|
+
[source_rows.append(i.row()) for i in self.ui.list_images.selectedItems() if i.row() not in source_rows and i.row()>-1]
|
|
426
426
|
source_rows.sort(reverse=True)
|
|
427
427
|
for k in source_rows:
|
|
428
428
|
self.INPpar.filenames.pop(k)
|
|
@@ -444,7 +444,7 @@ class Input_Tab_CalVi(gPaIRS_Tab):
|
|
|
444
444
|
|
|
445
445
|
def button_updown_action(self,d):
|
|
446
446
|
source_rows=[]
|
|
447
|
-
[source_rows.append(i) for i in self.
|
|
447
|
+
[source_rows.append(i.row()) for i in self.ui.list_images.selectedItems() if i.row() not in source_rows and i.row()>-1]
|
|
448
448
|
source_rows.sort(reverse=d>0)
|
|
449
449
|
|
|
450
450
|
for row in source_rows:
|
PaIRS_UniNa/Input_Tab_tools.py
CHANGED
|
@@ -260,7 +260,7 @@ class PaIRSTree(QTreeWidget):
|
|
|
260
260
|
deleted_itemList=[]
|
|
261
261
|
deleted_items=[]
|
|
262
262
|
|
|
263
|
-
default_row_height=
|
|
263
|
+
default_row_height=20
|
|
264
264
|
default_col_width=12
|
|
265
265
|
default_indentation=10
|
|
266
266
|
|
|
@@ -2423,6 +2423,7 @@ class CalibrationTree(PaIRSTree):
|
|
|
2423
2423
|
self.headerItem().setTextAlignment(0,Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignVCenter)
|
|
2424
2424
|
header.setSectionResizeMode(0, QHeaderView.ResizeMode.ResizeToContents)
|
|
2425
2425
|
header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch)
|
|
2426
|
+
self.setStyleSheet(f"QTreeView::item {{ height: {self.default_row_height} px; }}")
|
|
2426
2427
|
|
|
2427
2428
|
self.ncam=1
|
|
2428
2429
|
self.calList=create_empty_list_of_dimension(1)
|
PaIRS_UniNa/Output_Tab.py
CHANGED
|
@@ -421,7 +421,7 @@ class Output_Tab(gPaIRS_Tab):
|
|
|
421
421
|
data.Process=procdata.Process
|
|
422
422
|
data.Step=procdata.Step
|
|
423
423
|
INP_ind=self.gui.w_Input.TABpar_at(ind)
|
|
424
|
-
OUT_ind=self.gui.w_Output.TABpar_at(ind)
|
|
424
|
+
OUT_ind=OUT #self.gui.w_Output.TABpar_at(ind)
|
|
425
425
|
PRO_ind=self.gui.w_Process.TABpar_at(ind)
|
|
426
426
|
PRO_Min_ind=self.gui.w_Process_Min.TABpar_at(ind)
|
|
427
427
|
PRO_Disp_ind=self.gui.w_Process_Disp.TABpar_at(ind)
|
PaIRS_UniNa/TabTools.py
CHANGED
|
@@ -264,6 +264,8 @@ class gPaIRS_Tab(QWidget):
|
|
|
264
264
|
setattr(self.ui,'button_forward',QPushButton(self))
|
|
265
265
|
else:
|
|
266
266
|
self.ui.button_forward.contextMenuEvent=lambda e: self.bfContextMenu(+1,e)
|
|
267
|
+
if not hasattr(self.ui,'button_restore_undo'):
|
|
268
|
+
setattr(self.ui,'button_restore_undo',QPushButton(self))
|
|
267
269
|
if not hasattr(self.ui,'label_number'):
|
|
268
270
|
setattr(self.ui,'label_number',QLabel(self))
|
|
269
271
|
if hasattr(self.ui,'button_close_tab'):
|
|
@@ -277,6 +279,7 @@ class gPaIRS_Tab(QWidget):
|
|
|
277
279
|
self.FlagDisplayControls=True #if False, undo and redo buttons are hidden and so not usable
|
|
278
280
|
self.ui.button_forward.hide()
|
|
279
281
|
self.ui.button_back.hide()
|
|
282
|
+
self.ui.button_restore_undo.hide()
|
|
280
283
|
self.ui.button_back.clicked.connect(self.button_back_action)
|
|
281
284
|
self.ui.button_forward.clicked.connect(self.button_forward_action)
|
|
282
285
|
self.ui.label_number.setText('')
|
|
@@ -289,8 +292,8 @@ class gPaIRS_Tab(QWidget):
|
|
|
289
292
|
|
|
290
293
|
self.spins_valueChanged=[]
|
|
291
294
|
|
|
292
|
-
self.nullCallback=lambda f='Null Callback':self.wrappedCallback(f,lambda: True)()
|
|
293
|
-
self.fullCallback=
|
|
295
|
+
self.nullCallback=lambda f='Null Callback': self.wrappedCallback(f,lambda: True)()
|
|
296
|
+
self.fullCallback=lambda f='Full Callback': self.wrappedCallback(f,lambda: None)()
|
|
294
297
|
|
|
295
298
|
#*************************************************** Widgets
|
|
296
299
|
def defineWidgets(self):
|
|
@@ -819,8 +822,10 @@ class gPaIRS_Tab(QWidget):
|
|
|
819
822
|
|
|
820
823
|
lprev=len(self.TABpar_prev_at(self.TABpar.ind))
|
|
821
824
|
i=self.TABpar.ind[-1]
|
|
825
|
+
self.ui.button_restore_undo.setVisible(lprev>1)
|
|
822
826
|
self.ui.button_forward.setVisible(lprev>1)
|
|
823
827
|
self.ui.button_back.setVisible(lprev>1)
|
|
828
|
+
self.ui.button_restore_undo.setEnabled(not (i==lprev-1 or i==-1))
|
|
824
829
|
self.ui.button_forward.setEnabled(not (i==lprev-1 or i==-1))
|
|
825
830
|
self.ui.button_back.setEnabled(i!=0)
|
|
826
831
|
if self.ui.label_number.isVisible():
|
PaIRS_UniNa/Whatsnew.py
CHANGED
|
@@ -71,15 +71,18 @@ def whatsNew(self):
|
|
|
71
71
|
news=content.replace('\r','').replace('\n','').replace('$',warn).replace('*',star)
|
|
72
72
|
news=news.replace('<br/><br/>','',1)
|
|
73
73
|
"""
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
74
|
+
splitted_news=content.splitlines()
|
|
75
|
+
for k, text in enumerate(splitted_news):
|
|
76
|
+
if not text: continue
|
|
77
|
+
if text[0]=='*':
|
|
78
|
+
splitted_news[k]=formatBullet(icons_path+"announcement.png",text[1:])
|
|
79
|
+
elif text[0]=='$':
|
|
80
|
+
splitted_news[k]=formatBullet(icons_path+"warning.png",text[1:])
|
|
81
|
+
elif text[0]=='£':
|
|
82
|
+
splitted_news[k]= f'<br/><span style="font-weight: 600; font-size: {fontPixelSize}px;">{text[1:]}</span><br/>'
|
|
83
|
+
news="".join(splitted_news)
|
|
84
|
+
|
|
85
|
+
Message=f'<span style=" font-size: {fontPixelSize+dfontPixelSize}px; font-weight: 600;">'+f"What's new in PaIRS-UniNa {__version__}"+'</span><br/><br/>'+news+'<br/>Go to the menu "? -> Changes" for further information.'
|
|
83
86
|
self.whatsnew=Whatsnew(self,Message,f'Updates of version {__version__}',dfontPixelSize)
|
|
84
87
|
#warningDialog(self,Message,pixmap=''+ icons_path +'news.png',title=f'Updates of version {__version__}',flagRichText=True)
|
|
85
88
|
except Exception as inst:
|
PaIRS_UniNa/_PaIRS_PIV.pyd
CHANGED
|
Binary file
|
PaIRS_UniNa/__init__.py
CHANGED
PaIRS_UniNa/addwidgets_ps.py
CHANGED
|
@@ -791,6 +791,7 @@ class EditableLabel(QWidget):
|
|
|
791
791
|
self.edit.editingFinished.connect(self.disable_editing)
|
|
792
792
|
self.edit.cancelEditing.connect(self.disable_editing)
|
|
793
793
|
self.updateLabel=lambda: None
|
|
794
|
+
self.bullet=''
|
|
794
795
|
|
|
795
796
|
self.installEventFilter(self) # Installare il filtro eventi
|
|
796
797
|
|
|
@@ -808,7 +809,7 @@ class EditableLabel(QWidget):
|
|
|
808
809
|
def enable_editing(self, event):
|
|
809
810
|
self.label.hide()
|
|
810
811
|
self.edit.setGeometry(self.label.geometry()) # Assicurati che l'editor prenda la posizione della label
|
|
811
|
-
self.edit.setText(self.label.text()) # Assicurati che il testo corrente venga impostato nell'editor
|
|
812
|
+
self.edit.setText(self.label.text().replace(self.bullet,'')) # Assicurati che il testo corrente venga impostato nell'editor
|
|
812
813
|
self.edit.selectAll()
|
|
813
814
|
self.edit.show()
|
|
814
815
|
self.window().setFocus()
|
PaIRS_UniNa/gPaIRS.py
CHANGED
|
@@ -393,6 +393,8 @@ class gPaIRS(QMainWindow):
|
|
|
393
393
|
self.fontPixelSize=fontPixelSize
|
|
394
394
|
self.setDefaultSizes()
|
|
395
395
|
|
|
396
|
+
self.ui.title_workspace.bullet=GPApar().saveBullet()
|
|
397
|
+
|
|
396
398
|
#------------------------------------- Declaration of parameters
|
|
397
399
|
self.PaIRS_threadpool=QThreadPool()
|
|
398
400
|
if NUMTHREADS_gPaIRS:
|
|
@@ -642,6 +644,13 @@ class gPaIRS(QMainWindow):
|
|
|
642
644
|
self.w_Input.ui.button_forward.clicked.disconnect()
|
|
643
645
|
self.w_Input.display_controls=lambda:None
|
|
644
646
|
|
|
647
|
+
self.ui.w_header.layout().removeWidget(self.ui.button_restore_undo)
|
|
648
|
+
self.ui.tabAreaWidget.buttonBar_layout.addWidget(self.ui.button_restore_undo)
|
|
649
|
+
self.ui.button_restore_undo.setFixedWidth(TabAreaWidget.buttonSize[1])
|
|
650
|
+
self.ui.button_restore_undo.setFixedHeight(TabAreaWidget.buttonSize[1])
|
|
651
|
+
self.ui.button_restore_undo.clicked.connect(self.fullCallback)
|
|
652
|
+
self.ui.tabAreaWidget.ui.button_restore_undo=self.ui.button_restore_undo
|
|
653
|
+
|
|
645
654
|
self.ui.tabAreaWidget.FlagDisplayControls=True
|
|
646
655
|
self.ui.tabAreaWidget.ui.button_back=self.w_Input.ui.button_back
|
|
647
656
|
self.ui.tabAreaWidget.ui.button_back.clicked.connect(lambda: self.button_back_forward_action(-1))
|
|
@@ -698,7 +707,17 @@ class gPaIRS(QMainWindow):
|
|
|
698
707
|
self.w_Vis.ui.icon.setCustomCursor()
|
|
699
708
|
|
|
700
709
|
self.defineTABbridges()
|
|
701
|
-
|
|
710
|
+
|
|
711
|
+
def fullCallback(self):
|
|
712
|
+
for w in self.tabWidgets:
|
|
713
|
+
w:gPaIRS_Tab
|
|
714
|
+
if not w.TABpar.FlagNone:
|
|
715
|
+
w.fullCallback('Restored configuration')
|
|
716
|
+
break
|
|
717
|
+
ind=[i for i in w.TABpar.ind]
|
|
718
|
+
ind[-1]=-1
|
|
719
|
+
self.setTABpars_at(ind)
|
|
720
|
+
|
|
702
721
|
def defineMenuActions(self):
|
|
703
722
|
self.projectTree.button_open_action=self.open_project
|
|
704
723
|
self.projectTree.button_save_action=self.save_project
|
|
@@ -757,10 +776,19 @@ class gPaIRS(QMainWindow):
|
|
|
757
776
|
w.TABpar.copyfrom(w.TABpar_at(ind))
|
|
758
777
|
FlagAdjustPar=w.TABpar.FlagInit==False or w.TABpar.Process==ProcessTypes.cal #w.TABpar.ind[-1]==0
|
|
759
778
|
FlagBridge=w.TABpar.Process==ProcessTypes.cal #False
|
|
779
|
+
if FlagAdjustPar or FlagBridge:
|
|
780
|
+
for w in self.tabWidgets:
|
|
781
|
+
if not w.TABpar.FlagNone:
|
|
782
|
+
w:gPaIRS_Tab
|
|
783
|
+
if FlagAdjustPar: w.adjustTABpar()
|
|
784
|
+
if FlagBridge: self.bridge(w.TABname)
|
|
785
|
+
FlagAdjustPar=False
|
|
786
|
+
FlagBridge=False
|
|
760
787
|
for w in self.tabWidgets:
|
|
761
788
|
w:gPaIRS_Tab
|
|
762
789
|
if not w.TABpar.FlagNone:
|
|
763
790
|
w.setTABpar(FlagAdjustPar,FlagBridge)
|
|
791
|
+
self.ui.Explorer.setITElayout()
|
|
764
792
|
return
|
|
765
793
|
|
|
766
794
|
def bfContextMenu(self,bf,event):
|
|
@@ -1042,8 +1070,8 @@ class gPaIRS(QMainWindow):
|
|
|
1042
1070
|
if width<self.ui.tabAreaWidget.width():
|
|
1043
1071
|
SPL.sizes[-1]= self.ui.tabAreaWidget.width()-width
|
|
1044
1072
|
else: SPL.sizes[-1]=0
|
|
1045
|
-
ITE.ncam=CAL.ncam
|
|
1046
|
-
ITE.progress=len(CAL.calList)
|
|
1073
|
+
#ITE.ncam=CAL.ncam
|
|
1074
|
+
#ITE.progress=len(CAL.calList)
|
|
1047
1075
|
elif TABname=='Input_CalVi':
|
|
1048
1076
|
VIS_CalVi.plane=INP_CalVi.row+1
|
|
1049
1077
|
VIS_CalVi.FlagResetLevels=INP_CalVi.isDifferentFrom(self.w_Input_CalVi.INPpar_old,fields=['path']) or len(self.w_Input_CalVi.INPpar_old.filenames)==0
|
|
@@ -1398,6 +1426,8 @@ class gPaIRS(QMainWindow):
|
|
|
1398
1426
|
self.adjustTitleHeader()
|
|
1399
1427
|
self.adjustSwitches()
|
|
1400
1428
|
|
|
1429
|
+
self.ui.Explorer.cancelUndo()
|
|
1430
|
+
|
|
1401
1431
|
def adjustProjectSelection(self):
|
|
1402
1432
|
self.adjustProcessSelection()
|
|
1403
1433
|
self.ui.Explorer.adjustProjectSelection()
|
|
@@ -1462,8 +1492,8 @@ class gPaIRS(QMainWindow):
|
|
|
1462
1492
|
self.adjustDependencies(ITE_ind)
|
|
1463
1493
|
self.inheritance(ind_child)
|
|
1464
1494
|
LOG_ind:LOGpar=self.w_Log.TABpar_at(ind)
|
|
1465
|
-
LOG_ind.progress=0
|
|
1466
|
-
self.setTABpars_at(ITE_ind.ind,FlagAdjustPar=True,widget=self.w_Vis)
|
|
1495
|
+
if LOG_ind: LOG_ind.progress=0
|
|
1496
|
+
self.setTABpars_at(ITE_ind.ind,FlagAdjustPar=True,widget=self.w_Calibration if ITE_ind.Step==StepTypes.cal else self.w_Vis)
|
|
1467
1497
|
if data.ind[:-2]==self.ui.tabAreaWidget.TABpar.ind[:-2]:
|
|
1468
1498
|
self.ui.Explorer.arrangeCurrentProcess(self.processTree)
|
|
1469
1499
|
self.adjustSwitches()
|
|
@@ -2912,7 +2942,10 @@ class gPaIRS(QMainWindow):
|
|
|
2912
2942
|
|
|
2913
2943
|
def save_current_workspace(self,filename,FlagAdjustHeader=True):
|
|
2914
2944
|
self.updateGPAparGeometry()
|
|
2915
|
-
if filename!=lastcfgname:
|
|
2945
|
+
if filename!=lastcfgname:
|
|
2946
|
+
if not self.GPApar.outName:
|
|
2947
|
+
self.GPApar.name=os.path.splitext(os.path.basename(filename))[0]
|
|
2948
|
+
self.GPApar.outName=filename
|
|
2916
2949
|
self.GPApar.savedDate=currentTimeString()
|
|
2917
2950
|
self.GPApar.FlagSaved=True
|
|
2918
2951
|
Workspace=[self.GPApar.duplicate(),self.TREpar.duplicate(),self.projectTree.itemList]
|
|
@@ -3053,6 +3086,15 @@ class gPaIRS(QMainWindow):
|
|
|
3053
3086
|
self.ui.button_PaIRS_download.setVisible(not self.ui.button_PaIRS_download.isVisible())
|
|
3054
3087
|
self.ui.aShowDownload.triggered.connect(aShowDownload)
|
|
3055
3088
|
|
|
3089
|
+
self.ui.aBetaDownload = self.menuDebug.addAction("Change download button icon")
|
|
3090
|
+
def aBetaDownload():
|
|
3091
|
+
b=self.ui.button_PaIRS_download
|
|
3092
|
+
if b.icon().pixmap(b.size()).toImage()==self.flaticon_PaIRS_download.pixmap(b.size()).toImage():
|
|
3093
|
+
b.setIcon(self.flaticon_PaIRS_beta)
|
|
3094
|
+
else:
|
|
3095
|
+
b.setIcon(self.flaticon_PaIRS_download)
|
|
3096
|
+
self.ui.aBetaDownload.triggered.connect(aBetaDownload)
|
|
3097
|
+
|
|
3056
3098
|
self.ui.aResetFlagOutDated = self.menuDebug.addAction("Reset FlagOutDated")
|
|
3057
3099
|
def aResetFlagOutDated():
|
|
3058
3100
|
self.GPApar.FlagOutDated=0 if self.GPApar.currentVersion==self.GPApar.latestVersion else 1 if self.GPApar.FlagOutDated>0 else -1
|
|
Binary file
|
PaIRS_UniNa/ui_gPairs.py
CHANGED
|
@@ -2,7 +2,7 @@ from .addwidgets_ps import icons_path
|
|
|
2
2
|
# -*- coding: utf-8 -*-
|
|
3
3
|
|
|
4
4
|
################################################################################
|
|
5
|
-
## Form generated from reading UI file '
|
|
5
|
+
## Form generated from reading UI file 'gPairsAiMsRP.ui'
|
|
6
6
|
##
|
|
7
7
|
## Created by: Qt User Interface Compiler version 6.7.2
|
|
8
8
|
##
|
|
@@ -446,6 +446,24 @@ class Ui_gPairs(object):
|
|
|
446
446
|
|
|
447
447
|
self.horizontalLayout_2.addWidget(self.button_Abort_CalVi)
|
|
448
448
|
|
|
449
|
+
self.button_restore_undo = QToolButton(self.w_header)
|
|
450
|
+
self.button_restore_undo.setObjectName(u"button_restore_undo")
|
|
451
|
+
sizePolicy.setHeightForWidth(self.button_restore_undo.sizePolicy().hasHeightForWidth())
|
|
452
|
+
self.button_restore_undo.setSizePolicy(sizePolicy)
|
|
453
|
+
self.button_restore_undo.setMinimumSize(QSize(36, 36))
|
|
454
|
+
self.button_restore_undo.setMaximumSize(QSize(36, 36))
|
|
455
|
+
self.button_restore_undo.setFont(font1)
|
|
456
|
+
self.button_restore_undo.setToolTipDuration(-1)
|
|
457
|
+
self.button_restore_undo.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
458
|
+
icon18 = QIcon()
|
|
459
|
+
icon18.addFile(u""+ icons_path +"restore_undo.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
460
|
+
self.button_restore_undo.setIcon(icon18)
|
|
461
|
+
self.button_restore_undo.setIconSize(QSize(28, 28))
|
|
462
|
+
self.button_restore_undo.setPopupMode(QToolButton.ToolButtonPopupMode.DelayedPopup)
|
|
463
|
+
self.button_restore_undo.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
|
|
464
|
+
|
|
465
|
+
self.horizontalLayout_2.addWidget(self.button_restore_undo)
|
|
466
|
+
|
|
449
467
|
self.button_reset_step = QToolButton(self.w_header)
|
|
450
468
|
self.button_reset_step.setObjectName(u"button_reset_step")
|
|
451
469
|
sizePolicy.setHeightForWidth(self.button_reset_step.sizePolicy().hasHeightForWidth())
|
|
@@ -455,9 +473,9 @@ class Ui_gPairs(object):
|
|
|
455
473
|
self.button_reset_step.setFont(font1)
|
|
456
474
|
self.button_reset_step.setToolTipDuration(-1)
|
|
457
475
|
self.button_reset_step.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
self.button_reset_step.setIcon(
|
|
476
|
+
icon19 = QIcon()
|
|
477
|
+
icon19.addFile(u""+ icons_path +"reset.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
478
|
+
self.button_reset_step.setIcon(icon19)
|
|
461
479
|
self.button_reset_step.setIconSize(QSize(28, 28))
|
|
462
480
|
self.button_reset_step.setPopupMode(QToolButton.ToolButtonPopupMode.DelayedPopup)
|
|
463
481
|
self.button_reset_step.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
|
|
@@ -473,9 +491,9 @@ class Ui_gPairs(object):
|
|
|
473
491
|
self.button_copy_step.setFont(font1)
|
|
474
492
|
self.button_copy_step.setToolTipDuration(-1)
|
|
475
493
|
self.button_copy_step.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
self.button_copy_step.setIcon(
|
|
494
|
+
icon20 = QIcon()
|
|
495
|
+
icon20.addFile(u""+ icons_path +"copy_process.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
496
|
+
self.button_copy_step.setIcon(icon20)
|
|
479
497
|
self.button_copy_step.setIconSize(QSize(28, 28))
|
|
480
498
|
self.button_copy_step.setPopupMode(QToolButton.ToolButtonPopupMode.DelayedPopup)
|
|
481
499
|
self.button_copy_step.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonIconOnly)
|
|
@@ -491,9 +509,9 @@ class Ui_gPairs(object):
|
|
|
491
509
|
self.button_link_step.setFont(font1)
|
|
492
510
|
self.button_link_step.setToolTipDuration(-1)
|
|
493
511
|
self.button_link_step.setLayoutDirection(Qt.LayoutDirection.LeftToRight)
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
self.button_link_step.setIcon(
|
|
512
|
+
icon21 = QIcon()
|
|
513
|
+
icon21.addFile(u""+ icons_path +"unlink.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
514
|
+
self.button_link_step.setIcon(icon21)
|
|
497
515
|
self.button_link_step.setIconSize(QSize(28, 28))
|
|
498
516
|
self.button_link_step.setCheckable(True)
|
|
499
517
|
self.button_link_step.setChecked(False)
|
|
@@ -507,9 +525,9 @@ class Ui_gPairs(object):
|
|
|
507
525
|
self.workspace_icon.setMinimumSize(QSize(60, 60))
|
|
508
526
|
self.workspace_icon.setMaximumSize(QSize(60, 60))
|
|
509
527
|
self.workspace_icon.setStyleSheet(u"QPushButton{border: none,;background: none}")
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
self.workspace_icon.setIcon(
|
|
528
|
+
icon22 = QIcon()
|
|
529
|
+
icon22.addFile(u""+ icons_path +"workspace.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
530
|
+
self.workspace_icon.setIcon(icon22)
|
|
513
531
|
self.workspace_icon.setIconSize(QSize(60, 60))
|
|
514
532
|
|
|
515
533
|
self.horizontalLayout_2.addWidget(self.workspace_icon)
|
|
@@ -578,9 +596,9 @@ class Ui_gPairs(object):
|
|
|
578
596
|
self.title_icon.setMinimumSize(QSize(60, 60))
|
|
579
597
|
self.title_icon.setMaximumSize(QSize(60, 60))
|
|
580
598
|
self.title_icon.setStyleSheet(u"QPushButton{border: none,;background: none}")
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
self.title_icon.setIcon(
|
|
599
|
+
icon23 = QIcon()
|
|
600
|
+
icon23.addFile(u""+ icons_path +"project.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
601
|
+
self.title_icon.setIcon(icon23)
|
|
584
602
|
self.title_icon.setIconSize(QSize(60, 60))
|
|
585
603
|
|
|
586
604
|
self.horizontalLayout_2.addWidget(self.title_icon)
|
|
@@ -639,7 +657,7 @@ class Ui_gPairs(object):
|
|
|
639
657
|
gPairs.setStatusBar(self.statusbar)
|
|
640
658
|
self.menubar = QMenuBar(gPairs)
|
|
641
659
|
self.menubar.setObjectName(u"menubar")
|
|
642
|
-
self.menubar.setGeometry(QRect(0, 0, 1800,
|
|
660
|
+
self.menubar.setGeometry(QRect(0, 0, 1800, 33))
|
|
643
661
|
self.menubar.setFont(font)
|
|
644
662
|
self.menubar.setNativeMenuBar(False)
|
|
645
663
|
self.menuFile = QMenu(self.menubar)
|
|
@@ -648,14 +666,14 @@ class Ui_gPairs(object):
|
|
|
648
666
|
self.menuHelp.setObjectName(u"menuHelp")
|
|
649
667
|
self.menu = QMenu(self.menubar)
|
|
650
668
|
self.menu.setObjectName(u"menu")
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
self.menu.setIcon(
|
|
669
|
+
icon24 = QIcon()
|
|
670
|
+
icon24.addFile(u""+ icons_path +"flaticon_PaIRS.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
671
|
+
self.menu.setIcon(icon24)
|
|
654
672
|
self.menuPaIRS = QMenu(self.menu)
|
|
655
673
|
self.menuPaIRS.setObjectName(u"menuPaIRS")
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
self.menuPaIRS.setIcon(
|
|
674
|
+
icon25 = QIcon()
|
|
675
|
+
icon25.addFile(u""+ icons_path +"logo_PaIRS.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
|
|
676
|
+
self.menuPaIRS.setIcon(icon25)
|
|
659
677
|
gPairs.setMenuBar(self.menubar)
|
|
660
678
|
QWidget.setTabOrder(self.button_PaIRS_download, self.button_colormode)
|
|
661
679
|
QWidget.setTabOrder(self.button_colormode, self.spin_nworkers)
|
|
@@ -782,6 +800,10 @@ class Ui_gPairs(object):
|
|
|
782
800
|
#if QT_CONFIG(shortcut)
|
|
783
801
|
self.button_Abort_CalVi.setShortcut(QCoreApplication.translate("gPairs", u"Ctrl+Del", None))
|
|
784
802
|
#endif // QT_CONFIG(shortcut)
|
|
803
|
+
#if QT_CONFIG(tooltip)
|
|
804
|
+
self.button_restore_undo.setToolTip(QCoreApplication.translate("gPairs", u"Restore current settings", None))
|
|
805
|
+
#endif // QT_CONFIG(tooltip)
|
|
806
|
+
self.button_restore_undo.setText("")
|
|
785
807
|
#if QT_CONFIG(tooltip)
|
|
786
808
|
self.button_reset_step.setToolTip(QCoreApplication.translate("gPairs", u"Reset the current process step", None))
|
|
787
809
|
#endif // QT_CONFIG(tooltip)
|
PaIRS_UniNa/whatsnew.txt
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
* Fixed bug in the functionality for replicating processes with changed input folders introduced in version v0.2.2.
|
|
2
|
+
* Fixed bug in the compatibility check for the common region in disparity and stereoscopic PIV analysis steps.
|
|
3
|
+
£ New features in the previous version 0.2.2:
|
|
1
4
|
$ Resolved critical errors in the calculation of Reynolds stresses for stereoscopic PIV processes: review your past results with caution, as previous versions may have delivered incorrect w'w', u'w', and v'w' stress values!
|
|
2
5
|
* Define the initial guess in the disparity step or the desidered final values in the stereoscopic PIV one for the laser plane constants using the new "Laser equation plane" box in the Output tab.
|
|
3
|
-
* Enjoy the new functionality for replicating processes with automatically updated input image paths. Running a series of similar tests in a loop has never been this effortless!
|
|
4
|
-
* Improvements in step copying and linking: buttons have been relocated to the Explorer and corresponding actions added to the context menu.
|
|
5
6
|
* Enhanced interface performance with increased stability and speed. Enjoy a smoother and more reliable PaIRS experience!
|
|
6
7
|
* The guide of PaIRS-UniNa v0.2 is finally available! Read it at <a href="https://www.pairs.unina.it/web/PaIRS-UniNa-v020-Guide.pdf"><span style=" text-decoration: underline; color:#0000ff; font-size:11pt">www.pairs.unina.it</a> and unleash the full potential and tricks of this amazing interface for yourself!
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: PaIRS_UniNa
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: PaIRS - Particle Image Reconstruction Software
|
|
5
5
|
Home-page: https://pairs.unina.it/
|
|
6
6
|
Author: Gerardo Paolillo and Tommaso Astarita
|
|
@@ -32,21 +32,23 @@ PaIRS-PIV includes several modules that allow to process double-frame or time-re
|
|
|
32
32
|
|
|
33
33
|
The current release of PaIRS-UniNa features the module for the 2D planar PIV analysis and the stereoscopic PIV analysis and a module for optical calibration of camera systems, namely **CalVi**.
|
|
34
34
|
|
|
35
|
-
CalVi is the calibration module of PaIRS-UniNa and allows accurate optical calibration of single and multiple camera bundles with the camera models mostly used in the PIV community: polynomials, rational functions and the pinhole camera model. Among the other features, it supports camera calibration procedures working with unknown positions and orientations of the calibration target and the integration of the pinhole camera model with a refractive correction model for cylindrical geometries (based on ray-tracing and Snell
|
|
35
|
+
CalVi is the calibration module of PaIRS-UniNa and allows accurate optical calibration of single and multiple camera bundles with the camera models mostly used in the PIV community: polynomials, rational functions and the pinhole camera model. Among the other features, it supports camera calibration procedures working with unknown positions and orientations of the calibration target and the integration of the pinhole camera model with a refractive correction model for cylindrical geometries (based on ray-tracing and Snell's law).
|
|
36
36
|
|
|
37
37
|
PaIRS-UniNa is supported by Python 3.9+ and is compatible with all the operating systems, however, the PaIRS-PIV library relies on OpemMP library, which must be installed on the macOS platform. On the other side, PaIRS requires, among other packages, `SciPy` and `matplotlib`.
|
|
38
38
|
|
|
39
39
|
For further information, please visit [PaIRS website](https://www.pairs.unina.it/).
|
|
40
40
|
|
|
41
|
-
## What's new in PaIRS-UniNa 0.2.
|
|
41
|
+
## What's new in PaIRS-UniNa 0.2.3
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
Fixed bug in the functionality for replicating processes with changed input folders introduced in version v0.2.2.
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
Fixed bug in the compatibility check for the common region in disparity and stereoscopic PIV analysis steps.
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
### New features in the previous version 0.2.2:
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
**Critical:** Fixed critical errors in the calculation of Reynolds stresses for stereoscopic PIV processes. Please consider reviewing the results from processes executed with version 0.2.1, as the w'w', u'w', and v'w' stresses were incorrectly calculated.
|
|
50
|
+
|
|
51
|
+
Introduced the "Laser Equation Plane" box in the Output tab to specify the initial attempt in the disparity step or to independently assign the constant values of the laser plane during the stereoscopic PIV step.
|
|
50
52
|
|
|
51
53
|
Improved stability and interface performance.
|
|
52
54
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
PaIRS_UniNa/Calibration_Tab.py,sha256=76K506LD4XskIcmp0YutfSDVcpNccDXGfLztV57D4bo,13133
|
|
2
|
-
PaIRS_UniNa/Changes.txt,sha256=
|
|
2
|
+
PaIRS_UniNa/Changes.txt,sha256=N9Txax1CeKZ8KqXf0mSTZxlU6gTuR_-RmV4qHamUIrc,6472
|
|
3
3
|
PaIRS_UniNa/Custom_Top.py,sha256=uqFKvkQ3Dc8uKY-JuM-bB32eU5ax7fbW5Pwgv9a6B3A,11944
|
|
4
|
-
PaIRS_UniNa/Explorer.py,sha256=
|
|
4
|
+
PaIRS_UniNa/Explorer.py,sha256=TK6nezeTRvGLNvD6hZf1tVlDCNnLfLNSjsenE3WwVp4,135596
|
|
5
5
|
PaIRS_UniNa/FolderLoop.py,sha256=5NSzQQHc1ek3Jj_3nwAJ6dVaRGmE_BXCc7o8-6QGHXQ,16237
|
|
6
6
|
PaIRS_UniNa/Input_Tab.py,sha256=BSYyvDfyNbUmwokfOvwZYelbyq-5veLJ_4LOFAURiyo,32813
|
|
7
|
-
PaIRS_UniNa/Input_Tab_CalVi.py,sha256=
|
|
8
|
-
PaIRS_UniNa/Input_Tab_tools.py,sha256=
|
|
7
|
+
PaIRS_UniNa/Input_Tab_CalVi.py,sha256=3BQRTObdFGTpjajl1iC4p6_yvmQSOXGi-Q5IhsoIJtA,34366
|
|
8
|
+
PaIRS_UniNa/Input_Tab_tools.py,sha256=Txiyl1kU3EH3fUKqCvJzwRr-TyyZeD2pAmpkw1vRyhM,122135
|
|
9
9
|
PaIRS_UniNa/Log_Tab.py,sha256=beiXlmPlIpt1VMl10ZxFGK6mTpWmm8Jy4d2ckNsQigs,3603
|
|
10
|
-
PaIRS_UniNa/Output_Tab.py,sha256=
|
|
10
|
+
PaIRS_UniNa/Output_Tab.py,sha256=7Slrn3Ur-gYa0AaeaaBb2MMbvlDbKT-2KtS5T4Jk42I,35521
|
|
11
11
|
PaIRS_UniNa/PaIRS.py,sha256=paXrJMdEqwjH18suV1GREZi5VNo1x--Bam2JT1kpoBs,347
|
|
12
12
|
PaIRS_UniNa/PaIRS_PIV.py,sha256=cX-shUoqAxmBjbLDSER16FlYDC6kD16gZmQX8kkr_fQ,43624
|
|
13
13
|
PaIRS_UniNa/PaIRS_pypacks.py,sha256=DkG5D2VNoaT1FL6UH5QyRVmjGL5VsFIiHDmZBKKDF38,48297
|
|
@@ -17,17 +17,17 @@ PaIRS_UniNa/Process_Tab_Disp.py,sha256=e34B6zB97E7Vp_0PSMQrf17Jd46kDYPq-es6x8RMb
|
|
|
17
17
|
PaIRS_UniNa/Process_Tab_Min.py,sha256=RCP11E7aKoP_wU6yhktUN6N9rD5SwYZhfCGGldq7tYs,4085
|
|
18
18
|
PaIRS_UniNa/ResizePopup.py,sha256=XvS5VFDE_s3sNv6pcWIt4rodSk5I_oFl3S9tRK90evg,1804
|
|
19
19
|
PaIRS_UniNa/Saving_tools.py,sha256=_KPz0SOwm7yy4d7brmLUn_gP28kjqcY5lkiSWVBsTU8,11102
|
|
20
|
-
PaIRS_UniNa/TabTools.py,sha256=
|
|
20
|
+
PaIRS_UniNa/TabTools.py,sha256=x9IYJqVYX9gdxPZECOBD5Mi95VzZVdFy2e2NIiyANbA,49913
|
|
21
21
|
PaIRS_UniNa/Vis_Tab.py,sha256=JW7UPja_js9qlZYabc4FEtYbDDEuGgRG8tHxj9Yzv0o,78319
|
|
22
22
|
PaIRS_UniNa/Vis_Tab_CalVi.py,sha256=j5wONgqthh4ktzFISPk4n0ohDuEqiMc6J9URxKFEvAQ,41900
|
|
23
|
-
PaIRS_UniNa/Whatsnew.py,sha256=
|
|
24
|
-
PaIRS_UniNa/_PaIRS_PIV.pyd,sha256=
|
|
25
|
-
PaIRS_UniNa/__init__.py,sha256=
|
|
23
|
+
PaIRS_UniNa/Whatsnew.py,sha256=S9YR2CFJqGloLfUls_gh4Viva5x70nIgWKzHURZ6a5o,4836
|
|
24
|
+
PaIRS_UniNa/_PaIRS_PIV.pyd,sha256=q_m_VqT5DeWod2AkJnrp0HFAQZMbSd4ENe949HBN2Zc,3416576
|
|
25
|
+
PaIRS_UniNa/__init__.py,sha256=t6Tgeu8CpYl_wn5Yp7AzK1lTJehO8L9nk_5UebSmcIw,145
|
|
26
26
|
PaIRS_UniNa/__main__.py,sha256=639RU4DJEr8cAWbT8BOikjT_hd6Vxvo5xgWxyo54GAI,1369
|
|
27
|
-
PaIRS_UniNa/addwidgets_ps.py,sha256=
|
|
27
|
+
PaIRS_UniNa/addwidgets_ps.py,sha256=dTwInSGUzF7r97to67P9tTS8A9gITEjoxI2CRpAn5m8,42062
|
|
28
28
|
PaIRS_UniNa/calib.py,sha256=njCPx4qMcOrpJBLQjQXVKneqo-svl4gjGWoNIAB2jgk,66036
|
|
29
29
|
PaIRS_UniNa/calibView.py,sha256=eklj90Uuh8oUf9FJCygkq9gv1DASvzgPDctW32WePnk,33984
|
|
30
|
-
PaIRS_UniNa/gPaIRS.py,sha256=
|
|
30
|
+
PaIRS_UniNa/gPaIRS.py,sha256=t0ecqYzdhNOGnQ_Hro-rLCDRMXZRs-0zpHu-o7GV5tM,160509
|
|
31
31
|
PaIRS_UniNa/gPalette.py,sha256=UcGqKO1OlaunCNIrGjUAKQRbZkwJnUn1-lT-ojZMbdU,17390
|
|
32
32
|
PaIRS_UniNa/listLib.py,sha256=eyWTLZiIG4B60L87tcTZtRfNwJOMTkd_3_d0gHvU20Q,12135
|
|
33
33
|
PaIRS_UniNa/mtfPIV.py,sha256=z8MrMUIEG934TM7O0MX1IYcT7dnW35NumVkthm7YUlI,8051
|
|
@@ -56,9 +56,9 @@ PaIRS_UniNa/ui_ResizePopup.py,sha256=QvHCYUn4gop6ad0FRQwk_Vwic-GDs352zgW4nOEwPOw
|
|
|
56
56
|
PaIRS_UniNa/ui_Vis_Tab.py,sha256=2kLAHmHE_EKhsyEvVetdblXcw5Qiqg54VBHEIVRhxG4,76086
|
|
57
57
|
PaIRS_UniNa/ui_Vis_Tab_CalVi.py,sha256=-YpyQgycMVP_AzLdreNshprk1n_lNDxCtoeVgwmBEL8,63205
|
|
58
58
|
PaIRS_UniNa/ui_Whatsnew.py,sha256=mQkGMzgHQeQqAftF3icu7GvczazFDLMX8BCTem_27ss,5776
|
|
59
|
-
PaIRS_UniNa/ui_gPairs.py,sha256=
|
|
59
|
+
PaIRS_UniNa/ui_gPairs.py,sha256=gDcHSrLa4vqNLb4mEdEVM14PP2RGaTrPyoyhwjvuINE,43207
|
|
60
60
|
PaIRS_UniNa/ui_infoPaIRS.py,sha256=bZYkxyUaa_rKTuKa9zNhVGpMBn2URtnxPZ-NQucqpaA,29094
|
|
61
|
-
PaIRS_UniNa/whatsnew.txt,sha256=
|
|
61
|
+
PaIRS_UniNa/whatsnew.txt,sha256=7YUaf8LC5MXa55C4PNsOncmhE-u2Teo5X3E_tVnLoFw,1134
|
|
62
62
|
PaIRS_UniNa/icons/abort.png,sha256=gdSz0VMk5BgZRPthvUgH_ZE5MmyOdOrE3jf2FG5qe2U,79115
|
|
63
63
|
PaIRS_UniNa/icons/about.png,sha256=svhha0azUto_21uljl1BEdhtSfvm7AyOBcjGMvgms2o,15523
|
|
64
64
|
PaIRS_UniNa/icons/align_all.png,sha256=rAzKfmsg6zI3CGmvAj8A5XhFsltsofdK5zYWLFezkDc,20200
|
|
@@ -198,6 +198,7 @@ PaIRS_UniNa/icons/reset.png,sha256=imE-Onn6z_LuKmpapPv0xztDyon2GLahh-4GfG3Dd8o,4
|
|
|
198
198
|
PaIRS_UniNa/icons/reset_levels.png,sha256=AzRT3Lg4_a1fndr14yaiNUKjeXPr_Mb6m7QJJTrpIcI,1926
|
|
199
199
|
PaIRS_UniNa/icons/resize_icon.png,sha256=54Mz02PhQXRZ4G_1KnQZfVyrSKTo6RPnr7qf7dH0MfU,25743
|
|
200
200
|
PaIRS_UniNa/icons/restore.png,sha256=4xy5LZoeFuWvuA9AKNe0ge1jbgreK4D7U9-KOjvOxRE,1840
|
|
201
|
+
PaIRS_UniNa/icons/restore_undo.png,sha256=N03f_s9L-b4rh7mwGNldIVCImk-rYKmVYmvEy22tcb8,44229
|
|
201
202
|
PaIRS_UniNa/icons/rotate_clock.png,sha256=ra4Q-aPIky4wqULrxizwBDPF9_ALNWWBG0kSSevbR9c,3190
|
|
202
203
|
PaIRS_UniNa/icons/rotate_counter.png,sha256=gGo-ajMva1x6gGirCWoq4hfb_KPhdux-BZnfOraGCsE,3155
|
|
203
204
|
PaIRS_UniNa/icons/rotate_v_clock.png,sha256=H9wmYtoUxnp2Ro3n4qeSQ1ZkGes690aGZG-P9lp5xLc,2190
|
|
@@ -309,8 +310,8 @@ PaIRS_UniNa/icons/colormaps/viridis.png,sha256=AYaCSf5zUaSiyfuC1aGnMxawTUTqVl-81
|
|
|
309
310
|
PaIRS_UniNa/icons/colormaps/whiteVector.png,sha256=-TPqm1S9e4OQ4Ee-9piT3bFfXg6TWEw20lvrmeCrnKY,350
|
|
310
311
|
PaIRS_UniNa/icons/colormaps/winter.png,sha256=ANqoViwtVfvAULokJaAp21xx8sjQJ1jEzYjAVo5WPtM,250
|
|
311
312
|
PaIRS_UniNa/icons/colormaps/yellowVector.png,sha256=RQJhq_Ft9GxpiH5Mac0E0KXJlfGtPdP5M4kn0qsrFz4,353
|
|
312
|
-
PaIRS_UniNa-0.2.
|
|
313
|
-
PaIRS_UniNa-0.2.
|
|
314
|
-
PaIRS_UniNa-0.2.
|
|
315
|
-
PaIRS_UniNa-0.2.
|
|
316
|
-
PaIRS_UniNa-0.2.
|
|
313
|
+
PaIRS_UniNa-0.2.3.dist-info/LICENSE,sha256=GdoleX-pIMpQiFJQyogPnut2ubiN-UOHSPasK6qWlnc,1095
|
|
314
|
+
PaIRS_UniNa-0.2.3.dist-info/METADATA,sha256=ly7KZHrJ-Jmt2LRJDSfU2zsq_ZPNotH5aM9s8A-bYK0,8229
|
|
315
|
+
PaIRS_UniNa-0.2.3.dist-info/WHEEL,sha256=zq3MnTB53_Huh0eFGROKhLNn5cmUbG6gUFCG6-LWXTY,99
|
|
316
|
+
PaIRS_UniNa-0.2.3.dist-info/top_level.txt,sha256=zxMsZBZRcjIXsv4CLSJ6RV0GhzeX89lx-JMfCCMkkYE,23
|
|
317
|
+
PaIRS_UniNa-0.2.3.dist-info/RECORD,,
|
|
File without changes
|