mirror of
https://github.com/csirmaz/openscad-py.git
synced 2025-07-18 01:44:33 +02:00
Improve documentation
This commit is contained in:
parent
c4c4b941e9
commit
a28b85cca5
3 changed files with 141 additions and 44 deletions
21
cube.html
21
cube.html
|
@ -40,21 +40,32 @@ hljs.highlightAll();
|
|||
<span>(</span><span>size: list | <a title="openscad_py.point.Point" href="point.html#openscad_py.point.Point">Point</a>,<br>center: bool = False)</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>A 3D primitive, cube.
|
||||
Creates a cube in the first octant. When center is true, the cube is centered on the origin.</p>
|
||||
<p>See <a href="https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#cube">https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#cube</a></p></div>
|
||||
<div class="desc"><p>A 3D primitive, cube.</p>
|
||||
<p>See <a href="https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#cube">https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#cube</a></p>
|
||||
<p>Creates a cube in the first octant. When <code>center</code> is True, the cube is centered on the origin.</p>
|
||||
<h2 id="arguments">Arguments</h2>
|
||||
<ul>
|
||||
<li>size: a Point object or a list of <code>x, y, z</code> sizes</li>
|
||||
<li>center: if True, the cube is centered on the origin</li>
|
||||
</ul></div>
|
||||
<details class="source">
|
||||
<summary>
|
||||
<span>Expand source code</span>
|
||||
</summary>
|
||||
<pre><code class="python">class Cube(Object):
|
||||
"""A 3D primitive, cube.
|
||||
Creates a cube in the first octant. When center is true, the cube is centered on the origin.
|
||||
|
||||
|
||||
See https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#cube
|
||||
"""
|
||||
|
||||
def __init__(self, size: TUnion[list, Point], center: bool = False):
|
||||
"""
|
||||
Creates a cube in the first octant. When `center` is True, the cube is centered on the origin.
|
||||
|
||||
Arguments:
|
||||
- size: a Point object or a list of `x, y, z` sizes
|
||||
- center: if True, the cube is centered on the origin
|
||||
"""
|
||||
self.size = Point.c(size)
|
||||
self.center = center
|
||||
|
||||
|
|
144
point.html
144
point.html
|
@ -37,44 +37,47 @@ hljs.highlightAll();
|
|||
<dl>
|
||||
<dt id="openscad_py.point.Point"><code class="flex name class">
|
||||
<span>class <span class="ident">Point</span></span>
|
||||
<span>(</span><span>coords)</span>
|
||||
<span>(</span><span>coords: List[float])</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Represents a point or vector in arbitrary dimensions</p></div>
|
||||
<div class="desc"><p>Represents a point or vector in arbitrary number of dimensions</p></div>
|
||||
<details class="source">
|
||||
<summary>
|
||||
<span>Expand source code</span>
|
||||
</summary>
|
||||
<pre><code class="python">class Point:
|
||||
"""Represents a point or vector in arbitrary dimensions"""
|
||||
"""Represents a point or vector in arbitrary number of dimensions"""
|
||||
|
||||
def __init__(self, coords):
|
||||
def __init__(self, coords: List[float]):
|
||||
self.c = np.array(coords, dtype=NP_TYPE)
|
||||
|
||||
@classmethod
|
||||
def c(cls, coords: TUnion[list, 'Point']) -> 'Point':
|
||||
"""Ensure coords is an instance of Point (idempotent)"""
|
||||
def c(cls, coords: TUnion[list[float], 'Point']) -> 'Point':
|
||||
"""Ensure `coords` is an instance of Point (idempotent)"""
|
||||
if isinstance(coords, Point):
|
||||
return coords
|
||||
return Point(coords)
|
||||
|
||||
def render(self) -> str:
|
||||
"""Render the object into OpenSCAD code"""
|
||||
"""Render the point / vector into OpenSCAD code"""
|
||||
return "[" + (",".join([str(c) for c in self.c])) + "]"
|
||||
|
||||
def render_stl(self) -> str:
|
||||
"""Render the point / vector into STL"""
|
||||
return " ".join([str(c) for c in self.c])
|
||||
|
||||
def scale(self, x: float) -> 'Point':
|
||||
"""Scale the current vector/point by a scalar"""
|
||||
"""Scale the current point / vector by the scalar `x`"""
|
||||
return self.__class__(self.c * x)
|
||||
|
||||
def add(self, p: 'Point') -> 'Point':
|
||||
"""Add another point / vector `p` to the current one"""
|
||||
assert isinstance(p, Point)
|
||||
assert self.dim() == p.dim()
|
||||
return self.__class__(self.c + p.c)
|
||||
|
||||
def sub(self, p: 'Point') -> 'Point':
|
||||
"""Subtract another point / vector `p` from the current one"""
|
||||
assert isinstance(p, Point)
|
||||
assert self.dim() == p.dim()
|
||||
return self.__class__(self.c - p.c)
|
||||
|
@ -92,17 +95,18 @@ hljs.highlightAll();
|
|||
return np.sqrt(np.square(self.c).sum())
|
||||
|
||||
def norm(self) -> 'Point':
|
||||
"""Return a normalized version of the vector (scaled to length 1)"""
|
||||
l = self.length()
|
||||
if l == 0:
|
||||
raise Exception("normalising 0 vector")
|
||||
raise Exception("Attempted to normalise 0 vector")
|
||||
return self.__class__(self.c / self.length())
|
||||
|
||||
def dot(self, p: 'Point') -> float:
|
||||
"""Return the dot product"""
|
||||
"""Return the dot product of the current vector and `p`"""
|
||||
return np.dot(self.c, p.c)
|
||||
|
||||
def cross(self, p: 'Point') -> 'Point':
|
||||
"""Return the cross product"""
|
||||
"""Return the cross product of the current vector and `p`"""
|
||||
assert self.dim() == 3
|
||||
assert p.dim() == 3
|
||||
return Point([
|
||||
|
@ -113,25 +117,36 @@ hljs.highlightAll();
|
|||
])
|
||||
|
||||
def eq(self, p: 'Point') -> bool:
|
||||
"""Return whether the current point / vector and `p` are equal"""
|
||||
return (self.c == p.c).all()
|
||||
|
||||
def lt(self, p: 'Point') -> bool:
|
||||
"""Return whether the current vector is smaller than `p` in each dimension"""
|
||||
return (self.c < p.c).all()
|
||||
|
||||
def le(self, p: 'Point') -> bool:
|
||||
"""Return whether the current vector is smaller or equal to `p` in each dimension"""
|
||||
return (self.c <= p.c).all()
|
||||
|
||||
def gt(self, p: 'Point') -> bool:
|
||||
"""Return whether the current vector is greater than `p` in each dimension"""
|
||||
return (self.c > p.c).all()
|
||||
|
||||
def ge(self, p: 'Point') -> bool:
|
||||
"""Return whether the current vector is greater or equal to `p` in each dimension"""
|
||||
return (self.c >= p.c).all()
|
||||
|
||||
def allclose(self, p: 'Point') -> bool:
|
||||
"""Return whether the current point / vector and `p` are close to each other"""
|
||||
return self.c.shape == p.c.shape and np.allclose(self.c, p.c)
|
||||
|
||||
def angle(self, p: 'Point', mode: str = "deg") -> float:
|
||||
"""Return the angle between two vectors in degrees or radians"""
|
||||
"""Return the angle between two vectors in degrees or radians
|
||||
|
||||
Arguments:
|
||||
- p: a Point object
|
||||
- mode: "deg" | "rad"
|
||||
"""
|
||||
r = self.dot(p)
|
||||
r = r / self.length() / p.length()
|
||||
r = math.acos(r)
|
||||
|
@ -142,7 +157,11 @@ hljs.highlightAll();
|
|||
raise ValueError("Unknown mode")
|
||||
|
||||
def z_slope(self, mode: str = "deg") -> float:
|
||||
"""Return the slope of a vector in degrees or radians"""
|
||||
"""Return the slope of a vector in degrees or radians
|
||||
|
||||
Arguments:
|
||||
- mode: "deg" | "rad"
|
||||
"""
|
||||
r = self.c[2] / self.length()
|
||||
r = math.asin(r)
|
||||
if mode == "rad":
|
||||
|
@ -152,7 +171,12 @@ hljs.highlightAll();
|
|||
raise ValueError("Unknown mode")
|
||||
|
||||
def rotate(self, coords, angle: float) -> 'Point':
|
||||
"""Rotate. coords is a list of 2 coordinate indices that we rotate"""
|
||||
"""Rotate the current vector
|
||||
|
||||
Arguments:
|
||||
- coords: A list of 2 coordinate indices to rotate
|
||||
- angle: the angle to rotate by, in degrees
|
||||
"""
|
||||
assert len(coords) == 2
|
||||
ca, cb = coords
|
||||
s = np.sin(angle / 180. * np.pi)
|
||||
|
@ -165,26 +189,33 @@ hljs.highlightAll();
|
|||
# Operator overloading
|
||||
|
||||
def __add__(self, other):
|
||||
"""Use `p1 + p2` to add two vectors"""
|
||||
return self.add(other)
|
||||
|
||||
def __radd__(self, other):
|
||||
"""Use `p1 + p2` to add two vectors"""
|
||||
assert isinstance(other, Point)
|
||||
return other.add(self)
|
||||
|
||||
def __sub__(self, other):
|
||||
"""Use `p1 - p2` to subtract two vectors"""
|
||||
return self.sub(other)
|
||||
|
||||
def __rsub__(self, other):
|
||||
"""Use `p1 - p2` to subtract two vectors"""
|
||||
assert isinstance(other, Point)
|
||||
return other.sub(self)
|
||||
|
||||
def __mul__(self, other):
|
||||
"""Use `p * x` to scale a vector"""
|
||||
return self.scale(other)
|
||||
|
||||
def __rmul__(self, other):
|
||||
"""Use `x * p` to scale a vector"""
|
||||
return self.scale(other)
|
||||
|
||||
def __neg__(self):
|
||||
"""Use `-p` to negate a vector"""
|
||||
return self.scale(-1.)</code></pre>
|
||||
</details>
|
||||
<h3>Static methods</h3>
|
||||
|
@ -193,34 +224,69 @@ hljs.highlightAll();
|
|||
<span>def <span class="ident">c</span></span>(<span>coords: list | ForwardRef('<a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>')) ‑> <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a></span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Ensure coords is an instance of Point (idempotent)</p></div>
|
||||
<div class="desc"><p>Ensure <code>coords</code> is an instance of Point (idempotent)</p></div>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3>Methods</h3>
|
||||
<dl>
|
||||
<dt id="openscad_py.point.Point.__add__"><code class="name flex">
|
||||
<span>def <span class="ident">__add__</span></span>(<span>self, other)</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Use <code>p1 + p2</code> to add two vectors</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.__mul__"><code class="name flex">
|
||||
<span>def <span class="ident">__mul__</span></span>(<span>self, other)</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Use <code>p * x</code> to scale a vector</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.__neg__"><code class="name flex">
|
||||
<span>def <span class="ident">__neg__</span></span>(<span>self)</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Use <code>-p</code> to negate a vector</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.__rmul__"><code class="name flex">
|
||||
<span>def <span class="ident">__rmul__</span></span>(<span>self, other)</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Use <code>x * p</code> to scale a vector</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.__sub__"><code class="name flex">
|
||||
<span>def <span class="ident">__sub__</span></span>(<span>self, other)</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Use <code>p1 - p2</code> to subtract two vectors</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.add"><code class="name flex">
|
||||
<span>def <span class="ident">add</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a></span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Add another point / vector <code>p</code> to the current one</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.allclose"><code class="name flex">
|
||||
<span>def <span class="ident">allclose</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> bool</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Return whether the current point / vector and <code>p</code> are close to each other</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.angle"><code class="name flex">
|
||||
<span>def <span class="ident">angle</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>,<br>mode: str = 'deg') ‑> float</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Return the angle between two vectors in degrees or radians</p></div>
|
||||
<div class="desc"><p>Return the angle between two vectors in degrees or radians</p>
|
||||
<h2 id="arguments">Arguments</h2>
|
||||
<ul>
|
||||
<li>p: a Point object</li>
|
||||
<li>mode: "deg" | "rad"</li>
|
||||
</ul></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.cross"><code class="name flex">
|
||||
<span>def <span class="ident">cross</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a></span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Return the cross product</p></div>
|
||||
<div class="desc"><p>Return the cross product of the current vector and <code>p</code></p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.dim"><code class="name flex">
|
||||
<span>def <span class="ident">dim</span></span>(<span>self) ‑> int</span>
|
||||
|
@ -232,25 +298,25 @@ hljs.highlightAll();
|
|||
<span>def <span class="ident">dot</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> float</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Return the dot product</p></div>
|
||||
<div class="desc"><p>Return the dot product of the current vector and <code>p</code></p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.eq"><code class="name flex">
|
||||
<span>def <span class="ident">eq</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> bool</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Return whether the current point / vector and <code>p</code> are equal</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.ge"><code class="name flex">
|
||||
<span>def <span class="ident">ge</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> bool</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Return whether the current vector is greater or equal to <code>p</code> in each dimension</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.gt"><code class="name flex">
|
||||
<span>def <span class="ident">gt</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> bool</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Return whether the current vector is greater than <code>p</code> in each dimension</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.is_zero"><code class="name flex">
|
||||
<span>def <span class="ident">is_zero</span></span>(<span>self) ‑> bool</span>
|
||||
|
@ -262,7 +328,7 @@ hljs.highlightAll();
|
|||
<span>def <span class="ident">le</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> bool</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Return whether the current vector is smaller or equal to <code>p</code> in each dimension</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.length"><code class="name flex">
|
||||
<span>def <span class="ident">length</span></span>(<span>self) ‑> float</span>
|
||||
|
@ -274,49 +340,58 @@ hljs.highlightAll();
|
|||
<span>def <span class="ident">lt</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> bool</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Return whether the current vector is smaller than <code>p</code> in each dimension</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.norm"><code class="name flex">
|
||||
<span>def <span class="ident">norm</span></span>(<span>self) ‑> <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a></span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Return a normalized version of the vector (scaled to length 1)</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.render"><code class="name flex">
|
||||
<span>def <span class="ident">render</span></span>(<span>self) ‑> str</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Render the object into OpenSCAD code</p></div>
|
||||
<div class="desc"><p>Render the point / vector into OpenSCAD code</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.render_stl"><code class="name flex">
|
||||
<span>def <span class="ident">render_stl</span></span>(<span>self) ‑> str</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Render the point / vector into STL</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.rotate"><code class="name flex">
|
||||
<span>def <span class="ident">rotate</span></span>(<span>self, coords, angle: float) ‑> <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a></span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Rotate. coords is a list of 2 coordinate indices that we rotate</p></div>
|
||||
<div class="desc"><p>Rotate the current vector</p>
|
||||
<h2 id="arguments">Arguments</h2>
|
||||
<ul>
|
||||
<li>coords: A list of 2 coordinate indices to rotate</li>
|
||||
<li>angle: the angle to rotate by, in degrees</li>
|
||||
</ul></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.scale"><code class="name flex">
|
||||
<span>def <span class="ident">scale</span></span>(<span>self, x: float) ‑> <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a></span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Scale the current vector/point by a scalar</p></div>
|
||||
<div class="desc"><p>Scale the current point / vector by the scalar <code>x</code></p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.sub"><code class="name flex">
|
||||
<span>def <span class="ident">sub</span></span>(<span>self,<br>p: <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a>) ‑> <a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a></span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"></div>
|
||||
<div class="desc"><p>Subtract another point / vector <code>p</code> from the current one</p></div>
|
||||
</dd>
|
||||
<dt id="openscad_py.point.Point.z_slope"><code class="name flex">
|
||||
<span>def <span class="ident">z_slope</span></span>(<span>self, mode: str = 'deg') ‑> float</span>
|
||||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>Return the slope of a vector in degrees or radians</p></div>
|
||||
<div class="desc"><p>Return the slope of a vector in degrees or radians</p>
|
||||
<h2 id="arguments">Arguments</h2>
|
||||
<ul>
|
||||
<li>mode: "deg" | "rad"</li>
|
||||
</ul></div>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
|
@ -338,6 +413,11 @@ hljs.highlightAll();
|
|||
<li>
|
||||
<h4><code><a title="openscad_py.point.Point" href="#openscad_py.point.Point">Point</a></code></h4>
|
||||
<ul class="two-column">
|
||||
<li><code><a title="openscad_py.point.Point.__add__" href="#openscad_py.point.Point.__add__">__add__</a></code></li>
|
||||
<li><code><a title="openscad_py.point.Point.__mul__" href="#openscad_py.point.Point.__mul__">__mul__</a></code></li>
|
||||
<li><code><a title="openscad_py.point.Point.__neg__" href="#openscad_py.point.Point.__neg__">__neg__</a></code></li>
|
||||
<li><code><a title="openscad_py.point.Point.__rmul__" href="#openscad_py.point.Point.__rmul__">__rmul__</a></code></li>
|
||||
<li><code><a title="openscad_py.point.Point.__sub__" href="#openscad_py.point.Point.__sub__">__sub__</a></code></li>
|
||||
<li><code><a title="openscad_py.point.Point.add" href="#openscad_py.point.Point.add">add</a></code></li>
|
||||
<li><code><a title="openscad_py.point.Point.allclose" href="#openscad_py.point.Point.allclose">allclose</a></code></li>
|
||||
<li><code><a title="openscad_py.point.Point.angle" href="#openscad_py.point.Point.angle">angle</a></code></li>
|
||||
|
|
|
@ -41,24 +41,30 @@ hljs.highlightAll();
|
|||
</code></dt>
|
||||
<dd>
|
||||
<div class="desc"><p>A 3D primitive, a polyhedron defined by a list of points and faces.
|
||||
Faces are defined by lists of point indices. The points of a face must be listed clockwise when
|
||||
looking at the face from the outside inward.
|
||||
Nonplanar faces should be triangulated by OpenSCAD.</p>
|
||||
<p>See <a href="https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#polyhedron">https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#polyhedron</a></p></div>
|
||||
Nonplanar faces will be triangulated by OpenSCAD.</p>
|
||||
<p>See <a href="https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#polyhedron">https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#polyhedron</a></p>
|
||||
<h2 id="arguments">Arguments</h2>
|
||||
<ul>
|
||||
<li>points: a list of Point objects or coordinate tuples defining the vertices</li>
|
||||
<li>faces: defines the faces as a list of lists of vertex indices. The points of a face must be listed clockwise when looking at the face from the outside inward.</li>
|
||||
</ul></div>
|
||||
<details class="source">
|
||||
<summary>
|
||||
<span>Expand source code</span>
|
||||
</summary>
|
||||
<pre><code class="python">class Polyhedron(Object):
|
||||
"""A 3D primitive, a polyhedron defined by a list of points and faces.
|
||||
Faces are defined by lists of point indices. The points of a face must be listed clockwise when
|
||||
looking at the face from the outside inward.
|
||||
Nonplanar faces should be triangulated by OpenSCAD.
|
||||
Nonplanar faces will be triangulated by OpenSCAD.
|
||||
|
||||
See https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#polyhedron
|
||||
"""
|
||||
|
||||
def __init__(self, points: List[TUnion[list, Point]], faces: List[list], convexity: int = 10):
|
||||
"""
|
||||
Arguments:
|
||||
- points: a list of Point objects or coordinate tuples defining the vertices
|
||||
- faces: defines the faces as a list of lists of vertex indices. The points of a face must be listed clockwise when looking at the face from the outside inward.
|
||||
"""
|
||||
self.points = [Point.c(p) for p in points]
|
||||
self.faces = faces
|
||||
self.convexity = convexity
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue