Ask Your Question
2

In Sage is there support for non-convex polyhedra?

asked 2020-04-22 15:46:11 -0500

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
5

answered 2020-04-22 16:43:33 -0500

slelievre gravatar image

updated 2020-04-22 21:44:19 -0500

Define nonconvex polyhedron in SageMath and export to STL

Here is an example of constructing a non-convex polyhedron and exporting 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.

torus.show(frame=False)

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

torus.save('diamond_torus.stl')

To get the ascii STL:

torus_ascii_stl = torus.stl_ascii_string()
print(torus_ascii_stl)

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

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

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 flag offensive delete link more

Comments

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-22 21:06:05 -0500 )edit
1

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-22 21:47:39 -0500 )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

2 followers

Stats

Asked: 2020-04-22 15:46:11 -0500

Seen: 40 times

Last updated: Apr 22