Loading [MathJax]/jax/output/HTML-CSS/jax.js
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Nonconvex polyhedron in SageMath: construction 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 R3.

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.

torus.save('diamond_torus.stl')
click to hide/show revision 2
No.2 Revision

Nonconvex polyhedron in SageMath: construction 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 R3.

v = [( 1,  0,  0), ( 2,  0,  1), -1), ( 3,  0,  0), ( 2,  0, -1),
 1),
     ( 0,  1,  0), ( 0,  2,  1), -1), ( 0,  3,  0), ( 0,  2, -1),
 1),
     (-1,  0,  0), (-2,  0,  1), -1), (-3,  0,  0), (-2,  0, -1),
 1),
     ( 0, -1,  0), ( 0, -2,  1), -1), ( 0, -3,  0), ( 0, -2, -1)]
 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.

torus.save('diamond_torus.stl')
click to hide/show revision 3
No.3 Revision

Nonconvex Define nonconvex polyhedron in SageMath: construction 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 R3.

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.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.

click to hide/show revision 4
No.4 Revision

Define Export SageMath nonconvex polyhedron in SageMath and export to STL

Here is an example of constructing We construct a non-convex polyhedron and exporting export it to STL.

Define a list of vertices given as triples for points in R3.

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 (2021-04-29): support for polyhedral complexes is coming: