From 27738cd2154367354178274262e8fdbad084c016 Mon Sep 17 00:00:00 2001 From: Igor Brylyov Date: Fri, 22 Mar 2024 16:31:17 +0300 Subject: [PATCH] STEP file parser --- parse_step_file.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 parse_step_file.py diff --git a/parse_step_file.py b/parse_step_file.py new file mode 100644 index 0000000..3e59c8c --- /dev/null +++ b/parse_step_file.py @@ -0,0 +1,33 @@ +import sys +import SimpleITK +from OCC.Exchange import STEPControl_Reader +from OCC.IFSelect import IFSelect_RetDone +from OCC.TopoDS import TopoDS_Shape + +def save_shape(shape, filename): + from OCC.STEPControl import STEPControl_Writer + writer = STEPControl_Writer() + writer.Transfer(shape, STEPControl_Reader().StepModel(), False) + writer.Write(filename) + +def parse_step_file(filepath): + reader = STEPControl_Reader() + status = reader.ReadFile(filepath.encode('utf-8')) + + if status == IFSelect_RetDone: + nbr = reader.NbRootsForTransfer() + reader.TransferRoots() + shapes = [reader.Shape(i) for i in range(1, nbr + 1)] + + solids = [] + for i, shape in enumerate(shapes, start=1): + filename = f"solid_{i}.step" + save_shape(shape, filename) + solids.append({"name": f"solid_{i}", "file": filename}) + + return solids + +if __name__ == "__main__": + step_file_path = sys.argv[1] + solids = parse_step_file(step_file_path) + print(solids) # This print is simplistic; in practice, you might write this to a file or handle differently.