44 simplify_coords_vw_idx ,
55)
66
7+ import copy
78import numpy as np
89import pyqtgraph as pg
910
1011from funscript_editor .algorithms .signal import Signal
1112from funscript_editor .ui .cut_tracking_result import Slider
1213
14+ class QHLine (QtWidgets .QFrame ):
15+ def __init__ (self ):
16+ super (QHLine , self ).__init__ ()
17+ self .setFrameShape (QtWidgets .QFrame .HLine )
18+ self .setFrameShadow (QtWidgets .QFrame .Sunken )
1319
1420class PostprocessingWidget (QtWidgets .QWidget ):
1521 def __init__ (self , metric , raw_score , video_info , parent = None ):
@@ -97,14 +103,27 @@ def add_custom_tab(self):
97103 self .tabs_content [tab_name ]["widgets" ]["evenly_intermediate" ] = QtWidgets .QCheckBox ("Evenly Intermediate" )
98104 self .tabs_content [tab_name ]["widgets" ]["evenly_intermediate" ].stateChanged .connect (self .update_plot )
99105
100- self .tabs_content [tab_name ]["widgets" ]["runs" ] = Slider ("Additionl Points Algorthm Runs " , 8 , 2 )
106+ self .tabs_content [tab_name ]["widgets" ]["runs" ] = Slider ("Max additional Points " , 8 , 2 )
101107 self .tabs_content [tab_name ]["widgets" ]["runs" ].slider .valueChanged .connect (self .update_plot )
102108
109+ self .tabs_content [tab_name ]["widgets" ]["lower" ] = Slider ("Lower Offset" , 100 , 0 )
110+ self .tabs_content [tab_name ]["widgets" ]["lower" ].slider .valueChanged .connect (self .update_plot )
111+
112+ self .tabs_content [tab_name ]["widgets" ]["upper" ] = Slider ("Upper Offset" , 100 , 0 )
113+ self .tabs_content [tab_name ]["widgets" ]["upper" ].slider .valueChanged .connect (self .update_plot )
114+
115+ self .tabs_content [tab_name ]["main" ].layout .addWidget (QtWidgets .QLabel ("Points:" ))
103116 self .tabs_content [tab_name ]["main" ].layout .addWidget (self .tabs_content [tab_name ]["widgets" ]["points" ])
117+ self .tabs_content [tab_name ]["main" ].layout .addWidget (QHLine ())
118+ self .tabs_content [tab_name ]["main" ].layout .addWidget (QtWidgets .QLabel ("Additinal Points:" ))
104119 self .tabs_content [tab_name ]["main" ].layout .addWidget (self .tabs_content [tab_name ]["widgets" ]["high_second_derivate" ])
105120 self .tabs_content [tab_name ]["main" ].layout .addWidget (self .tabs_content [tab_name ]["widgets" ]["distance_minimization" ])
106121 self .tabs_content [tab_name ]["main" ].layout .addWidget (self .tabs_content [tab_name ]["widgets" ]["evenly_intermediate" ])
107122 self .tabs_content [tab_name ]["main" ].layout .addWidget (self .tabs_content [tab_name ]["widgets" ]["runs" ])
123+ self .tabs_content [tab_name ]["main" ].layout .addWidget (QHLine ())
124+ self .tabs_content [tab_name ]["main" ].layout .addWidget (QtWidgets .QLabel ("Offset:" ))
125+ self .tabs_content [tab_name ]["main" ].layout .addWidget (self .tabs_content [tab_name ]["widgets" ]["lower" ])
126+ self .tabs_content [tab_name ]["main" ].layout .addWidget (self .tabs_content [tab_name ]["widgets" ]["upper" ])
108127
109128 self .tabs_content [tab_name ]["main" ].setLayout (self .tabs_content [tab_name ]["main" ].layout )
110129 self .tabs .addTab (self .tabs_content [tab_name ]["main" ], tab_name )
@@ -138,6 +157,8 @@ def update_plot(self):
138157 if current_tab_name == "Custom" :
139158 base_algo = self .tabs_content [current_tab_name ]["widgets" ]["points" ].currentText ()
140159 runs = self .tabs_content [current_tab_name ]["widgets" ]["runs" ].x
160+ offset_lower = self .tabs_content [current_tab_name ]["widgets" ]["lower" ].x
161+ offset_upper = self .tabs_content [current_tab_name ]["widgets" ]["upper" ].x
141162
142163 base_point_algorithm = Signal .BasePointAlgorithm .local_min_max
143164 if base_algo == 'Direction Changed' :
@@ -160,6 +181,15 @@ def update_plot(self):
160181 additional_points_algorithms ,
161182 additional_points_repetitions = runs
162183 )
163- self .result_val = [val for idx ,val in enumerate (self .raw_score ) if idx in self .result_idx ]
184+ categorized = signal .categorize_points (self .raw_score , self .result_idx )
185+ self .result_val = []
186+ score = copy .deepcopy (self .raw_score )
187+ score_min , score_max = min (score ), max (score )
188+ for idx in categorized ['upper' ]:
189+ score [idx ] = max (( score_min , min ((score_max , score [idx ] + offset_upper )) ))
190+ for idx in categorized ['lower' ]:
191+ score [idx ] = max (( score_min , min ((score_max , score [idx ] - offset_lower )) ))
192+
193+ self .result_val = [val for idx ,val in enumerate (score ) if idx in self .result_idx ]
164194 self .curve_result .setData (self .result_idx , self .result_val )
165195 return
0 commit comments