diff --git a/freecad_workbench/freecad/robossembler/README.md b/freecad_workbench/freecad/robossembler/README.md new file mode 100644 index 0000000..f70f0c0 --- /dev/null +++ b/freecad_workbench/freecad/robossembler/README.md @@ -0,0 +1,11 @@ + Общее руководство работы с планировщиком сборки. + + 1. Открыть сборку. С помощью команд верстака Robossembler, используя команды "Create Assembly Parameters", "Create fastener set", "Create assembly sequence", произвести разметку элементов сборки. Произвести экспорт настроек с помощью функции + export assembly settings. На выходе получим файл assembly_settings.json + 2. Запустить geometric_feasibility_predicate/main.py, указав в env.json значения cadFilePath (путь к сборке) и outPath (путь вывода). Рекомендуется хранить все файлы в одном месте с проектом На выходе получается файл adjacency_matrix.json + + 3. ( опционально) Запустить файл solve_optimizer , получить упрощенную матрицу смежности в виде reduced_adjacency_matrix.json + + 4. Произвести расчет последовательности доступным способом, напр. через get_sequences.json или с помощью asp. + + 5. (Если применено упрощение) Добавить исключенные компоненты с помощью соотв. функции. \ No newline at end of file diff --git a/freecad_workbench/freecad/robossembler/solve_optimizer.py b/freecad_workbench/freecad/robossembler/solve_optimizer.py index 372db2d..66f81b0 100644 --- a/freecad_workbench/freecad/robossembler/solve_optimizer.py +++ b/freecad_workbench/freecad/robossembler/solve_optimizer.py @@ -8,14 +8,17 @@ import json def get_adjacency_matrix_from_file(file_path): with open(file_path, 'r') as f: adjacency_matrix = np.array(json.load(f)) + #print(adjacency_matrix) return adjacency_matrix + def get_asm_settings(asm_settings_path): with open(asm_settings_path), 'r') as f: asm_settings = np.array(json.load(f)) + #print(asm_settings) return asm_settings -def get_parts_with_fasteners(asm_settings): +#def get_parts_with_fasteners(asm_settings): ''' "Type": "fastener_set", "Parent": obj.Parent.Label, @@ -23,12 +26,12 @@ def get_parts_with_fasteners(asm_settings): "Fasteners": fasteners ''' #вероятно, тут нужно создавать список объектов - fastener_set = [] + # fastener_set = [] #чтобы это работало, нужно работать с позициями элементов в дереве #возможно, отработает и через лейблы - return part_names, fasteners + #return part_names, fasteners def remove_fasteners_from_matrix(adjacency_matrix, part_names, fasteners): fastener_connections = {} @@ -69,3 +72,41 @@ reduced_matrix, reduced_part_names, fastener_connections = remove_fasteners_from save_to_json(reduced_matrix.tolist(), 'reduced_adjacency_matrix.json') save_to_json(reduced_part_names, 'reduced_part_names.json') save_to_json(fastener_connections, 'fastener_connections.json') + + +import json + + +with open('adjacency_matrix.json') as f: + adjacency_matrix = json.load(f) +with open('assembly_settings.json') as f: + assembly_settings = json.load(f) + + +fasteners_to_exclude = set() +for setting in assembly_settings: + if setting.get('Type') == 'fastener_set': + fasteners_to_exclude.update(setting.get('Fasteners')) + + +#for fastener in fasteners_to_exclude: +# del adjacency_matrix[fastener] + +#здесь должен запуститься файл генерации последовательности сборки +#на вход поступает упрощенная матрица смежности + + + +with open('assembly_sequence.json') as f: + assembly_sequence = json.load(f) +#TODO: сделать в виде функции, вызываемой отдельно +#Добавляем крепежи в посл. сборки +for setting in assembly_settings: + if setting.get('Type') == 'fastener_set': + parent = setting.get('Parent') + child = setting.get('Child') + fasteners = set(setting.get('Fasteners')) + for step in assembly_sequence: + if step.get('Parent') == parent and step.get('Child') == child: + step['Fasteners'] = list(fasteners.intersection(step.get('Fasteners', []))) + break diff --git a/test_models/ ajacency_matrix.json b/test_models/ ajacency_matrix.json new file mode 100644 index 0000000..134cc37 --- /dev/null +++ b/test_models/ ajacency_matrix.json @@ -0,0 +1,5 @@ +{ + "body_down":["body_up","bolt1", "bolt2", "bolt3", "bolt4","sol_gear","planet_gear"], + "body_up":["body_down","bolt1", "bolt2", "bolt3", "bolt4","sol_gear"], + "body_down":["body_up","bolt1", "bolt2", "bolt3", "bolt4","sol_gear","planet_gear"] +} \ No newline at end of file diff --git a/test_models/crux_hotend.FCStd b/test_models/crux_hotend.FCStd index f854ab7..b708388 100644 Binary files a/test_models/crux_hotend.FCStd and b/test_models/crux_hotend.FCStd differ diff --git a/test_models/env.json b/test_models/env.json new file mode 100644 index 0000000..e69de29