diff --git a/scenes/эмс-тг/эмс-тг.gd b/scenes/эмс-тг/эмс-тг.gd index 4e6123f9..914f4f83 100644 --- a/scenes/эмс-тг/эмс-тг.gd +++ b/scenes/эмс-тг/эмс-тг.gd @@ -356,36 +356,59 @@ func map_yems_info_to_table(unit_info: Dictionary, ctable: GDTable, indexes: Dic ## Находит пересечения диапазонов func find_inters(info: Dictionary) -> Array: - # info - словарь, его структура - # { - # "устройство": # имя устройства ("эмс-ор63") - # [ - # { - # cname, # имя кластера ("Кластер-0") - # wfb, # ширина диапазона, МГЦ (800.0) - # cfb, # центр диапазона, МГЦ (2000.0) - # txe, # передатчик включен - # rxe # передатчик выключен - # }, - # { - # cname, # имя кластера ("Кластер-1") - # wfb, # ширина диапазона, МГЦ (200.0) - # cfb, # центр диапазона, МГЦ (1000.0) - # txe, # передатчик включен - # rxe # передатчик выключен - # }, - # ] - # } + + var result = [] + var all_clusters = [] + # Собираем все кластеры из всех устройств в один массив for nm in info: # nm - имя устройства var unit_data = info[nm] if not unit_data: continue - for cls in unit_data.mcls: - # cls - один кластер - #print_debug([cls.cname, cls.wfb, cls.cfb, cls.txe, cls.rxe]) - pass + # Добавлена проверка для совместимости + var clusters = unit_data if unit_data is Array else unit_data.mcls + # cls - один кластер + for cls in clusters: + var cfb = float(cls.cfb) + var wfb = float(cls.wfb) + # расчёт границ частотных диапазонов + var freq_min1 = cfb - wfb / 2.0 + var freq_max1 = cfb + wfb / 2.0 + all_clusters.append([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe]) + print([nm, cls.cname, freq_min1, freq_max1, cls.txe, cls.rxe]) + + for i in all_clusters.size(): + var cl1 = all_clusters[i] + var dev1 = cl1[0] + var name1 = cl1[1] + var min1 = cl1[2] + var max1 = cl1[3] + var txe1 = cl1[4] + var rxe1 = cl1[5] + + # Сравниваем текущий кластер со всеми последующими, чтобы избежать дублей и самопересечений + for j in range(0, all_clusters.size()): + var cl2 = all_clusters[j] + var dev2 = cl2[0] + var name2 = cl2[1] + var min2 = cl2[2] + var max2 = cl2[3] + var txe2 = cl2[4] + var rxe2 = cl2[5] + + #Если нет пары TR(RT) то пропускаем эту комбинацию + if not ((txe1 and rxe2) or (rxe1 and txe2)): + continue + + # Проверка на пересечение диапазонов, пересечение есть если начало одного диапазона меньше конца другого + if max1 > min2 and max2 > min1: + #Вычисляем точные границы пересечения + var inter_start = max(min1, min2) + var inter_end = min(max1, max2) + + # Формируем результат в требуемом формате + result.append([dev1, dev2, name1, name2, inter_start, inter_end]) # заглушка для возвращаемых данных - return [['эмс-ор63', 'эмс-ор63', 'Кластер-0', 'Кластер-0', 1600.0, 2400.0]] + return result ## Отображает кластеры на шкале