From fd59ab9e2658093c50b9761ddba6b3499cef90db Mon Sep 17 00:00:00 2001 From: Mark Voltov Date: Fri, 2 Feb 2024 14:22:21 +0000 Subject: [PATCH] ASP refactoring, sequence generation via clusterization --- geometric_feasibility_predicate/__init__.py | 0 geometric_feasibility_predicate/env.json | 6 +- .../extensions/__init__.py | 0 .../extensions/dict.py | 53 + .../extensions/list.py | 70 + .../helpers/background_console_colors.py | 10 + .../helpers/either.py | 83 + .../helpers/freecadtest.py | 73 + geometric_feasibility_predicate/main.py | 1380 ++--------------- .../mocks/__init__.py | 0 .../mocks/desk_table.FCStd | Bin 0 -> 343689 bytes .../mocks/mock_structure.py | 36 + .../model/__init__.py | 0 .../models/__init__.py | 0 .../models/adjacency_matrix_model.py | 118 ++ .../models/all_sequences_model.py | 130 ++ .../models/cad_adjacency_matrix_model.py | 71 + .../models/env_model.py | 48 + .../models/error_string_model.py | 28 + .../models/freecad_meta_model.py | 4 + .../models/mesh_geometry_coordinate_model.py | 41 + geometric_feasibility_predicate/models/var.py | 51 + .../models/vector_model.py | 18 + .../repository/__init__.py | 0 .../repository/file_system_repository.py | 25 + .../repository/freecad_repository.py | 171 ++ .../usecases/__init__.py | 0 .../check_object_has_touches_use_case.py | 50 + .../usecases/check_sequence_use_case.py | 11 + .../clear_work_space_document_use_case.py | 16 + .../clusterisation_sequences_use_case.py | 66 + .../usecases/env_reader_use_case.py | 12 + .../usecases/exit_freecad_use_case.py | 6 + .../usecases/get_all_parts_labels_use_case.py | 13 + .../get_collision_at_primitive_use_case.py | 44 + .../usecases/get_first_detail_use_case.py | 8 + ...get_part_primitive_coordinates_use_case.py | 27 + .../usecases/init_parts_parse_use_case.py | 17 + .../intersection_computed_use_case.py | 20 + .../intersection_geometry_use_case.py | 31 + .../is_all_object_solids_check_use_case.py | 14 + .../open_freecad_document_use_case.py | 18 + ..._system_and_get_instance_model_use_case.py | 21 + .../usecases/render_primitive_use_case.py | 15 + .../usecases/render_primitives_scenario.py | 41 + 45 files changed, 1579 insertions(+), 1267 deletions(-) create mode 100644 geometric_feasibility_predicate/__init__.py create mode 100644 geometric_feasibility_predicate/extensions/__init__.py create mode 100644 geometric_feasibility_predicate/extensions/dict.py create mode 100644 geometric_feasibility_predicate/extensions/list.py create mode 100644 geometric_feasibility_predicate/helpers/background_console_colors.py create mode 100644 geometric_feasibility_predicate/helpers/either.py create mode 100644 geometric_feasibility_predicate/helpers/freecadtest.py create mode 100644 geometric_feasibility_predicate/mocks/__init__.py create mode 100644 geometric_feasibility_predicate/mocks/desk_table.FCStd create mode 100644 geometric_feasibility_predicate/mocks/mock_structure.py create mode 100644 geometric_feasibility_predicate/model/__init__.py create mode 100644 geometric_feasibility_predicate/models/__init__.py create mode 100644 geometric_feasibility_predicate/models/adjacency_matrix_model.py create mode 100644 geometric_feasibility_predicate/models/all_sequences_model.py create mode 100644 geometric_feasibility_predicate/models/cad_adjacency_matrix_model.py create mode 100644 geometric_feasibility_predicate/models/env_model.py create mode 100644 geometric_feasibility_predicate/models/error_string_model.py create mode 100644 geometric_feasibility_predicate/models/freecad_meta_model.py create mode 100644 geometric_feasibility_predicate/models/mesh_geometry_coordinate_model.py create mode 100644 geometric_feasibility_predicate/models/var.py create mode 100644 geometric_feasibility_predicate/models/vector_model.py create mode 100644 geometric_feasibility_predicate/repository/__init__.py create mode 100644 geometric_feasibility_predicate/repository/file_system_repository.py create mode 100644 geometric_feasibility_predicate/repository/freecad_repository.py create mode 100644 geometric_feasibility_predicate/usecases/__init__.py create mode 100644 geometric_feasibility_predicate/usecases/check_object_has_touches_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/check_sequence_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/clear_work_space_document_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/clusterisation_sequences_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/env_reader_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/exit_freecad_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/get_all_parts_labels_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/get_collision_at_primitive_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/get_first_detail_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/get_part_primitive_coordinates_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/init_parts_parse_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/intersection_computed_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/intersection_geometry_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/is_all_object_solids_check_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/open_freecad_document_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/read_file_system_and_get_instance_model_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/render_primitive_use_case.py create mode 100644 geometric_feasibility_predicate/usecases/render_primitives_scenario.py diff --git a/geometric_feasibility_predicate/__init__.py b/geometric_feasibility_predicate/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/geometric_feasibility_predicate/env.json b/geometric_feasibility_predicate/env.json index 29d89bc..ecc3e53 100644 --- a/geometric_feasibility_predicate/env.json +++ b/geometric_feasibility_predicate/env.json @@ -1,7 +1,7 @@ { - "cadFilePath": "/Users/idontsudo/Desktop/reductor/test_reductor.FCStd", - "outPath": "/Users/idontsudo/Desktop/reductor/", - "solidBodyPadding": 1, + "cadFilePath": "/home/markvoltov/TestFolder/bottle_jack/bottle_jack.FCStd", + "outPath": "/home/markvoltov/TestFolder/bottle_jack/", + "solidBodyPadding": 3, "firstDetail": "Куб", "sequencesFixed": [], "restrictionsOnFasteners": [] diff --git a/geometric_feasibility_predicate/extensions/__init__.py b/geometric_feasibility_predicate/extensions/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/geometric_feasibility_predicate/extensions/dict.py b/geometric_feasibility_predicate/extensions/dict.py new file mode 100644 index 0000000..5cf7f9f --- /dev/null +++ b/geometric_feasibility_predicate/extensions/dict.py @@ -0,0 +1,53 @@ +class CoreDict(dict): + """ + Class for handling cases related to dictionaries: + + + Args: + dict (dict): dictionary to analysis + """ + + def isEquivalentByKeys(self, checkDict) -> bool: + """ + The function checks whether the values ​​of the keys and the data associated with them match between the processed and the reference dictionary + + + Args: + checkDict (dict): reference dictionary + + Returns: + bool: + """ + + for key in self: + value = checkDict.get(key) + if value is None: + return False + + return True + + # + def isMatchByKeys(self, checkList) -> bool: + """ + The function checks whether the key values ​​match the elements of the reference list: + + Args: + checkList (list): reference list + + Returns: + bool + """ + if len(self) != len(checkList): + return False + + sorted_dict_keys = sorted(self.keys()) + sorted_list_elements = sorted(checkList) + + if sorted_dict_keys != sorted_list_elements: + missing_keys = [ + key for key in sorted_list_elements if key not in sorted_dict_keys + ] + print(f"Отсутствующие элементы: {missing_keys}") + return False + + return True diff --git a/geometric_feasibility_predicate/extensions/list.py b/geometric_feasibility_predicate/extensions/list.py new file mode 100644 index 0000000..6c7d44d --- /dev/null +++ b/geometric_feasibility_predicate/extensions/list.py @@ -0,0 +1,70 @@ +from typing import List + + +class CoreList(List): + """ + Class for handling cases related to lists: + + Args: + List (list): list to analysis + """ + + def onlyTrue(self) -> bool: + for el in self: + if el is True: + return True + return False + + def onlyUniqueElementAppend(self, el): + if el is None: + return + if self.is_element_in_array(el) is False: + self.append(el) + pass + + def is_element_in_array(self, element): + return element in self + + def equal(self, array: list) -> bool: + """Сhecking that the analyzed list is equal to the reference list + + Args: + array (list): reference list + + Returns: + bool: + """ + if len(self) != len(array): + return False + return self.sort() == array.sort() + + def isConstrainsString(self) -> bool: + for el in self: + if isinstance(el, str): + return True + return False + + def indexedPriorities(self, lowerPriority, highPriority) -> bool: + try: + lowerIndex = self.index(lowerPriority) + highPriorityIndex = self.index(highPriority) + return lowerIndex < highPriorityIndex + except: + return False + + def getAllString(self) -> list[str]: + return list(filter(lambda x: isinstance(x, str), self)) + + def onlyUnique(self) -> list: + result = [] + [result.append(x) for x in self if x not in self] + return result + + def spreadArray(self) -> "CoreList": + unpacked_array = CoreList([]) + for el in self: + if isinstance(el, list): + unpacked_array.extend(el) + else: + unpacked_array.append(el) + return unpacked_array diff --git a/geometric_feasibility_predicate/helpers/background_console_colors.py b/geometric_feasibility_predicate/helpers/background_console_colors.py new file mode 100644 index 0000000..e419c51 --- /dev/null +++ b/geometric_feasibility_predicate/helpers/background_console_colors.py @@ -0,0 +1,10 @@ +class BackgroundConsoleColors: + HEADER = "\033[95m" + OKBLUE = "\033[94m" + OKCYAN = "\033[96m" + OKGREEN = "\033[92m" + WARNING = "\033[93m" + FAIL = "\033[91m" + ENDC = "\033[0m" + BOLD = "\033[1m" + UNDERLINE = "\033[4m" diff --git a/geometric_feasibility_predicate/helpers/either.py b/geometric_feasibility_predicate/helpers/either.py new file mode 100644 index 0000000..dfe77a5 --- /dev/null +++ b/geometric_feasibility_predicate/helpers/either.py @@ -0,0 +1,83 @@ +from abc import ABC, abstractmethod + + +class Either(ABC): + @abstractmethod + def isLeft(self): + pass + + @abstractmethod + def isRight(self): + pass + + @abstractmethod + def getLeft(self): + pass + + @abstractmethod + def getRight(self): + pass + + @abstractmethod + def mapLeft(self, lf): + pass + + @abstractmethod + def mapRight(self, rf): + pass + + @abstractmethod + def either(self, leftF, rightF): + pass + + +class Left(Either): + def __init__(self, lvalue): + self.lvalue = lvalue + + def isLeft(self): + return True + + def isRight(self): + return False + + def getLeft(self): + return self.lvalue + + def getRight(self): + raise Error("Cannot get a right value out of Left.") + + def mapLeft(self, lf): + return Left(lf(self.lvalue)) + + def mapRight(self, rf): + return Left(self.lvalue) + + def either(self, leftF, rightF): + return leftF(self.lvalue) + + +class Right(Either): + def __init__(self, rvalue): + self.rvalue = rvalue + + def isLeft(self): + return False + + def isRight(self): + return True + + def getLeft(self): + raise Error("Cannot get a left value out of Right.") + + def getRight(self): + return self.rvalue + + def mapLeft(self, lf): + return Right(self.rvalue) + + def mapRight(self, rf): + return Right(rf(self.rvalue)) + + def either(self, leftF, rightF): + return rightF(self.rvalue) diff --git a/geometric_feasibility_predicate/helpers/freecadtest.py b/geometric_feasibility_predicate/helpers/freecadtest.py new file mode 100644 index 0000000..db824d0 --- /dev/null +++ b/geometric_feasibility_predicate/helpers/freecadtest.py @@ -0,0 +1,73 @@ +import os +from helpers.background_console_colors import ( + BackgroundConsoleColors, +) +from usecases.open_freecad_document_use_case import ( + OpenFreeCadDocumentUseCase, +) +from usecases.read_file_system_and_get_instance_model_use_case import ( + ReadFileSystemAndGetInstanceModelUseCase, +) + + +class FreeCadTest: + testName: str + """Class for performing FreeCAD model checks + """ + + def testHelper(self, testResult): + if isinstance(testResult, bool) is False: + print( + BackgroundConsoleColors.WARNING, + self.testName + + " expected a value of type Boolean, returned a value of type below ", + ) + print(testResult) + return + if testResult: + print(BackgroundConsoleColors.OKGREEN, self.testName + "is complete!") + else: + print(BackgroundConsoleColors.FAIL, self.testName + " is Error!") + pass + + +class FreeCadASPGenerationTestController(FreeCadTest): + testName: str + """ + FreeCAD Document Validation Controller + """ + + def __init__(self, testName: str) -> None: + self.testName = testName + pass + + def test( + self, + assertFn, + documentPath: str, + modelName: str, + model, + execComposition, + outPath=os.path.dirname(__file__) + "/out/", + ): + try: + OpenFreeCadDocumentUseCase.call(documentPath).either( + leftF=lambda _: ( + execComposition(""), + ReadFileSystemAndGetInstanceModelUseCase() + .call(model=model, path=outPath.replace("/helpers", "") + modelName) + .either( + leftF=lambda model: ( + self.testHelper( + assertFn(model), + ), + ), + rightF=lambda error: print(error), + ), + ), + rightF=lambda error: print(error), + ) + except Exception as inst: + print("FreeCadASPGenerationTestController error") + print(inst) + pass diff --git a/geometric_feasibility_predicate/main.py b/geometric_feasibility_predicate/main.py index d46096a..c669ba4 100644 --- a/geometric_feasibility_predicate/main.py +++ b/geometric_feasibility_predicate/main.py @@ -1,1089 +1,34 @@ -import FreeCAD as App -import uuid import os -import json -from typing import List, Dict, Any, TypeVar, Callable, Type, cast -from itertools import repeat -from abc import ABC, abstractmethod -from dataclasses import dataclass -from typing import Any, TypeVar, Type, cast - - -T = TypeVar("T") - - -class BackgroundConsoleColors: - HEADER = "\033[95m" - OKBLUE = "\033[94m" - OKCYAN = "\033[96m" - OKGREEN = "\033[92m" - WARNING = "\033[93m" - FAIL = "\033[91m" - ENDC = "\033[0m" - BOLD = "\033[1m" - UNDERLINE = "\033[4m" - - -def from_float(x: Any) -> float: - assert isinstance(x, (float, int)) and not isinstance(x, bool) - return float(x) - - -def to_float(x: Any) -> float: - assert isinstance(x, float) - return x - - -def from_str(x: Any) -> str: - assert isinstance(x, str) - return x - - -def from_int(x: Any) -> int: - assert isinstance(x, int) and not isinstance(x, bool) - return x - - -def to_class(c: Type[T], x: Any) -> dict: - assert isinstance(x, c) - return cast(Any, x).to_dict() - - -@dataclass -class Env: - cadFilePath: str - outPath: str - solidBodyPadding: float - firstDetail: str - sequencesFixed: list[list[str]] - - @staticmethod - def from_dict(obj: Any) -> "Env": - assert isinstance(obj, dict) - cadFilePath = from_str(obj.get("cadFilePath")) - outPath = from_str(obj.get("outPath")) - solidBodyPadding = from_float(obj.get("solidBodyPadding")) - firstDetail = from_str(obj.get("firstDetail")) - sequencesFixed = [] - sequencesFixedParse = CoreList(obj.get("sequencesFixed")) - for el in sequencesFixedParse: - sequencesFixed.append(el) - - restrictionsOnFasteners = CoreList(obj.get("restrictionsOnFasteners")) - - for el in restrictionsOnFasteners: - for part in el["parts"]: - sequencesFixed.append([part, el["fastener"]]) - return Env( - cadFilePath, - outPath, - solidBodyPadding, - firstDetail, - sequencesFixed, - ) - - def to_dict(self) -> dict: - result: dict = {} - result["cadFilePath"] = from_str(self.cadFilePath) - result["outPath"] = from_str(self.outPath) - result["solidBodyPadding"] = from_float(self.solidBodyPadding) - result["firstDetail"] = from_str(self.firstDetail) - result["sequencesFixed"] = self.sequencesFixed - return result - - -class Either(ABC): - @abstractmethod - def isLeft(self): - pass - - @abstractmethod - def isRight(self): - pass - - @abstractmethod - def getLeft(self): - pass - - @abstractmethod - def getRight(self): - pass - - @abstractmethod - def mapLeft(self, lf): - pass - - @abstractmethod - def mapRight(self, rf): - pass - - @abstractmethod - def either(self, leftF, rightF): - pass - - -class Left(Either): - def __init__(self, lvalue): - self.lvalue = lvalue - - def isLeft(self): - return True - - def isRight(self): - return False - - def getLeft(self): - return self.lvalue - - def getRight(self): - raise Error("Cannot get a right value out of Left.") - - def mapLeft(self, lf): - return Left(lf(self.lvalue)) - - def mapRight(self, rf): - return Left(self.lvalue) - - def either(self, leftF, rightF): - return leftF(self.lvalue) - - -class Right(Either): - def __init__(self, rvalue): - self.rvalue = rvalue - - def isLeft(self): - return False - - def isRight(self): - return True - - def getLeft(self): - raise Error("Cannot get a left value out of Right.") - - def getRight(self): - return self.rvalue - - def mapLeft(self, lf): - return Right(self.rvalue) - - def mapRight(self, rf): - return Right(rf(self.rvalue)) - - def either(self, leftF, rightF): - return rightF(self.rvalue) - - -class CoreDict(dict): - def isEquivalentByKeys(self, checkDict) -> bool: - print(checkDict) - for key in self: - value = checkDict.get(key) - if value is None: - return False - - return True - - def isMatchByKeys(self, checkList): - if len(self) != len(checkList): - return False - - sorted_dict_keys = sorted(self.keys()) - sorted_list_elements = sorted(checkList) - - if sorted_dict_keys != sorted_list_elements: - missing_keys = [ - key for key in sorted_list_elements if key not in sorted_dict_keys - ] - print(f"Отсутствующие ключи в словаре: {missing_keys}") - return False - - return True - - -class CoreList(List): - def onlyTrue(self) -> bool: - for el in self: - if el is True: - return True - return False - - def onlyUniqueElementAppend(self, el): - if el is None: - return - if self.is_element_in_array(el) is False: - self.append(el) - pass - - def is_element_in_array(self, element): - return element in self - - def equal(self, array: list) -> bool: - if len(self) != len(array): - return False - return self.sort() == array.sort() - - def isConstrainsString(self) -> bool: - for el in self: - if isinstance(el, str): - return True - return False - - def indexedPriorities(self, lowerPriority, highPriority) -> bool: - try: - lowerIndex = self.index(lowerPriority) - highPriorityIndex = self.index(highPriority) - return lowerIndex < highPriorityIndex - except: - return False - - def getAllString(self) -> list[str]: - return list(filter(lambda x: isinstance(x, str), self)) - - def onlyUnique(self) -> list: - result = [] - [result.append(x) for x in self if x not in self] - return result - - def spreadArray(self) -> "CoreList": - unpacked_array = CoreList([]) - for el in self: - if isinstance(el, list): - unpacked_array.extend(el) - else: - unpacked_array.append(el) - return unpacked_array - - -def isInListRange(listIn, index): - try: - listIn[index] - return False - except: - return True - - -class AllSequences: - all_sequences = None - adj_matrix = None - topologyIds = None - adj_matrix_names = None - - def __init__(self, adj_matrix, restrictions: list[str]) -> None: - self.adj_matrix = adj_matrix - self.all_possible_sequences(self.adj_matrix) - self.matrix_by_name() - if restrictions.__len__() != 0: - self.restrictionsValidate(restrictions) - pass - - def restrictionsValidate(self, restrictions: CoreList[str]): - filterMatrix = CoreList() - - for el in self.adj_matrix_names: - result = False - for restraint in restrictions: - result = CoreList(el).indexedPriorities(restraint[0], restraint[1]) - if result: - filterMatrix.onlyUniqueElementAppend(el) - self.adj_matrix_names = filterMatrix - pass - - def matrix_by_name(self): - result = self.all_sequences - inc = 0 - for matrix in self.all_sequences: - for index in range(len(matrix)): - result[inc][index] = CoreList( - filter( - lambda el: el.get("number") == matrix[index] + 1, - self.topologyIds, - ) - )[0].get("name") - inc += 1 - self.adj_matrix_names = result - pass - - def find_all_sequences(self, adj_matrix): - sequences = [] - num_vertices = len(adj_matrix) - - def dfs(vertex, sequence): - sequence.append(vertex) - - if len(sequence) == num_vertices: - sequences.append(sequence) - return - - for i in range(num_vertices): - if adj_matrix[vertex][i] == 1 and i not in sequence: - dfs(i, sequence.copy()) - - for i in range(num_vertices): - dfs(i, []) - - self.all_sequences = sequences - - def findId(self, listMatrix, id): - def filter_odd_num(in_num): - if in_num["name"] == id: - return True - else: - return False - - return list(filter(filter_odd_num, listMatrix))[0]["number"] - - def iter_paths(self, adj, min_length=6, path=None): - if not path: - for start_node in range(len(adj)): - yield from self.iter_paths(adj, min_length, [start_node]) - else: - if len(path) >= min_length: - yield path - if path[-1] in path[:-1]: - return - current_node = path[-1] - for next_node in range(len(adj[current_node])): - if adj[current_node][next_node] == 1: - yield from self.iter_paths(adj, min_length, path + [next_node]) - - def allUnique(self, x): - seen = set() - return not any(i in seen or seen.add(i) for i in x) - - def all_possible_sequences(self, matrix): - topologyIds = [] - topologyMatrixNumber = {} - inc = 0 - for k, v in matrix.items(): - inc += 1 - topologyIds.append({"name": k, "number": inc}) - inc = 0 - for k, v in matrix.items(): - inc += 1 - topologyMatrixNumber[inc] = list( - map(lambda el: self.findId(topologyIds, el), v) - ) - self.topologyIds = topologyIds - adj = [] - matrixSize = matrix.keys().__len__() - inc = 0 - for k, v in topologyMatrixNumber.items(): - adj.append(list(repeat(0, matrixSize))) - for el in v: - adj[inc][el - 1] = 1 - inc += 1 - return self.find_all_sequences(adj) - - -class VectorModel: - x: float - y: float - z: float - - def __init__(self, cadVector) -> None: - self.x = cadVector[0] - self.y = cadVector[1] - self.z = cadVector[2] - pass - - def toFreeCadVector(self): - return App.Vector(self.x, self.y, self.z) - - def toString(self): - return str("x:" + str(self.x) + "y:" + str(self.y) + "z:" + str(self.z)) - - -class FreeCadRepository: - _solids = [] - - def openDocument(self, path: str): - App.open("" + path) - - def closeIfOpenDocument(self): - # print('Проверка на документ') - try: - if App.ActiveDocument is not None: - # print(App.ActiveDocument.name + "закрыт") - # App.closeDocument(App.ActiveDocument.name) - App.ActiveDocument.clearDocument() - except Exception as e: - print(e) - - def getAllLabelsSolids(self) -> List[str]: - return list(map(lambda el: el.Label, self.getAllSolids())) - - def isAllObjectsSolids(self) -> List[str]: - result = [] - for part in App.ActiveDocument.Objects: - if self.is_object_solid(part) is False: - result.append(part.Label) - return result - - def objectSetPosition(self, solid, cadVector): - solid.Placement.Base = cadVector - pass - - def objectGetPosition(self, solid) -> VectorModel: - return VectorModel(cadVector=solid.Placement.Base) - - def isObjectIntersections(self, part) -> str: - result = [] - for solid in self.getAllSolids(): - if solid.ID != part.ID: - collisionResult: int = int(part.Shape.distToShape(solid.Shape)[0]) - if collisionResult == 0: - result.append(solid.Label) - if result.__len__() == 0: - return None - return result - - def objectHasTouches(self, part, solidBodyPadding: float) -> List[str]: - try: - positionVector = self.objectGetPosition(part) - result = CoreList() - result.append(self.isObjectIntersections(part=part)) - if solidBodyPadding != 0 and solidBodyPadding != None: - result.append( - self.axis_movement_and_intersections_observer( - positionVector=positionVector, - alongAxis="x", - solidBodyPadding=solidBodyPadding, - part=part, - ) - ) - result.append( - self.axis_movement_and_intersections_observer( - positionVector=positionVector, - alongAxis="y", - solidBodyPadding=solidBodyPadding, - part=part, - ) - ) - result.append( - self.axis_movement_and_intersections_observer( - positionVector=positionVector, - alongAxis="z", - solidBodyPadding=solidBodyPadding, - part=part, - ) - ) - spreadArr = result.spreadArray() - if spreadArr.isConstrainsString(): - return spreadArr.getAllString() - return None - except Exception as error: - print(error) - return None - - def axis_movement_and_intersections_observer( - self, - positionVector: VectorModel, - alongAxis: str, - solidBodyPadding: float, - part, - ) -> bool: - result = CoreList() - # UP - positionVector.__setattr__( - alongAxis, - positionVector.__getattribute__(alongAxis) + solidBodyPadding, - ) - self.objectSetPosition(part, positionVector.toFreeCadVector()) - # result.onlyUniqueElementAppend(self.isObjectIntersections(part=part)) - result.extend(self.isObjectIntersections(part=part)) - # RESET UP CHANGES - positionVector.__setattr__( - alongAxis, - positionVector.__getattribute__(alongAxis) - solidBodyPadding, - ) - self.objectSetPosition(part, positionVector.toFreeCadVector()) - - # DOWN - positionVector.__setattr__( - alongAxis, - positionVector.__getattribute__(alongAxis) - solidBodyPadding, - ) - self.objectSetPosition(part, positionVector.toFreeCadVector()) - # CHECK DOWN INTERSECTIONS - # result.onlyUniqueElementAppend(self.isObjectIntersections(part=part)) - result.extend(self.isObjectIntersections(part=part)) - - # RESET DOWN CHANGES - positionVector.__setattr__( - alongAxis, - positionVector.__getattribute__(alongAxis) + solidBodyPadding, - ) - self.objectSetPosition(part, positionVector.toFreeCadVector()) - if result.__len__() == 0: - return None - - return result.onlyUnique() - - def getAllSolids(self): - if self._solids.__len__() == 0: - for part in App.ActiveDocument.Objects: - if self.is_object_solid(part): - self._solids.append(part) - - return self._solids - - def is_object_solid(self, obj): - if not isinstance(obj, App.DocumentObject): - return False - if hasattr(obj, "Group"): - return False - - if not hasattr(obj, "Shape"): - return False - if not hasattr(obj.Shape, "Solids"): - return False - - if len(obj.Shape.Solids) == 0: - return False - - return True - - -T = TypeVar("T") - - -def from_list(f: Callable[[Any], T], x: Any) -> List[T]: - assert isinstance(x, list) - return [f(y) for y in x] - - -def from_str(x: Any) -> str: - assert isinstance(x, str) - return x - - -def from_dict(f: Callable[[Any], T], x: Any) -> Dict[str, T]: - assert isinstance(x, dict) - return {k: f(v) for (k, v) in x.items()} - - -def to_class(c: Type[T], x: Any) -> dict: - assert isinstance(x, c) - return cast(Any, x).to_dict() - - -# Вспомогательный класс который делает генрацию JSON на основе пайтон обьектов - - -class AdjacencyMatrix: - matrixError: Dict[str, str] = {} - all_parts: List[str] - first_detail: str - matrix: Dict[str, List[str]] - - fileName = "adjacency_matrix.json" - - def __init__( - self, all_parts: List[str], first_detail: str, matrix: Dict[str, List[str]] - ) -> None: - self.all_parts = all_parts - self.first_detail = first_detail - self.matrix = matrix - self.validateMatrix() - - def matrixToFileSystem(self, path: str): - FileSystemRepository.writeFile( - json.dumps(self.to_dict(), ensure_ascii=False, indent=4), - path, - AdjacencyMatrix.fileName, - ) - pass - - def sequencesToFileSystem(self, path: str, restrictions: list[str]): - FileSystemRepository.writeFile( - json.dumps( - {"sequences": AllSequences(self.matrix, restrictions).adj_matrix_names}, - ensure_ascii=False, - indent=4, - ), - path, - "sequences.json", - ), - pass - - def matrixGetUniqueContact(self): - detailsToCheck = [] - detailsHashCheck = {} - for k, v in self.matrix.items(): - for el in v: - if el != k: - hash = to_ascii_hash(k + el) - if detailsHashCheck.get(hash) == None: - detailsHashCheck[hash] = hash - detailsToCheck.append({"child": el, "parent": k}) - return detailsToCheck - - def whatPlaceLeadingPartIndex(self): - i = 0 - for el in self.matrix: - if el == self.first_detail: - return i - i = +1 - - def validateMatrix(self): - for el in self.all_parts: - if self.matrix.get(el) == None: - self.matrixError[el] = "Not found adjacency " + el - - @staticmethod - def from_dict(obj: Any) -> "AdjacencyMatrix": - assert isinstance(obj, dict) - - all_pars = from_list(from_str, obj.get("allParts")) - first_detail = from_str(obj.get("firstDetail")) - matrix = from_dict(lambda x: from_list(from_str, x), obj.get("matrix")) - - return AdjacencyMatrix(all_pars, first_detail, matrix) - - def to_dict(self) -> dict: - result: dict = {} - result["allParts"] = from_list(from_str, self.all_parts) - result["firstDetail"] = from_str(self.first_detail) - result["matrix"] = from_dict(lambda x: from_list(from_str, x), self.matrix) - if self.matrixError.values().__len__() == 0: - result["matrixError"] = None - else: - result["matrixError"] = self.matrixError - return result - - def getDictMatrix(self) -> dict: - result = {} - - for k, v in self.matrix.items(): - result[k] = {} - for el in v: - result[k][el] = el - - return result - - -def adjacency_matrix_from_dict(s: Any) -> AdjacencyMatrix: - return AdjacencyMatrix.from_dict(s) - - -def adjacency_matrix_to_dict(x: AdjacencyMatrix) -> Any: - return to_class(AdjacencyMatrix, x) - - -# Вспомогательный класс для работы с Freecad - - -class FreeCadMetaModel(object): - def __init__(self, label, vertex) -> None: - self.label = label - self.vertex = vertex - - -collision_squares_labels = [] - - -class MeshGeometryCoordinateModel(object): - # Получение геометрии мешей - def __init__( - self, - x, - y, - z, - label, - ): - self.x = x - self.y = y - self.z = z - self.label = label - self.cadLabel = "" - - def initializePrimitivesByCoordinate(self, detailSquares): - uuidDoc = str(uuid.uuid1()) - App.ActiveDocument.addObject("Part::Box", "Box") - App.ActiveDocument.ActiveObject.Label = uuidDoc - App.ActiveDocument.recompute() - part = App.ActiveDocument.getObjectsByLabel(uuidDoc)[0] - collision_squares_labels.append(uuidDoc) - part.Width = 2 - part.Height = 2 - part.Length = 2 - part.Placement = App.Placement( - App.Vector(self.x - 1, self.y - 1, self.z - 1), - App.Rotation(App.Vector(0.00, 0.00, 1.00), 0.00), - ) - if detailSquares.get(self.label) is None: - detailSquares[self.label] = [] - detailSquares[self.label].append(self) - self.cadLabel = uuidDoc - App.ActiveDocument.recompute() - - -class FileSystemRepository: - def readJSON(path: str): - return json.loads((open(path)).read()) - - def writeFile(data, filePath, fileName): - file_to_open = filePath + fileName - - f = open(file_to_open, "w", encoding="utf8") - - f.write(data) - - def readFile(path: str): - return open(path).read() - - def readFilesTypeFolder(pathFolder: str, fileType=".json"): - filesJson = list( - filter( - lambda x: x[-fileType.__len__() :] == fileType, os.listdir(pathFolder) - ) - ) - return filesJson - - -class GetAllPartsLabelsUseCase: - # Получение всех названий деталей - def call(self): - parts = [] - for part in FreeCadRepository().getAllSolids(): - parts.append(part.Label) - return parts - - -def isUnique(array, element): - for i in array: - if i == element: - return False - - return True - - -class GetCollisionAtPrimitiveUseCase(object): - # Получение колизий примитивов - def call(self, freeCadMetaModels, detailSquares) -> Dict[str, List[str]]: - matrix: Dict[str, List[str]] = {} - for model in freeCadMetaModels: - activePart = App.ActiveDocument.getObjectsByLabel(model.label)[0] - for key in detailSquares: - if model.label != key: - for renderPrimitive in detailSquares[key]: - primitivePart = App.ActiveDocument.getObjectsByLabel( - renderPrimitive.cadLabel - )[0] - collisionResult: int = int( - activePart.Shape.distToShape(primitivePart.Shape)[0] - ) - if collisionResult == 0: - if matrix.get(model.label) == None: - matrix[model.label] = [renderPrimitive.label] - else: - if isUnique(matrix[model.label], renderPrimitive.label): - matrix[model.label].append(renderPrimitive.label) - return matrix - - -class GetFirstDetailUseCase: - # Получение первой детали - def call(self): - return FreeCadRepository().getAllSolids()[0].Label - - -class GetPartPrimitiveCoordinatesUseCase(object): - # Получение координат примитивов - def call(self, freeCadMetaModels): - meshCoordinates: list[MeshGeometryCoordinateModel] = [] - for model in freeCadMetaModels: - vertexesDetail = model.vertex - labelDetail = model.label - for coords in vertexesDetail: - detailVertex = MeshGeometryCoordinateModel( - coords.X, - coords.Y, - coords.Z, - labelDetail, - ) - meshCoordinates.append(detailVertex) - - return meshCoordinates - - -class InitPartsParseUseCase: - # Инициализация парсинга - def call(self): - product_details = [] - for part in FreeCadRepository().getAllSolids(): - if part is not None: - model = FreeCadMetaModel(part.Label, part.Shape.Vertexes) - if model is not None: - product_details.append(model) - return product_details - - -class RenderPrimitiveUseCase(object): - # Рендеринг премитивов - def call( - self, meshModels: list[MeshGeometryCoordinateModel], detailSquares - ) -> None: - for mesh in meshModels: - mesh.initializePrimitivesByCoordinate(detailSquares) - - -class ClearWorkSpaceDocumentUseCase(object): - # Очистка рабочего простарнства - def call(self, detailSquares): - for key in detailSquares: - for renderPrimitive in detailSquares[key]: - primitivePart = App.ActiveDocument.getObjectsByLabel( - renderPrimitive.cadLabel - )[0] - App.ActiveDocument.removeObject(primitivePart.Name) - - -class RenderPrimitivesScenario(object): - def __init__( - self, - initPartsParseUseCase: InitPartsParseUseCase, - getPartPrimitiveCoordinatesUseCase: GetPartPrimitiveCoordinatesUseCase, - renderPrimitiveUseCase: RenderPrimitiveUseCase, - getCollisionAtPrimitives: GetCollisionAtPrimitiveUseCase, - clearWorkSpaceDocument: ClearWorkSpaceDocumentUseCase, - ) -> None: - self.initPartsParseUseCase = initPartsParseUseCase - self.getPartPrimitiveCoordinatesUseCase = getPartPrimitiveCoordinatesUseCase - self.renderPrimitiveUseCase = renderPrimitiveUseCase - self.getCollisionAtPrimitives = getCollisionAtPrimitives - self.clearWorkSpaceDocument = clearWorkSpaceDocument - - def call(self) -> None: - meshCoordinates = [] - detailSquares = {} - parts = self.initPartsParseUseCase.call() - meshCoordinates = self.getPartPrimitiveCoordinatesUseCase.call(parts) - self.renderPrimitiveUseCase.call(meshCoordinates, detailSquares) - matrix = self.getCollisionAtPrimitives.call(parts, detailSquares) - self.clearWorkSpaceDocument.call(detailSquares) - return matrix - - -class ClearWorkSpaceDocumentUseCase(object): - # Очистака рабочего пространства - def call(self, detailSquares): - for key in detailSquares: - for renderPrimitive in detailSquares[key]: - primitivePart = App.ActiveDocument.getObjectsByLabel( - renderPrimitive.cadLabel - )[0] - App.ActiveDocument.removeObject(primitivePart.Name) - - -class CadAdjacencyMatrix: - # Матрица основанная на соприкосновении примитива с обьектами - def primitiveMatrix(self): - # Получение матрицы - matrix = RenderPrimitivesScenario( - InitPartsParseUseCase(), - GetPartPrimitiveCoordinatesUseCase(), - RenderPrimitiveUseCase(), - GetCollisionAtPrimitiveUseCase(), - ClearWorkSpaceDocumentUseCase(), - ).call() - return AdjacencyMatrix( - all_parts=GetAllPartsLabelsUseCase().call(), - first_detail=GetFirstDetailUseCase().call(), - matrix=matrix, - ) - - # Матрица основанная на соприкосновении обьектов - - def matrixBySurfaces(self): - matrix = {} - for part in FreeCadRepository().getAllSolids(): - matrix[part.Label] = [] - for nextPart in FreeCadRepository().getAllSolids(): - if part.Label != nextPart.Label: - # Вычисление соприконсоновения площади деталей - collisionResult: int = int( - part.Shape.distToShape(nextPart.Shape)[0] - ) - - if collisionResult == 0: - matrix[part.Label].append(nextPart.Label) - - return AdjacencyMatrix( - all_parts=GetAllPartsLabelsUseCase().call(), - first_detail=GetFirstDetailUseCase().call(), - matrix=matrix, - ) - - -def reduce(function, iterable, initializer=None): - it = iter(iterable) - if initializer is None: - value = next(it) - else: - value = initializer - for element in it: - value = function(value, element) - return value - - -def to_ascii_hash(text): - ascii_values = [ord(character) for character in text] - return reduce(lambda x, y: x + y, ascii_values) - - -class IntersectionComputedUseCase: - def call(parts): - App.activeDocument().addObject("Part::MultiCommon", "Common") - App.activeDocument().Common.Shapes = [parts[0], parts[1]] - App.activeDocument().getObject("Common").ViewObject.ShapeColor = getattr( - parts[0].getLinkedObject(True).ViewObject, - "ShapeColor", - App.activeDocument().getObject("Common").ViewObject.ShapeColor, - ) - App.activeDocument().getObject("Common").ViewObject.DisplayMode = getattr( - parts[0].getLinkedObject(True).ViewObject, - "DisplayMode", - App.activeDocument().getObject("Common").ViewObject.DisplayMode, - ) - App.ActiveDocument.recompute() - area = App.activeDocument().getObject("Common").Shape.Area - App.ActiveDocument.removeObject("Common") - return area - - -class ErrorStringModel: - def __init__(self, error: str) -> None: - self.error = error - pass - - error: str - - def toString(self) -> str: - return json.dumps( - { - "error": self.error, - }, - ensure_ascii=False, - indent=4, - ) - - def toFileSystem(self, path: str): - return ( - FileSystemRepository.writeFile(self.toString(), path, "error.json"), - ExitFreeCadUseCase.call(), - ) - - -class IsAllObjectSolidsCheckUseCase: - def call() -> Either: - result = FreeCadRepository().isAllObjectsSolids() - if result.__len__() == 0: - return Left(None) - - return Right( - ErrorStringModel(error="Is not solid objects: " + ",".join(result)) - ) - - -class CheckObjectHasTouchesUseCase: - freeCadRepository = FreeCadRepository() - - def call(self, solidBodyPadding: float) -> Either: - try: - errorResult = [] - matrix = {} - for part in self.freeCadRepository.getAllSolids(): - matrix[part.Label] = [] - touches = FreeCadRepository().objectHasTouches( - part=part, solidBodyPadding=solidBodyPadding - ) - matrix[part.Label].extend(touches) - if errorResult.__len__() == 0: - return Left( - AdjacencyMatrix( - all_parts=self.freeCadRepository.getAllLabelsSolids(), - first_detail=GetFirstDetailUseCase().call(), - matrix=matrix, - ) - ) - else: - return Right( - ErrorStringModel( - error="Solids bodies have no recounts: " + ",".join(errorResult) - ) - ) - except Exception as error: - print(error) - print("CheckObjectHasTouchesUseCase error") - return Right(ErrorStringModel(error="CheckObjectHasTouchesUseCase error")) - - -class CheckCadIntersectionObjects: - report = [] - - def call() -> bool: - FreeCadRepository().getAllSolids() - return False - - -class ExitFreeCadUseCase: - def call(): - import FreeCADGui as Gui - - App.ActiveDocument.clearDocument() - freecadQTWindow = Gui.getMainWindow() - freecadQTWindow.close() - - -# class CheckValidIntersectionUseCase: -# def call() -> ErrorStringModel: -# for part in FreeCadRepository().getAllSolids(): -# print(part) -# FreeCadRepository().obj -# pass - - -class EnvReaderUseCase: - def call() -> Either: - try: - return Left(Env.from_dict(FileSystemRepository.readJSON("env.json"))) - except: - print("env reader error") - return Right(None) - - -class OpenFreeCadDocumentUseCase: - def call(path: str) -> Either: - try: - FreeCadRepository().closeIfOpenDocument() - FreeCadRepository().openDocument(path) - return Left(None) - except: - print("OpenFreeCadDocumentUseCase error") - return Right(None) - - -class IntersectionGeometryUseCase: - def call(contacts, path): - intersection_geometry = {"status": True, "recalculations": None} - for el in contacts: - child = App.ActiveDocument.getObjectsByLabel(el.get("child"))[0] - parent = App.ActiveDocument.getObjectsByLabel(el.get("parent"))[0] - area = IntersectionComputedUseCase.call([child, parent]) - if area != 0.0: - if intersection_geometry.get("recalculations") == None: - intersection_geometry["status"] = False - intersection_geometry["recalculations"] = [] - intersection_geometry["recalculations"].append( - {"area": area, "connect": el.get("child") + " " + el.get("parent")} - ) - FileSystemRepository.writeFile( - json.dumps(intersection_geometry, ensure_ascii=False, indent=4), - path, - "intersection_geometry.json", - ) +from extensions.list import CoreList +from extensions.dict import CoreDict +from helpers.freecadtest import FreeCadASPGenerationTestController +from models.adjacency_matrix_model import ( + AdjacencyMatrixModel, +) +from usecases.check_object_has_touches_use_case import ( + CheckObjectHasTouchesUseCase, +) +from usecases.clusterisation_sequences_use_case import ( + ClusterisationSequenceUseCase, +) +from usecases.check_sequence_use_case import ( + CheckSequenceUsecase, +) +from usecases.env_reader_use_case import ( + EnvReaderUseCase, +) +from usecases.exit_freecad_use_case import ( + ExitFreeCadUseCase, +) +from usecases.intersection_geometry_use_case import ( + IntersectionGeometryUseCase, +) +from usecases.open_freecad_document_use_case import ( + OpenFreeCadDocumentUseCase, +) + + +from mocks.mock_structure import bottle_jack_mock_structure, simple_cube_mock_structure def main(): @@ -1092,34 +37,30 @@ def main(): leftF=lambda environment: ( OpenFreeCadDocumentUseCase.call(environment.cadFilePath).either( leftF=lambda _: ( - IsAllObjectSolidsCheckUseCase.call().either( - leftF=lambda _: ( - CheckObjectHasTouchesUseCase() - .call(environment.solidBodyPadding) - .either( - leftF=lambda adjaxedMatrix: ( - adjaxedMatrix.sequencesToFileSystem( - environment.outPath, - environment.sequencesFixed, - ), - IntersectionGeometryUseCase.call( - adjaxedMatrix.matrixGetUniqueContact(), - environment.outPath, - ), - adjaxedMatrix.matrixToFileSystem( - environment.outPath, - ), - ExitFreeCadUseCase.call(), + ( + CheckObjectHasTouchesUseCase() + .call(environment.solidBodyPadding) + .either( + leftF=lambda adjaxedMatrix: ( + adjaxedMatrix.sequencesToFileSystem( + environment.outPath, + environment.sequencesFixed, ), - rightF=lambda error: error.toFileSystem( - environment.outPath + IntersectionGeometryUseCase.call( + adjaxedMatrix.matrixGetUniqueContact(), + environment.outPath, ), + adjaxedMatrix.matrixToFileSystem( + environment.outPath, + ), + ClusterisationSequenceUseCase(environment.outPath), + ExitFreeCadUseCase.call(), + ), + rightF=lambda error: error.toFileSystem( + environment.outPath ), ), - rightF=lambda error: error.toFileSystem( - environment.outPath - ), - ), + ) ), rightF=lambda error: print(error), ), @@ -1135,159 +76,15 @@ def main(): # main() -class ReadFileSystemAndGetInstanceModelUseCase: - def call(self, model, path): - if hasattr(model, "from_dict") is False: - return Right( - "ReadFileSystemAndGetInstanceModelUseCase error:" - + model - + "is not have method" - + "from_dict()" - ) - try: - return Left(model.from_dict(FileSystemRepository.readJSON(path))) - except: - error = str(model) + " " + "from dict error " + "path: " + path - print("ReadFileSystemAndGetInstanceModelUseCase error" + error) - return Right(error) - pass - - -class FreeCadTest: - testName: str - - def testHelper(self, testResult): - if isinstance(testResult, bool) is False: - print( - BackgroundConsoleColors.WARNING, - self.testName - + " expected a value of type Boolean, returned a value of type below ", - ) - print(testResult) - return - if testResult: - print(BackgroundConsoleColors.OKGREEN, self.testName + "is complete!") - else: - print(BackgroundConsoleColors.FAIL, self.testName + " is Error!") - pass - - -class FreeCadASPGenerationTestController(FreeCadTest): - testName: str - - def __init__(self, testName: str) -> None: - self.testName = testName - pass - - def test( - self, - assertFn, - documentPath: str, - modelName: str, - model, - execComposition, - outPath=os.path.dirname(__file__) + "/out/", - ): - try: - OpenFreeCadDocumentUseCase.call(documentPath).either( - leftF=lambda _: ( - execComposition(""), - ReadFileSystemAndGetInstanceModelUseCase() - .call(model=model, path=outPath + modelName) - .either( - leftF=lambda model: ( - self.testHelper( - assertFn(model), - ) - ), - rightF=lambda error: print(error), - ), - ), - rightF=lambda error: print(error), - ) - except Exception as inst: - print("FreeCadASPGenerationTestController error") - print(inst) - pass - - def test(): try: mocksFolder = os.path.dirname(__file__) + "/mocks/" + outFolder = os.path.dirname(__file__) + "/out/" - # FreeCadASPGenerationTestController("test adjaxed matrix simple cube").test( - # assertFn=lambda model: CoreList(model.all_parts).equal(["Куб", "Куб001"]), - # execComposition=lambda _: ( - # CheckObjectHasTouchesUseCase() - # .call(0) - # .either( - # leftF=lambda matrix: matrix.matrixToFileSystem(outFolder), - # rightF=lambda error: print(error), - # ) - # ), - # documentPath=mocksFolder + "simple_assembly_with_two_cubes.FCStd", - # modelName=AdjacencyMatrix.fileName, - # model=AdjacencyMatrix, - # ) - - FreeCadASPGenerationTestController( - "test adjaxed matrix vs structure of document" - ).test( - assertFn=lambda model: CoreDict(model.matrix).isEquivalentByKeys( - { - "Бутылочный домкрат 4т_Гильза": [ - "Бутылочный домкрат 4т_Тяга", - "Бутылочный домкрат 4т_Тяга001", - "Бутылочный домкрат 4т_Шток насоса", - "Бутылочный домкрат 4т_Шток", - "Бутылочный домкрат 4т_Вентиль", - ], - "Бутылочный домкрат 4т_Тяга": [ - "Бутылочный домкрат 4т_Гильза", - "Бутылочный домкрат 4т_Тяга001", - "Бутылочный домкрат 4т_Коромысло", - ], - "Бутылочный домкрат 4т_Тяга001": [ - "Бутылочный домкрат 4т_Гильза", - "Бутылочный домкрат 4т_Тяга", - "Бутылочный домкрат 4т_Коромысло", - ], - "Бутылочный домкрат 4т_Шток насоса": [ - "Бутылочный домкрат 4т_Гильза", - "Бутылочный домкрат 4т_Коромысло", - ], - "Бутылочный домкрат 4т_Коромысло": [ - "Бутылочный домкрат 4т_Тяга", - "Бутылочный домкрат 4т_Тяга001", - "Бутылочный домкрат 4т_Шток насоса", - ], - "Бутылочный домкрат 4т_Шток": [ - "Бутылочный домкрат 4т_Гильза", - "Бутылочный домкрат 4т_Винт штока", - ], - "Бутылочный домкрат 4т_Винт штока": ["Бутылочный домкрат 4т_Шток"], - "Бутылочный домкрат 4т_Вентиль": ["Бутылочный домкрат 4т_Гильза"], - } - ), - execComposition=lambda _: ( - CheckObjectHasTouchesUseCase() - .call(0) - .either( - leftF=lambda matrix: matrix.matrixToFileSystem(outFolder), - rightF=lambda error: print(error), - ) - ), - documentPath=mocksFolder + "bottle_jack.FCStd", - modelName=AdjacencyMatrix.fileName, - model=AdjacencyMatrix, - ) - - FreeCadASPGenerationTestController( - "test adjacency matrix keys vs allparts" - ).test( - assertFn=lambda model: CoreDict(model.matrix).isMatchByKeys( - ["Куб", "Куб001"] + FreeCadASPGenerationTestController("test adjaxed matrix simple cube").test( + assertFn=lambda model: CoreList(model.all_parts).equal( + simple_cube_mock_structure ), execComposition=lambda _: ( CheckObjectHasTouchesUseCase() @@ -1298,19 +95,74 @@ def test(): ) ), documentPath=mocksFolder + "simple_assembly_with_two_cubes.FCStd", - modelName=AdjacencyMatrix.fileName, - model=AdjacencyMatrix, + modelName=AdjacencyMatrixModel.fileName, + model=AdjacencyMatrixModel, + ) + + FreeCadASPGenerationTestController( + "test adjaxed matrix vs structure of document" + ).test( + assertFn=lambda model: CoreDict(model.matrix).isEquivalentByKeys( + bottle_jack_mock_structure + ), + execComposition=lambda _: ( + CheckObjectHasTouchesUseCase() + .call(0) + .either( + leftF=lambda matrix: matrix.matrixToFileSystem(outFolder), + rightF=lambda error: print(error), + ) + ), + documentPath=mocksFolder + "bottle_jack.FCStd", + modelName=AdjacencyMatrixModel.fileName, + model=AdjacencyMatrixModel, + ) + + FreeCadASPGenerationTestController( + "test adjacency matrix keys vs allparts" + ).test( + assertFn=lambda model: CoreDict(model.matrix).isMatchByKeys( + model.all_parts + ), + execComposition=lambda _: ( + CheckObjectHasTouchesUseCase() + .call(0) + .either( + leftF=lambda matrix: (matrix.matrixToFileSystem(outFolder)), + rightF=lambda error: print(error), + ) + ), + documentPath=mocksFolder + "bottle_jack.FCStd", + modelName=AdjacencyMatrixModel.fileName, + model=AdjacencyMatrixModel, + ) + + FreeCadASPGenerationTestController("test all parts vs assembly sequence").test( + assertFn=lambda model: CheckSequenceUsecase( + ClusterisationSequenceUseCase(outFolder) + ).isCorrectByParts(model.all_parts), + execComposition=lambda _: ( + CheckObjectHasTouchesUseCase() + .call(0) + .either( + leftF=lambda matrix: ( + matrix.matrixToFileSystem(outFolder), + ClusterisationSequenceUseCase(outFolder), + ), + rightF=lambda error: print(error), + ) + ), + documentPath=mocksFolder + "bottle_jack.FCStd", + modelName=AdjacencyMatrixModel.fileName, + model=AdjacencyMatrixModel, ) ExitFreeCadUseCase.call() - except: + except Exception as e: + print(e) print("test error") ExitFreeCadUseCase.call() pass test() - - -# TODO: -# 1. diff --git a/geometric_feasibility_predicate/mocks/__init__.py b/geometric_feasibility_predicate/mocks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/geometric_feasibility_predicate/mocks/desk_table.FCStd b/geometric_feasibility_predicate/mocks/desk_table.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..8b3c384a3cf589e89cec9dc23e863234150ee968 GIT binary patch literal 343689 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
`;M&D`2$oqWF8sk6$+4Ik`~Y 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 literal 0 HcmV?d00001 diff --git a/geometric_feasibility_predicate/mocks/mock_structure.py b/geometric_feasibility_predicate/mocks/mock_structure.py new file mode 100644 index 0000000..af2bc7e --- /dev/null +++ b/geometric_feasibility_predicate/mocks/mock_structure.py @@ -0,0 +1,36 @@ +bottle_jack_mock_structure = { + "Бутылочный домкрат 4т_Гильза": [ + "Бутылочный домкрат 4т_Тяга", + "Бутылочный домкрат 4т_Тяга001", + "Бутылочный домкрат 4т_Шток насоса", + "Бутылочный домкрат 4т_Шток", + "Бутылочный домкрат 4т_Вентиль", + ], + "Бутылочный домкрат 4т_Тяга": [ + "Бутылочный домкрат 4т_Гильза", + "Бутылочный домкрат 4т_Тяга001", + "Бутылочный домкрат 4т_Коромысло", + ], + "Бутылочный домкрат 4т_Тяга001": [ + "Бутылочный домкрат 4т_Гильза", + "Бутылочный домкрат 4т_Тяга", + "Бутылочный домкрат 4т_Коромысло", + ], + "Бутылочный домкрат 4т_Шток насоса": [ + "Бутылочный домкрат 4т_Гильза", + "Бутылочный домкрат 4т_Коромысло", + ], + "Бутылочный домкрат 4т_Коромысло": [ + "Бутылочный домкрат 4т_Тяга", + "Бутылочный домкрат 4т_Тяга001", + "Бутылочный домкрат 4т_Шток насоса", + ], + "Бутылочный домкрат 4т_Шток": [ + "Бутылочный домкрат 4т_Гильза", + "Бутылочный домкрат 4т_Винт штока", + ], + "Бутылочный домкрат 4т_Винт штока": ["Бутылочный домкрат 4т_Шток"], + "Бутылочный домкрат 4т_Вентиль": ["Бутылочный домкрат 4т_Гильза"], +} +simple_cube_mock_structure = ["Куб", "Куб001"] + diff --git a/geometric_feasibility_predicate/model/__init__.py b/geometric_feasibility_predicate/model/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/geometric_feasibility_predicate/models/__init__.py b/geometric_feasibility_predicate/models/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/geometric_feasibility_predicate/models/adjacency_matrix_model.py b/geometric_feasibility_predicate/models/adjacency_matrix_model.py new file mode 100644 index 0000000..4b33729 --- /dev/null +++ b/geometric_feasibility_predicate/models/adjacency_matrix_model.py @@ -0,0 +1,118 @@ +from models.all_sequences_model import AllSequencesModel +from repository.file_system_repository import FileSystemRepository +from typing import List, Dict, Any +import json + +from models.var import from_str, from_list, from_dict + + +def reduce(function, iterable, initializer=None): + it = iter(iterable) + if initializer is None: + value = next(it) + else: + value = initializer + for element in it: + value = function(value, element) + return value + + +def to_ascii_hash(text): + ascii_values = [ord(character) for character in text] + return reduce(lambda x, y: x + y, ascii_values) + + +class AdjacencyMatrixModel: + matrixError: Dict[str, str] = {} + all_parts: List[str] + first_detail: str + matrix: Dict[str, List[str]] + + fileName = "adjacency_matrix.json" + + def __init__( + self, all_parts: List[str], first_detail: str, matrix: Dict[str, List[str]] + ) -> None: + self.all_parts = all_parts + self.first_detail = first_detail + self.matrix = matrix + self.validateMatrix() + + def matrixToFileSystem(self, path: str): + FileSystemRepository.writeFile( + json.dumps(self.to_dict(), ensure_ascii=False, indent=4), + path, + AdjacencyMatrixModel.fileName, + ) + pass + + def sequencesToFileSystem(self, path: str, restrictions: list[str]): + FileSystemRepository.writeFile( + json.dumps( + { + "sequences": AllSequencesModel( + self.matrix, restrictions + ).adj_matrix_names + }, + ensure_ascii=False, + indent=4, + ), + path, + "sequences.json", + ), + pass + + def matrixGetUniqueContact(self): + detailsToCheck = [] + detailsHashCheck = {} + for k, v in self.matrix.items(): + for el in v: + if el != k: + hash = to_ascii_hash(k + el) + if detailsHashCheck.get(hash) == None: + detailsHashCheck[hash] = hash + detailsToCheck.append({"child": el, "parent": k}) + return detailsToCheck + + def whatPlaceLeadingPartIndex(self): + i = 0 + for el in self.matrix: + if el == self.first_detail: + return i + i = +1 + + def validateMatrix(self): + for el in self.all_parts: + if self.matrix.get(el) == None: + self.matrixError[el] = "Not found adjacency " + el + + @staticmethod + def from_dict(obj: Any) -> "AdjacencyMatrixModel": + assert isinstance(obj, dict) + + all_pars = from_list(from_str, obj.get("allParts")) + first_detail = from_str(obj.get("firstDetail")) + matrix = from_dict(lambda x: from_list(from_str, x), obj.get("matrix")) + + return AdjacencyMatrixModel(all_pars, first_detail, matrix) + + def to_dict(self) -> dict: + result: dict = {} + result["allParts"] = from_list(from_str, self.all_parts) + result["firstDetail"] = from_str(self.first_detail) + result["matrix"] = from_dict(lambda x: from_list(from_str, x), self.matrix) + if self.matrixError.values().__len__() == 0: + result["matrixError"] = None + else: + result["matrixError"] = self.matrixError + return result + + def getDictMatrix(self) -> dict: + result = {} + + for k, v in self.matrix.items(): + result[k] = {} + for el in v: + result[k][el] = el + + return result diff --git a/geometric_feasibility_predicate/models/all_sequences_model.py b/geometric_feasibility_predicate/models/all_sequences_model.py new file mode 100644 index 0000000..e8dfd25 --- /dev/null +++ b/geometric_feasibility_predicate/models/all_sequences_model.py @@ -0,0 +1,130 @@ +from extensions.list import CoreList +from itertools import repeat + + +class AllSequencesModel: + """ + A class that processes information from the assembly and creates the objects necessary to create the assembly sequence + + """ + + all_sequences = None + adj_matrix = None + topologyIds = None + adj_matrix_names = None + + def __init__(self, adj_matrix, restrictions: list[str]) -> None: + self.adj_matrix = adj_matrix + self.all_possible_sequences(self.adj_matrix) + self.matrix_by_name() + if restrictions.__len__() != 0: + self.restrictionsValidate(restrictions) + pass + + def restrictionsValidate(self, restrictions: CoreList[str]): + """_summary_ + + Args: + restrictions (CoreList[str]): _description_ + """ + filterMatrix = CoreList() + + for el in self.adj_matrix_names: + result = False + for restraint in restrictions: + result = CoreList(el).indexedPriorities(restraint[0], restraint[1]) + if result: + filterMatrix.onlyUniqueElementAppend(el) + self.adj_matrix_names = filterMatrix + pass + + def matrix_by_name(self): + result = self.all_sequences + inc = 0 + for matrix in self.all_sequences: + for index in range(len(matrix)): + result[inc][index] = CoreList( + filter( + lambda el: el.get("number") == matrix[index] + 1, + self.topologyIds, + ) + )[0].get("name") + inc += 1 + self.adj_matrix_names = result + pass + + def find_all_sequences(self, adj_matrix): + """Find all assembly sequences with dfs + + Args: + adj_matrix (dict): Assembly ajacency matrix + """ + sequences = [] + num_vertices = len(adj_matrix) + + def dfs(vertex, sequence): + sequence.append(vertex) + + if len(sequence) == num_vertices: + sequences.append(sequence) + return + + for i in range(num_vertices): + if adj_matrix[vertex][i] == 1 and i not in sequence: + dfs(i, sequence.copy()) + + for i in range(num_vertices): + dfs(i, []) + + self.all_sequences = sequences + + def findId(self, listMatrix, id): + def filter_odd_num(in_num): + if in_num["name"] == id: + return True + else: + return False + + return list(filter(filter_odd_num, listMatrix))[0]["number"] + + def iter_paths(self, adj, min_length=6, path=None): + if not path: + for start_node in range(len(adj)): + yield from self.iter_paths(adj, min_length, [start_node]) + else: + if len(path) >= min_length: + yield path + if path[-1] in path[:-1]: + return + current_node = path[-1] + for next_node in range(len(adj[current_node])): + if adj[current_node][next_node] == 1: + yield from self.iter_paths(adj, min_length, path + [next_node]) + + def allUnique(self, x): + seen = set() + return not any(i in seen or seen.add(i) for i in x) + + def all_possible_sequences(self, matrix): + topologyIds = [] + topologyMatrixNumber = {} + inc = 0 + for k, v in matrix.items(): + inc += 1 + topologyIds.append({"name": k, "number": inc}) + inc = 0 + for k, v in matrix.items(): + inc += 1 + topologyMatrixNumber[inc] = list( + map(lambda el: self.findId(topologyIds, el), v) + ) + self.topologyIds = topologyIds + adj = [] + matrixSize = matrix.keys().__len__() + inc = 0 + for k, v in topologyMatrixNumber.items(): + adj.append(list(repeat(0, matrixSize))) + for el in v: + adj[inc][el - 1] = 1 + inc += 1 + return self.find_all_sequences(adj) diff --git a/geometric_feasibility_predicate/models/cad_adjacency_matrix_model.py b/geometric_feasibility_predicate/models/cad_adjacency_matrix_model.py new file mode 100644 index 0000000..496e8d4 --- /dev/null +++ b/geometric_feasibility_predicate/models/cad_adjacency_matrix_model.py @@ -0,0 +1,71 @@ +from usecases.clear_work_space_document_use_case import ( + ClearWorkSpaceDocumentUseCase, +) +from geometric_feasibility_predicate.usecases.get_collision_at_primitive_use_case import ( + GetCollisionAtPrimitiveUseCase, +) +from usecases.render_primitive_use_case import RenderPrimitiveUseCase +from usecases.get_part_primitive_coordinates_use_case import ( + GetPartPrimitiveCoordinatesUseCase, +) +from usecases.init_parts_parse_use_case import ( + InitPartsParseUseCase, +) +from usecases.render_primitives_scenario import RenderPrimitivesScenario +from usecases.get_first_detail_use_case import GetFirstDetailUseCase +from geometric_feasibility_predicate.usecases.get_all_parts_labels_use_case import ( + GetAllPartsLabelsUseCase, +) +from models.adjacency_matrix_model import AdjacencyMatrixModel +from repository.freecad_repository import FreeCadRepository + + +class CadAdjacencyMatrixModel: + """Class for handling adjacency matrix creation scenario + + Returns: + dict: adjacency matrix + """ + + def primitiveMatrix(self): + """get matrix of primitives""" + # Получение матрицы + matrix = RenderPrimitivesScenario( + InitPartsParseUseCase(), + GetPartPrimitiveCoordinatesUseCase(), + RenderPrimitiveUseCase(), + GetCollisionAtPrimitiveUseCase(), + ClearWorkSpaceDocumentUseCase(), + ).call() + return AdjacencyMatrixModel( + all_parts=GetAllPartsLabelsUseCase().call(), + first_detail=GetFirstDetailUseCase().call(), + matrix=matrix, + ) + + # Матрица основанная на соприкосновении обьектов + + def matrixBySurfaces(self): + """Adjacency matrix by touches between parts + + Returns: + dict: adjacency matrix + """ + matrix = {} + for part in FreeCadRepository().getAllSolids(): + matrix[part.Label] = [] + for nextPart in FreeCadRepository().getAllSolids(): + if part.Label != nextPart.Label: + # Вычисление соприконсоновения площади деталей + collisionResult: int = int( + part.Shape.distToShape(nextPart.Shape)[0] + ) + + if collisionResult == 0: + matrix[part.Label].append(nextPart.Label) + + return AdjacencyMatrixModel( + all_parts=GetAllPartsLabelsUseCase().call(), + first_detail=GetFirstDetailUseCase().call(), + matrix=matrix, + ) diff --git a/geometric_feasibility_predicate/models/env_model.py b/geometric_feasibility_predicate/models/env_model.py new file mode 100644 index 0000000..4948519 --- /dev/null +++ b/geometric_feasibility_predicate/models/env_model.py @@ -0,0 +1,48 @@ +from dataclasses import dataclass +from typing import List, Dict, Any, TypeVar, Callable, Type, cast +from extensions.list import CoreList + +from models.var import from_str, from_float + + +@dataclass +class EnvModel: + cadFilePath: str + outPath: str + solidBodyPadding: float + firstDetail: str + sequencesFixed: list[list[str]] + + @staticmethod + def from_dict(obj: Any) -> "EnvModel": + assert isinstance(obj, dict) + cadFilePath = from_str(obj.get("cadFilePath")) + outPath = from_str(obj.get("outPath")) + solidBodyPadding = from_float(obj.get("solidBodyPadding")) + firstDetail = from_str(obj.get("firstDetail")) + sequencesFixed = [] + sequencesFixedParse = CoreList(obj.get("sequencesFixed")) + for el in sequencesFixedParse: + sequencesFixed.append(el) + + restrictionsOnFasteners = CoreList(obj.get("restrictionsOnFasteners")) + + for el in restrictionsOnFasteners: + for part in el["parts"]: + sequencesFixed.append([part, el["fastener"]]) + return EnvModel( + cadFilePath, + outPath, + solidBodyPadding, + firstDetail, + sequencesFixed, + ) + + def to_dict(self) -> dict: + result: dict = {} + result["cadFilePath"] = from_str(self.cadFilePath) + result["outPath"] = from_str(self.outPath) + result["solidBodyPadding"] = from_float(self.solidBodyPadding) + result["firstDetail"] = from_str(self.firstDetail) + result["sequencesFixed"] = self.sequencesFixed + return result diff --git a/geometric_feasibility_predicate/models/error_string_model.py b/geometric_feasibility_predicate/models/error_string_model.py new file mode 100644 index 0000000..d99c410 --- /dev/null +++ b/geometric_feasibility_predicate/models/error_string_model.py @@ -0,0 +1,28 @@ +import json +from repository.file_system_repository import FileSystemRepository +from usecases.exit_freecad_use_case import ( + ExitFreeCadUseCase, +) + + +class ErrorStringModel: + def __init__(self, error: str) -> None: + self.error = error + pass + + error: str + + def toString(self) -> str: + return json.dumps( + { + "error": self.error, + }, + ensure_ascii=False, + indent=4, + ) + + def toFileSystem(self, path: str): + return ( + FileSystemRepository.writeFile(self.toString(), path, "error.json"), + ExitFreeCadUseCase.call(), + ) diff --git a/geometric_feasibility_predicate/models/freecad_meta_model.py b/geometric_feasibility_predicate/models/freecad_meta_model.py new file mode 100644 index 0000000..6bbd54d --- /dev/null +++ b/geometric_feasibility_predicate/models/freecad_meta_model.py @@ -0,0 +1,4 @@ +class FreeCadMetaModel(object): + def __init__(self, label, vertex) -> None: + self.label = label + self.vertex = vertex diff --git a/geometric_feasibility_predicate/models/mesh_geometry_coordinate_model.py b/geometric_feasibility_predicate/models/mesh_geometry_coordinate_model.py new file mode 100644 index 0000000..93a201a --- /dev/null +++ b/geometric_feasibility_predicate/models/mesh_geometry_coordinate_model.py @@ -0,0 +1,41 @@ +import uuid + +collision_squares_labels = [] + + +class MeshGeometryCoordinateModel(object): + # Получение геометрии мешей + def __init__( + self, + x, + y, + z, + label, + ): + self.x = x + self.y = y + self.z = z + self.label = label + self.cadLabel = "" + + def initializePrimitivesByCoordinate(self, detailSquares): + import FreeCAD as App + + uuidDoc = str(uuid.uuid1()) + App.ActiveDocument.addObject("Part::Box", "Box") + App.ActiveDocument.ActiveObject.Label = uuidDoc + App.ActiveDocument.recompute() + part = App.ActiveDocument.getObjectsByLabel(uuidDoc)[0] + collision_squares_labels.append(uuidDoc) + part.Width = 2 + part.Height = 2 + part.Length = 2 + part.Placement = App.Placement( + App.Vector(self.x - 1, self.y - 1, self.z - 1), + App.Rotation(App.Vector(0.00, 0.00, 1.00), 0.00), + ) + if detailSquares.get(self.label) is None: + detailSquares[self.label] = [] + detailSquares[self.label].append(self) + self.cadLabel = uuidDoc + App.ActiveDocument.recompute() diff --git a/geometric_feasibility_predicate/models/var.py b/geometric_feasibility_predicate/models/var.py new file mode 100644 index 0000000..a4a3c28 --- /dev/null +++ b/geometric_feasibility_predicate/models/var.py @@ -0,0 +1,51 @@ +# Data Conversion Helpers: + + +from typing import List, Dict, Any, TypeVar, Callable, Type, cast + +T = TypeVar("T") + + +def from_float(x: Any) -> float: + assert isinstance(x, (float, int)) and not isinstance(x, bool) + return float(x) + + +def to_float(x: Any) -> float: + assert isinstance(x, float) + return x + + +def from_str(x: Any) -> str: + assert isinstance(x, str) + return x + + +def from_int(x: Any) -> int: + assert isinstance(x, int) and not isinstance(x, bool) + return x + + +def to_class(c: Type[T], x: Any) -> dict: + assert isinstance(x, c) + return cast(Any, x).to_dict() + + +def from_list(f: Callable[[Any], T], x: Any) -> List[T]: + assert isinstance(x, list) + return [f(y) for y in x] + + +def from_str(x: Any) -> str: + assert isinstance(x, str) + return x + + +def from_dict(f: Callable[[Any], T], x: Any) -> Dict[str, T]: + assert isinstance(x, dict) + return {k: f(v) for (k, v) in x.items()} + + +def to_class(c: Type[T], x: Any) -> dict: + assert isinstance(x, c) + return cast(Any, x).to_dict() diff --git a/geometric_feasibility_predicate/models/vector_model.py b/geometric_feasibility_predicate/models/vector_model.py new file mode 100644 index 0000000..347ffe4 --- /dev/null +++ b/geometric_feasibility_predicate/models/vector_model.py @@ -0,0 +1,18 @@ +class VectorModel: + x: float + y: float + z: float + + def __init__(self, cadVector) -> None: + self.x = cadVector[0] + self.y = cadVector[1] + self.z = cadVector[2] + pass + + def toFreeCadVector(self): + import FreeCAD as App + + return App.Vector(self.x, self.y, self.z) + + def toString(self): + return str("x:" + str(self.x) + "y:" + str(self.y) + "z:" + str(self.z)) diff --git a/geometric_feasibility_predicate/repository/__init__.py b/geometric_feasibility_predicate/repository/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/geometric_feasibility_predicate/repository/file_system_repository.py b/geometric_feasibility_predicate/repository/file_system_repository.py new file mode 100644 index 0000000..c6d2ec8 --- /dev/null +++ b/geometric_feasibility_predicate/repository/file_system_repository.py @@ -0,0 +1,25 @@ +import os +import json + + +class FileSystemRepository: + def readJSON(path: str): + return json.loads((open(path)).read()) + + def writeFile(data, filePath, fileName): + file_to_open = filePath + fileName + + f = open(file_to_open, "w", encoding='utf-8') + + f.write(data) + + def readFile(path: str): + return open(path).read() + + def readFilesTypeFolder(pathFolder: str, fileType=".json"): + filesJson = list( + filter( + lambda x: x[-fileType.__len__() :] == fileType, os.listdir(pathFolder) + ) + ) + return filesJson diff --git a/geometric_feasibility_predicate/repository/freecad_repository.py b/geometric_feasibility_predicate/repository/freecad_repository.py new file mode 100644 index 0000000..a1be24a --- /dev/null +++ b/geometric_feasibility_predicate/repository/freecad_repository.py @@ -0,0 +1,171 @@ +import FreeCAD as App + + +from typing import List +from extensions.list import CoreList + +from models.vector_model import VectorModel + + +class FreeCadRepository: + """Class for handling FreeCAD related functionality""" + + _solids = [] + + def openDocument(self, path: str): + App.open("" + path) + + def closeIfOpenDocument(self): + """ + If there is an open document being processed in FreeCAD, it may be closed + """ + try: + if App.ActiveDocument is not None: + App.ActiveDocument.clearDocument() + except Exception as e: + print(e) + + def getAllLabelsSolids(self) -> List[str]: + """Returns a list of solid part labels + + Returns: + List[str]: part labels + """ + return list(map(lambda el: el.Label, self.getAllSolids())) + + def isAllObjectsSolids(self) -> List[str]: + """Get all non-solid objects + + Returns: + List[str]: + """ + result = [] + for part in App.ActiveDocument.Objects: + if self.is_object_solid(part) is False: + result.append(part.Label) + return result + + def objectSetPosition(self, solid, cadVector): + solid.Placement.Base = cadVector + pass + + def objectGetPosition(self, solid) -> VectorModel: + return VectorModel(cadVector=solid.Placement.Base) + + def isObjectIntersections(self, part) -> str: + result = [] + for solid in self.getAllSolids(): + if solid.ID != part.ID: + collisionResult: int = int(part.Shape.distToShape(solid.Shape)[0]) + if collisionResult == 0: + result.append(solid.Label) + if result.__len__() == 0: + return None + return result + + def objectHasTouches(self, part, solidBodyPadding: float) -> List[str]: + try: + positionVector = self.objectGetPosition(part) + result = CoreList() + result.append(self.isObjectIntersections(part=part)) + if solidBodyPadding != 0 and solidBodyPadding != None: + result.append( + self.axis_movement_and_intersections_observer( + positionVector=positionVector, + alongAxis="x", + solidBodyPadding=solidBodyPadding, + part=part, + ) + ) + result.append( + self.axis_movement_and_intersections_observer( + positionVector=positionVector, + alongAxis="y", + solidBodyPadding=solidBodyPadding, + part=part, + ) + ) + result.append( + self.axis_movement_and_intersections_observer( + positionVector=positionVector, + alongAxis="z", + solidBodyPadding=solidBodyPadding, + part=part, + ) + ) + spreadArr = result.spreadArray() + if spreadArr.isConstrainsString(): + return spreadArr.getAllString() + return None + except Exception as error: + print(error) + return None + + def axis_movement_and_intersections_observer( + self, + positionVector: VectorModel, + alongAxis: str, + solidBodyPadding: float, + part, + ) -> bool: + result = CoreList() + # UP + positionVector.__setattr__( + alongAxis, + positionVector.__getattribute__(alongAxis) + solidBodyPadding, + ) + self.objectSetPosition(part, positionVector.toFreeCadVector()) + # result.onlyUniqueElementAppend(self.isObjectIntersections(part=part)) + result.extend(self.isObjectIntersections(part=part)) + # RESET UP CHANGES + positionVector.__setattr__( + alongAxis, + positionVector.__getattribute__(alongAxis) - solidBodyPadding, + ) + self.objectSetPosition(part, positionVector.toFreeCadVector()) + + # DOWN + positionVector.__setattr__( + alongAxis, + positionVector.__getattribute__(alongAxis) - solidBodyPadding, + ) + self.objectSetPosition(part, positionVector.toFreeCadVector()) + # CHECK DOWN INTERSECTIONS + # result.onlyUniqueElementAppend(self.isObjectIntersections(part=part)) + result.extend(self.isObjectIntersections(part=part)) + + # RESET DOWN CHANGES + positionVector.__setattr__( + alongAxis, + positionVector.__getattribute__(alongAxis) + solidBodyPadding, + ) + self.objectSetPosition(part, positionVector.toFreeCadVector()) + if result.__len__() == 0: + return None + + return result.onlyUnique() + + def getAllSolids(self): + _solids = [] + + for part in App.ActiveDocument.Objects: + if self.is_object_solid(part): + _solids.append(part) + + return _solids + + def is_object_solid(self, obj): + if not isinstance(obj, App.DocumentObject): + return False + if hasattr(obj, "Group"): + return False + + if not hasattr(obj, "Shape"): + return False + if not hasattr(obj.Shape, "Solids"): + return False + + if len(obj.Shape.Solids) == 0: + return False + + return True diff --git a/geometric_feasibility_predicate/usecases/__init__.py b/geometric_feasibility_predicate/usecases/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/geometric_feasibility_predicate/usecases/check_object_has_touches_use_case.py b/geometric_feasibility_predicate/usecases/check_object_has_touches_use_case.py new file mode 100644 index 0000000..52ef66f --- /dev/null +++ b/geometric_feasibility_predicate/usecases/check_object_has_touches_use_case.py @@ -0,0 +1,50 @@ +from helpers.either import Either, Left, Right +from models.adjacency_matrix_model import ( + AdjacencyMatrixModel, +) +from models.error_string_model import ErrorStringModel +from repository.freecad_repository import ( + FreeCadRepository, +) +from usecases.get_first_detail_use_case import ( + GetFirstDetailUseCase, +) + + +class CheckObjectHasTouchesUseCase: + """Check touches between objects and returns matrix + + Returns: + dict: adjacency matrix + """ + + freeCadRepository = FreeCadRepository() + + def call(self, solidBodyPadding: float) -> Either: + try: + errorResult = [] + matrix = {} + for part in self.freeCadRepository.getAllSolids(): + matrix[part.Label] = [] + touches = FreeCadRepository().objectHasTouches( + part=part, solidBodyPadding=solidBodyPadding + ) + matrix[part.Label].extend(touches) + if errorResult.__len__() == 0: + return Left( + AdjacencyMatrixModel( + all_parts=self.freeCadRepository.getAllLabelsSolids(), + first_detail=GetFirstDetailUseCase().call(), + matrix=matrix, + ) + ) + else: + return Right( + ErrorStringModel( + error="Solids bodies have no recounts: " + ",".join(errorResult) + ) + ) + except Exception as error: + print(error) + print("CheckObjectHasTouchesUseCase error") + return Right(ErrorStringModel(error="CheckObjectHasTouchesUseCase error")) diff --git a/geometric_feasibility_predicate/usecases/check_sequence_use_case.py b/geometric_feasibility_predicate/usecases/check_sequence_use_case.py new file mode 100644 index 0000000..0644864 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/check_sequence_use_case.py @@ -0,0 +1,11 @@ +from extensions.list import CoreList + +class CheckSequenceUsecase(list): + def isCorrectByParts(self, checkList) -> bool: + parts = self[len(self) - 1] + for part in parts: + part = str(part) + part = part[1:-1] + + return CoreList(self).equal(checkList) + diff --git a/geometric_feasibility_predicate/usecases/clear_work_space_document_use_case.py b/geometric_feasibility_predicate/usecases/clear_work_space_document_use_case.py new file mode 100644 index 0000000..22f1ec9 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/clear_work_space_document_use_case.py @@ -0,0 +1,16 @@ +class ClearWorkSpaceDocumentUseCase(object): + """Clear of the workspace + + Args: + object : active CAD-model + """ + + def call(self, detailSquares): + import FreeCAD as App + + for key in detailSquares: + for renderPrimitive in detailSquares[key]: + primitivePart = App.ActiveDocument.getObjectsByLabel( + renderPrimitive.cadLabel + )[0] + App.ActiveDocument.removeObject(primitivePart.Name) diff --git a/geometric_feasibility_predicate/usecases/clusterisation_sequences_use_case.py b/geometric_feasibility_predicate/usecases/clusterisation_sequences_use_case.py new file mode 100644 index 0000000..4963f72 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/clusterisation_sequences_use_case.py @@ -0,0 +1,66 @@ +import os +import json +import networkx as nx +from repository.file_system_repository import FileSystemRepository + + +class GraphProcessor: + file_path: str + graph = None + + def __init__(self, file_path: str): + self.file_path = file_path + self.graph = self.load_graph_from_json() + + def load_graph_from_json(self): + with open(self.file_path, "r") as file: + data = json.load(file) + + G = nx.Graph() + + if "matrix" in data: + matrix = data["matrix"] + for part1, neighbors in matrix.items(): + for neighbor in neighbors: + G.add_edge(part1, neighbor) + + return G + + +class EdgeBetweensClustering: + def __init__(self, graph): + self.graph = graph.copy() + self.clusters = [] + + def cluster(self): + while self.graph.number_of_edges() > 0: + edge_betweens = nx.edge_betweenness_centrality(self.graph) + max_betweens_edge = max(edge_betweens, key=edge_betweens.get) + self.graph.remove_edge(*max_betweens_edge) + components = list(nx.connected_components(self.graph)) + if components not in self.clusters: + self.clusters.append(components) + return [] + + def get_clusters(self): + return self.clusters + + +class ClusterisationSequenceUseCase: + def call(self, file_path: str): + graph_processor = GraphProcessor(file_path + "adjacency_matrix.json") + G = graph_processor.load_graph_from_json() + ebc = EdgeBetweensClustering(G) + ebc.cluster() + clusters = ebc.get_clusters() + + for i in range(len(clusters)): + for j in range(len(clusters[i])): + clusters[i][j] = list(clusters[i][j]) + + FileSystemRepository.writeFile( + json.dumps(clusters, ensure_ascii=False, indent=2), + file_path, + "assembly_sequence.json", + ) + return clusters diff --git a/geometric_feasibility_predicate/usecases/env_reader_use_case.py b/geometric_feasibility_predicate/usecases/env_reader_use_case.py new file mode 100644 index 0000000..753b884 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/env_reader_use_case.py @@ -0,0 +1,12 @@ +from repository.file_system_repository import FileSystemRepository +from helpers.either import Either, Left, Right +from models.env_model import EnvModel + + +class EnvReaderUseCase: + def call() -> Either: + try: + return Left(EnvModel.from_dict(FileSystemRepository.readJSON("env.json"))) + except: + print("env reader error") + return Right(None) diff --git a/geometric_feasibility_predicate/usecases/exit_freecad_use_case.py b/geometric_feasibility_predicate/usecases/exit_freecad_use_case.py new file mode 100644 index 0000000..d9fdd59 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/exit_freecad_use_case.py @@ -0,0 +1,6 @@ +from repository.freecad_repository import FreeCadRepository + + +class ExitFreeCadUseCase: + def call(): + FreeCadRepository().closeIfOpenDocument() diff --git a/geometric_feasibility_predicate/usecases/get_all_parts_labels_use_case.py b/geometric_feasibility_predicate/usecases/get_all_parts_labels_use_case.py new file mode 100644 index 0000000..3449f35 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/get_all_parts_labels_use_case.py @@ -0,0 +1,13 @@ +from repository.freecad_repository import ( + FreeCadRepository, +) + + +class GetAllPartsLabelsUseCase: + """Get all parts label in assembly""" + + def call(self): + parts = [] + for part in FreeCadRepository().getAllSolids(): + parts.append(part.Label) + return parts diff --git a/geometric_feasibility_predicate/usecases/get_collision_at_primitive_use_case.py b/geometric_feasibility_predicate/usecases/get_collision_at_primitive_use_case.py new file mode 100644 index 0000000..99c5368 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/get_collision_at_primitive_use_case.py @@ -0,0 +1,44 @@ +from typing import List, Dict + + +def isUnique(array, element): + for i in array: + if i == element: + return False + + return True + + +class GetCollisionAtPrimitiveUseCase(object): + """Get collisions between primitives + + Args: + object: cad-model + + Returns: + dict: collision matrix + """ + + # Получение колизий примитивов + def call(self, freeCadMetaModels, detailSquares) -> Dict[str, List[str]]: + import FreeCAD as App + + matrix: Dict[str, List[str]] = {} + for model in freeCadMetaModels: + activePart = App.ActiveDocument.getObjectsByLabel(model.label)[0] + for key in detailSquares: + if model.label != key: + for renderPrimitive in detailSquares[key]: + primitivePart = App.ActiveDocument.getObjectsByLabel( + renderPrimitive.cadLabel + )[0] + collisionResult: int = int( + activePart.Shape.distToShape(primitivePart.Shape)[0] + ) + if collisionResult == 0: + if matrix.get(model.label) == None: + matrix[model.label] = [renderPrimitive.label] + else: + if isUnique(matrix[model.label], renderPrimitive.label): + matrix[model.label].append(renderPrimitive.label) + return matrix diff --git a/geometric_feasibility_predicate/usecases/get_first_detail_use_case.py b/geometric_feasibility_predicate/usecases/get_first_detail_use_case.py new file mode 100644 index 0000000..ea7242a --- /dev/null +++ b/geometric_feasibility_predicate/usecases/get_first_detail_use_case.py @@ -0,0 +1,8 @@ +from repository.freecad_repository import FreeCadRepository + + +class GetFirstDetailUseCase: + """Get label of first part in tree assembly""" + + def call(self): + return FreeCadRepository().getAllSolids()[0].Label diff --git a/geometric_feasibility_predicate/usecases/get_part_primitive_coordinates_use_case.py b/geometric_feasibility_predicate/usecases/get_part_primitive_coordinates_use_case.py new file mode 100644 index 0000000..6995047 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/get_part_primitive_coordinates_use_case.py @@ -0,0 +1,27 @@ +from models.mesh_geometry_coordinate_model import ( + MeshGeometryCoordinateModel, +) + + +class GetPartPrimitiveCoordinatesUseCase(object): + """Get positions of parts in assembly + + Args: + object : cad-model + """ + + def call(self, freeCadMetaModels): + meshCoordinates: list[MeshGeometryCoordinateModel] = [] + for model in freeCadMetaModels: + vertexesDetail = model.vertex + labelDetail = model.label + for coords in vertexesDetail: + detailVertex = MeshGeometryCoordinateModel( + coords.X, + coords.Y, + coords.Z, + labelDetail, + ) + meshCoordinates.append(detailVertex) + + return meshCoordinates diff --git a/geometric_feasibility_predicate/usecases/init_parts_parse_use_case.py b/geometric_feasibility_predicate/usecases/init_parts_parse_use_case.py new file mode 100644 index 0000000..11faa4f --- /dev/null +++ b/geometric_feasibility_predicate/usecases/init_parts_parse_use_case.py @@ -0,0 +1,17 @@ +from models.freecad_meta_model import FreeCadMetaModel +from repository.freecad_repository import ( + FreeCadRepository, +) + + +class InitPartsParseUseCase: + """Initialisation of parsing geometry models info""" + + def call(self): + product_details = [] + for part in FreeCadRepository().getAllSolids(): + if part is not None: + model = FreeCadMetaModel(part.Label, part.Shape.Vertexes) + if model is not None: + product_details.append(model) + return product_details diff --git a/geometric_feasibility_predicate/usecases/intersection_computed_use_case.py b/geometric_feasibility_predicate/usecases/intersection_computed_use_case.py new file mode 100644 index 0000000..e2cf148 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/intersection_computed_use_case.py @@ -0,0 +1,20 @@ +class IntersectionComputedUseCase: + def call(parts): + import FreeCAD as App + + App.activeDocument().addObject("Part::MultiCommon", "Common") + App.activeDocument().Common.Shapes = [parts[0], parts[1]] + App.activeDocument().getObject("Common").ViewObject.ShapeColor = getattr( + parts[0].getLinkedObject(True).ViewObject, + "ShapeColor", + App.activeDocument().getObject("Common").ViewObject.ShapeColor, + ) + App.activeDocument().getObject("Common").ViewObject.DisplayMode = getattr( + parts[0].getLinkedObject(True).ViewObject, + "DisplayMode", + App.activeDocument().getObject("Common").ViewObject.DisplayMode, + ) + App.ActiveDocument.recompute() + area = App.activeDocument().getObject("Common").Shape.Area + App.ActiveDocument.removeObject("Common") + return area diff --git a/geometric_feasibility_predicate/usecases/intersection_geometry_use_case.py b/geometric_feasibility_predicate/usecases/intersection_geometry_use_case.py new file mode 100644 index 0000000..56e1da8 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/intersection_geometry_use_case.py @@ -0,0 +1,31 @@ +from repository.file_system_repository import FileSystemRepository +from usecases.intersection_computed_use_case import ( + IntersectionComputedUseCase, +) + +import json + + +class IntersectionGeometryUseCase: + """A class that checks bodies in an assembly for interference and returns the result of the check to a file""" + + def call(contacts, path): + import FreeCAD as App + + intersection_geometry = {"status": True, "recalculations": None} + for el in contacts: + child = App.ActiveDocument.getObjectsByLabel(el.get("child"))[0] + parent = App.ActiveDocument.getObjectsByLabel(el.get("parent"))[0] + area = IntersectionComputedUseCase.call([child, parent]) + if area != 0.0: + if intersection_geometry.get("recalculations") == None: + intersection_geometry["status"] = False + intersection_geometry["recalculations"] = [] + intersection_geometry["recalculations"].append( + {"area": area, "connect": el.get("child") + " " + el.get("parent")} + ) + FileSystemRepository.writeFile( + json.dumps(intersection_geometry, ensure_ascii=False, indent=4), + path, + "intersection_geometry.json", + ) diff --git a/geometric_feasibility_predicate/usecases/is_all_object_solids_check_use_case.py b/geometric_feasibility_predicate/usecases/is_all_object_solids_check_use_case.py new file mode 100644 index 0000000..107f41b --- /dev/null +++ b/geometric_feasibility_predicate/usecases/is_all_object_solids_check_use_case.py @@ -0,0 +1,14 @@ +from helpers.either import Either, Left, Right +from models.error_string_model import ErrorStringModel +from repository import freecad_repository + + +class IsAllObjectSolidsCheckUseCase: + def call() -> Either: + result = freecad_repository().isAllObjectsSolids() + if result.__len__() == 0: + return Left(None) + + return Right( + ErrorStringModel(error="Is not solid objects: " + ",".join(result)) + ) diff --git a/geometric_feasibility_predicate/usecases/open_freecad_document_use_case.py b/geometric_feasibility_predicate/usecases/open_freecad_document_use_case.py new file mode 100644 index 0000000..d426d6f --- /dev/null +++ b/geometric_feasibility_predicate/usecases/open_freecad_document_use_case.py @@ -0,0 +1,18 @@ +from helpers.either import Either, Left, Right +from repository.freecad_repository import ( + FreeCadRepository, +) + + +class OpenFreeCadDocumentUseCase: + """A class that checks open documents, closes them and opens the one with which the program will work""" + + def call(path: str) -> Either: + try: + FreeCadRepository().closeIfOpenDocument() + FreeCadRepository().openDocument(path) + return Left(None) + except Exception as e: + print(e) + print("OpenFreeCadDocumentUseCase error") + return Right(None) diff --git a/geometric_feasibility_predicate/usecases/read_file_system_and_get_instance_model_use_case.py b/geometric_feasibility_predicate/usecases/read_file_system_and_get_instance_model_use_case.py new file mode 100644 index 0000000..52e411c --- /dev/null +++ b/geometric_feasibility_predicate/usecases/read_file_system_and_get_instance_model_use_case.py @@ -0,0 +1,21 @@ +from repository.file_system_repository import FileSystemRepository +from helpers.either import Left, Right, Either + + +class ReadFileSystemAndGetInstanceModelUseCase: + def call(self, model, path) -> Either: + if hasattr(model, "from_dict") is False: + return Right( + "ReadFileSystemAndGetInstanceModelUseCase error:" + + model + + "is not have method" + + "from_dict()" + ) + try: + return Left(model.from_dict(FileSystemRepository.readJSON(path))) + except Exception as e: + print(e) + error = str(model) + " " + "from dict error " + "path: " + path + print("ReadFileSystemAndGetInstanceModelUseCase error" + error) + return Right(error) + pass diff --git a/geometric_feasibility_predicate/usecases/render_primitive_use_case.py b/geometric_feasibility_predicate/usecases/render_primitive_use_case.py new file mode 100644 index 0000000..57b5927 --- /dev/null +++ b/geometric_feasibility_predicate/usecases/render_primitive_use_case.py @@ -0,0 +1,15 @@ +from models.mesh_geometry_coordinate_model import MeshGeometryCoordinateModel + + +class RenderPrimitiveUseCase(object): + """Rendering primitives + + Args: + object: CAD-model + """ + + def call( + self, meshModels: list[MeshGeometryCoordinateModel], detailSquares + ) -> None: + for mesh in meshModels: + mesh.initializePrimitivesByCoordinate(detailSquares) diff --git a/geometric_feasibility_predicate/usecases/render_primitives_scenario.py b/geometric_feasibility_predicate/usecases/render_primitives_scenario.py new file mode 100644 index 0000000..9d8283f --- /dev/null +++ b/geometric_feasibility_predicate/usecases/render_primitives_scenario.py @@ -0,0 +1,41 @@ +from usecases.clear_work_space_document_use_case import ( + ClearWorkSpaceDocumentUseCase, +) +from geometric_feasibility_predicate.usecases.get_collision_at_primitive_use_case import ( + GetCollisionAtPrimitiveUseCase, +) +from usecases.get_part_primitive_coordinates_use_case import ( + GetPartPrimitiveCoordinatesUseCase, +) +from usecases.init_parts_parse_use_case import ( + InitPartsParseUseCase, +) +from usecases.render_primitive_use_case import ( + RenderPrimitiveUseCase, +) + + +class RenderPrimitivesScenario(object): + def __init__( + self, + initPartsParseUseCase: InitPartsParseUseCase, + getPartPrimitiveCoordinatesUseCase: GetPartPrimitiveCoordinatesUseCase, + renderPrimitiveUseCase: RenderPrimitiveUseCase, + getCollisionAtPrimitives: GetCollisionAtPrimitiveUseCase, + clearWorkSpaceDocument: ClearWorkSpaceDocumentUseCase, + ) -> None: + self.initPartsParseUseCase = initPartsParseUseCase + self.getPartPrimitiveCoordinatesUseCase = getPartPrimitiveCoordinatesUseCase + self.renderPrimitiveUseCase = renderPrimitiveUseCase + self.getCollisionAtPrimitives = getCollisionAtPrimitives + self.clearWorkSpaceDocument = clearWorkSpaceDocument + + def call(self) -> None: + meshCoordinates = [] + detailSquares = {} + parts = self.initPartsParseUseCase.call() + meshCoordinates = self.getPartPrimitiveCoordinatesUseCase.call(parts) + self.renderPrimitiveUseCase.call(meshCoordinates, detailSquares) + matrix = self.getCollisionAtPrimitives.call(parts, detailSquares) + self.clearWorkSpaceDocument.call(detailSquares) + return matrix