fix del comportamento della simulazione in editing che non si fermava senza spline

This commit is contained in:
VALLONGOL 2025-10-14 13:19:05 +02:00
parent e62b584981
commit 717d6b63de
6 changed files with 126 additions and 109 deletions

View File

@ -1,101 +1,100 @@
x_nm,y_nm x_nm,y_nm
0.17452406437283513,9.998476951563912 1.7364817766693033,9.84807753012208
0.2859422147817867,10.279638104623308 1.8196915585801245,9.997286852043835
0.4421393353133215,10.609933583832394 1.909698355298528,10.164705993254746
0.636432547474389,10.985187585712282 2.006314644389864,10.349354914685591
0.8621389727719386,11.401224306784082 2.1093529034194827,10.550253577267155
1.1125757327129193,11.853867943568899 2.218625609952734,10.766421941930222
1.3810599488042814,12.338942692587844 2.3339452415549684,10.99687996960557
1.6609087425529734,12.852272750362022 2.4551242757915364,11.240647621223985
1.9454392354659444,13.389682313412546 2.581975190227787,11.496744857716246
2.227968549050145,13.946995578260525 2.714310462429072,11.764191640013136
2.5018138048125236,14.520036741427065 2.851942569960741,12.04200792904544
2.7602921242600305,15.104629999433275 2.9946839903881437,12.329213685743936
2.996720628899614,15.696599548800267 3.14234720127663,12.624828871039403
3.2044164402382243,16.291769586049142 3.2947446801915516,12.927873445862636
3.3766966797828104,16.885964307701016 3.4516889046982575,13.237367371144403
3.5068784690403216,17.475007910277 3.612992352362098,13.552330607815493
3.588278929517707,18.054724590298196 3.7784675007484245,13.871783116806688
3.6142151827219164,18.620938544285714 3.947926827422586,14.19474485904877
3.578004350159902,19.169473968760666 4.121182809949932,14.520235795472518
3.472963553338606,19.696155060244156 4.298047925895815,14.847275887008719
3.4729635533386065,19.69615506024416 4.478334652825583,15.17488509458815
3.272762644392875,20.217383756990923 4.661855468304586,15.502083379141595
2.964843068011936,20.750866222507394 4.848422849898178,15.827890701599843
2.5631793345343286,21.294382991192247 5.037849275171705,16.151327022893664
2.081745954298589,21.845714597444157 5.2299472216905185,16.471412303953848
1.5345174376432555,22.402641575661793 5.424529167019969,16.787166505711173
0.9354682949068648,22.962944460243826 5.621407588725407,17.09760958909643
0.2985730364279542,23.52440378558893 5.8203949643721815,17.401761515040384
-0.36219382745493856,24.084800086095772 6.021303771525644,17.698642244473834
-1.032857786403277,24.641913896163032 6.223946487751144,17.987271738327554
-1.699444330078522,25.193525750189377 6.4281355906140325,18.26666995753233
-2.347978948142139,25.737416182573483 6.6336835576796584,18.535856863018942
-2.964487130255587,26.271365727714013 6.840402866513372,18.79385241571817
-3.5349943660803307,26.793154920009652 6.840402866513374,18.79385241571817
-4.045526145277833,27.30056429385906 7.064412663195302,19.043619595904882
-4.482107957509558,27.79137438366092 7.319986102939524,19.28896147814137
-4.830765292436963,28.263365723813894 7.604166677012322,19.530158164789555
-5.077523639721516,28.714318848716662 7.913997876679983,19.767489758211376
-5.208408489024677,29.14201429276789 8.246523193208787,20.001236360768743
-5.2094453300079095,29.544232590366253 8.598786117865023,20.231678074823588
-5.2094453300079095,29.544232590366242 8.96783014191497,20.459095002737843
-5.087215806911271,29.93160758132983 9.350698756624908,20.683767246873423
-4.8634013589893685,30.31504050771131 9.744435453261131,20.90597490959226
-4.54667716842549,30.69271300726126 10.146083723089918,21.12599809325628
-4.145718417402923,31.062806717730222 10.552687057377549,21.3441169002274
-3.6692002881049564,31.42350327686877 10.961288947390312,21.560611432867567
-3.1257979627148766,31.772984322427458 11.368932884394491,21.775761793538678
-2.5241866234159707,32.10943149215684 11.772662359656369,21.989848084602684
-1.873041452391528,32.43102642380748 12.169520864442228,22.203150408421493
-1.1810376318248348,32.735950755129934 12.556551890018351,22.41594886735704
-0.4568503438991798,33.02238612387475 12.930798927651024,22.62852356377125
0.29084522920215017,33.28851416779252 13.289305468606532,22.84115460002604
1.0533739052958677,33.53251652463377 13.629115004151155,23.054122078483353
1.822060502198683,33.75257483214907 13.947271025551181,23.267706101505095
2.5882298377273103,33.94687072808898 14.24081702407289,23.482186771453204
3.343206729698462,34.113585850204075 14.506796490982568,23.6978441906896
4.078315995928851,34.25090183624488 14.742252917546494,23.91495846157622
4.784882454235189,34.35700032396197 14.944229795030958,24.133809686474972
5.454230922434187,34.430062951105924 15.109770614702246,24.354677967747794
6.077686218342558,34.46827135542727 15.23591886782663,24.57784340775661
6.077686218342562,34.468271355427284 15.319718045670406,24.80358610886334
6.6950615437258465,34.47971290071672 15.358211639499848,25.032186173429917
7.3476044195818755,34.472832854810775 15.348443140581244,25.26392370381826
8.028791142575807,34.44634971152879 15.28745604018088,25.499078802390304
8.732098009372796,34.3989819646901 15.172293829565035,25.737931571507964
9.451001316637997,34.32944810811404 15.0,25.980762113533167
10.178977361036566,34.23646663561996 14.999999999999998,25.98076211353316
10.909502439233654,34.11875604102719 14.76007873005941,26.230939963143115
11.636052847894423,33.97503481815507 14.447076186168827,26.491050501357915
12.352104883684024,33.80402146082294 14.065598841372388,26.760197600053854
13.051134843267612,33.60443446285013 13.62025316871424,27.037485131107207
13.726619023310347,33.37499231805599 13.11564564123853,27.322016966394273
14.372033720477376,33.114413520259845 12.556382731989396,27.612896977791323
14.98085523143386,32.82141656328105 11.947070914010986,27.909229037174644
15.546559852844958,32.49471994093893 11.292316660347446,28.210117016420522
16.062623881375814,32.13304214705283 10.596726444042913,28.514664787405238
16.522523613691593,31.735101675442085 9.86490673814154,28.82197622200508
16.919735346457447,31.29961701992603 9.101464015687464,29.13115519209633
17.247735376338525,30.825306674324008 8.311004749724834,29.441305569555276
17.499999999999996,30.310889132455358 7.498135413297791,29.751531226258194
17.499999999999996,30.310889132455355 6.66746247945048,30.060936034081376
17.667951456825268,29.722378176057024 5.823592421227048,30.368623864901103
17.752649951768674,29.034858901953363 4.971131711671633,30.67369859059366
17.76202872985173,28.26065677659477 4.114686823828384,30.97526408303533
17.704021036095945,27.412097266431687 3.2588642307414455,31.272424214102394
17.586560115522854,26.501505837914515 2.4082704054549575,31.564282855671145
17.417579213153953,25.541207957493693 1.5675118210130687,31.84994387961786
17.205011574010783,24.54352909161962 0.7411949504599216,32.12851115781883
16.956790443114837,23.52079470674273 -0.06607373316034426,32.39908856215034
16.68084906548765,22.485330269313444 -0.8496877568035757,32.660779964488654
16.385120686150735,21.449461245782175 -1.6050406474256338,32.91268923671007
16.0775385501256,20.425513102599343 -2.3275259319823753,33.15392025069089
15.766035902433776,19.42581130621538 -3.0125371374296517,33.38357687830738
15.45854598809677,18.462681323080695 -3.6554677907233284,33.600762991435815
15.1630020521361,17.5484486196457 -4.2517114188192515,33.80458246195249
14.88733733957329,16.69543866236083 -4.796661548673278,33.99413916173369
14.639485095429851,15.9159769176765 -5.285711707241269,34.1685369626557
14.427378564727302,15.222388852043133 -5.714255421479081,34.326879736594805
14.258950992487165,14.626999931911136 -6.077686218342556,34.46827135542728
14.142135623730947,14.142135623730947

