Merge remote-tracking branch 'origin/141-cg-pipeline-prepare-for-release' into 143-project-structure-refactoring
This commit is contained in:
commit
df0fb32592
3 changed files with 125 additions and 0 deletions
37
intersection_geometry_predicate/README.md
Normal file
37
intersection_geometry_predicate/README.md
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
# Intersection Geometry Predicate
|
||||||
|
|
||||||
|
Осуществляется проверка геометрических вершин пересечения файлов .obj на соответствие допустимой погрешности глубины.
|
||||||
|
|
||||||
|
|
||||||
|
### CLI аргументы:
|
||||||
|
--aspPath путь до папки с асетами сборки
|
||||||
|
|
||||||
|
### вывод
|
||||||
|
на выходе делает файл intersection_geometry.json
|
||||||
|
в котором записан результат работы предиката в виде ключа status и результат в виде ключа recalculations.
|
||||||
|
В ключе recalculations, записан объект в который записываются результаты расчета пересечения.
|
||||||
|
Они состоят из объекта.
|
||||||
|
- names имена пересекающеюся деталей
|
||||||
|
- depth глубина пересечения
|
||||||
|
- point геометрические вершины
|
||||||
|
|
||||||
|
|
||||||
|
```JSON
|
||||||
|
{
|
||||||
|
"status": false,
|
||||||
|
"recalculations": {
|
||||||
|
"disk_bottom bolt ": [
|
||||||
|
{
|
||||||
|
"names": "disk_bottom bolt ",
|
||||||
|
"depth": 0.5127948565443177,
|
||||||
|
"point": [
|
||||||
|
-1.972554,
|
||||||
|
16.442781,
|
||||||
|
-9.208569
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
86
intersection_geometry_predicate/main.py
Normal file
86
intersection_geometry_predicate/main.py
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
import trimesh
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
class FS:
|
||||||
|
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')
|
||||||
|
f.write(data)
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
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 list(map(lambda x: pathFolder + x, filesJson))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument('--aspPath', help='asp generation folder')
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.aspPath == None:
|
||||||
|
parser.print_help()
|
||||||
|
aspPath = args.aspPath
|
||||||
|
pathMeshes = 'sdf/meshes/'
|
||||||
|
permissibleDepth = 0.5
|
||||||
|
|
||||||
|
trimeshObjects = []
|
||||||
|
meshes = FS.readFilesTypeFolder(aspPath + pathMeshes, '.obj')
|
||||||
|
for el in meshes:
|
||||||
|
trimeshObjects.append(trimesh.load(el))
|
||||||
|
|
||||||
|
manager = trimesh.collision.CollisionManager()
|
||||||
|
|
||||||
|
for el in range(len(trimeshObjects)):
|
||||||
|
manager.add_object(str(meshes[el]), trimeshObjects[el])
|
||||||
|
|
||||||
|
def set_to_dict(s):
|
||||||
|
keys = list(s)
|
||||||
|
values = [None] * len(s)
|
||||||
|
return {k: v for k, v in zip(keys, values)}
|
||||||
|
collisions = manager.in_collision_internal(True, True)
|
||||||
|
|
||||||
|
recalculations = {}
|
||||||
|
for el in collisions[collisions.__len__() - 1]:
|
||||||
|
if (el.depth > permissibleDepth):
|
||||||
|
labels = ''
|
||||||
|
for key in set_to_dict(el.names).keys():
|
||||||
|
label = key[key.rfind('/') + 1:key.__len__() - 4]
|
||||||
|
labels+=label + " "
|
||||||
|
message = {
|
||||||
|
'names': labels,
|
||||||
|
'depth': el.depth,
|
||||||
|
'point': el.point.tolist()
|
||||||
|
}
|
||||||
|
if(recalculations.get(labels) != None):
|
||||||
|
recalculations[labels].append(message)
|
||||||
|
else:
|
||||||
|
recalculations[labels] = [message]
|
||||||
|
|
||||||
|
if(len(list(recalculations.keys())) >= 1):
|
||||||
|
messageError = {
|
||||||
|
'status':False,
|
||||||
|
'recalculations':recalculations
|
||||||
|
}
|
||||||
|
FS.writeFile(json.dumps(messageError, ensure_ascii=False, indent=4), aspPath,'intersection_geometry.json')
|
||||||
|
else:
|
||||||
|
message = {
|
||||||
|
'status':True,
|
||||||
|
'recalculations': None
|
||||||
|
}
|
||||||
|
FS.writeFile(json.dumps(messageError, ensure_ascii=False, indent=4), aspPath,'intersection_geometry.json')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
||||||
|
|
2
intersection_geometry_predicate/requirements.txt
Normal file
2
intersection_geometry_predicate/requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
argparse
|
||||||
|
trimesh
|
Loading…
Add table
Add a link
Reference in a new issue