PaIRS-UniNa 0.2.6__cp313-cp313-win_amd64.whl → 0.2.7__cp313-cp313-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.
Potentially problematic release.
This version of PaIRS-UniNa might be problematic. Click here for more details.
- PaIRS_UniNa/Changes.txt +13 -0
- PaIRS_UniNa/Explorer.py +18 -5
- PaIRS_UniNa/Input_Tab.py +2 -2
- PaIRS_UniNa/Input_Tab_CalVi.py +1 -1
- PaIRS_UniNa/Input_Tab_tools.py +2 -2
- PaIRS_UniNa/Output_Tab.py +1 -1
- PaIRS_UniNa/Vis_Tab.py +33 -4
- PaIRS_UniNa/_PaIRS_PIV.pyd +0 -0
- PaIRS_UniNa/__init__.py +3 -3
- PaIRS_UniNa/addwidgets_ps.py +28 -20
- PaIRS_UniNa/calibView.py +7 -0
- PaIRS_UniNa/gPaIRS.py +8 -1
- PaIRS_UniNa/procTools.py +5 -2
- PaIRS_UniNa/whatsnew.txt +2 -2
- {pairs_unina-0.2.6.dist-info → pairs_unina-0.2.7.dist-info}/METADATA +9 -5
- {pairs_unina-0.2.6.dist-info → pairs_unina-0.2.7.dist-info}/RECORD +18 -18
- {pairs_unina-0.2.6.dist-info → pairs_unina-0.2.7.dist-info}/WHEEL +0 -0
- {pairs_unina-0.2.6.dist-info → pairs_unina-0.2.7.dist-info}/top_level.txt +0 -0
PaIRS_UniNa/Changes.txt
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
********* Changes in version 0.2.7 (2025.10.13) **********
|
|
2
|
+
Bug fixes:
|
|
3
|
+
- resolved an issue related to visulazion of streamlines when the image is shown in pixel units and a custom resolution is specified (in previous versions, streamlines were always represented in physical units);
|
|
4
|
+
- corrected the update of reprojection errors in CalVi when the control point grid is expanded after a calibration. Each new control point now has its error recalculated and plotted, providing a correct view of the extrapolation error;
|
|
5
|
+
- fixed the automatic resize/reshape behavior specified in the Output tab: when an image transformation is assigned, it is now preserved even if the automatic reshape button is active.
|
|
6
|
+
|
|
7
|
+
User-interface enhancements:
|
|
8
|
+
- changed the behavior of the Vis button for restricting view on the interrogation window area: clicking it now opens a popup menu that allows users to select the desired interrogation-window size to focus on among all iterations of the process;
|
|
9
|
+
- names of processes duplicated in the process tree are now automatically updated to avoid conflicts: if a name already exists, the new one is appended with an incremental suffix;
|
|
10
|
+
- improved interaction with editable input fields: when hovering the highlighted style is displayed correctly, the text cursor now appears exactly where clicked and the background color is properly restored when leaving the field.
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
1
14
|
********* Changes in version 0.2.6 (2025.09.06) **********
|
|
2
15
|
Bug fixes:
|
|
3
16
|
- fixed bugs related to process tree management.
|
PaIRS_UniNa/Explorer.py
CHANGED
|
@@ -1859,11 +1859,20 @@ class ProcessTree(PaIRSTree):
|
|
|
1859
1859
|
if not self.FlagCutted and not FlagPasteDeleted:
|
|
1860
1860
|
self.cutItems(new_items)
|
|
1861
1861
|
self.pasteLists(row,FlagPasteDeleted)
|
|
1862
|
-
for
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
self.
|
|
1866
|
-
|
|
1862
|
+
name_list=[i[0].name for i in self.itemList[0]]
|
|
1863
|
+
for pos,k in enumerate(indexes):
|
|
1864
|
+
item=self.topLevelItem(k)
|
|
1865
|
+
ITE=self.itemList[0][k][0]
|
|
1866
|
+
tail=set(indexes[pos:]);
|
|
1867
|
+
forbidden={name_list[j] for j in range(len(name_list)) if j not in tail}
|
|
1868
|
+
if ITE.name in forbidden:
|
|
1869
|
+
base=ITE.name
|
|
1870
|
+
n=1
|
|
1871
|
+
while f"{base} ({n})" in forbidden: n+=1
|
|
1872
|
+
ITE.name=f"{base} ({n})"
|
|
1873
|
+
name_list[k]=ITE.name
|
|
1874
|
+
self.setProcessItemWidget(item,ITE)
|
|
1875
|
+
self.setStepItemWidgets(item,ITE.ind[2])
|
|
1867
1876
|
|
|
1868
1877
|
self.scrollToItem(firstItemToScroll)
|
|
1869
1878
|
self.scrollToItem(lastItemToScroll)
|
|
@@ -1942,6 +1951,9 @@ class ProcessTree(PaIRSTree):
|
|
|
1942
1951
|
|
|
1943
1952
|
TABname=self.gui.w_Input.TABname
|
|
1944
1953
|
self.gui.bridge(TABname,ind_new)
|
|
1954
|
+
|
|
1955
|
+
FlagSettingPar=TABpar.FlagSettingPar
|
|
1956
|
+
TABpar.FlagSettingPar=True
|
|
1945
1957
|
for w in self.gui.tabWidgets:
|
|
1946
1958
|
w:gPaIRS_Tab
|
|
1947
1959
|
if w!=self.gui.w_Input:
|
|
@@ -1953,6 +1965,7 @@ class ProcessTree(PaIRSTree):
|
|
|
1953
1965
|
w.adjustTABparInd()
|
|
1954
1966
|
w.TABpar.copyfrom(currpar)
|
|
1955
1967
|
self.gui.bridge(w.TABname,ind_new)
|
|
1968
|
+
TABpar.FlagSettingPar=FlagSettingPar
|
|
1956
1969
|
#item_child=item.child(j)
|
|
1957
1970
|
#item_child.setSelected(True)
|
|
1958
1971
|
#self.setCurrentItem(item_child)
|
PaIRS_UniNa/Input_Tab.py
CHANGED
|
@@ -102,9 +102,9 @@ class INPpar(TABpar):
|
|
|
102
102
|
self.frame_2 = [-1]
|
|
103
103
|
self.inp_ncam = 3 if Process==ProcessTypes.tpiv else 2 if Process==ProcessTypes.spiv else 1
|
|
104
104
|
self.inp_cam = 1
|
|
105
|
-
self.ind_in =
|
|
105
|
+
self.ind_in = 0
|
|
106
106
|
self.npairs = 0
|
|
107
|
-
self.step =
|
|
107
|
+
self.step = 0
|
|
108
108
|
self.FlagTR_Import = False
|
|
109
109
|
|
|
110
110
|
self.nExImTree = 3
|
PaIRS_UniNa/Input_Tab_CalVi.py
CHANGED
|
@@ -37,7 +37,7 @@ class INPpar_CalVi(TABpar):
|
|
|
37
37
|
def __init__(self,Process=ProcessTypes.null,Step=StepTypes.null):
|
|
38
38
|
self.setup(Process,Step)
|
|
39
39
|
super().__init__('INPpar_CalVi','Input_CalVi')
|
|
40
|
-
self.unchecked_fields+=['OptionValidPath','OptionValidPathOut','OptionValidRootOut','row','col','rows','cols']
|
|
40
|
+
self.unchecked_fields+=['OptionValidPath','OptionValidPathOut','OptionValidRootOut','row','col','rows','cols','pathCompleter']
|
|
41
41
|
|
|
42
42
|
def setup(self,Process,Step):
|
|
43
43
|
self.Process = Process
|
PaIRS_UniNa/Input_Tab_tools.py
CHANGED
|
@@ -18,11 +18,11 @@ class ImageSet(TABpar):
|
|
|
18
18
|
self.lists=[f for f,v in self.__dict__.items() if type(v)==list]
|
|
19
19
|
self.supported_exts = exts
|
|
20
20
|
super().__init__('ImageSet','Input')
|
|
21
|
-
self.unchecked_fields+=['signals','fname','fnumb']
|
|
21
|
+
self.unchecked_fields+=['signals','fname','fnumb','outFiles']
|
|
22
22
|
if path: self.scanPath(path)
|
|
23
23
|
|
|
24
24
|
def setup(self):
|
|
25
|
-
self.path = ''
|
|
25
|
+
self.path = './'
|
|
26
26
|
self.count = 0
|
|
27
27
|
self.pattern = []
|
|
28
28
|
self.pa = []
|
PaIRS_UniNa/Output_Tab.py
CHANGED
|
@@ -379,7 +379,7 @@ class Output_Tab(gPaIRS_Tab):
|
|
|
379
379
|
self.OUTpar.root=myStandardRoot(self.OUTpar.root)
|
|
380
380
|
|
|
381
381
|
if self.OUTpar.imageFile: self.OUTpar.W,self.OUTpar.H=self.get_image_dimensions(self.OUTpar.inputPath+self.OUTpar.imageFile)
|
|
382
|
-
if (self.
|
|
382
|
+
if (self.OUTpar.isDifferentFrom(self.OUTpar_old,fields=['W','H','inputPath']) and self.OUTpar.ind[:-1]==self.OUTpar_old.ind[:-1] and OUTpar.FlagAutoReshape) or (self.OUTpar_old.imageFile is None and self.OUTpar.W>0 and self.OUTpar.H>0):
|
|
383
383
|
self.button_resize_action()
|
|
384
384
|
self.button_reset_rot_flip_action()
|
|
385
385
|
|
PaIRS_UniNa/Vis_Tab.py
CHANGED
|
@@ -1311,6 +1311,33 @@ class Vis_Tab(gPaIRS_Tab):
|
|
|
1311
1311
|
self.VISpar.size[self.VISpar.type][3]+=dy
|
|
1312
1312
|
|
|
1313
1313
|
def button_FocusIW_action(self):
|
|
1314
|
+
"""
|
|
1315
|
+
Show a popup menu with options 'H x W' and return the selected index (int) or None.
|
|
1316
|
+
Labels are formatted as f"{Vect[2][i]} x {Vect[0][i]}".
|
|
1317
|
+
"""
|
|
1318
|
+
FlagDisp=self.VISpar.variableKey is self.namesPIV.dispMap
|
|
1319
|
+
if FlagDisp: it=-1
|
|
1320
|
+
else:
|
|
1321
|
+
# Ensure consistent length between lists 0 (width values) and 2 (height values)
|
|
1322
|
+
ve=self.VISpar.Pro.Vect if isinstance(self.VISpar.Pro.Vect[0],list) else [[v] for v in self.VISpar.Pro.Vect]
|
|
1323
|
+
Vect = [[val for val in v] for v in ve]
|
|
1324
|
+
n = min(len(Vect[0]), len(Vect[2]))
|
|
1325
|
+
if n == 0:
|
|
1326
|
+
return None
|
|
1327
|
+
|
|
1328
|
+
# Create a context menu and populate it with the available sizes
|
|
1329
|
+
menu = QMenu(self)
|
|
1330
|
+
for i in range(n):
|
|
1331
|
+
label = f"{Vect[2][i]} x {Vect[0][i]}"
|
|
1332
|
+
act = menu.addAction(label)
|
|
1333
|
+
act.setData(i)
|
|
1334
|
+
|
|
1335
|
+
# Display the menu at the current cursor position and wait for user selection
|
|
1336
|
+
chosen = menu.exec(QCursor.pos())
|
|
1337
|
+
it = None if chosen is None else chosen.data()
|
|
1338
|
+
if it is not None: self.FocusIW_it(it)
|
|
1339
|
+
|
|
1340
|
+
def FocusIW_it(self,it=-1):
|
|
1314
1341
|
ve=self.VISpar.Pro.Vect if isinstance(self.VISpar.Pro.Vect[0],list) else [[v] for v in self.VISpar.Pro.Vect]
|
|
1315
1342
|
Vect = [[val for val in v] for v in ve]
|
|
1316
1343
|
if self.VISpar.unit[self.VISpar.type] and self.VISpar.type!=0:
|
|
@@ -1318,20 +1345,20 @@ class Vis_Tab(gPaIRS_Tab):
|
|
|
1318
1345
|
for k in range(2): Vect[k]=[val/self.VISpar.Out.xres for val in Vect[k]]
|
|
1319
1346
|
for k in range(2,4): Vect[k]=[val/yres for val in Vect[k]]
|
|
1320
1347
|
else: yres=1.0
|
|
1321
|
-
W=Vect[2][
|
|
1348
|
+
W=Vect[2][it]
|
|
1322
1349
|
FlagDisp=self.VISpar.variableKey is self.namesPIV.dispMap
|
|
1323
1350
|
if FlagDisp:
|
|
1324
1351
|
H=self.gui.w_Process_Disp.PROpar.SemiWidth_Epipolar*2+1
|
|
1325
1352
|
H/=yres
|
|
1326
1353
|
FlagBordo=False
|
|
1327
1354
|
else:
|
|
1328
|
-
H=Vect[0][
|
|
1355
|
+
H=Vect[0][it]
|
|
1329
1356
|
FlagBordo=self.VISpar.Pro.FlagBordo
|
|
1330
1357
|
if abs(self.VISpar.size[self.VISpar.type][1]-self.VISpar.size[self.VISpar.type][0]-W)<1 and abs(self.VISpar.size[self.VISpar.type][3]-self.VISpar.size[self.VISpar.type][2]-H)<1:
|
|
1331
|
-
dW=W if FlagDisp else Vect[3][
|
|
1358
|
+
dW=W if FlagDisp else Vect[3][it]
|
|
1332
1359
|
boundDist=W/2 if not FlagBordo else dW
|
|
1333
1360
|
x0=int((self.VISpar.size[self.VISpar.type][0]-boundDist+W/2)/dW)*dW+boundDist-W/2 if self.VISpar.size[self.VISpar.type][0]>boundDist else boundDist-W/2
|
|
1334
|
-
dH=H if FlagDisp else Vect[1][
|
|
1361
|
+
dH=H if FlagDisp else Vect[1][it]
|
|
1335
1362
|
boundDist=H/2 if not FlagBordo else dH
|
|
1336
1363
|
y0=int((self.VISpar.size[self.VISpar.type][2]-boundDist+H/2)/dH)*dH+boundDist-H/2 if self.VISpar.size[self.VISpar.type][2]>boundDist else boundDist-H/2
|
|
1337
1364
|
self.VISpar.size[self.VISpar.type][0]=x0
|
|
@@ -1725,6 +1752,8 @@ class Vis_Tab(gPaIRS_Tab):
|
|
|
1725
1752
|
size_pixels=np.shape(U)
|
|
1726
1753
|
Up,_,_,_,_=self.calcMap(U,size_pixels=size_pixels)
|
|
1727
1754
|
Vp,Xp,Yp,_,_=self.calcMap(V,size_pixels=size_pixels)
|
|
1755
|
+
Xp=Xp*xres
|
|
1756
|
+
Yp=Yp*yres
|
|
1728
1757
|
self.stream=self.ui.plot.axes.streamplot(Xp,Yp,Up,Vp,color=VIS_VectorColors[self.VISpar.vectorColor],density=self.VISpar.streamdens,zorder=10)
|
|
1729
1758
|
|
|
1730
1759
|
def cleanAxes(self,FlagAxis=True):
|
PaIRS_UniNa/_PaIRS_PIV.pyd
CHANGED
|
Binary file
|
PaIRS_UniNa/__init__.py
CHANGED
PaIRS_UniNa/addwidgets_ps.py
CHANGED
|
@@ -8,6 +8,7 @@ InitCheck=True #False=Collap closed, True=opened
|
|
|
8
8
|
#fonts
|
|
9
9
|
font_italic=True
|
|
10
10
|
font_weight=QFont.DemiBold
|
|
11
|
+
backgroundcolor_none=" background-color: none;"
|
|
11
12
|
backgroundcolor_changing=" background-color: rgb(255,230,230);"
|
|
12
13
|
color_changing="color: rgb(33,33,255); "+backgroundcolor_changing
|
|
13
14
|
color_changing_black="color: rgb(0,0,0); "+backgroundcolor_changing
|
|
@@ -63,7 +64,7 @@ class MyQLineEdit(QtWidgets.QLineEdit):
|
|
|
63
64
|
if hasStyleFlag:
|
|
64
65
|
if b.styleFlag: continue
|
|
65
66
|
b.flagS=True
|
|
66
|
-
b.initialStyle=b.styleSheet()
|
|
67
|
+
b.initialStyle=b.styleSheet()+" "+backgroundcolor_none
|
|
67
68
|
b.setEnabled(False)
|
|
68
69
|
b.disabledStyle=b.styleSheet()
|
|
69
70
|
b.setEnabled(True)
|
|
@@ -97,24 +98,32 @@ class MyQLineEdit(QtWidgets.QLineEdit):
|
|
|
97
98
|
super().mouseReleaseEvent(event) #to preserve classical behaviour before adding the below
|
|
98
99
|
self.setCompleterList()
|
|
99
100
|
|
|
101
|
+
def enterEvent(self, event):
|
|
102
|
+
super().enterEvent(event)
|
|
103
|
+
if not self.font()==self.font_changing and not self.hasFocus():
|
|
104
|
+
self.setFont(self.font_changing)
|
|
105
|
+
|
|
106
|
+
def leaveEvent(self, event):
|
|
107
|
+
super().leaveEvent(event)
|
|
108
|
+
if self.font()==self.font_changing and not self.hasFocus():
|
|
109
|
+
self.setFont(self.initialFont)
|
|
110
|
+
|
|
100
111
|
def focusInEvent(self, event):
|
|
101
112
|
super().focusInEvent(event)
|
|
102
113
|
for f in self.addfuncin:
|
|
103
114
|
self.addfuncin[f]()
|
|
104
115
|
self.focusInFun()
|
|
105
|
-
|
|
116
|
+
|
|
106
117
|
def setFocus(self):
|
|
107
118
|
super().setFocus()
|
|
108
119
|
self.focusInFun()
|
|
109
120
|
|
|
110
121
|
def focusInFun(self):
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
if (not b==self) and b.flagS:
|
|
117
|
-
b.setStyleSheet(b.initialStyle+" "+color_changing_black)
|
|
122
|
+
self.setStyleSheet(setSS(self,self.initialStyle+" "+color_changing))
|
|
123
|
+
self.setFont(self.font_changing)
|
|
124
|
+
for b in self.bros:
|
|
125
|
+
if (not b==self) and b.flagS:
|
|
126
|
+
b.setStyleSheet(b.initialStyle+" "+color_changing_black)
|
|
118
127
|
|
|
119
128
|
def focusOutEvent(self, event):
|
|
120
129
|
super().focusOutEvent(event) #to preserve classical behaviour before adding the below
|
|
@@ -127,15 +136,14 @@ class MyQLineEdit(QtWidgets.QLineEdit):
|
|
|
127
136
|
self.focusOutFun()
|
|
128
137
|
|
|
129
138
|
def focusOutFun(self):
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
if b
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
b.setFont(b.initialFont)
|
|
139
|
+
for b in self.bros:
|
|
140
|
+
if b.flagS:
|
|
141
|
+
if hasattr(b,'default_stylesheet'):
|
|
142
|
+
b.setStyleSheet(b.default_stylesheet)
|
|
143
|
+
else:
|
|
144
|
+
b.setStyleSheet(setSS(b,b.initialStyle))
|
|
145
|
+
if b.flagF:
|
|
146
|
+
b.setFont(b.initialFont)
|
|
139
147
|
#self.addlab.clear()
|
|
140
148
|
|
|
141
149
|
def showCompleter(self):
|
|
@@ -188,7 +196,7 @@ class MyQSpin(QtWidgets.QSpinBox):
|
|
|
188
196
|
self.bros=[self]+self.addwid
|
|
189
197
|
for b in self.bros:
|
|
190
198
|
if b.styleFlag: continue
|
|
191
|
-
b.initialStyle=b.styleSheet()
|
|
199
|
+
b.initialStyle=b.styleSheet()+" "+backgroundcolor_none
|
|
192
200
|
b.initialFont=b.font()
|
|
193
201
|
b.font_changing=font_changing
|
|
194
202
|
b.styleFlag=True
|
|
@@ -282,7 +290,7 @@ class MyQDoubleSpin(QtWidgets.QDoubleSpinBox):
|
|
|
282
290
|
self.bros=[self]+self.addwid
|
|
283
291
|
for b in self.bros:
|
|
284
292
|
if self.styleFlag: continue
|
|
285
|
-
b.initialStyle=b.styleSheet()
|
|
293
|
+
b.initialStyle=b.styleSheet()+" "+backgroundcolor_none
|
|
286
294
|
b.initialFont=b.font()
|
|
287
295
|
b.font_changing=font_changing
|
|
288
296
|
b.styleFlag=True
|
PaIRS_UniNa/calibView.py
CHANGED
|
@@ -729,6 +729,13 @@ class CalibView(QLabel):
|
|
|
729
729
|
else:
|
|
730
730
|
calVect.remPointsDo[p]=Off
|
|
731
731
|
self.calib.cal.removeBulk()
|
|
732
|
+
if self.calib.cal.flagCalibrated:
|
|
733
|
+
self.calib.cal.checkCalibration() #needed because use the main thread and may exit with an exception
|
|
734
|
+
strPriCalib=self.calib.prettyPrintCalib()
|
|
735
|
+
strPriErrCalib=self.calib.prettyPrintErrCalib()
|
|
736
|
+
pri.Process.blue (strPriErrCalib)
|
|
737
|
+
|
|
738
|
+
self.calib.signals.textFromCalib.emit(strPriErrCalib+'\n'+strPriCalib)
|
|
732
739
|
self.plotPlane(self.calib.plane)
|
|
733
740
|
|
|
734
741
|
@Slot(int)
|
PaIRS_UniNa/gPaIRS.py
CHANGED
|
@@ -941,7 +941,11 @@ class gPaIRS(QMainWindow):
|
|
|
941
941
|
for w in self.tabWidgets:
|
|
942
942
|
if not w.TABpar.FlagNone:
|
|
943
943
|
w:gPaIRS_Tab
|
|
944
|
-
if FlagAdjustPar:
|
|
944
|
+
if FlagAdjustPar:
|
|
945
|
+
FlagSettingPar=TABpar.FlagSettingPar
|
|
946
|
+
TABpar.FlagSettingPar=True
|
|
947
|
+
w.adjustTABpar()
|
|
948
|
+
TABpar.FlagSettingPar=FlagSettingPar
|
|
945
949
|
if FlagBridge: self.bridge(w.TABname)
|
|
946
950
|
FlagAdjustPar=False
|
|
947
951
|
FlagBridge=False
|
|
@@ -1059,12 +1063,15 @@ class gPaIRS(QMainWindow):
|
|
|
1059
1063
|
TABname=tab.TABname
|
|
1060
1064
|
self.bridge(TABname)
|
|
1061
1065
|
if FlagAdjustPar:
|
|
1066
|
+
FlagSettingPar=TABpar.FlagSettingPar
|
|
1067
|
+
TABpar.FlagSettingPar=True
|
|
1062
1068
|
for w in self.tabWidgets:
|
|
1063
1069
|
if w.TABpar.FlagNone: continue
|
|
1064
1070
|
w:gPaIRS_Tab
|
|
1065
1071
|
if w!=tab:
|
|
1066
1072
|
w.adjustTABpar()
|
|
1067
1073
|
self.bridge(w.TABname)
|
|
1074
|
+
TABpar.FlagSettingPar=FlagSettingPar
|
|
1068
1075
|
FlagAdjustPar=False
|
|
1069
1076
|
FlagBridge=False
|
|
1070
1077
|
FlagDisplayControls=False
|
PaIRS_UniNa/procTools.py
CHANGED
|
@@ -328,7 +328,7 @@ class dataTreePar(TABpar):
|
|
|
328
328
|
|
|
329
329
|
def setCompleteLog(self):
|
|
330
330
|
warn1=self.headerSection('WARNINGS',self.warnings[1],'!')
|
|
331
|
-
if self.flagRun:
|
|
331
|
+
if self.flagRun not in (0,-10):
|
|
332
332
|
warn0=''
|
|
333
333
|
self.createLogProc()
|
|
334
334
|
LogProc = self.headerSection('OUTPUT',self.procLog[0])
|
|
@@ -338,7 +338,10 @@ class dataTreePar(TABpar):
|
|
|
338
338
|
if self.warnings[0]: warn0='*Further information:\n'+self.warnings[0]+'\n'
|
|
339
339
|
self.Log=self.createLogHeader()+procLog+warn0+warn1
|
|
340
340
|
else:
|
|
341
|
-
self.
|
|
341
|
+
if self.flagRun:
|
|
342
|
+
self.Log=self.createLogHeader()
|
|
343
|
+
else:
|
|
344
|
+
self.Log=self.createLogHeader()+warn1
|
|
342
345
|
|
|
343
346
|
def createWarningLog(self,warning):
|
|
344
347
|
warn1=self.headerSection('WARNINGS',warning,'!')
|
PaIRS_UniNa/whatsnew.txt
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
%
|
|
2
|
-
*
|
|
1
|
+
% Fixed bugs on streamline visualization in pixel units when a custom resolution is set.<br><br>Fixed incorrect update of reprojection errors in CalVi when enlarging the control point grid.<br><br>Corrected automatic resize/reshape behavior specified in the Output Tab.<br><br>
|
|
2
|
+
* Changed behavior of button for restricting view on interrogation-window area for improved usability.<br><br>Process names copied within the process tree are now automatically updated to avoid conflicts.<br><br>Improved selection behavior in editable input fields.<br><br>
|
|
3
3
|
§ PaIRS now ships with executables! Download them from the <a href="https://www.pairs.unina.it/#download">PaIRS website</a>.<br>
|
|
4
4
|
|
|
5
5
|
# !=critical issue, %=bugfix, &=announcement, *=improvement, £=bold font without icon, §=python distribution
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: PaIRS_UniNa
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.7
|
|
4
4
|
Summary: PaIRS - Particle Image Reconstruction Software
|
|
5
5
|
Home-page: https://pairs.unina.it/
|
|
6
6
|
Author: Gerardo Paolillo and Tommaso Astarita
|
|
@@ -48,19 +48,23 @@ PaIRS-UniNa is supported by Python 3.10+ and is compatible with all the operatin
|
|
|
48
48
|
|
|
49
49
|
For further information, please visit the [PaIRS website](https://www.pairs.unina.it/).
|
|
50
50
|
|
|
51
|
-
## What's new in PaIRS-UniNa 0.2.
|
|
51
|
+
## What's new in PaIRS-UniNa 0.2.7
|
|
52
52
|
|
|
53
53
|
### Bug fixes:
|
|
54
|
-
-
|
|
54
|
+
- Fixed incorrect streamline visualization when viewing images in pixel units.
|
|
55
|
+
- Reprojection errors in CalVi are now correctly recalculated and plotted when expanding the control-point grid.
|
|
56
|
+
- Image transformations are now preserved even with automatic reshape/resize option enabled in the Output tab.
|
|
55
57
|
|
|
56
58
|
### User-interface enhancements:
|
|
57
|
-
-
|
|
59
|
+
- The button for restricting the view on the interrogation-window area now opens a popup menu to select which interrogation-window size to display across process iterations.
|
|
60
|
+
- Duplicated process names are automatically updated to avoid conflicts.
|
|
61
|
+
- Improved behavior of editable fields: accurate cursor positioning, proper highlighting and background restoration.
|
|
58
62
|
|
|
59
63
|
### Distribution:
|
|
60
64
|
- ready-to-use executables of PaIRS are now available!
|
|
61
65
|
|
|
62
66
|
## Portable executable
|
|
63
|
-
Download
|
|
67
|
+
Download the standalone PaIRS_UniNa executable from the [PaIRS website](https://www.pairs.unina.it/#download).
|
|
64
68
|
|
|
65
69
|
## Installation in Python
|
|
66
70
|
All PaIRS-UniNa wheels are distributed under LGPLv3+ licences. The installation can be performed with:
|
|
@@ -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=Gcr2QgLRo6tonBqiz7dw0CmrDubMZHGyp8-qsANGS4k,10449
|
|
3
3
|
PaIRS_UniNa/Custom_Top.py,sha256=lBF8_GmJYauWSuhOUH0R-kllv7_gBLIcVZruarVe6kg,11943
|
|
4
|
-
PaIRS_UniNa/Explorer.py,sha256=
|
|
4
|
+
PaIRS_UniNa/Explorer.py,sha256=3Sa2AOFRKCsrsafMLK0ePDPq2P8HHOCPPCMXWG22A_g,138025
|
|
5
5
|
PaIRS_UniNa/FolderLoop.py,sha256=5NSzQQHc1ek3Jj_3nwAJ6dVaRGmE_BXCc7o8-6QGHXQ,16237
|
|
6
|
-
PaIRS_UniNa/Input_Tab.py,sha256=
|
|
7
|
-
PaIRS_UniNa/Input_Tab_CalVi.py,sha256=
|
|
8
|
-
PaIRS_UniNa/Input_Tab_tools.py,sha256=
|
|
6
|
+
PaIRS_UniNa/Input_Tab.py,sha256=7mJsvE2v0vq2Dwig1jBzYjToSa9XxOiQj51GvD7KQLM,33291
|
|
7
|
+
PaIRS_UniNa/Input_Tab_CalVi.py,sha256=0Wxm3D541A48k3zgeHY1WE9VgP3YCnRijZQNYbB1jbw,34477
|
|
8
|
+
PaIRS_UniNa/Input_Tab_tools.py,sha256=eVWFxIoYrEXCumbvSxTx6EqLcPzWZP6zzFzahPoyNQk,124008
|
|
9
9
|
PaIRS_UniNa/Log_Tab.py,sha256=beiXlmPlIpt1VMl10ZxFGK6mTpWmm8Jy4d2ckNsQigs,3603
|
|
10
|
-
PaIRS_UniNa/Output_Tab.py,sha256=
|
|
10
|
+
PaIRS_UniNa/Output_Tab.py,sha256=BUYJVELC__OC0nfDaWV0tEkWTdzqbZ0weihkQq7yTmc,41144
|
|
11
11
|
PaIRS_UniNa/PaIRS.py,sha256=paXrJMdEqwjH18suV1GREZi5VNo1x--Bam2JT1kpoBs,347
|
|
12
12
|
PaIRS_UniNa/PaIRS_PIV.py,sha256=ROaCHUP7QWyy4CqHOH0mYWp-IiOCvuayn2mJGUQ0ewY,47077
|
|
13
13
|
PaIRS_UniNa/PaIRS_pypacks.py,sha256=ugVcj454eYcirIHeXA55ZiO9IJJKYXe-Np7GUt3Ey-c,60071
|
|
@@ -18,16 +18,16 @@ PaIRS_UniNa/Process_Tab_Min.py,sha256=RCP11E7aKoP_wU6yhktUN6N9rD5SwYZhfCGGldq7tY
|
|
|
18
18
|
PaIRS_UniNa/ResizePopup.py,sha256=XvS5VFDE_s3sNv6pcWIt4rodSk5I_oFl3S9tRK90evg,1804
|
|
19
19
|
PaIRS_UniNa/Saving_tools.py,sha256=_ku71sU7tTRiNahJjLumagw4mclqFVPJDsweluc34C0,11150
|
|
20
20
|
PaIRS_UniNa/TabTools.py,sha256=_geVIsK2yVy2BoxKGDmLCO55y6SoSsRvBAMLylaP4n8,54484
|
|
21
|
-
PaIRS_UniNa/Vis_Tab.py,sha256=
|
|
21
|
+
PaIRS_UniNa/Vis_Tab.py,sha256=UyCBltsgf4yDC06NDc_J24-6PuwEo-jJQgOyat_svqE,96562
|
|
22
22
|
PaIRS_UniNa/Vis_Tab_CalVi.py,sha256=w9eI_MfFiIp3puk74g3gyPw0vzI1wajKYH15IxwKFg8,42803
|
|
23
23
|
PaIRS_UniNa/Whatsnew.py,sha256=F1ysfb67HWdTpUrmBIFrmHRXGh38KwsggqsRp0xTExc,5682
|
|
24
|
-
PaIRS_UniNa/_PaIRS_PIV.pyd,sha256=
|
|
25
|
-
PaIRS_UniNa/__init__.py,sha256=
|
|
24
|
+
PaIRS_UniNa/_PaIRS_PIV.pyd,sha256=lvioIebuXPaMzkIZicGFTtWGChA_CgMBueloK6F2FIg,3561984
|
|
25
|
+
PaIRS_UniNa/__init__.py,sha256=8xjLzYEMav_W1q57ZciEHJaSr74kVLePaL9anR9HO9M,143
|
|
26
26
|
PaIRS_UniNa/__main__.py,sha256=639RU4DJEr8cAWbT8BOikjT_hd6Vxvo5xgWxyo54GAI,1369
|
|
27
|
-
PaIRS_UniNa/addwidgets_ps.py,sha256=
|
|
27
|
+
PaIRS_UniNa/addwidgets_ps.py,sha256=2KvIs_GkeN9w77vinEDLa67eVRrmqNGCIGMuUSvHhdE,43021
|
|
28
28
|
PaIRS_UniNa/calib.py,sha256=njCPx4qMcOrpJBLQjQXVKneqo-svl4gjGWoNIAB2jgk,66036
|
|
29
|
-
PaIRS_UniNa/calibView.py,sha256=
|
|
30
|
-
PaIRS_UniNa/gPaIRS.py,sha256=
|
|
29
|
+
PaIRS_UniNa/calibView.py,sha256=jzOw-rHko87Cl11GnOH5zZzko3Ri86T9fIwgmU2JZig,34366
|
|
30
|
+
PaIRS_UniNa/gPaIRS.py,sha256=9LaIylzqUsr0Beyj8CpLz8L2AvMX5WijPhWPTUUVOLM,181891
|
|
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
|
|
@@ -36,7 +36,7 @@ PaIRS_UniNa/parForWorkers.py,sha256=W_4A5A4GtRQ0GLlPw5nkW5xs3hmgv9FH2LuU6HixhL0,
|
|
|
36
36
|
PaIRS_UniNa/pivParFor.py,sha256=oQX0Pz9EJh2Yf2KKGtM9RQ5wNpM452lWxkrilWJ6v4s,11153
|
|
37
37
|
PaIRS_UniNa/plt_util.py,sha256=fqVCrAptE55qpFPPiKHUfFa3S4jUUETPRrB6w6CoWbs,3327
|
|
38
38
|
PaIRS_UniNa/preProcParFor.py,sha256=XqigjWdcTWtYlEcdINx6YY_jE9BE3gw5ET_hITAMxJc,7474
|
|
39
|
-
PaIRS_UniNa/procTools.py,sha256=
|
|
39
|
+
PaIRS_UniNa/procTools.py,sha256=N3n1B8xdC6Mx66iM33AOwTjNMlRRgovh4eRD967f38k,65862
|
|
40
40
|
PaIRS_UniNa/readcfg.py,sha256=RBbQNVNfChA8O-ZEWJliuu7T4xOS7PRxFE08TlJKekc,2122
|
|
41
41
|
PaIRS_UniNa/rqrdpckgs.txt,sha256=3m2BSs46Z_l4rDFF2xvSGfGTUMNn1m0Xgmc4UD9U8jE,219
|
|
42
42
|
PaIRS_UniNa/stereoPivParFor.py,sha256=_5_9_G2F52FLmYcX_UDLBj_CN-7r17vKUcZavAxB53c,11248
|
|
@@ -58,7 +58,7 @@ PaIRS_UniNa/ui_Vis_Tab_CalVi.py,sha256=-YpyQgycMVP_AzLdreNshprk1n_lNDxCtoeVgwmBE
|
|
|
58
58
|
PaIRS_UniNa/ui_Whatsnew.py,sha256=mQkGMzgHQeQqAftF3icu7GvczazFDLMX8BCTem_27ss,5776
|
|
59
59
|
PaIRS_UniNa/ui_gPairs.py,sha256=QKzIIp8Ogfb09pSAKH3gBq3F7Sfl75EBfsmFM6lVH2g,46026
|
|
60
60
|
PaIRS_UniNa/ui_infoPaIRS.py,sha256=AhJ8YUfH9zj6OEIec351cSAUFhpkHdzLWPOG1V0yj4M,37835
|
|
61
|
-
PaIRS_UniNa/whatsnew.txt,sha256=
|
|
61
|
+
PaIRS_UniNa/whatsnew.txt,sha256=KDLUkgPgG5qoW2hmTVv5c2jPwrrU4hkSj5VqtZ05xeo,797
|
|
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
|
|
@@ -319,7 +319,7 @@ PaIRS_UniNa/icons/colormaps/viridis.png,sha256=AYaCSf5zUaSiyfuC1aGnMxawTUTqVl-81
|
|
|
319
319
|
PaIRS_UniNa/icons/colormaps/whiteVector.png,sha256=-TPqm1S9e4OQ4Ee-9piT3bFfXg6TWEw20lvrmeCrnKY,350
|
|
320
320
|
PaIRS_UniNa/icons/colormaps/winter.png,sha256=ANqoViwtVfvAULokJaAp21xx8sjQJ1jEzYjAVo5WPtM,250
|
|
321
321
|
PaIRS_UniNa/icons/colormaps/yellowVector.png,sha256=RQJhq_Ft9GxpiH5Mac0E0KXJlfGtPdP5M4kn0qsrFz4,353
|
|
322
|
-
pairs_unina-0.2.
|
|
323
|
-
pairs_unina-0.2.
|
|
324
|
-
pairs_unina-0.2.
|
|
325
|
-
pairs_unina-0.2.
|
|
322
|
+
pairs_unina-0.2.7.dist-info/METADATA,sha256=eWo-FkP2XRRFWAntdbgZM3-TNDZKseEgS0_h4qOEvDc,8750
|
|
323
|
+
pairs_unina-0.2.7.dist-info/WHEEL,sha256=qV0EIPljj1XC_vuSatRWjn02nZIz3N1t8jsZz7HBr2U,101
|
|
324
|
+
pairs_unina-0.2.7.dist-info/top_level.txt,sha256=zxMsZBZRcjIXsv4CLSJ6RV0GhzeX89lx-JMfCCMkkYE,23
|
|
325
|
+
pairs_unina-0.2.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|