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)