Repository: cdbrauer/VoxelFuse (language: python)

Issue:
Update documentation
Generate updated package documentation

- Documentation generated using [pdoc][1]
- Pull request auto-generated by [create-pull-request][2]

[1]: https://pdoc3.github.io/pdoc/
[2]: https://github.com/peter-evans/create-pull-request


Discussion / hints:

Fix patch:
diff --git a/docs/voxelfuse/gcode_tools.html b/docs/voxelfuse/gcode_tools.html
index 702d80b..def2776 100644
--- a/docs/voxelfuse/gcode_tools.html
+++ b/docs/voxelfuse/gcode_tools.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.gcode_tools API documentation</title>
 <meta name="description" content="Functions for manipulating gcode files …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -389,7 +389,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/index.html b/docs/voxelfuse/index.html
index da20fe6..37332d3 100644
--- a/docs/voxelfuse/index.html
+++ b/docs/voxelfuse/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse API documentation</title>
 <meta name="description" content="…" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -278,7 +278,7 @@ <h2 id="papers">Papers</h2>
 &#34;&#34;&#34;
 
 name = &#34;voxelfuse&#34;
-__version__ = &#34;1.2.7&#34;
+__version__ = &#34;1.2.8&#34;
 
 from voxelfuse.voxel_model import VoxelModel, Axes, Dir, Process, Struct, GpuSettings
 from voxelfuse.mesh import Mesh