1 x_nm y_nm
2 0.17452406437283513 1.7364817766693033 9.998476951563912 9.84807753012208
3 0.2859422147817867 1.8196915585801245 10.279638104623308 9.997286852043835
4 0.4421393353133215 1.909698355298528 10.609933583832394 10.164705993254746
5 0.636432547474389 2.006314644389864 10.985187585712282 10.349354914685591
6 0.8621389727719386 2.1093529034194827 11.401224306784082 10.550253577267155
7 1.1125757327129193 2.218625609952734 11.853867943568899 10.766421941930222
8 1.3810599488042814 2.3339452415549684 12.338942692587844 10.99687996960557
9 1.6609087425529734 2.4551242757915364 12.852272750362022 11.240647621223985
10 1.9454392354659444 2.581975190227787 13.389682313412546 11.496744857716246
11 2.227968549050145 2.714310462429072 13.946995578260525 11.764191640013136
12 2.5018138048125236 2.851942569960741 14.520036741427065 12.04200792904544
13 2.7602921242600305 2.9946839903881437 15.104629999433275 12.329213685743936
14 2.996720628899614 3.14234720127663 15.696599548800267 12.624828871039403
15 3.2044164402382243 3.2947446801915516 16.291769586049142 12.927873445862636
16 3.3766966797828104 3.4516889046982575 16.885964307701016 13.237367371144403
17 3.5068784690403216 3.612992352362098 17.475007910277 13.552330607815493
18 3.588278929517707 3.7784675007484245 18.054724590298196 13.871783116806688
19 3.6142151827219164 3.947926827422586 18.620938544285714 14.19474485904877
20 3.578004350159902 4.121182809949932 19.169473968760666 14.520235795472518
21 3.472963553338606 4.298047925895815 19.696155060244156 14.847275887008719
22 3.4729635533386065 4.478334652825583 19.69615506024416 15.17488509458815
23 3.272762644392875 4.661855468304586 20.217383756990923 15.502083379141595
24 2.964843068011936 4.848422849898178 20.750866222507394 15.827890701599843
25 2.5631793345343286 5.037849275171705 21.294382991192247 16.151327022893664
26 2.081745954298589 5.2299472216905185 21.845714597444157 16.471412303953848
27 1.5345174376432555 5.424529167019969 22.402641575661793 16.787166505711173
28 0.9354682949068648 5.621407588725407 22.962944460243826 17.09760958909643
29 0.2985730364279542 5.8203949643721815 23.52440378558893 17.401761515040384
30 -0.36219382745493856 6.021303771525644 24.084800086095772 17.698642244473834
31 -1.032857786403277 6.223946487751144 24.641913896163032 17.987271738327554
32 -1.699444330078522 6.4281355906140325 25.193525750189377 18.26666995753233
33 -2.347978948142139 6.6336835576796584 25.737416182573483 18.535856863018942
34 -2.964487130255587 6.840402866513372 26.271365727714013 18.79385241571817
35 -3.5349943660803307 6.840402866513374 26.793154920009652 18.79385241571817
36 -4.045526145277833 7.064412663195302 27.30056429385906 19.043619595904882
37 -4.482107957509558 7.319986102939524 27.79137438366092 19.28896147814137
38 -4.830765292436963 7.604166677012322 28.263365723813894 19.530158164789555
39 -5.077523639721516 7.913997876679983 28.714318848716662 19.767489758211376
40 -5.208408489024677 8.246523193208787 29.14201429276789 20.001236360768743
41 -5.2094453300079095 8.598786117865023 29.544232590366253 20.231678074823588
42 -5.2094453300079095 8.96783014191497 29.544232590366242 20.459095002737843
43 -5.087215806911271 9.350698756624908 29.93160758132983 20.683767246873423
44 -4.8634013589893685 9.744435453261131 30.31504050771131 20.90597490959226
45 -4.54667716842549 10.146083723089918 30.69271300726126 21.12599809325628
46 -4.145718417402923 10.552687057377549 31.062806717730222 21.3441169002274
47 -3.6692002881049564 10.961288947390312 31.42350327686877 21.560611432867567
48 -3.1257979627148766 11.368932884394491 31.772984322427458 21.775761793538678
49 -2.5241866234159707 11.772662359656369 32.10943149215684 21.989848084602684
50 -1.873041452391528 12.169520864442228 32.43102642380748 22.203150408421493
51 -1.1810376318248348 12.556551890018351 32.735950755129934 22.41594886735704
52 -0.4568503438991798 12.930798927651024 33.02238612387475 22.62852356377125
53 0.29084522920215017 13.289305468606532 33.28851416779252 22.84115460002604
54 1.0533739052958677 13.629115004151155 33.53251652463377 23.054122078483353
55 1.822060502198683 13.947271025551181 33.75257483214907 23.267706101505095
56 2.5882298377273103 14.24081702407289 33.94687072808898 23.482186771453204
57 3.343206729698462 14.506796490982568 34.113585850204075 23.6978441906896
58 4.078315995928851 14.742252917546494 34.25090183624488 23.91495846157622
59 4.784882454235189 14.944229795030958 34.35700032396197 24.133809686474972
60 5.454230922434187 15.109770614702246 34.430062951105924 24.354677967747794
61 6.077686218342558 15.23591886782663 34.46827135542727 24.57784340775661
62 6.077686218342562 15.319718045670406 34.468271355427284 24.80358610886334
63 6.6950615437258465 15.358211639499848 34.47971290071672 25.032186173429917
64 7.3476044195818755 15.348443140581244 34.472832854810775 25.26392370381826
65 8.028791142575807 15.28745604018088 34.44634971152879 25.499078802390304
66 8.732098009372796 15.172293829565035 34.3989819646901 25.737931571507964
67 9.451001316637997 15.0 34.32944810811404 25.980762113533167
68 10.178977361036566 14.999999999999998 34.23646663561996 25.98076211353316
69 10.909502439233654 14.76007873005941 34.11875604102719 26.230939963143115
70 11.636052847894423 14.447076186168827 33.97503481815507 26.491050501357915
71 12.352104883684024 14.065598841372388 33.80402146082294 26.760197600053854
72 13.051134843267612 13.62025316871424 33.60443446285013 27.037485131107207
73 13.726619023310347 13.11564564123853 33.37499231805599 27.322016966394273
74 14.372033720477376 12.556382731989396 33.114413520259845 27.612896977791323
75 14.98085523143386 11.947070914010986 32.82141656328105 27.909229037174644
76 15.546559852844958 11.292316660347446 32.49471994093893 28.210117016420522
77 16.062623881375814 10.596726444042913 32.13304214705283 28.514664787405238
78 16.522523613691593 9.86490673814154 31.735101675442085 28.82197622200508
79 16.919735346457447 9.101464015687464 31.29961701992603 29.13115519209633
80 17.247735376338525 8.311004749724834 30.825306674324008 29.441305569555276
81 17.499999999999996 7.498135413297791 30.310889132455358 29.751531226258194
82 17.499999999999996 6.66746247945048 30.310889132455355 30.060936034081376
83 17.667951456825268 5.823592421227048 29.722378176057024 30.368623864901103
84 17.752649951768674 4.971131711671633 29.034858901953363 30.67369859059366
85 17.76202872985173 4.114686823828384 28.26065677659477 30.97526408303533
86 17.704021036095945 3.2588642307414455 27.412097266431687 31.272424214102394
87 17.586560115522854 2.4082704054549575 26.501505837914515 31.564282855671145
88 17.417579213153953 1.5675118210130687 25.541207957493693 31.84994387961786
89 17.205011574010783 0.7411949504599216 24.54352909161962 32.12851115781883
90 16.956790443114837 -0.06607373316034426 23.52079470674273 32.39908856215034
91 16.68084906548765 -0.8496877568035757 22.485330269313444 32.660779964488654
92 16.385120686150735 -1.6050406474256338 21.449461245782175 32.91268923671007
93 16.0775385501256 -2.3275259319823753 20.425513102599343 33.15392025069089
94 15.766035902433776 -3.0125371374296517 19.42581130621538 33.38357687830738
95 15.45854598809677 -3.6554677907233284 18.462681323080695 33.600762991435815
96 15.1630020521361 -4.2517114188192515 17.5484486196457 33.80458246195249
97 14.88733733957329 -4.796661548673278 16.69543866236083 33.99413916173369
98 14.639485095429851 -5.285711707241269 15.9159769176765 34.1685369626557
99 14.427378564727302 -5.714255421479081 15.222388852043133 34.326879736594805
100 14.258950992487165 -6.077686218342556 14.626999931911136 34.46827135542728
14.142135623730947 14.142135623730947

