Skip to content

Ostheer/openscad-step-reader

 
 

Repository files navigation

openscad-step-reader

A proof-of-concept project, testing OpenSCAD / STEP files loading.

Fork edits

Forked to make some minor modifications to a few files to deal with API changes in opencascade > 7.2. This compiled and worked correctly in October 2024 on archlinux 6.6.56-1-lts with opencascade 1:7.7.2-6.

I downgraded opencascade a little bit (from 1:7.8.1-2) because version 7.8 brought some TK library reorganization that is incompatible with the hardcoded Makefile. In this forum post, Dmitrii links to this piece of documentation on how you should properly perform the upgrade/migration.

Usage

$ openscad-step-reader

A proof-of-concept program for STEP/OpenSCAD integration

usage: openscad-step-reader [options] INPUT.STEP

Output is written to STDOUT.

options are:
   -h, --help         this help screen
   -V, --version      version information

   -o, --stl-occt     convert the input STEP file into ASCII STL file
                      using OpenCASCADE code. This should be the baseline
                      when debugging/troubleshooting incorrect outputs.

   -a, --stl-ascii    convert the input STEP file into custom ASCII STL file,
                      using our code. This is a good test to check mesh
                      triangulation code. EXCEPT for the 'normal' values
                      which are not produced, the vertex values should be
                      equivalent to those with --stl-occt.

   -s, --stl-scad     convert the input STEP file into SCAD code, containing
                      a single 'polyhedron' call with the STL triangles stored
                      in SCAD vectors.

   -f, --stl-faces    convert the input STEP file into SCAD code, retaining the
                      'face' information from the STEP file. Each face will be rendered
                      in a different color in openscad $preview mode.

   -e, --explore      Work-in-progress code, used for development and exploration
                      of OpenCASCADE class hierarchy, e.g.
                      Shell->Face->Surface->Wire->Edge->Vertex.
                      produces debug messges and no useful output.

Examples

See the [examples] sub directory for STEP files and their STL/SCAD output.

e.g. the files in examples/box were created with:

openscad-step-reader --stl-ascii examples/box/box.stp > examples/box/box-ascii.stl
openscad-step-reader --stl-scad  examples/box/box.stp > examples/box/box.scad
openscad-step-reader --stl-faces examples/box/box.stp > examples/box/box-faces.scad

The --explore option is a development tool to help learn and understand the OpenCASCADE hierarchy class model (e.g. shape->shell->face->surface->wire->edge->vertex).

$ openscad-step-reader --explore example/cylinder/cyl.stp

Shell 0
  Face 0 Type = 1:Cylinder
    Wire 0
     edge 0
       VertexFirst 2, -4.89859e-16, 10
       VertexLast 2, -4.89859e-16, 10
     edge 1
       VertexFirst 2, -4.89859e-16, 0
       VertexLast 2, -4.89859e-16, 10
     edge 2
       VertexFirst 2, -4.89859e-16, 0
       VertexLast 2, -4.89859e-16, 0
     edge 3
       VertexFirst 2, -4.89859e-16, 0
       VertexLast 2, -4.89859e-16, 10
  Face 0 Type = 0:Plane
    Wire 0
     edge 0
       VertexFirst 2, -4.89859e-16, 10
       VertexLast 2, -4.89859e-16, 10
  Face 0 Type = 0:Plane
    Wire 0
     edge 0
       VertexFirst 2, -4.89859e-16, 0
       VertexLast 2, -4.89859e-16, 0

The --stl-scad converts to STEP to triangles (just like an STL file), then writes the triangles as openSCAD code:

$ openscad-step-reader --stl-scad example/box/box.stp
points = [
  [0,10,0],[0,0,0],[0,0,10], // Triangle 1 / 12
  [0,10,10],[0,10,0],[0,0,10],
  [10,0,10],[10,0,0],[10,10,0],
  [10,0,10],[10,10,0],[10,10,10],
  [0,0,0],[10,0,0],[10,0,10],
  [0,0,10],[0,0,0],[10,0,10],
  [10,10,10],[10,10,0],[0,10,0],
  [10,10,10],[0,10,0],[0,10,10],
  [0,0,0],[0,10,0],[10,10,0],
  [10,0,0],[0,0,0],[10,10,0], // Triangle 10 / 12
  [10,10,10],[0,10,10],[0,0,10],
  [10,10,10],[0,0,10],[10,0,10],
];
faces = [
  [0,1,2], // Triangle 1 / 12
  [3,4,5],
  [6,7,8],
  [9,10,11],
  [12,13,14],
  [15,16,17],
  [18,19,20],
  [21,22,23],
  [24,25,26],
  [27,28,29], // Triangle 10 / 12
  [30,31,32],
  [33,34,35],
];
module solid_object() {
  polyhedron (points,faces);
}

solid_object();

License

Written by Assaf Gordon ([email protected]) License: LGPLv2.1 or later

About

Proof-of-concept for OpenSCAD step file importing

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 84.3%
  • C 7.9%
  • Makefile 7.8%