@@ -377,7 +377,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/materials.html b/docs/voxelfuse/materials.html
index 81b55e9..b8f911a 100644
--- a/docs/voxelfuse/materials.html
+++ b/docs/voxelfuse/materials.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.materials API documentation</title>
 <meta name="description" content="Material data array …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -114,21 +114,21 @@ <h3 id="supported-process-values">Supported Process Values</h3>
      {&#39;id&#39;: 5,  &#39;name&#39;:&#39;Rubber&#39;,   &#39;process&#39;:&#39;3dp&#39;, &#39;r&#39;:0.20, &#39;g&#39;:0.20, &#39;b&#39;:0.20, &#39;p&#39;:0.930, &#39;v&#39;:0.50, &#39;E&#39;:1.8180e6, &#39;G&#39;:1.000e9, &#39;Z&#39;:0, &#39;eY&#39;:3.223e6, &#39;eF&#39;:3.164e6, &#39;SY&#39;:1.025, &#39;SF&#39;:1.028, &#39;CTE&#39;:0.1e-6, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:3, &#39;MMD&#39;:1, &#39;FM&#39;:1, &#39;HG&#39;: 0, &#39;HGM&#39;: 0}, # u is for rubber-asphalt
 
      # Hydrogel type 1
-     {&#39;id&#39;: 6,  &#39;name&#39;:&#39;C H-Gel 1&#39;, &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:0.00, &#39;g&#39;:0.60, &#39;b&#39;:0.60, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:5e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 1},
-     {&#39;id&#39;: 7,  &#39;name&#39;:&#39;M H-Gel 1&#39;, &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:0.60, &#39;g&#39;:0.00, &#39;b&#39;:0.60, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:5e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 1},
-     {&#39;id&#39;: 8,  &#39;name&#39;:&#39;Y H-Gel 1&#39;, &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:0.60, &#39;g&#39;:0.60, &#39;b&#39;:0.00, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:5e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 1},
+     {&#39;id&#39;: 6,  &#39;name&#39;:&#39;C H-Gel 1&#39;, &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:0.00, &#39;g&#39;:0.60, &#39;b&#39;:0.60, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:37e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 1},
+     {&#39;id&#39;: 7,  &#39;name&#39;:&#39;M H-Gel 1&#39;, &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:0.60, &#39;g&#39;:0.00, &#39;b&#39;:0.60, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:37e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 1},
+     {&#39;id&#39;: 8,  &#39;name&#39;:&#39;Y H-Gel 1&#39;, &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:0.60, &#39;g&#39;:0.60, &#39;b&#39;:0.00, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:37e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 1},
 
      # Hydrogel type 2
-     {&#39;id&#39;: 9,  &#39;name&#39;:&#39;C H-Gel 2&#39;,  &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:0.00, &#39;g&#39;:1.00, &#39;b&#39;:1.00, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:5e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 2},
-     {&#39;id&#39;: 10, &#39;name&#39;:&#39;M H-Gel 2&#39;,  &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:1.00, &#39;g&#39;:0.00, &#39;b&#39;:1.00, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:5e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 2},
-     {&#39;id&#39;: 11, &#39;name&#39;:&#39;Y H-Gel 2&#39;,  &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:1.00, &#39;g&#39;:1.00, &#39;b&#39;:0.00, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:5e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 2},
+     {&#39;id&#39;: 9,  &#39;name&#39;:&#39;C H-Gel 2&#39;,  &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:0.00, &#39;g&#39;:1.00, &#39;b&#39;:1.00, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:58e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 2},
+     {&#39;id&#39;: 10, &#39;name&#39;:&#39;M H-Gel 2&#39;,  &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:1.00, &#39;g&#39;:0.00, &#39;b&#39;:1.00, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:58e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 2},
+     {&#39;id&#39;: 11, &#39;name&#39;:&#39;Y H-Gel 2&#39;,  &#39;process&#39;:&#39;ins&#39;, &#39;r&#39;:1.00, &#39;g&#39;:1.00, &#39;b&#39;:0.00, &#39;p&#39;:1.000, &#39;v&#39;:0.4, &#39;E&#39;:58e3,  &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:-0.016, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 1, &#39;HGM&#39;: 2},
 
      # Similar properties to rubber, but with lower yield and failure points
      {&#39;id&#39;: 12, &#39;name&#39;:&#39;Adhesive&#39;, &#39;process&#39;:&#39;3dp&#39;, &#39;r&#39;:0.30, &#39;g&#39;:0.30, &#39;b&#39;:0.30, &#39;p&#39;:0.930, &#39;v&#39;:0.50, &#39;E&#39;:1.8180e6, &#39;G&#39;:1.000e9, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:0.1e-6, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:3, &#39;MMD&#39;:2, &#39;FM&#39;:1, &#39;HG&#39;: 0, &#39;HGM&#39;: 0},
 
      # For use as a sensor element - similar hardness to hydrogel, low mass, no thermal expansion
-     {&#39;id&#39;: 13, &#39;name&#39;:&#39;Low Mass Soft&#39;, &#39;process&#39;:&#39;3dp&#39;, &#39;r&#39;:0.80, &#39;g&#39;:0.40, &#39;b&#39;:0.00, &#39;p&#39;:0.01, &#39;v&#39;:0.50, &#39;E&#39;:5e3, &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:0, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 0, &#39;HGM&#39;: 0},
-     {&#39;id&#39;: 14, &#39;name&#39;:&#39;Low Mass Hard&#39;, &#39;process&#39;:&#39;3dp&#39;, &#39;r&#39;:1.00, &#39;g&#39;:0.60, &#39;b&#39;:0.00, &#39;p&#39;:0.01, &#39;v&#39;:0.50, &#39;E&#39;:5e4, &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:0, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 0, &#39;HGM&#39;: 0}]
+     {&#39;id&#39;: 13, &#39;name&#39;:&#39;Low Mass Soft&#39;, &#39;process&#39;:&#39;3dp&#39;, &#39;r&#39;:0.80, &#39;g&#39;:0.40, &#39;b&#39;:0.00, &#39;p&#39;:0.01, &#39;v&#39;:0.50, &#39;E&#39;:50e3, &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:0, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 0, &#39;HGM&#39;: 0},
+     {&#39;id&#39;: 14, &#39;name&#39;:&#39;Low Mass Hard&#39;, &#39;process&#39;:&#39;3dp&#39;, &#39;r&#39;:1.00, &#39;g&#39;:0.60, &#39;b&#39;:0.00, &#39;p&#39;:0.01, &#39;v&#39;:0.50, &#39;E&#39;:50e4, &#39;G&#39;:1.8e3, &#39;Z&#39;:0, &#39;eY&#39;:1.4e6, &#39;eF&#39;:1.301e6, &#39;SY&#39;:0.6606, &#39;SF&#39;:0.6776, &#39;CTE&#39;:0, &#39;TP&#39;:0, &#39;uS&#39;:0.9, &#39;uD&#39;:0.8, &#39;MM&#39;:0, &#39;MMD&#39;:0, &#39;FM&#39;:0, &#39;HG&#39;: 0, &#39;HGM&#39;: 0}]
 
 # Stress-strain curves for use when &#39;MM&#39; = 3
 ss_data = [{&#39;id&#39;: 1,
@@ -146,7 +146,7 @@ <h3 id="supported-process-values">Supported Process Values</h3>
               &#39;test_voxel_dim&#39;: 0.005,
               &#39;ideal_displacement&#39;: 2.0,
               &#39;ideal_max_temp&#39;: 45.0,
-              &#39;ideal_min_temp&#39;: 20.0,
+              &#39;ideal_min_temp&#39;: 15.0,
               &#39;test_displacement&#39;: 1.65,
               &#39;test_max_temp&#39;: 43.0,
               &#39;test_min_temp&#39;: 15.32,
@@ -164,7 +164,7 @@ <h3 id="supported-process-values">Supported Process Values</h3>
               &#39;test_voxel_dim&#39;: 0.005,
               &#39;ideal_displacement&#39;: 2.0,
               &#39;ideal_max_temp&#39;: 45.0,
-              &#39;ideal_min_temp&#39;: 20.0,
+              &#39;ideal_min_temp&#39;: 15.0,
               &#39;test_displacement&#39;: 1.65,
               &#39;test_max_temp&#39;: 43.0,
               &#39;test_min_temp&#39;: 15.32,
@@ -206,7 +206,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/mesh.html b/docs/voxelfuse/mesh.html
index 03a03a2..35a643a 100644
--- a/docs/voxelfuse/mesh.html
+++ b/docs/voxelfuse/mesh.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.mesh API documentation</title>
 <meta name="description" content="Mesh Class …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -1036,7 +1036,7 @@ <h1 class="title">Module <code>voxelfuse.mesh</code></h1>
 <h2 class="section-title" id="header-functions">Functions</h2>
 <dl>
 <dt id="voxelfuse.mesh.addVerticesAndTriangles"><code class="name flex">
-<span>def <span class="ident">addVerticesAndTriangles</span></span>(<span>voxel_model_array: numpy.ndarray, verts_indices: numpy.ndarray, model_offsets: Tuple, x: int, y: int, z: int, vi: int)</span>
+<span>def <span class="ident">addVerticesAndTriangles</span></span>(<span>voxel_model_array: numpy.ndarray, verts_indices: numpy.ndarray, model_offsets: Tuple[], x: int, y: int, z: int, vi: int)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Find the applicable mesh vertices and triangles for a target voxel.</p>
@@ -1589,7 +1589,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
 <dl>
 <dt id="voxelfuse.mesh.Mesh"><code class="flex name class">
 <span>class <span class="ident">Mesh</span></span>
-<span>(</span><span>voxels: Union[numpy.ndarray, NoneType], verts: numpy.ndarray, verts_colors: numpy.ndarray, tris: numpy.ndarray, resolution: float)</span>
+<span>(</span><span>voxels: Optional[numpy.ndarray], verts: numpy.ndarray, verts_colors: numpy.ndarray, tris: numpy.ndarray, resolution: float)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Mesh object that can be exported or passed to a Plot object.</p>
@@ -3115,7 +3115,7 @@ <h4><code><a title="voxelfuse.mesh.Mesh" href="#voxelfuse.mesh.Mesh">Mesh</a></c
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/periodic.html b/docs/voxelfuse/periodic.html
index cfec109..ddff047 100644
--- a/docs/voxelfuse/periodic.html
+++ b/docs/voxelfuse/periodic.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.periodic API documentation</title>
 <meta name="description" content="Functions for generating triply periodic structures …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -540,7 +540,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/plot.html b/docs/voxelfuse/plot.html
index 4a4125d..14906b2 100644
--- a/docs/voxelfuse/plot.html
+++ b/docs/voxelfuse/plot.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.plot API documentation</title>
 <meta name="description" content="Plot Class …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -542,7 +542,7 @@ <h4><code><a title="voxelfuse.plot.Plot" href="#voxelfuse.plot.Plot">Plot</a></c
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/primitives.html b/docs/voxelfuse/primitives.html
index 7aeba57..cc5c4ab 100644
--- a/docs/voxelfuse/primitives.html
+++ b/docs/voxelfuse/primitives.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.primitives API documentation</title>
 <meta name="description" content="Functions for generating primitive solids …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -56,12 +56,9 @@ <h1 class="title">Module <code>voxelfuse.primitives</code></h1>
     Returns:
         VoxelModel
     &#34;&#34;&#34;
-    model_data = np.zeros((1, 1, 1), dtype=np.uint16)
-    materials = np.zeros((1, num_materials + 1), dtype=np.float32)
-    model = VoxelModel(model_data, materials, coords=coords, resolution=resolution)
-    return model
+    return VoxelModel.empty((1, 1, 1), coords, resolution, num_materials)
 
-def cube(size: int = 1, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+def cube(size: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cube.
 
@@ -78,7 +75,7 @@ <h1 class="title">Module <code>voxelfuse.primitives</code></h1>
     model = VoxelModel(model_data, generateMaterials(material), coords=coords, resolution=resolution)
     return model
 
-def cuboid(size: Tuple[int, int, int] = (1, 1, 1), coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+def cuboid(size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cuboid.
 
@@ -95,7 +92,7 @@ <h1 class="title">Module <code>voxelfuse.primitives</code></h1>
     model = VoxelModel(model_data, generateMaterials(material), coords=coords, resolution=resolution)
     return model
 
-def sphere(radius: int = 1, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+def sphere(radius: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a sphere.
 
@@ -108,7 +105,7 @@ <h1 class="title">Module <code>voxelfuse.primitives</code></h1>
     Returns:
         VoxelModel
     &#34;&#34;&#34;
-    diameter = (radius*2) + 1
+    diameter = (radius*2) + 1 # +1 ensures there is a voxel centered on the origin
     model_data = np.zeros((diameter, diameter, diameter), dtype=np.uint16)
 
     for x in range(diameter):
@@ -125,7 +122,48 @@ <h1 class="title">Module <code>voxelfuse.primitives</code></h1>
     model = VoxelModel(model_data, generateMaterials(material), coords=(coords[0]-radius, coords[1]-radius, coords[2]-radius), resolution=resolution)
     return model
 
-def cylinder(radius: int = 1, height: int = 1, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+def ellipsoid(size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+    &#34;&#34;&#34;
+    Create a VoxelModel containing an ellipsoid.
+
+    Args:
+        size: Lengths of ellipsoid principal semi-axes in voxels
+        coords: Model origin coordinates
+        material: Material index corresponding to materials.py
+        resolution: Number of voxels per mm
+
+    Returns:
+        VoxelModel
+    &#34;&#34;&#34;
+    # lengths of principal semi-axes
+    a, b, c = size
+
+    # bounding box size (+1 ensures there is a voxel centered on the origin)
+    dx = (a*2) + 1
+    dy = (b*2) + 1
+    dz = (c*2) + 1
+    model_data = np.zeros((dx, dy, dz), dtype=np.uint16)
+
+    # check each voxel in the bounding box and determine if it falls inside the ellipsoid
+    for x in range(dx):
+        for y in range(dy):
+            for z in range(dz):
+                # get coords relative to origin
+                xx = (x - a)
+                yy = (y - b)
+                zz = (z - c)
+
+                # apply ellipsoid formula
+                f = np.sqrt(((xx ** 2) / (a **2)) +
+                            ((yy ** 2) / (b **2)) +
+                            ((zz ** 2) / (c **2)))
+                if f &lt; 1:
+                    model_data[x, y, z] = 1
+
+    model = VoxelModel(model_data, generateMaterials(material), coords=(coords[0] - a, coords[1] - b, coords[2] - c), resolution=resolution)
+    return model
+
+def cylinder(radius: int, height: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cylinder.
 
@@ -156,7 +194,7 @@ <h1 class="title">Module <code>voxelfuse.primitives</code></h1>
     model = VoxelModel(model_data, generateMaterials(material), coords=(coords[0]-radius, coords[1]-radius, coords[2]), resolution=resolution)
     return model
 
-def cone(min_radius: int = 0, max_radius: int = 4, height: int = 5, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+def cone(min_radius: int, max_radius: int, height: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cylinder.
 
@@ -189,7 +227,7 @@ <h1 class="title">Module <code>voxelfuse.primitives</code></h1>
     model = VoxelModel(model_data, generateMaterials(material), coords=(coords[0]-max_radius, coords[1]-max_radius, coords[2]), resolution=resolution)
     return model
 
-def pyramid(min_radius: int = 0, max_radius: int = 4, height: int = 5, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+def pyramid(min_radius: int, max_radius: int, height: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cylinder.
 
@@ -216,6 +254,36 @@ <h1 class="title">Module <code>voxelfuse.primitives</code></h1>
             model_data[radius:-radius, radius:-radius, z].fill(1)
 
     model = VoxelModel(model_data, generateMaterials(material), coords=(coords[0]-max_radius, coords[1]-max_radius, coords[2]), resolution=resolution)
+    return model
+
+def prism(size: Tuple[int, int, int], point_offset: int = 0, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+    &#34;&#34;&#34;
+    Create a VoxelModel containing a prism.
+
+    Args:
+        size: Size of prism in voxels (base,
+        point_offset: Distance that prism point is offset from model center in voxels
+        coords: Model origin coordinates
+        material: Material index corresponding to materials.py
+        resolution: Number of voxels per mm
+
+    Returns:
+        VoxelModel
+    &#34;&#34;&#34;
+    point_pos = (size[0]/2) + point_offset
+    min_x = min(0, round(point_pos))
+    max_x = max(size[0], round(point_pos))
+    dx = max_x - min_x
+    model_data = np.zeros((dx, size[1], size[2]), dtype=np.uint16)
+
+    for z in range(size[2]):
+        width = (size[0]/size[2])*(size[2] - z)
+        side_1_index = round((point_pos/size[2])*z) - min_x
+        side_2_index = round((point_pos/size[2])*z + width) - min_x
+
+        model_data[side_1_index:side_2_index, :, z].fill(1)
+
+    model = VoxelModel(model_data, generateMaterials(material), coords=(coords[0] + min_x, coords[1], coords[2]), resolution=resolution)
     return model</code></pre>
 </details>
 </section>
@@ -227,7 +295,7 @@ <h1 class="title">Module <code>voxelfuse.primitives</code></h1>
 <h2 class="section-title" id="header-functions">Functions</h2>
 <dl>
 <dt id="voxelfuse.primitives.cone"><code class="name flex">
-<span>def <span class="ident">cone</span></span>(<span>min_radius: int = 0, max_radius: int = 4, height: int = 5, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
+<span>def <span class="ident">cone</span></span>(<span>min_radius: int, max_radius: int, height: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Create a VoxelModel containing a cylinder.</p>
@@ -252,7 +320,7 @@ <h2 id="returns">Returns</h2>
 <summary>
 <span>Expand source code</span>
 </summary>
-<pre><code class="python">def cone(min_radius: int = 0, max_radius: int = 4, height: int = 5, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+<pre><code class="python">def cone(min_radius: int, max_radius: int, height: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cylinder.
 
@@ -287,7 +355,7 @@ <h2 id="returns">Returns</h2>
 </details>
 </dd>
 <dt id="voxelfuse.primitives.cube"><code class="name flex">
-<span>def <span class="ident">cube</span></span>(<span>size: int = 1, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
+<span>def <span class="ident">cube</span></span>(<span>size: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Create a VoxelModel containing a cube.</p>
@@ -308,7 +376,7 @@ <h2 id="returns">Returns</h2>
 <summary>
 <span>Expand source code</span>
 </summary>
-<pre><code class="python">def cube(size: int = 1, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+<pre><code class="python">def cube(size: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cube.
 
@@ -327,7 +395,7 @@ <h2 id="returns">Returns</h2>
 </details>
 </dd>
 <dt id="voxelfuse.primitives.cuboid"><code class="name flex">
-<span>def <span class="ident">cuboid</span></span>(<span>size: Tuple[int, int, int] = (1, 1, 1), coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
+<span>def <span class="ident">cuboid</span></span>(<span>size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Create a VoxelModel containing a cuboid.</p>
@@ -348,7 +416,7 @@ <h2 id="returns">Returns</h2>
 <summary>
 <span>Expand source code</span>
 </summary>
-<pre><code class="python">def cuboid(size: Tuple[int, int, int] = (1, 1, 1), coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+<pre><code class="python">def cuboid(size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cuboid.
 
@@ -367,7 +435,7 @@ <h2 id="returns">Returns</h2>
 </details>
 </dd>
 <dt id="voxelfuse.primitives.cylinder"><code class="name flex">
-<span>def <span class="ident">cylinder</span></span>(<span>radius: int = 1, height: int = 1, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
+<span>def <span class="ident">cylinder</span></span>(<span>radius: int, height: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Create a VoxelModel containing a cylinder.</p>
@@ -390,7 +458,7 @@ <h2 id="returns">Returns</h2>
 <summary>
 <span>Expand source code</span>
 </summary>
-<pre><code class="python">def cylinder(radius: int = 1, height: int = 1, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+<pre><code class="python">def cylinder(radius: int, height: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cylinder.
 
@@ -422,6 +490,70 @@ <h2 id="returns">Returns</h2>
     return model</code></pre>
 </details>
 </dd>
+<dt id="voxelfuse.primitives.ellipsoid"><code class="name flex">
+<span>def <span class="ident">ellipsoid</span></span>(<span>size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
+</code></dt>
+<dd>
+<div class="desc"><p>Create a VoxelModel containing an ellipsoid.</p>
+<h2 id="args">Args</h2>
+<dl>
+<dt><strong><code>size</code></strong></dt>
+<dd>Lengths of ellipsoid principal semi-axes in voxels</dd>
+<dt><strong><code>coords</code></strong></dt>
+<dd>Model origin coordinates</dd>
+<dt><strong><code>material</code></strong></dt>
+<dd>Material index corresponding to materials.py</dd>
+<dt><strong><code>resolution</code></strong></dt>
+<dd>Number of voxels per mm</dd>
+</dl>
+<h2 id="returns">Returns</h2>
+<p>VoxelModel</p></div>
+<details class="source">
+<summary>
+<span>Expand source code</span>
+</summary>
+<pre><code class="python">def ellipsoid(size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+    &#34;&#34;&#34;
+    Create a VoxelModel containing an ellipsoid.
+
+    Args:
+        size: Lengths of ellipsoid principal semi-axes in voxels
+        coords: Model origin coordinates
+        material: Material index corresponding to materials.py
+        resolution: Number of voxels per mm
+
+    Returns:
+        VoxelModel
+    &#34;&#34;&#34;
+    # lengths of principal semi-axes
+    a, b, c = size
+
+    # bounding box size (+1 ensures there is a voxel centered on the origin)
+    dx = (a*2) + 1
+    dy = (b*2) + 1
+    dz = (c*2) + 1
+    model_data = np.zeros((dx, dy, dz), dtype=np.uint16)
+
+    # check each voxel in the bounding box and determine if it falls inside the ellipsoid
+    for x in range(dx):
+        for y in range(dy):
+            for z in range(dz):
+                # get coords relative to origin
+                xx = (x - a)
+                yy = (y - b)
+                zz = (z - c)
+
+                # apply ellipsoid formula
+                f = np.sqrt(((xx ** 2) / (a **2)) +
+                            ((yy ** 2) / (b **2)) +
+                            ((zz ** 2) / (c **2)))
+                if f &lt; 1:
+                    model_data[x, y, z] = 1
+
+    model = VoxelModel(model_data, generateMaterials(material), coords=(coords[0] - a, coords[1] - b, coords[2] - c), resolution=resolution)
+    return model</code></pre>
+</details>
+</dd>
 <dt id="voxelfuse.primitives.empty"><code class="name flex">
 <span>def <span class="ident">empty</span></span>(<span>coords: Tuple[int, int, int] = (0, 0, 0), resolution: float = 1, num_materials: int = 15)</span>
 </code></dt>
@@ -454,14 +586,66 @@ <h2 id="returns">Returns</h2>
     Returns:
         VoxelModel
     &#34;&#34;&#34;
-    model_data = np.zeros((1, 1, 1), dtype=np.uint16)
-    materials = np.zeros((1, num_materials + 1), dtype=np.float32)
-    model = VoxelModel(model_data, materials, coords=coords, resolution=resolution)
+    return VoxelModel.empty((1, 1, 1), coords, resolution, num_materials)</code></pre>
+</details>
+</dd>
+<dt id="voxelfuse.primitives.prism"><code class="name flex">
+<span>def <span class="ident">prism</span></span>(<span>size: Tuple[int, int, int], point_offset: int = 0, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
+</code></dt>
+<dd>
+<div class="desc"><p>Create a VoxelModel containing a prism.</p>
+<h2 id="args">Args</h2>
+<dl>
+<dt><strong><code>size</code></strong></dt>
+<dd>Size of prism in voxels (base,</dd>
+<dt><strong><code>point_offset</code></strong></dt>
+<dd>Distance that prism point is offset from model center in voxels</dd>
+<dt><strong><code>coords</code></strong></dt>
+<dd>Model origin coordinates</dd>
+<dt><strong><code>material</code></strong></dt>
+<dd>Material index corresponding to materials.py</dd>
+<dt><strong><code>resolution</code></strong></dt>
+<dd>Number of voxels per mm</dd>
+</dl>
+<h2 id="returns">Returns</h2>
+<p>VoxelModel</p></div>
+<details class="source">
+<summary>
+<span>Expand source code</span>
+</summary>
+<pre><code class="python">def prism(size: Tuple[int, int, int], point_offset: int = 0, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+    &#34;&#34;&#34;
+    Create a VoxelModel containing a prism.
+
+    Args:
+        size: Size of prism in voxels (base,
+        point_offset: Distance that prism point is offset from model center in voxels
+        coords: Model origin coordinates
+        material: Material index corresponding to materials.py
+        resolution: Number of voxels per mm
+
+    Returns:
+        VoxelModel
+    &#34;&#34;&#34;
+    point_pos = (size[0]/2) + point_offset
+    min_x = min(0, round(point_pos))
+    max_x = max(size[0], round(point_pos))
+    dx = max_x - min_x
+    model_data = np.zeros((dx, size[1], size[2]), dtype=np.uint16)
+
+    for z in range(size[2]):
+        width = (size[0]/size[2])*(size[2] - z)
+        side_1_index = round((point_pos/size[2])*z) - min_x
+        side_2_index = round((point_pos/size[2])*z + width) - min_x
+
+        model_data[side_1_index:side_2_index, :, z].fill(1)
+
+    model = VoxelModel(model_data, generateMaterials(material), coords=(coords[0] + min_x, coords[1], coords[2]), resolution=resolution)
     return model</code></pre>
 </details>
 </dd>
 <dt id="voxelfuse.primitives.pyramid"><code class="name flex">
-<span>def <span class="ident">pyramid</span></span>(<span>min_radius: int = 0, max_radius: int = 4, height: int = 5, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
+<span>def <span class="ident">pyramid</span></span>(<span>min_radius: int, max_radius: int, height: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Create a VoxelModel containing a cylinder.</p>
@@ -486,7 +670,7 @@ <h2 id="returns">Returns</h2>
 <summary>
 <span>Expand source code</span>
 </summary>
-<pre><code class="python">def pyramid(min_radius: int = 0, max_radius: int = 4, height: int = 5, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+<pre><code class="python">def pyramid(min_radius: int, max_radius: int, height: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a cylinder.
 
@@ -517,7 +701,7 @@ <h2 id="returns">Returns</h2>
 </details>
 </dd>
 <dt id="voxelfuse.primitives.sphere"><code class="name flex">
-<span>def <span class="ident">sphere</span></span>(<span>radius: int = 1, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
+<span>def <span class="ident">sphere</span></span>(<span>radius: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Create a VoxelModel containing a sphere.</p>
@@ -538,7 +722,7 @@ <h2 id="returns">Returns</h2>
 <summary>
 <span>Expand source code</span>
 </summary>
-<pre><code class="python">def sphere(radius: int = 1, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
+<pre><code class="python">def sphere(radius: int, coords: Tuple[int, int, int] = (0, 0, 0), material: int = 1, resolution: float = 1):
     &#34;&#34;&#34;
     Create a VoxelModel containing a sphere.
 
@@ -551,7 +735,7 @@ <h2 id="returns">Returns</h2>
     Returns:
         VoxelModel
     &#34;&#34;&#34;
-    diameter = (radius*2) + 1
+    diameter = (radius*2) + 1 # +1 ensures there is a voxel centered on the origin
     model_data = np.zeros((diameter, diameter, diameter), dtype=np.uint16)
 
     for x in range(diameter):
@@ -591,7 +775,9 @@ <h1>Index</h1>
 <li><code><a title="voxelfuse.primitives.cube" href="#voxelfuse.primitives.cube">cube</a></code></li>
 <li><code><a title="voxelfuse.primitives.cuboid" href="#voxelfuse.primitives.cuboid">cuboid</a></code></li>
 <li><code><a title="voxelfuse.primitives.cylinder" href="#voxelfuse.primitives.cylinder">cylinder</a></code></li>
+<li><code><a title="voxelfuse.primitives.ellipsoid" href="#voxelfuse.primitives.ellipsoid">ellipsoid</a></code></li>
 <li><code><a title="voxelfuse.primitives.empty" href="#voxelfuse.primitives.empty">empty</a></code></li>
+<li><code><a title="voxelfuse.primitives.prism" href="#voxelfuse.primitives.prism">prism</a></code></li>
 <li><code><a title="voxelfuse.primitives.pyramid" href="#voxelfuse.primitives.pyramid">pyramid</a></code></li>
 <li><code><a title="voxelfuse.primitives.sphere" href="#voxelfuse.primitives.sphere">sphere</a></code></li>
 </ul>
@@ -600,7 +786,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/simulation.html b/docs/voxelfuse/simulation.html
index 14b35f7..8788164 100644
--- a/docs/voxelfuse/simulation.html
+++ b/docs/voxelfuse/simulation.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.simulation API documentation</title>
 <meta name="description" content="Simulation Class …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -1453,8 +1453,7 @@ <h1 class="title">Module <code>voxelfuse.simulation</code></h1>
             self.__thread_count = thread_count
         else:
             max_threads = os.cpu_count()
-            self.__thread_count = max(1,
-                                      max_threads - 2)  # Default to leaving 1 core (2 threads) free, minimum of 1 thread
+            self.__thread_count = max(1, max_threads - 2)  # Default to leaving 1 core (2 threads) free, minimum of 1 thread
 
             # Initialize result arrays
         self.total_time = 0
@@ -1543,20 +1542,22 @@ <h1 class="title">Module <code>voxelfuse.simulation</code></h1>
         time_finished = time.time()
         self.total_time = time_finished - time_started
 
-    def export(self, filename: str, labels: List[str]):
+    def export(self, filename: str, labels: List[str], parameters_only: bool = False):
         &#34;&#34;&#34;
         Export a CSV file containing simulation setup parameters and the corresponding simulation results.
 
         Args:
             filename: File name
             labels: Column headers for simulation setup parameters
+            parameters_only: Only export setup parameters and not simulation results
         
         Returns:
             None
         &#34;&#34;&#34;
         # Add labels for results
-        labels.append(&#39;Displacement (m)&#39;)
-        labels.append(&#39;Simulation Time (s)&#39;)
+        if not parameters_only:
+            labels.append(&#39;Displacement (m)&#39;)
+            labels.append(&#39;Simulation Time (s)&#39;)
 
         # Get result table size
         rows = len(self.__setup_params)
@@ -1567,7 +1568,9 @@ <h1 class="title">Module <code>voxelfuse.simulation</code></h1>
         print(&#39;Saving file: &#39; + f.name)
 
         # Write sim info
-        f.write(&#39;Simulation Elapsed Time (mins),&#39; + str(self.total_time / 60.0) + &#39;\n&#39;)
+        if not parameters_only:
+            f.write(&#39;Simulation Elapsed Time (mins),&#39; + str(self.total_time / 60.0) + &#39;\n&#39;)
+
         f.write(&#39;Trial Count,&#39; + str(rows) + &#39;\n&#39;)
         f.write(&#39;Max Thread Count,&#39; + str(self.__thread_count) + &#39;\n&#39;)
         f.write(&#39;\n&#39;)
@@ -1581,8 +1584,11 @@ <h1 class="title">Module <code>voxelfuse.simulation</code></h1>
         for r in range(rows):
             for c in range(cols - 2):
                 f.write(str(self.__setup_params[r][c]) + &#39;,&#39;)
-            f.write(str(self.displacement_result[r]) + &#39;,&#39;)
-            f.write(str(self.time_result[r]))
+
+            if not parameters_only:
+                f.write(str(self.displacement_result[r]) + &#39;,&#39;)
+                f.write(str(self.time_result[r]) + &#39;,&#39;)
+
             f.write(&#39;\n&#39;)
 
         # Close file
@@ -1985,7 +1991,7 @@ <h3>Class variables</h3>
 </dd>
 <dt id="voxelfuse.simulation.MultiSimulation"><code class="flex name class">
 <span>class <span class="ident">MultiSimulation</span></span>
-<span>(</span><span>setup_fcn, setup_params: List[Tuple], thread_count: int = -1)</span>
+<span>(</span><span>setup_fcn, setup_params: List[Tuple[]], thread_count: int = -1)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>MultiSimulation object that holds settings for generating a simulation and running multiple parallel trials of it using different parameters.</p>
@@ -2024,8 +2030,7 @@ <h2 id="args">Args</h2>
             self.__thread_count = thread_count
         else:
             max_threads = os.cpu_count()
-            self.__thread_count = max(1,
-                                      max_threads - 2)  # Default to leaving 1 core (2 threads) free, minimum of 1 thread
+            self.__thread_count = max(1, max_threads - 2)  # Default to leaving 1 core (2 threads) free, minimum of 1 thread
 
             # Initialize result arrays
         self.total_time = 0
@@ -2114,20 +2119,22 @@ <h2 id="args">Args</h2>
         time_finished = time.time()
         self.total_time = time_finished - time_started
 
-    def export(self, filename: str, labels: List[str]):
+    def export(self, filename: str, labels: List[str], parameters_only: bool = False):
         &#34;&#34;&#34;
         Export a CSV file containing simulation setup parameters and the corresponding simulation results.
 
         Args:
             filename: File name
             labels: Column headers for simulation setup parameters
+            parameters_only: Only export setup parameters and not simulation results
         
         Returns:
             None
         &#34;&#34;&#34;
         # Add labels for results
-        labels.append(&#39;Displacement (m)&#39;)
-        labels.append(&#39;Simulation Time (s)&#39;)
+        if not parameters_only:
+            labels.append(&#39;Displacement (m)&#39;)
+            labels.append(&#39;Simulation Time (s)&#39;)
 
         # Get result table size
         rows = len(self.__setup_params)
@@ -2138,7 +2145,9 @@ <h2 id="args">Args</h2>
         print(&#39;Saving file: &#39; + f.name)
 
         # Write sim info
-        f.write(&#39;Simulation Elapsed Time (mins),&#39; + str(self.total_time / 60.0) + &#39;\n&#39;)
+        if not parameters_only:
+            f.write(&#39;Simulation Elapsed Time (mins),&#39; + str(self.total_time / 60.0) + &#39;\n&#39;)
+
         f.write(&#39;Trial Count,&#39; + str(rows) + &#39;\n&#39;)
         f.write(&#39;Max Thread Count,&#39; + str(self.__thread_count) + &#39;\n&#39;)
         f.write(&#39;\n&#39;)
@@ -2152,8 +2161,11 @@ <h2 id="args">Args</h2>
         for r in range(rows):
             for c in range(cols - 2):
                 f.write(str(self.__setup_params[r][c]) + &#39;,&#39;)
-            f.write(str(self.displacement_result[r]) + &#39;,&#39;)
-            f.write(str(self.time_result[r]))
+
+            if not parameters_only:
+                f.write(str(self.displacement_result[r]) + &#39;,&#39;)
+                f.write(str(self.time_result[r]) + &#39;,&#39;)
+
             f.write(&#39;\n&#39;)
 
         # Close file
@@ -2210,7 +2222,7 @@ <h2 id="returns">Returns</h2>
 </details>
 </dd>
 <dt id="voxelfuse.simulation.MultiSimulation.export"><code class="name flex">
-<span>def <span class="ident">export</span></span>(<span>self, filename: str, labels: List[str])</span>
+<span>def <span class="ident">export</span></span>(<span>self, filename: str, labels: List[str], parameters_only: bool = False)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Export a CSV file containing simulation setup parameters and the corresponding simulation results.</p>
@@ -2220,6 +2232,8 @@ <h2 id="args">Args</h2>
 <dd>File name</dd>
 <dt><strong><code>labels</code></strong></dt>
 <dd>Column headers for simulation setup parameters</dd>
+<dt><strong><code>parameters_only</code></strong></dt>
+<dd>Only export setup parameters and not simulation results</dd>
 </dl>
 <h2 id="returns">Returns</h2>
 <p>None</p></div>
@@ -2227,20 +2241,22 @@ <h2 id="returns">Returns</h2>
 <summary>
 <span>Expand source code</span>
 </summary>
-<pre><code class="python">def export(self, filename: str, labels: List[str]):
+<pre><code class="python">def export(self, filename: str, labels: List[str], parameters_only: bool = False):
     &#34;&#34;&#34;
     Export a CSV file containing simulation setup parameters and the corresponding simulation results.
 
     Args:
         filename: File name
         labels: Column headers for simulation setup parameters
+        parameters_only: Only export setup parameters and not simulation results
     
     Returns:
         None
     &#34;&#34;&#34;
     # Add labels for results
-    labels.append(&#39;Displacement (m)&#39;)
-    labels.append(&#39;Simulation Time (s)&#39;)
+    if not parameters_only:
+        labels.append(&#39;Displacement (m)&#39;)
+        labels.append(&#39;Simulation Time (s)&#39;)
 
     # Get result table size
     rows = len(self.__setup_params)
@@ -2251,7 +2267,9 @@ <h2 id="returns">Returns</h2>
     print(&#39;Saving file: &#39; + f.name)
 
     # Write sim info
-    f.write(&#39;Simulation Elapsed Time (mins),&#39; + str(self.total_time / 60.0) + &#39;\n&#39;)
+    if not parameters_only:
+        f.write(&#39;Simulation Elapsed Time (mins),&#39; + str(self.total_time / 60.0) + &#39;\n&#39;)
+
     f.write(&#39;Trial Count,&#39; + str(rows) + &#39;\n&#39;)
     f.write(&#39;Max Thread Count,&#39; + str(self.__thread_count) + &#39;\n&#39;)
     f.write(&#39;\n&#39;)
@@ -2265,8 +2283,11 @@ <h2 id="returns">Returns</h2>
     for r in range(rows):
         for c in range(cols - 2):
             f.write(str(self.__setup_params[r][c]) + &#39;,&#39;)
-        f.write(str(self.displacement_result[r]) + &#39;,&#39;)
-        f.write(str(self.time_result[r]))
+
+        if not parameters_only:
+            f.write(str(self.displacement_result[r]) + &#39;,&#39;)
+            f.write(str(self.time_result[r]) + &#39;,&#39;)
+
         f.write(&#39;\n&#39;)
 
     # Close file
@@ -2397,7 +2418,7 @@ <h2 id="returns">Returns</h2>
 </details>
 </dd>
 <dt id="voxelfuse.simulation.MultiSimulation.setParams"><code class="name flex">
-<span>def <span class="ident">setParams</span></span>(<span>self, setup_params: List[Tuple])</span>
+<span>def <span class="ident">setParams</span></span>(<span>self, setup_params: List[Tuple[]])</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Update the simulation setup parameters.</p>
@@ -4422,7 +4443,8 @@ <h2 id="returns">Returns</h2>
     Returns:
         None
     &#34;&#34;&#34;
-    self.__bcRegions = []</code></pre>
+    self.__bcRegions = []
+    # self.__bcVoxels = []</code></pre>
 </details>
 </dd>
 <dt id="voxelfuse.simulation.Simulation.clearDisconnections"><code class="name flex">
@@ -5962,7 +5984,7 @@ <h4><code><a title="voxelfuse.simulation.StopCondition" href="#voxelfuse.simulat
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/utils/index.html b/docs/voxelfuse/utils/index.html
index 14cc3c0..bfd8925 100644
--- a/docs/voxelfuse/utils/index.html
+++ b/docs/voxelfuse/utils/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.utils API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -60,7 +60,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/utils/onelab.html b/docs/voxelfuse/utils/onelab.html
index 00f9817..903ecdb 100644
--- a/docs/voxelfuse/utils/onelab.html
+++ b/docs/voxelfuse/utils/onelab.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.utils.onelab API documentation</title>
 <meta name="description" content="ONELAB - Copyright (C) 2011-2020 Universite de Liege - Universite catholique
 de Louvain …" />
@@ -2046,7 +2046,7 @@ <h4><code><a title="voxelfuse.utils.onelab.client" href="#voxelfuse.utils.onelab
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse/voxel_model.html b/docs/voxelfuse/voxel_model.html
index 2897712..7afd63d 100644
--- a/docs/voxelfuse/voxel_model.html
+++ b/docs/voxelfuse/voxel_model.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse.voxel_model API documentation</title>
 <meta name="description" content="VoxelModel Class …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -249,21 +249,22 @@ <h1 class="title">Module <code>voxelfuse.voxel_model</code></h1>
         return new_model
 
     @classmethod
-    def empty(cls, size: Tuple[int, int, int], resolution: float = 1, num_materials: int = len(material_properties)):
+    def empty(cls, size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), resolution: float = 1, num_materials: int = len(material_properties)):
         &#34;&#34;&#34;
         Initialize an empty VoxelModel.
 
         Args:
             size: Size of the empty model in voxels
+            coords: Model origin coordinates
             resolution: Number of voxels per mm
             num_materials: Number of material types in materials vector
 
         Returns:
             VoxelModel
         &#34;&#34;&#34;
-        modelData = np.zeros(size, dtype=np.uint16)
+        model_data = np.zeros(size, dtype=np.uint16)
         materials = np.zeros((1, num_materials + 1), dtype=np.float32)
-        new_model = cls(modelData, materials, resolution=resolution)
+        new_model = cls(model_data, materials, coords=coords, resolution=resolution)
         return new_model
 
     @classmethod
@@ -2228,7 +2229,7 @@ <h1 class="title">Module <code>voxelfuse.voxel_model</code></h1>
         Returns:
             K3D plot object
         &#34;&#34;&#34;
-        model = self.fitWorkspace() | VoxelModel.empty((1, 1, 1), self.resolution)
+        model = self.fitWorkspace() | VoxelModel.empty((1, 1, 1), resolution=self.resolution)
         model = model.removeDuplicateMaterials()
 
         # Get colors
@@ -2474,7 +2475,7 @@ <h1 class="title">Module <code>voxelfuse.voxel_model</code></h1>
         f = open(filename + &#39;.vxc&#39;, &#39;w+&#39;)
         print(&#39;Saving file: &#39; + f.name)
 
-        empty_model = VoxelModel.empty((1,1,1), self.resolution)
+        empty_model = VoxelModel.empty((1,1,1), resolution=self.resolution)
         export_model = (VoxelModel.copy(self).fitWorkspace()) | empty_model  # Fit workspace and union with an empty object at the origin to clear offsets if object is raised
         export_model.coords = (0, 0, 0)  # Set coords to zero to move object to origin if it is at negative coordinates
 
@@ -4479,21 +4480,22 @@ <h2 id="args">Args</h2>
         return new_model
 
     @classmethod
-    def empty(cls, size: Tuple[int, int, int], resolution: float = 1, num_materials: int = len(material_properties)):
+    def empty(cls, size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), resolution: float = 1, num_materials: int = len(material_properties)):
         &#34;&#34;&#34;
         Initialize an empty VoxelModel.
 
         Args:
             size: Size of the empty model in voxels
+            coords: Model origin coordinates
             resolution: Number of voxels per mm
             num_materials: Number of material types in materials vector
 
         Returns:
             VoxelModel
         &#34;&#34;&#34;
-        modelData = np.zeros(size, dtype=np.uint16)
+        model_data = np.zeros(size, dtype=np.uint16)
         materials = np.zeros((1, num_materials + 1), dtype=np.float32)
-        new_model = cls(modelData, materials, resolution=resolution)
+        new_model = cls(model_data, materials, coords=coords, resolution=resolution)
         return new_model
 
     @classmethod
@@ -6458,7 +6460,7 @@ <h2 id="args">Args</h2>
         Returns:
             K3D plot object
         &#34;&#34;&#34;
-        model = self.fitWorkspace() | VoxelModel.empty((1, 1, 1), self.resolution)
+        model = self.fitWorkspace() | VoxelModel.empty((1, 1, 1), resolution=self.resolution)
         model = model.removeDuplicateMaterials()
 
         # Get colors
@@ -6704,7 +6706,7 @@ <h2 id="args">Args</h2>
         f = open(filename + &#39;.vxc&#39;, &#39;w+&#39;)
         print(&#39;Saving file: &#39; + f.name)
 
-        empty_model = VoxelModel.empty((1,1,1), self.resolution)
+        empty_model = VoxelModel.empty((1,1,1), resolution=self.resolution)
         export_model = (VoxelModel.copy(self).fitWorkspace()) | empty_model  # Fit workspace and union with an empty object at the origin to clear offsets if object is raised
         export_model.coords = (0, 0, 0)  # Set coords to zero to move object to origin if it is at negative coordinates
 
@@ -6910,7 +6912,7 @@ <h2 id="returns">Returns</h2>
 </details>
 </dd>
 <dt id="voxelfuse.voxel_model.VoxelModel.empty"><code class="name flex">
-<span>def <span class="ident">empty</span></span>(<span>size: Tuple[int, int, int], resolution: float = 1, num_materials: int = 15)</span>
+<span>def <span class="ident">empty</span></span>(<span>size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), resolution: float = 1, num_materials: int = 15)</span>
 </code></dt>
 <dd>
 <div class="desc"><p>Initialize an empty VoxelModel.</p>
@@ -6918,6 +6920,8 @@ <h2 id="args">Args</h2>
 <dl>
 <dt><strong><code>size</code></strong></dt>
 <dd>Size of the empty model in voxels</dd>
+<dt><strong><code>coords</code></strong></dt>
+<dd>Model origin coordinates</dd>
 <dt><strong><code>resolution</code></strong></dt>
 <dd>Number of voxels per mm</dd>
 <dt><strong><code>num_materials</code></strong></dt>
@@ -6930,21 +6934,22 @@ <h2 id="returns">Returns</h2>
 <span>Expand source code</span>
 </summary>
 <pre><code class="python">@classmethod
-def empty(cls, size: Tuple[int, int, int], resolution: float = 1, num_materials: int = len(material_properties)):
+def empty(cls, size: Tuple[int, int, int], coords: Tuple[int, int, int] = (0, 0, 0), resolution: float = 1, num_materials: int = len(material_properties)):
     &#34;&#34;&#34;
     Initialize an empty VoxelModel.
 
     Args:
         size: Size of the empty model in voxels
+        coords: Model origin coordinates
         resolution: Number of voxels per mm
         num_materials: Number of material types in materials vector
 
     Returns:
         VoxelModel
     &#34;&#34;&#34;
-    modelData = np.zeros(size, dtype=np.uint16)
+    model_data = np.zeros(size, dtype=np.uint16)
     materials = np.zeros((1, num_materials + 1), dtype=np.float32)
-    new_model = cls(modelData, materials, resolution=resolution)
+    new_model = cls(model_data, materials, coords=coords, resolution=resolution)
     return new_model</code></pre>
 </details>
 </dd>
@@ -9108,7 +9113,7 @@ <h2 id="returns">Returns</h2>
     Returns:
         K3D plot object
     &#34;&#34;&#34;
-    model = self.fitWorkspace() | VoxelModel.empty((1, 1, 1), self.resolution)
+    model = self.fitWorkspace() | VoxelModel.empty((1, 1, 1), resolution=self.resolution)
     model = model.removeDuplicateMaterials()
 
     # Get colors
@@ -9620,7 +9625,7 @@ <h2 id="returns">Returns</h2>
     f = open(filename + &#39;.vxc&#39;, &#39;w+&#39;)
     print(&#39;Saving file: &#39; + f.name)
 
-    empty_model = VoxelModel.empty((1,1,1), self.resolution)
+    empty_model = VoxelModel.empty((1,1,1), resolution=self.resolution)
     export_model = (VoxelModel.copy(self).fitWorkspace()) | empty_model  # Fit workspace and union with an empty object at the origin to clear offsets if object is raised
     export_model.coords = (0, 0, 0)  # Set coords to zero to move object to origin if it is at negative coordinates
 
@@ -10877,7 +10882,7 @@ <h4><code><a title="voxelfuse.voxel_model.VoxelModel" href="#voxelfuse.voxel_mod
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/blurred_materials/blurred_materials.html b/docs/voxelfuse_examples/blurred_materials/blurred_materials.html
index 22076a6..73c2ea3 100644
--- a/docs/voxelfuse_examples/blurred_materials/blurred_materials.html
+++ b/docs/voxelfuse_examples/blurred_materials/blurred_materials.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.blurred_materials.blurred_materials API documentation</title>
 <meta name="description" content="Multimaterial 3D printing with blurring/dithering …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -108,7 +108,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/blurred_materials/index.html b/docs/voxelfuse_examples/blurred_materials/index.html
index 0c0fc87..0e13fd9 100644
--- a/docs/voxelfuse_examples/blurred_materials/index.html
+++ b/docs/voxelfuse_examples/blurred_materials/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.blurred_materials API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -59,7 +59,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/dithered_materials/dither_joint.html b/docs/voxelfuse_examples/dithered_materials/dither_joint.html
index a173aea..8fa8a81 100644
--- a/docs/voxelfuse_examples/dithered_materials/dither_joint.html
+++ b/docs/voxelfuse_examples/dithered_materials/dither_joint.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.dithered_materials.dither_joint API documentation</title>
 <meta name="description" content="Material Dithering …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -100,7 +100,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/dithered_materials/dither_structure.html b/docs/voxelfuse_examples/dithered_materials/dither_structure.html
index b404de8..dca28b5 100644
--- a/docs/voxelfuse_examples/dithered_materials/dither_structure.html
+++ b/docs/voxelfuse_examples/dithered_materials/dither_structure.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.dithered_materials.dither_structure API documentation</title>
 <meta name="description" content="Material Dithering …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -94,7 +94,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/dithered_materials/index.html b/docs/voxelfuse_examples/dithered_materials/index.html
index d79ceae..7721c0d 100644
--- a/docs/voxelfuse_examples/dithered_materials/index.html
+++ b/docs/voxelfuse_examples/dithered_materials/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.dithered_materials API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -64,7 +64,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/fish_tail/gcode_pause.html b/docs/voxelfuse_examples/fish_tail/gcode_pause.html
index c809b2f..8a10fb6 100644
--- a/docs/voxelfuse_examples/fish_tail/gcode_pause.html
+++ b/docs/voxelfuse_examples/fish_tail/gcode_pause.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.fish_tail.gcode_pause API documentation</title>
 <meta name="description" content="Add a pause to the input gcode file at the specified voxel layer …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -79,7 +79,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/fish_tail/index.html b/docs/voxelfuse_examples/fish_tail/index.html
index a36d4f5..9a7d1aa 100644
--- a/docs/voxelfuse_examples/fish_tail/index.html
+++ b/docs/voxelfuse_examples/fish_tail/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.fish_tail API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -69,7 +69,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/fish_tail/joint.html b/docs/voxelfuse_examples/fish_tail/joint.html
index 9b09417..2b5a82d 100644
--- a/docs/voxelfuse_examples/fish_tail/joint.html
+++ b/docs/voxelfuse_examples/fish_tail/joint.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.fish_tail.joint API documentation</title>
 <meta name="description" content="Joint with Embedded Servo …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -161,7 +161,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/fish_tail/tail.html b/docs/voxelfuse_examples/fish_tail/tail.html
index c32e281..5b26771 100644
--- a/docs/voxelfuse_examples/fish_tail/tail.html
+++ b/docs/voxelfuse_examples/fish_tail/tail.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.fish_tail.tail API documentation</title>
 <meta name="description" content="Multimaterial fish tail …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -110,7 +110,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/gcode_modification/gcode_modification.html b/docs/voxelfuse_examples/gcode_modification/gcode_modification.html
index f6418f9..7a6f2c0 100644
--- a/docs/voxelfuse_examples/gcode_modification/gcode_modification.html
+++ b/docs/voxelfuse_examples/gcode_modification/gcode_modification.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.gcode_modification.gcode_modification API documentation</title>
 <meta name="description" content="Demonstrates removing the header generated by the slicer and replacing it with a header from a template file …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -85,7 +85,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/gcode_modification/index.html b/docs/voxelfuse_examples/gcode_modification/index.html
index 01fb6d8..a036d05 100644
--- a/docs/voxelfuse_examples/gcode_modification/index.html
+++ b/docs/voxelfuse_examples/gcode_modification/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.gcode_modification API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -59,7 +59,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/gpu_acceleration/index.html b/docs/voxelfuse_examples/gpu_acceleration/index.html
index b6ba62e..7c105f8 100644
--- a/docs/voxelfuse_examples/gpu_acceleration/index.html
+++ b/docs/voxelfuse_examples/gpu_acceleration/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.gpu_acceleration API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -59,7 +59,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/gpu_acceleration/remove_duplicate_materials.html b/docs/voxelfuse_examples/gpu_acceleration/remove_duplicate_materials.html
index a90bc15..747671d 100644
--- a/docs/voxelfuse_examples/gpu_acceleration/remove_duplicate_materials.html
+++ b/docs/voxelfuse_examples/gpu_acceleration/remove_duplicate_materials.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.gpu_acceleration.remove_duplicate_materials API documentation</title>
 <meta name="description" content="Demonstrate how to enable CUDA and the effect it has on the removeDuplicateMaterials function …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -94,7 +94,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/index.html b/docs/voxelfuse_examples/index.html
index 84e5244..db250d9 100644
--- a/docs/voxelfuse_examples/index.html
+++ b/docs/voxelfuse_examples/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples API documentation</title>
 <meta name="description" content="…" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -142,7 +142,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/infill/index.html b/docs/voxelfuse_examples/infill/index.html
index 60bf419..0ec093c 100644
--- a/docs/voxelfuse_examples/infill/index.html
+++ b/docs/voxelfuse_examples/infill/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.infill API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -64,7 +64,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/infill/infill.html b/docs/voxelfuse_examples/infill/infill.html
index 9498310..971da8f 100644
--- a/docs/voxelfuse_examples/infill/infill.html
+++ b/docs/voxelfuse_examples/infill/infill.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.infill.infill API documentation</title>
 <meta name="description" content="Infill Generation …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -119,7 +119,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/infill/periodic_element.html b/docs/voxelfuse_examples/infill/periodic_element.html
index e9c6c7c..1af07df 100644
--- a/docs/voxelfuse_examples/infill/periodic_element.html
+++ b/docs/voxelfuse_examples/infill/periodic_element.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.infill.periodic_element API documentation</title>
 <meta name="description" content="Periodic Element Generation …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -89,7 +89,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/lattice_generation/index.html b/docs/voxelfuse_examples/lattice_generation/index.html
index ee51d96..50f6660 100644
--- a/docs/voxelfuse_examples/lattice_generation/index.html
+++ b/docs/voxelfuse_examples/lattice_generation/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.lattice_generation API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -59,7 +59,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/lattice_generation/lattice_generation.html b/docs/voxelfuse_examples/lattice_generation/lattice_generation.html
index 5790447..725941f 100644
--- a/docs/voxelfuse_examples/lattice_generation/lattice_generation.html
+++ b/docs/voxelfuse_examples/lattice_generation/lattice_generation.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.lattice_generation.lattice_generation API documentation</title>
 <meta name="description" content="Lattice structure generation …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -111,7 +111,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/load_mesh/index.html b/docs/voxelfuse_examples/load_mesh/index.html
index 91f9b5b..4366961 100644
--- a/docs/voxelfuse_examples/load_mesh/index.html
+++ b/docs/voxelfuse_examples/load_mesh/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.load_mesh API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -59,7 +59,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/load_mesh/load_mesh.html b/docs/voxelfuse_examples/load_mesh/load_mesh.html
index c335ff3..b6018d3 100644
--- a/docs/voxelfuse_examples/load_mesh/load_mesh.html
+++ b/docs/voxelfuse_examples/load_mesh/load_mesh.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.load_mesh.load_mesh API documentation</title>
 <meta name="description" content="Import a mesh file and convert it to voxels …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -78,7 +78,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/primitive_generation/index.html b/docs/voxelfuse_examples/primitive_generation/index.html
index 2ae4712..7a2440c 100644
--- a/docs/voxelfuse_examples/primitive_generation/index.html
+++ b/docs/voxelfuse_examples/primitive_generation/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.primitive_generation API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -34,6 +34,10 @@ <h2 class="section-title" id="header-submodules">Sub-modules</h2>
 <dd>
 <div class="desc"><p>Generate a series of primitive solids and display them using matplotlib …</p></div>
 </dd>
+<dt><code class="name"><a title="voxelfuse_examples.primitive_generation.prism" href="prism.html">voxelfuse_examples.primitive_generation.prism</a></code></dt>
+<dd>
+<div class="desc"><p>Generate a series of prism solids …</p></div>
+</dd>
 <dt><code class="name"><a title="voxelfuse_examples.primitive_generation.sphere_resources" href="sphere_resources.html">voxelfuse_examples.primitive_generation.sphere_resources</a></code></dt>
 <dd>
 <div class="desc"><p>Generate different size spheres and plot the change in processing time and memory requirements …</p></div>
@@ -62,6 +66,7 @@ <h1>Index</h1>
 <ul>
 <li><code><a title="voxelfuse_examples.primitive_generation.primitive_generation" href="primitive_generation.html">voxelfuse_examples.primitive_generation.primitive_generation</a></code></li>
 <li><code><a title="voxelfuse_examples.primitive_generation.primitive_generation_matplotlib" href="primitive_generation_matplotlib.html">voxelfuse_examples.primitive_generation.primitive_generation_matplotlib</a></code></li>
+<li><code><a title="voxelfuse_examples.primitive_generation.prism" href="prism.html">voxelfuse_examples.primitive_generation.prism</a></code></li>
 <li><code><a title="voxelfuse_examples.primitive_generation.sphere_resources" href="sphere_resources.html">voxelfuse_examples.primitive_generation.sphere_resources</a></code></li>
 </ul>
 </li>
@@ -69,7 +74,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/primitive_generation/primitive_generation.html b/docs/voxelfuse_examples/primitive_generation/primitive_generation.html
index b54f561..d33bbb7 100644
--- a/docs/voxelfuse_examples/primitive_generation/primitive_generation.html
+++ b/docs/voxelfuse_examples/primitive_generation/primitive_generation.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.primitive_generation.primitive_generation API documentation</title>
 <meta name="description" content="Generate a series of primitive solids …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -50,8 +50,9 @@ <h1 class="title">Module <code>voxelfuse_examples.primitive_generation.primitive
     model4 = vf.cylinder(5, 15, (44, 5, 0), 4)
     model5 = vf.cone(1, 5, 15, (57, 5, 0), 5)
     model6 = vf.pyramid(0, 5, 15, (70, 5, 0), 6)
+    model7 = vf.ellipsoid((8, 10, 6), (85, 10, 5), 7)
 
-    model_result = model1 | model2 | model3 | model4 | model5 | model6
+    model_result = model1 | model2 | model3 | model4 | model5 | model6 | model7
 
     # Create mesh data
     # mesh1 = vf.Mesh.fromVoxelModel(model_result)
@@ -98,7 +99,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/primitive_generation/primitive_generation_matplotlib.html b/docs/voxelfuse_examples/primitive_generation/primitive_generation_matplotlib.html
index 13d5458..afe77ee 100644
--- a/docs/voxelfuse_examples/primitive_generation/primitive_generation_matplotlib.html
+++ b/docs/voxelfuse_examples/primitive_generation/primitive_generation_matplotlib.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.primitive_generation.primitive_generation_matplotlib API documentation</title>
 <meta name="description" content="Generate a series of primitive solids and display them using matplotlib …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -188,7 +188,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/primitive_generation/prism.html b/docs/voxelfuse_examples/primitive_generation/prism.html
new file mode 100644
index 0000000..f44ac8a
--- /dev/null
+++ b/docs/voxelfuse_examples/primitive_generation/prism.html
@@ -0,0 +1,95 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+<meta name="generator" content="pdoc 0.10.0" />
+<title>voxelfuse_examples.primitive_generation.prism API documentation</title>
+<meta name="description" content="Generate a series of prism solids …" />
+<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
+<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
+<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
+<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
+<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
+<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
+<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
+<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
+</head>
+<body>
+<main>
+<article id="content">
+<header>
+<h1 class="title">Module <code>voxelfuse_examples.primitive_generation.prism</code></h1>
+</header>
+<section id="section-intro">
+<p>Generate a series of prism solids.</p>
+<hr>
+<p>Copyright 2021 - Cole Brauer, Dan Aukes</p>
+<details class="source">
+<summary>
+<span>Expand source code</span>
+</summary>
+<pre><code class="python">&#34;&#34;&#34;
+Generate a series of prism solids.
+
+----
+
+Copyright 2021 - Cole Brauer, Dan Aukes
+&#34;&#34;&#34;
+
+import time
+import voxelfuse as vf
+
+if __name__==&#39;__main__&#39;:
+    # Save start time
+    t1 = time.time()
+
+    model1 = vf.prism((50, 25, 80), 0)
+    model2 = vf.prism((50, 20, 40), -40, (80, 0, 0))
+    model3 = vf.prism((80, 15, 50), 40, (160, 0, 0))
+
+    model_result = model1 | model2 | model3
+
+    # Create mesh data
+    mesh1 = vf.Mesh.marchingCubes(model_result)
+
+    # Get elapsed time
+    t2 = time.time()
+    time_mesh = t2 - t1
+    print(&#39;Time to generate mesh: &#39; + str(time_mesh) + &#39; sec&#39;)
+
+    # Save mesh
+    mesh1.export(&#39;prism-set.stl&#39;)
+
+    # Create plot
+    mesh1.viewer(grids=True, name=&#39;prism set&#39;)</code></pre>
+</details>
+</section>
+<section>
+</section>
+<section>
+</section>
+<section>
+</section>
+<section>
+</section>
+</article>
+<nav id="sidebar">
+<h1>Index</h1>
+<div class="toc">
+<ul></ul>
+</div>
+<ul id="index">
+<li><h3>Super-module</h3>
+<ul>
+<li><code><a title="voxelfuse_examples.primitive_generation" href="index.html">voxelfuse_examples.primitive_generation</a></code></li>
+</ul>
+</li>
+</ul>
+</nav>
+</main>
+<footer id="footer">
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/primitive_generation/sphere_resources.html b/docs/voxelfuse_examples/primitive_generation/sphere_resources.html
index d494c48..3234fb6 100644
--- a/docs/voxelfuse_examples/primitive_generation/sphere_resources.html
+++ b/docs/voxelfuse_examples/primitive_generation/sphere_resources.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.primitive_generation.sphere_resources API documentation</title>
 <meta name="description" content="Generate different size spheres and plot the change in processing time and memory requirements …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -148,7 +148,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/surface_voxels/index.html b/docs/voxelfuse_examples/surface_voxels/index.html
index e625192..3f7cd37 100644
--- a/docs/voxelfuse_examples/surface_voxels/index.html
+++ b/docs/voxelfuse_examples/surface_voxels/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.surface_voxels API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -59,7 +59,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/surface_voxels/surface_voxels.html b/docs/voxelfuse_examples/surface_voxels/surface_voxels.html
index ede8fcf..f96c8db 100644
--- a/docs/voxelfuse_examples/surface_voxels/surface_voxels.html
+++ b/docs/voxelfuse_examples/surface_voxels/surface_voxels.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.surface_voxels.surface_voxels API documentation</title>
 <meta name="description" content="Find the surface voxels of a model and output a list of their coordinates …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -92,7 +92,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/templates/index.html b/docs/voxelfuse_examples/templates/index.html
index 195e5ec..f4fb8fe 100644
--- a/docs/voxelfuse_examples/templates/index.html
+++ b/docs/voxelfuse_examples/templates/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.templates API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -64,7 +64,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/templates/template_base.html b/docs/voxelfuse_examples/templates/template_base.html
index 6ba7fe1..5107d98 100644
--- a/docs/voxelfuse_examples/templates/template_base.html
+++ b/docs/voxelfuse_examples/templates/template_base.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.templates.template_base API documentation</title>
 <meta name="description" content="Basic template for creating VoxelFuse scripts …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -80,7 +80,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/templates/template_voxcad.html b/docs/voxelfuse_examples/templates/template_voxcad.html
index 105d2b5..fbf8f32 100644
--- a/docs/voxelfuse_examples/templates/template_voxcad.html
+++ b/docs/voxelfuse_examples/templates/template_voxcad.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.templates.template_voxcad API documentation</title>
 <meta name="description" content="Template for creating scripts using VoxCad simulation …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -78,7 +78,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxels_to_stl/index.html b/docs/voxelfuse_examples/voxels_to_stl/index.html
index 4790978..a5a1a3b 100644
--- a/docs/voxelfuse_examples/voxels_to_stl/index.html
+++ b/docs/voxelfuse_examples/voxels_to_stl/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.voxels_to_stl API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -59,7 +59,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxels_to_stl/voxels_to_stl.html b/docs/voxelfuse_examples/voxels_to_stl/voxels_to_stl.html
index 81346c0..5162d8e 100644
--- a/docs/voxelfuse_examples/voxels_to_stl/voxels_to_stl.html
+++ b/docs/voxelfuse_examples/voxels_to_stl/voxels_to_stl.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.voxels_to_stl.voxels_to_stl API documentation</title>
 <meta name="description" content="Create a VoxelModel from a binary array and use it to generate an STL file …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -88,7 +88,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxelyze_integration/basic_sim.html b/docs/voxelfuse_examples/voxelyze_integration/basic_sim.html
index 50985cb..3bd3235 100644
--- a/docs/voxelfuse_examples/voxelyze_integration/basic_sim.html
+++ b/docs/voxelfuse_examples/voxelyze_integration/basic_sim.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.voxelyze_integration.basic_sim API documentation</title>
 <meta name="description" content="Export a simulation that applies forces to two simple objects …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -83,7 +83,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxelyze_integration/collision_sim_1.html b/docs/voxelfuse_examples/voxelyze_integration/collision_sim_1.html
index 62769a4..3a01643 100644
--- a/docs/voxelfuse_examples/voxelyze_integration/collision_sim_1.html
+++ b/docs/voxelfuse_examples/voxelyze_integration/collision_sim_1.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.voxelyze_integration.collision_sim_1 API documentation</title>
 <meta name="description" content="Export a simulation of a single falling object …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -79,7 +79,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxelyze_integration/collision_sim_2.html b/docs/voxelfuse_examples/voxelyze_integration/collision_sim_2.html
index c150d61..8542823 100644
--- a/docs/voxelfuse_examples/voxelyze_integration/collision_sim_2.html
+++ b/docs/voxelfuse_examples/voxelyze_integration/collision_sim_2.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.voxelyze_integration.collision_sim_2 API documentation</title>
 <meta name="description" content="Export a simulation of multiple falling objects …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -103,7 +103,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxelyze_integration/collision_sim_3.html b/docs/voxelfuse_examples/voxelyze_integration/collision_sim_3.html
index 058376c..8bf98a6 100644
--- a/docs/voxelfuse_examples/voxelyze_integration/collision_sim_3.html
+++ b/docs/voxelfuse_examples/voxelyze_integration/collision_sim_3.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.voxelyze_integration.collision_sim_3 API documentation</title>
 <meta name="description" content="Export multiple simulations of a falling object …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -101,7 +101,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxelyze_integration/cube_sim.html b/docs/voxelfuse_examples/voxelyze_integration/cube_sim.html
index e03179b..7fa50ba 100644
--- a/docs/voxelfuse_examples/voxelyze_integration/cube_sim.html
+++ b/docs/voxelfuse_examples/voxelyze_integration/cube_sim.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.voxelyze_integration.cube_sim API documentation</title>
 <meta name="description" content="Demonstrate temperature keyframes …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -101,7 +101,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxelyze_integration/index.html b/docs/voxelfuse_examples/voxelyze_integration/index.html
index 6c0ec41..ca6be6a 100644
--- a/docs/voxelfuse_examples/voxelyze_integration/index.html
+++ b/docs/voxelfuse_examples/voxelyze_integration/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.voxelyze_integration API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -46,6 +46,10 @@ <h2 class="section-title" id="header-submodules">Sub-modules</h2>
 <dd>
 <div class="desc"><p>Demonstrate temperature keyframes …</p></div>
 </dd>
+<dt><code class="name"><a title="voxelfuse_examples.voxelyze_integration.ramp_sim" href="ramp_sim.html">voxelfuse_examples.voxelyze_integration.ramp_sim</a></code></dt>
+<dd>
+<div class="desc"><p>START HERE: Run a simulation of a ball rolling down a ramp …</p></div>
+</dd>
 <dt><code class="name"><a title="voxelfuse_examples.voxelyze_integration.vxc_export" href="vxc_export.html">voxelfuse_examples.voxelyze_integration.vxc_export</a></code></dt>
 <dd>
 <div class="desc"><p>Export a VoxelFuse model as a .vxc file that can be imported into VoxCad …</p></div>
@@ -77,6 +81,7 @@ <h1>Index</h1>
 <li><code><a title="voxelfuse_examples.voxelyze_integration.collision_sim_2" href="collision_sim_2.html">voxelfuse_examples.voxelyze_integration.collision_sim_2</a></code></li>
 <li><code><a title="voxelfuse_examples.voxelyze_integration.collision_sim_3" href="collision_sim_3.html">voxelfuse_examples.voxelyze_integration.collision_sim_3</a></code></li>
 <li><code><a title="voxelfuse_examples.voxelyze_integration.cube_sim" href="cube_sim.html">voxelfuse_examples.voxelyze_integration.cube_sim</a></code></li>
+<li><code><a title="voxelfuse_examples.voxelyze_integration.ramp_sim" href="ramp_sim.html">voxelfuse_examples.voxelyze_integration.ramp_sim</a></code></li>
 <li><code><a title="voxelfuse_examples.voxelyze_integration.vxc_export" href="vxc_export.html">voxelfuse_examples.voxelyze_integration.vxc_export</a></code></li>
 </ul>
 </li>
@@ -84,7 +89,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxelyze_integration/ramp_sim.html b/docs/voxelfuse_examples/voxelyze_integration/ramp_sim.html
new file mode 100644
index 0000000..6838787
--- /dev/null
+++ b/docs/voxelfuse_examples/voxelyze_integration/ramp_sim.html
@@ -0,0 +1,99 @@
+<!doctype html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+<meta name="generator" content="pdoc 0.10.0" />
+<title>voxelfuse_examples.voxelyze_integration.ramp_sim API documentation</title>
+<meta name="description" content="START HERE: Run a simulation of a ball rolling down a ramp …" />
+<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
+<link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/typography.min.css" integrity="sha256-7l/o7C8jubJiy74VsKTidCy1yBkRtiUGbVkYBylBqUg=" crossorigin>
+<link rel="stylesheet preload" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/github.min.css" crossorigin>
+<style>:root{--highlight-color:#fe9}.flex{display:flex !important}body{line-height:1.5em}#content{padding:20px}#sidebar{padding:30px;overflow:hidden}#sidebar > *:last-child{margin-bottom:2cm}.http-server-breadcrumbs{font-size:130%;margin:0 0 15px 0}#footer{font-size:.75em;padding:5px 30px;border-top:1px solid #ddd;text-align:right}#footer p{margin:0 0 0 1em;display:inline-block}#footer p:last-child{margin-right:30px}h1,h2,h3,h4,h5{font-weight:300}h1{font-size:2.5em;line-height:1.1em}h2{font-size:1.75em;margin:1em 0 .50em 0}h3{font-size:1.4em;margin:25px 0 10px 0}h4{margin:0;font-size:105%}h1:target,h2:target,h3:target,h4:target,h5:target,h6:target{background:var(--highlight-color);padding:.2em 0}a{color:#058;text-decoration:none;transition:color .3s ease-in-out}a:hover{color:#e82}.title code{font-weight:bold}h2[id^="header-"]{margin-top:2em}.ident{color:#900}pre code{background:#f8f8f8;font-size:.8em;line-height:1.4em}code{background:#f2f2f1;padding:1px 4px;overflow-wrap:break-word}h1 code{background:transparent}pre{background:#f8f8f8;border:0;border-top:1px solid #ccc;border-bottom:1px solid #ccc;margin:1em 0;padding:1ex}#http-server-module-list{display:flex;flex-flow:column}#http-server-module-list div{display:flex}#http-server-module-list dt{min-width:10%}#http-server-module-list p{margin-top:0}.toc ul,#index{list-style-type:none;margin:0;padding:0}#index code{background:transparent}#index h3{border-bottom:1px solid #ddd}#index ul{padding:0}#index h4{margin-top:.6em;font-weight:bold}@media (min-width:200ex){#index .two-column{column-count:2}}@media (min-width:300ex){#index .two-column{column-count:3}}dl{margin-bottom:2em}dl dl:last-child{margin-bottom:4em}dd{margin:0 0 1em 3em}#header-classes + dl > dd{margin-bottom:3em}dd dd{margin-left:2em}dd p{margin:10px 0}.name{background:#eee;font-weight:bold;font-size:.85em;padding:5px 10px;display:inline-block;min-width:40%}.name:hover{background:#e0e0e0}dt:target .name{background:var(--highlight-color)}.name > span:first-child{white-space:nowrap}.name.class > span:nth-child(2){margin-left:.4em}.inherited{color:#999;border-left:5px solid #eee;padding-left:1em}.inheritance em{font-style:normal;font-weight:bold}.desc h2{font-weight:400;font-size:1.25em}.desc h3{font-size:1em}.desc dt code{background:inherit}.source summary,.git-link-div{color:#666;text-align:right;font-weight:400;font-size:.8em;text-transform:uppercase}.source summary > *{white-space:nowrap;cursor:pointer}.git-link{color:inherit;margin-left:1em}.source pre{max-height:500px;overflow:auto;margin:0}.source pre code{font-size:12px;overflow:visible}.hlist{list-style:none}.hlist li{display:inline}.hlist li:after{content:',\2002'}.hlist li:last-child:after{content:none}.hlist .hlist{display:inline;padding-left:1em}img{max-width:100%}td{padding:0 .5em}.admonition{padding:.1em .5em;margin-bottom:1em}.admonition-title{font-weight:bold}.admonition.note,.admonition.info,.admonition.important{background:#aef}.admonition.todo,.admonition.versionadded,.admonition.tip,.admonition.hint{background:#dfd}.admonition.warning,.admonition.versionchanged,.admonition.deprecated{background:#fd4}.admonition.error,.admonition.danger,.admonition.caution{background:lightpink}</style>
+<style media="screen and (min-width: 700px)">@media screen and (min-width:700px){#sidebar{width:30%;height:100vh;overflow:auto;position:sticky;top:0}#content{width:70%;max-width:100ch;padding:3em 4em;border-left:1px solid #ddd}pre code{font-size:1em}.item .name{font-size:1em}main{display:flex;flex-direction:row-reverse;justify-content:flex-end}.toc ul ul,#index ul{padding-left:1.5em}.toc > ul > li{margin-top:.5em}}</style>
+<style media="print">@media print{#sidebar h1{page-break-before:always}.source{display:none}}@media print{*{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a[href]:after{content:" (" attr(href) ")";font-size:90%}a[href][title]:after{content:none}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,h3{orphans:3;widows:3}h1,h2,h3,h4,h5,h6{page-break-after:avoid}}</style>
+<script defer src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js" integrity="sha256-Uv3H6lx7dJmRfRvH8TH6kJD1TSK1aFcwgx+mdg3epi8=" crossorigin></script>
+<script>window.addEventListener('DOMContentLoaded', () => hljs.initHighlighting())</script>
+</head>
+<body>
+<main>
+<article id="content">
+<header>
+<h1 class="title">Module <code>voxelfuse_examples.voxelyze_integration.ramp_sim</code></h1>
+</header>
+<section id="section-intro">
+<p>START HERE: Run a simulation of a ball rolling down a ramp.</p>
+<hr>
+<p>Copyright 2022 - Cole Brauer</p>
+<details class="source">
+<summary>
+<span>Expand source code</span>
+</summary>
+<pre><code class="python">&#34;&#34;&#34;
+START HERE: Run a simulation of a ball rolling down a ramp.
+
+----
+
+Copyright 2022 - Cole Brauer
+&#34;&#34;&#34;
+
+import voxelfuse as vf
+
+if __name__==&#39;__main__&#39;:
+    # Generate primitives
+    sphereModel = vf.sphere(3, (0, 0, 15), material=5) # Using rubber because soft materials simulate faster
+    rampModel = vf.prism((30, 10, 10), -15, (-5, -5, 0), material=5)
+
+    # Combine primitives
+    modelResult = sphereModel | rampModel
+    modelResult = modelResult.scale(1)
+    modelResult = modelResult.removeDuplicateMaterials()
+
+    # Initialize a simulation
+    simulation = vf.Simulation(modelResult)
+    simulation.setGravity()
+    simulation.setCollision() # Enable self-collision
+    simulation.setStopCondition(vf.StopCondition.TIME_VALUE, 0.6) # Run for 0.6 seconds
+
+    # Constraints
+    simulation.addBoundaryConditionBox() # Default options lock voxels touching the ground plane
+
+    # Sensors
+    simulation.addSensor((0, 0, 15)) # Sensor in sphere
+
+    # Run simulation with UI -- collisions must be manually enabled from the UI
+    # simulation.runSimVoxCad()
+
+    # Run simulation in background -- WSL should be disabled if on Windows and WSL is not installed
+    simulation.runSim(&#39;ramp&#39;, delete_files=False, log_interval=1000, history_interval=5000, wsl=True)
+    print(simulation.results[0][&#39;Position&#39;])</code></pre>
+</details>
+</section>
+<section>
+</section>
+<section>
+</section>
+<section>
+</section>
+<section>
+</section>
+</article>
+<nav id="sidebar">
+<h1>Index</h1>
+<div class="toc">
+<ul></ul>
+</div>
+<ul id="index">
+<li><h3>Super-module</h3>
+<ul>
+<li><code><a title="voxelfuse_examples.voxelyze_integration" href="index.html">voxelfuse_examples.voxelyze_integration</a></code></li>
+</ul>
+</li>
+</ul>
+</nav>
+</main>
+<footer id="footer">
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
+</footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/voxelyze_integration/vxc_export.html b/docs/voxelfuse_examples/voxelyze_integration/vxc_export.html
index 86184de..c91dd15 100644
--- a/docs/voxelfuse_examples/voxelyze_integration/vxc_export.html
+++ b/docs/voxelfuse_examples/voxelyze_integration/vxc_export.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.voxelyze_integration.vxc_export API documentation</title>
 <meta name="description" content="Export a VoxelFuse model as a .vxc file that can be imported into VoxCad …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -85,7 +85,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file


Test patch:
diff --git a/docs/voxelfuse_examples/basic_strength_test_coupon/index.html b/docs/voxelfuse_examples/basic_strength_test_coupon/index.html
index 84a8cd9..794ffef 100644
--- a/docs/voxelfuse_examples/basic_strength_test_coupon/index.html
+++ b/docs/voxelfuse_examples/basic_strength_test_coupon/index.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.basic_strength_test_coupon API documentation</title>
 <meta name="description" content="" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -59,7 +59,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file
diff --git a/docs/voxelfuse_examples/basic_strength_test_coupon/strength_test_coupon.html b/docs/voxelfuse_examples/basic_strength_test_coupon/strength_test_coupon.html
index 038ed82..f9686a0 100644
--- a/docs/voxelfuse_examples/basic_strength_test_coupon/strength_test_coupon.html
+++ b/docs/voxelfuse_examples/basic_strength_test_coupon/strength_test_coupon.html
@@ -3,7 +3,7 @@
 <head>
 <meta charset="utf-8">
 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
-<meta name="generator" content="pdoc 0.9.2" />
+<meta name="generator" content="pdoc 0.10.0" />
 <title>voxelfuse_examples.basic_strength_test_coupon.strength_test_coupon API documentation</title>
 <meta name="description" content="Generate a coupon for tensile testing …" />
 <link rel="preload stylesheet" as="style" href="https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/11.0.1/sanitize.min.css" integrity="sha256-PK9q560IAAa6WVRRh76LtCaI8pjTJ2z11v0miyNNjrs=" crossorigin>
@@ -167,7 +167,7 @@ <h1>Index</h1>
 </nav>
 </main>
 <footer id="footer">
-<p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite> 0.9.2</a>.</p>
+<p>Generated by <a href="https://pdoc3.github.io/pdoc" title="pdoc: Python API documentation generator"><cite>pdoc</cite> 0.10.0</a>.</p>
 </footer>
 </body>
 </html>
\ No newline at end of file