86 lines
No EOL
2.5 KiB
Python
86 lines
No EOL
2.5 KiB
Python
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()
|
|
|