View File

@ -114,7 +114,7 @@
"target_azimuth_deg": 45.0 "target_azimuth_deg": 45.0
} }
], ],
"use_spline": false "use_spline": true
}, },
{ {
"target_id": 1, "target_id": 1,
@ -150,7 +150,7 @@
"target_azimuth_deg": -10.0 "target_azimuth_deg": -10.0
} }
], ],
"use_spline": false "use_spline": true
} }
] ]
} }

View File

@ -245,6 +245,9 @@ class Target:
self._sim_time_s += delta_time_s self._sim_time_s += delta_time_s
self._time_in_waypoint_s += delta_time_s self._time_in_waypoint_s += delta_time_s
if self._current_waypoint_index == -1: if self._current_waypoint_index == -1:
# Traiettoria terminata: disattiva target
self.active = False
self.current_velocity_fps = 0.0
return return
wp = self.trajectory[self._current_waypoint_index] wp = self.trajectory[self._current_waypoint_index]
duration = wp._calculated_duration_s if wp._calculated_duration_s is not None else wp.duration_s or 0.0 duration = wp._calculated_duration_s if wp._calculated_duration_s is not None else wp.duration_s or 0.0
@ -256,6 +259,9 @@ class Target:
self.current_altitude_ft = wp.target_altitude_ft or self.current_altitude_ft self.current_altitude_ft = wp.target_altitude_ft or self.current_altitude_ft
self._activate_next_waypoint() self._activate_next_waypoint()
if self._current_waypoint_index == -1: if self._current_waypoint_index == -1:
# Traiettoria terminata: disattiva target
self.active = False
self.current_velocity_fps = 0.0
return return
wp = self.trajectory[self._current_waypoint_index] # Get new active waypoint wp = self.trajectory[self._current_waypoint_index] # Get new active waypoint
duration = wp._calculated_duration_s if wp._calculated_duration_s is not None else wp.duration_s or 0.0 duration = wp._calculated_duration_s if wp._calculated_duration_s is not None else wp.duration_s or 0.0

