Ask Your Question

In Sage is there support for non-convex polyhedra?

asked 2020-04-22 22:46:11 +0200

dart2163 gravatar image

Which reference page gives help or examples? Can they be triangulated? I want to triangulate them in order to help turn them into stl files.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2020-04-22 23:43:33 +0200

slelievre gravatar image

updated 2021-04-30 01:13:48 +0200

Export SageMath nonconvex polyhedron to STL

We construct a non-convex polyhedron and export it to STL.

Define a list of vertices given as triples for points in $\mathbb{R}^3$.

v = [( 1,  0,  0), ( 2,  0, -1), ( 3,  0,  0), ( 2,  0,  1),
     ( 0,  1,  0), ( 0,  2, -1), ( 0,  3,  0), ( 0,  2,  1),
     (-1,  0,  0), (-2,  0, -1), (-3,  0,  0), (-2,  0,  1),
     ( 0, -1,  0), ( 0, -2, -1), ( 0, -3,  0), ( 0, -2,  1)]

Define a list of faces: each face is a tuple of indices where each index refers to a vertex in the list of vertices.

f = [(4*k + j, 4*((k+1)%4) + j, 4*((k+1)%4) + (j+1)%4, 4*k + (j+1)%4)
     for k in range(4) for j in range(4)]

Now define a polyhedron using the function polygons3d, which takes as arguments a list of vertices and a list of faces as above. In addition, use threejs_flat_shading=True for correct shading in the Three.js rendering.

torus = polygons3d(points=v, faces=f, threejs_flat_shading=True)

View the polyhedron.

Save it in STL format (this saves to binary STL).'diamond_torus.stl')

To get the ascii STL:

torus_ascii_stl = torus.stl_ascii_string()

To save the polyhedron to ascii STL, write that ascii string to a file:

with open('diamond_torus_ascii.stl', 'w') as f:

Note also that Blender can be made to use SageMath's Python, so Python scripting in Blender can use all the power of Sage.

Edit (2021-04-29): support for polyhedral complexes is coming:

edit flag offensive delete link more


Thank you - this was very helpful.
I did not know I could directly save it in stl format. In my convex examples I was using the function/attribute
"triangulate" and then using a surface_to_stl routine to generate the stl. I notice that this polygon3d does not have a triangulate attribute. Also that the saved stl file is binary - is there a way to get the stl file in text format?

dart2163 gravatar imagedart2163 ( 2020-04-23 04:06:05 +0200 )edit

Once the polyhedron has a name (here torus), explore its methods with torus.<TAB> where <TAB> means hitting the TAB key. Or if you want only methods starting in stl, type torus.stl<TAB>. This reveals the two methods .stl_binary and .stl_ascii_string. You can then check their documentation with torus.stl_ascii_string? and their source code with torus.stl_ascii_string??.

slelievre gravatar imageslelievre ( 2020-04-23 04:47:39 +0200 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools



Asked: 2020-04-22 22:46:11 +0200

Seen: 1,006 times

Last updated: Apr 30