FreeCAD: Workbench Refactor
This commit is contained in:
parent
037827669a
commit
a58dcdafb1
386 changed files with 997 additions and 64533 deletions
86
simulation/intersection_geometry_predicate/main.py
Normal file
86
simulation/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()
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue