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 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(data['name'])
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 not TABpar_ind: continue
2724
+ if not TABpar_ind: continue
2674
2725
  if TABpar_ind.FlagNone: continue
2675
- if TABpar_ind.OptionDone==0:
2676
- pass
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:
@@ -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.INPpar.rows if i not in source_rows and i>-1]
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.INPpar.rows if i not in source_rows and i>-1]
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:
@@ -260,7 +260,7 @@ class PaIRSTree(QTreeWidget):
260
260
  deleted_itemList=[]
261
261
  deleted_items=[]
262
262
 
263
- default_row_height=18
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=self.wrappedCallback('Full Callback',lambda: None)
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
- splitted_content=re.split(r'\*',content.replace('\r','').replace('\n',''))
75
- splitted_warn=re.split(r'\$',splitted_content[0])
76
- splitted_news=splitted_content[1:]
77
- news=""
78
- for text in splitted_warn:
79
- news+=formatBullet(icons_path+"warning.png",text)
80
- for text in splitted_news:
81
- news+=formatBullet(icons_path+"announcement.png",text)
82
- 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.'
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:
Binary file
PaIRS_UniNa/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
- __version__="0.2.2"
1
+ __version__="0.2.3"
2
2
  __subversion__="0"
3
3
  __year__='2024'
4
- __date__='2024.10.15'
4
+ __date__='2024.11.06'
5
5
  __mail__='etfd@unina.it'
6
6
  __website__='https://pairs.unina.it'
@@ -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: self.GPApar.outName=filename
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 'gPairsFBlMRp.ui'
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
- icon18 = QIcon()
459
- icon18.addFile(u""+ icons_path +"reset.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
460
- self.button_reset_step.setIcon(icon18)
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
- icon19 = QIcon()
477
- icon19.addFile(u""+ icons_path +"copy_process.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
478
- self.button_copy_step.setIcon(icon19)
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
- icon20 = QIcon()
495
- icon20.addFile(u""+ icons_path +"unlink.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
496
- self.button_link_step.setIcon(icon20)
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
- icon21 = QIcon()
511
- icon21.addFile(u""+ icons_path +"workspace.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
512
- self.workspace_icon.setIcon(icon21)
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
- icon22 = QIcon()
582
- icon22.addFile(u""+ icons_path +"project.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
583
- self.title_icon.setIcon(icon22)
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, 43))
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
- icon23 = QIcon()
652
- icon23.addFile(u""+ icons_path +"flaticon_PaIRS.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
653
- self.menu.setIcon(icon23)
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
- icon24 = QIcon()
657
- icon24.addFile(u""+ icons_path +"logo_PaIRS.png", QSize(), QIcon.Mode.Normal, QIcon.State.Off)
658
- self.menuPaIRS.setIcon(icon24)
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.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’s law).
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.2
41
+ ## What's new in PaIRS-UniNa 0.2.3
42
42
 
43
- **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.
43
+ Fixed bug in the functionality for replicating processes with changed input folders introduced in version v0.2.2.
44
44
 
45
- 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.
45
+ Fixed bug in the compatibility check for the common region in disparity and stereoscopic PIV analysis steps.
46
46
 
47
- Introduced the "Copy process to loop over folders" button in the process tree. The latter allows the user to select multiple folders from the disk and replicate the process in the tree for each folder, automatically updating the input image path (specified in the Input tab) to match the path of each selected folder. This makes it extremely easy and fast to create a queue of processes for folders containing similar image sets.
47
+ ### New features in the previous version 0.2.2:
48
48
 
49
- Resolved various bugs related to the copy and link functions of steps within the process tree. Buttons have been relocated to the Explorer, and additional functionality has been added to the context menu of the process tree items.
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=9FvUVOkDZBDtHLdF2i7_lpXwUteXbZLPTFKuzILd5rM,6164
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=tJLPMq6a58sxyKHiCeBuDeS-DWzFB3qjk4PaLEWwlaI,132576
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=zuuzhd3irSxDmzkW-80z8HOi6Z726OwZkm2mT4e4hJ8,34292
8
- PaIRS_UniNa/Input_Tab_tools.py,sha256=z4As9q3zMDCLK6Qq9sc39VsAnnvKfRgtWebWXZCkWjY,122043
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=IVJKtqO1CUPF_k0X-1Ghih4Hb_mttcJ4gQzRhBzmpW8,35516
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=b8fly4Wf41BZanTu9P7s__EEhrAzGpwBunv-y-LNnfk,49595
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=mshwFeGLiN2DfMx_sE0yD1qaq28CiWAv13RjNmXz2u4,4676
24
- PaIRS_UniNa/_PaIRS_PIV.pyd,sha256=2iYymg6PrZwSRwq696XtBlDdlmKyN_aVwJPNRmEMr_k,3416576
25
- PaIRS_UniNa/__init__.py,sha256=CLN8BCMBJffMn__a-T6WYNvjQuy8TDM-jLwpl4W2CgY,145
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=reoAnpnlJEu5gC78HDQt4fN6POBPpsQxdoxtHam39P4,42014
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=ZNzYPFA4F_w0BHd_Fht3yXy-QYo-IUDvULwGdSxHI6c,158534
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=xWBoAn7UPzgZ6mbRgkwwkkmY-TQ_IFqzfDjaSDoPu_c,41877
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=Ch29k3wFpuY_DJuffwaKXNDpZY-Ci_XlcEZmH0a7KfE,1178
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.2.dist-info/LICENSE,sha256=GdoleX-pIMpQiFJQyogPnut2ubiN-UOHSPasK6qWlnc,1095
313
- PaIRS_UniNa-0.2.2.dist-info/METADATA,sha256=yKxXk6XT53zY6UdpwCV9UjFYzuPaZYxJNkYTfjstRkw,8623
314
- PaIRS_UniNa-0.2.2.dist-info/WHEEL,sha256=vq7bX_I37ZJK2gZz_HGA8eCPjBDKQSfb_9FNjesTNkk,99
315
- PaIRS_UniNa-0.2.2.dist-info/top_level.txt,sha256=NpClX9Tvle65CYMgDztYEhMtVTITh4vC79Od3enuYyQ,45
316
- PaIRS_UniNa-0.2.2.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.1.0)
2
+ Generator: setuptools (75.3.0)
3
3
  Root-Is-Purelib: false
4
4
  Tag: cp39-cp39-win_amd64
5
5
 
@@ -1,3 +1,2 @@
1
1
  PaIRS_UniNa
2
- PaIRS_UniNa_temporary
3
2
  _PaIRS_PIV