72 lines
2.7 KiB
Python
72 lines
2.7 KiB
Python
![]() |
import argparse
|
||
|
import shutil
|
||
|
from distutils.dir_util import copy_tree
|
||
|
import asyncio
|
||
|
from helper.fs import FS
|
||
|
from src.usecases.generate_world import SdfGenerateWorldUseCase
|
||
|
from src.model.sdf_geometry import SdfGeometryModel
|
||
|
from src.usecases.sdf_sub_assembly_usecase import SdfSubAssemblyUseCase
|
||
|
|
||
|
import os
|
||
|
import typing
|
||
|
import xmlformatter
|
||
|
|
||
|
|
||
|
|
||
|
# python3 main.py --generationFolder /Users/idontsudo/robo/Cube3/ --outPath /Users/idontsudo/robo/ --world true
|
||
|
if __name__ == "__main__":
|
||
|
parser = argparse.ArgumentParser()
|
||
|
parser.add_argument('--generationFolder', help='FreeCad generation folder')
|
||
|
parser.add_argument('--outPath', help='save SDF path')
|
||
|
parser.add_argument('--world', help='adding sdf world')
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
if args.generationFolder == None or args.outPath == None:
|
||
|
parser.print_help()
|
||
|
outPath = args.outPath
|
||
|
|
||
|
geometryFiles = FS.readFilesTypeFolder(args.generationFolder + '/assets/')
|
||
|
assemblyStructure = FS.readJSON(
|
||
|
args.generationFolder + '/step-structure.json')
|
||
|
|
||
|
sdfGeometryModels: list[SdfGeometryModel] = []
|
||
|
for el in geometryFiles:
|
||
|
sdfGeometryModels.append(SdfGeometryModel.from_dict(
|
||
|
FS.readJSON(args.generationFolder + '/assets/' + el)))
|
||
|
sdfSubAssemblyUseCase = SdfSubAssemblyUseCase().call(
|
||
|
sdfGeometryModels, assemblyStructure,)
|
||
|
|
||
|
if os.path.exists(outPath + 'sdf-generation/'):
|
||
|
shutil.rmtree(path=outPath + 'sdf-generation/')
|
||
|
|
||
|
copy_tree(args.generationFolder + 'sdf/', outPath + 'sdf-generation/')
|
||
|
dirPath = outPath + 'sdf-generation/'
|
||
|
for el in sdfGeometryModels:
|
||
|
path = dirPath + el.name + '/'
|
||
|
os.makedirs(path)
|
||
|
FS.writeFile(data=el.toSDF(), filePath=path,
|
||
|
fileName='/model' + '.sdf')
|
||
|
FS.writeFile(data=FS.readFile(os.path.dirname(os.path.realpath(__file__))
|
||
|
+ '/mocks/sdf/model.config'), filePath=path, fileName='/model' + '.config')
|
||
|
|
||
|
|
||
|
if(args.world == None):
|
||
|
for key, v in sdfSubAssemblyUseCase.items():
|
||
|
FS.writeFile(data=v['assembly'], filePath=dirPath,
|
||
|
fileName='/' + key + '.sdf')
|
||
|
|
||
|
else:
|
||
|
for key, v in sdfSubAssemblyUseCase.items():
|
||
|
FS.writeFile(data=SdfGenerateWorldUseCase.call(v['assembly']), filePath=dirPath,
|
||
|
fileName='/' + key + '.sdf')
|
||
|
formatter = xmlformatter.Formatter(indent="1", indent_char="\t", encoding_output="ISO-8859-1", preserve=["literal"])
|
||
|
|
||
|
files = FS.readFilesTypeFolder(outPath + 'sdf-generation/', fileType= '.sdf')
|
||
|
for el in files:
|
||
|
|
||
|
FS.writeFile(data=str(formatter.format_file(outPath + 'sdf-generation/' + el) , 'utf-8'), filePath=outPath + 'sdf-generation/', fileName=el)
|
||
|
|
||
|
|
||
|
|