View File

@ -79,6 +79,17 @@ class SimulationEngine(threading.Thread):
self.scenario.update_state(simulated_delta_time) self.scenario.update_state(simulated_delta_time)
updated_targets = self.scenario.get_all_targets() updated_targets = self.scenario.get_all_targets()
# --- Check for simulation end ---
if hasattr(self.scenario, 'is_finished') and self.scenario.is_finished():
self.logger.info("Simulation finished: auto-stopping thread.")
self._stop_event.set()
if self.update_queue:
try:
self.update_queue.put_nowait('SIMULATION_FINISHED')
except Exception:
pass
break
# --- Communication Step (conditional) --- # --- Communication Step (conditional) ---
if self.communicator and self.communicator.is_open: if self.communicator and self.communicator.is_open:
if current_time - self._last_update_time >= self.update_interval_s: if current_time - self._last_update_time >= self.update_interval_s:

View File

@ -145,7 +145,7 @@ class MainView(tk.Tk):
ttk.Label(engine_frame, text="Speed:").pack(side=tk.LEFT, padx=(10, 2), pady=5) ttk.Label(engine_frame, text="Speed:").pack(side=tk.LEFT, padx=(10, 2), pady=5)
self.time_multiplier_var = tk.StringVar(value="1x") self.time_multiplier_var = tk.StringVar(value="1x")
self.multiplier_combo = ttk.Combobox(engine_frame, textvariable=self.time_multiplier_var, values=["1x", "2x", "4x", "10x"], state="readonly", width=4) self.multiplier_combo = ttk.Combobox(engine_frame, textvariable=self.time_multiplier_var, values=["1x", "2x", "4x", "10x", "20x"], state="readonly", width=4)
self.multiplier_combo.pack(side=tk.LEFT, padx=(0, 5), pady=5) self.multiplier_combo.pack(side=tk.LEFT, padx=(0, 5), pady=5)
self.multiplier_combo.bind("<<ComboboxSelected>>", self._on_time_multiplier_changed) self.multiplier_combo.bind("<<ComboboxSelected>>", self._on_time_multiplier_changed)
@ -336,12 +336,13 @@ class MainView(tk.Tk):
def _process_gui_queue(self): def _process_gui_queue(self):
try: try:
while not self.gui_update_queue.empty(): while not self.gui_update_queue.empty():
updated_targets: List[Target] = self.gui_update_queue.get_nowait() update = self.gui_update_queue.get_nowait()
self._update_all_views(updated_targets) if update == 'SIMULATION_FINISHED':
# Stop simulation and update buttons if all targets are inactive self.logger.info("Simulazione terminata: aggiorno pulsanti per nuovo avvio.")
if self.is_simulation_running.get():
if all(not t.active for t in self.scenario.get_all_targets()):
self._on_stop_simulation() self._on_stop_simulation()
else:
updated_targets: List[Target] = update
self._update_all_views(updated_targets)
finally: finally:
if self.is_simulation_running.get(): if self.is_simulation_running.get():
self.after(GUI_QUEUE_POLL_INTERVAL_MS, self._process_gui_queue) self.after(GUI_QUEUE_POLL_INTERVAL_MS, self._process_gui_queue)

View File

@ -96,7 +96,7 @@ class TrajectoryEditorWindow(tk.Toplevel):
# ...existing code... # ...existing code...
ttk.Label(preview_controls, text="Speed:").pack(side=tk.LEFT, padx=(10, 2), pady=5) ttk.Label(preview_controls, text="Speed:").pack(side=tk.LEFT, padx=(10, 2), pady=5)
self.time_multiplier_var = tk.StringVar(value="1x") self.time_multiplier_var = tk.StringVar(value="1x")
self.multiplier_combo = ttk.Combobox(preview_controls, textvariable=self.time_multiplier_var, values=["1x", "2x", "4x", "10x"], state="readonly", width=4) self.multiplier_combo = ttk.Combobox(preview_controls, textvariable=self.time_multiplier_var, values=["1x", "2x", "4x", "10x", "20x"], state="readonly", width=4)
self.multiplier_combo.pack(side=tk.LEFT, padx=(0, 5), pady=5) self.multiplier_combo.pack(side=tk.LEFT, padx=(0, 5), pady=5)
self.multiplier_combo.bind("<<ComboboxSelected>>", self._on_time_multiplier_changed) self.multiplier_combo.bind("<<ComboboxSelected>>", self._on_time_multiplier_changed)