2024-12-01 15:52:02 +00:00
<!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 = "pdoc3 0.11.3" >
< title > openscad_py.path_tube API documentation< / title >
< meta name = "description" content = "" >
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/13.0.0/sanitize.min.css" integrity = "sha512-y1dtMcuvtTMJc1yPgEqF0ZjQbhnc/bFhyvIyVNb9Zk5mIGtqVaAB1Ttl28su8AvFMOY0EwRbAe+HCLqj6W7/KA==" crossorigin >
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/10up-sanitize.css/13.0.0/typography.min.css" integrity = "sha512-Y1DYSb995BAfxobCkKepB1BqJJTPrOp3zPL74AWFugHHmmdcvO+C48WLrUOlhGMc0QG7AE3f7gmvvcrmX2fDoA==" crossorigin >
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css" crossorigin >
< style > : root { --highlight-color : #fe9 } . flex { display : flex !important } body { line-height : 1.5 em } # content { padding : 20 px } # sidebar { padding : 1.5 em ; overflow : hidden } # sidebar > * : last-child { margin-bottom : 2 cm } . http-server-breadcrumbs { font-size : 130 % ; margin : 0 0 15 px 0 } # footer { font-size : .75 em ; padding : 5 px 30 px ; border-top : 1 px solid #ddd ; text-align : right } # footer p { margin : 0 0 0 1 em ; display : inline-block } # footer p : last-child { margin-right : 30 px } h1 , h2 , h3 , h4 , h5 { font-weight : 300 } h1 { font-size : 2.5 em ; line-height : 1.1 em } h2 { font-size : 1.75 em ; margin : 2 em 0 .50 em 0 } h3 { font-size : 1.4 em ; margin : 1.6 em 0 .7 em 0 } h4 { margin : 0 ; font-size : 105 % } h1 : target , h2 : target , h3 : target , h4 : target , h5 : target , h6 : target { background : var ( - - highlight - color ) ; padding : .2 em 0 } a { color : #058 ; text-decoration : none ; transition : color .2 s ease-in-out } a : visited { color : #503 } a : hover { color : #b62 } . title code { font-weight : bold } h2 [ id ^ = "header-" ] { margin-top : 2 em } . ident { color : #900 ; font-weight : bold } pre code { font-size : .8 em ; line-height : 1.4 em ; padding : 1 em ; display : block } code { background : #f3f3f3 ; font-family : "DejaVu Sans Mono" , monospace ; padding : 1 px 4 px ; overflow-wrap : break-word } h1 code { background : transparent } pre { border-top : 1 px solid #ccc ; border-bottom : 1 px solid #ccc ; margin : 1 em 0 } # 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 : 1 px solid #ddd } # index ul { padding : 0 } # index h4 { margin-top : .6 em ; 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 : 2 em } dl dl : last-child { margin-bottom : 4 em } dd { margin : 0 0 1 em 3 em } # header-classes + dl > dd { margin-bottom : 3 em } dd dd { margin-left : 2 em } dd p { margin : 10 px 0 } . name { background : #eee ; font-size : .85 em ; padding : 5 px 10 px ; 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 : .4 em } . inherited { color : #999 ; border-left : 5 px solid #eee ; padding-left : 1 em } . inheritance em { font-style : normal ; font-weight : bold } . desc h2 { font-weight : 400 ; font-size : 1.25 em } . desc h3 { font-size : 1 em } . desc dt code { background : inherit } . source summary , . git-link-div { color : #666 ; text-align : right ; font-weight : 400 ; font-size : .8 em ; text-transform : uppercase } . source summary > * { white-space : nowrap ; cursor : pointer } . git-link { color : inherit ; margin-left : 1 em } . source pre { max-height : 500 px ; overflow : auto ; margin : 0 } . source pre code { font-size : 12 px ; 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 : 1 em } img { max-width : 100 % } td { padding : 0 .5 em } . admonition { padding : .1 em 1 em ; margin : 1 em 0 } . 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 : 100 vh ; overflow : auto ; position : sticky ; top : 0 } # content { width : 70 % ; max-width : 100 ch ; padding : 3 em 4 em ; border-left : 1 px solid #ddd } pre code { font-size : 1 em } . name { font-size : 1 em } main { display : flex ; flex-direction : row-reverse ; justify-content : flex-end } . toc ul ul , # index ul ul { padding-left : 1 em } . toc > ul > li { margin-top : .5 em } } < / 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 : 1 px 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/11.9.0/highlight.min.js" integrity = "sha512-D9gUyxqja7hBtkWpPWGt9wfbfaMGVt9gnyCvYa+jojwwPHLCzUm5i8rpk7vD7wNee9bA35eYIjobYPaQuKS1MQ==" crossorigin > < / script >
< script > w i n d o w . a d d E v e n t L i s t e n e r ( ' D O M C o n t e n t L o a d e d ' , ( ) = > {
hljs.configure({languages: ['bash', 'css', 'diff', 'graphql', 'ini', 'javascript', 'json', 'plaintext', 'python', 'python-repl', 'rust', 'shell', 'sql', 'typescript', 'xml', 'yaml']});
hljs.highlightAll();
})< / script >
< / head >
< body >
< main >
< article id = "content" >
< header >
< h1 class = "title" > Module < code > openscad_py.path_tube< / code > < / h1 >
< / header >
< section id = "section-intro" >
< / section >
< section >
< / section >
< section >
< / section >
< section >
< / section >
< section >
< h2 class = "section-title" id = "header-classes" > Classes< / h2 >
< dl >
< dt id = "openscad_py.path_tube.PathTube" > < code class = "flex name class" >
< span > class < span class = "ident" > PathTube< / span > < / span >
< span > (< / span > < span > points: List[list | < a title = "openscad_py.point.Point" href = "point.html#openscad_py.point.Point" > Point< / a > ],< br > radius: float | list,< br > fn: int,< br > make_torus: bool = False,< br > convexity: int = 10)< / span >
< / code > < / dt >
< dd >
< div class = "desc" > < p > Creates a tube-like or toroid polyhedron from a path (list of points).< / p >
2024-12-01 16:33:34 +00:00
< h2 id = "arguments" > Arguments< / h2 >
< ul >
< li > points: The list of points< / li >
< li > radius: A float or a list of floats for each point< / li >
< li > fn: int, The number of sides< / li >
< li > make_torus: bool, Whether to make a torus instead of a pipe with ends. Warning: the last segment may be twisted.< / li >
< li > convexity: see openscad< / li >
< / ul > < / div >
2024-12-01 15:52:02 +00:00
< details class = "source" >
< summary >
< span > Expand source code< / span >
< / summary >
< pre > < code class = "python" > class PathTube(Object):
" " " Creates a tube-like or toroid polyhedron from a path (list of points)." " "
def __init__(self, points: List[TUnion[list, Point]], radius: TUnion[float, list], fn: int, make_torus: bool = False, convexity: int = 10):
" " "
2024-12-01 16:33:34 +00:00
Arguments:
- points: The list of points
- radius: A float or a list of floats for each point
- fn: int, The number of sides
- make_torus: bool, Whether to make a torus instead of a pipe with ends. Warning: the last segment may be twisted.
- convexity: see openscad
2024-12-01 15:52:02 +00:00
" " "
self.points = [Point.c(p) for p in points]
self.radii = radius if isinstance(radius, list) else [radius for p in points]
self.fn = fn
self.make_torus = make_torus
self.convexity = convexity
def process(self, debug: bool = False) -> Polyhedron:
" " " Generate a Polyhedron object from the parameters" " "
points_rows = []
for ix, point in enumerate(self.points):
if debug: print(f" //LOOP {ix}: {point.render()}" )
if (not self.make_torus) and ix == 0:
# Start of the path
v = self.points[1].sub(point) # vector toward the first point
z_point = Point([0,0,1])
seam = v.cross(z_point) # Track a seam along the pipe using this vector pointing from the middle line
if seam.length() == 0: # v is in the z direction
seam = Point([1,0,0])
seam = seam.norm()
seam2 = v.cross(seam).norm()
if debug: print(f" //Start. v={v.render()} seam={seam.render()} seam2={seam2.render()}" )
points = []
for i in range(self.fn):
a = math.pi*2*i/self.fn
points.append((seam*math.cos(a) + seam2*math.sin(a))*self.radii[ix] + point)
points_rows.append(points)
if debug: print(f" // Row: {' , ' .join([p.render() for p in points])}" )
elif (not self.make_torus) and ix == len(self.points) - 1:
# End of the path
v = point.sub(self.points[-2])
seam2 = v.cross(seam).norm()
if debug: print(f" //End. v={v.render()} seam={seam.render()} seam2={seam2.render()}" )
points = []
for i in range(self.fn):
a = math.pi*2*i/self.fn
points.append((seam*math.cos(a) + seam2*math.sin(a))*self.radii[ix] + point)
points_rows.append(points)
if debug: print(f" // Row: {' , ' .join([p.render() for p in points])}" )
else:
# Middle of the path
iprev = ix - 1 if ix > 0 else len(self.points) - 1
inext = ix + 1 if ix < len(self.points) - 1 else 0
# (p[-1]) -va-> (p[0]) -vb-> (p[1])
va = point.sub(self.points[iprev]).norm() # vector incoming to this elbow
vb = self.points[inext].sub(point).norm() # vector going out from this elbow
if debug: print(f" //Middle. va={va.render()} vb={vb.render()}" )
# Get the vector perpendicular to va that points to the inside of the cylinder around va according
# to the elbow at p[0]. This is the component of vb in a basis defined by va.
vdot = va.dot(vb)
vb_proj = va.scale(vdot) # The projection of vb onto va
vb_perp = vb.sub(vb_proj) # This is perpendicular to va
if debug: print(f" // vb_proj={vb_proj.render()} vb_perp={vb_perp.render()}" )
va_inner = vb_perp.norm()
va_proj = vb.scale(vdot)
va_perp = va.sub(va_proj)
if debug: print(f" // va_proj={va_proj.render()} va_perp={va_perp.render()}" )
vb_inner = va_perp.scale(-1).norm() # Here we want to project -va onto vb
if debug: print(f" // va_inner={va_inner.render()} vb_inner={vb_inner.render()}" )
if ix == 0:
# We just choose a seam when making a torus
seam_angle = 0
else:
# The new seam on vb (seam_b) has the same angle to vb_inner as it had on va to va_inner
seam_angle = seam.angle(va_inner, mode=" rad" )
# need to figure out the sign of the angle
if seam_angle != 0:
if va_inner.cross(seam).dot(va) < 0:
seam_angle = -seam_angle
vb_inner2 = vb.cross(vb_inner).norm()
seam_b = vb_inner*math.cos(seam_angle) + vb_inner2*math.sin(seam_angle)
if debug:
if ix == 0:
print(f" // seam=N/A seam_b={seam_b.render()}" )
else:
print(f" // seam={seam.render()} seam_b={seam_b.render()}" )
vangle = va.scale(-1).angle(vb, mode=" rad" )
long_inner = (vb-va).norm().scale(1/math.sin(vangle/2))
# long_inner is the long axis of the elliptic intersection between the cylinders around va and vb
short = va.cross(long_inner).norm() # the short axis of the ellipse
if debug: print(f" // long_inner={long_inner.render()} short={short.render()} vangle={vangle/math.pi*180}(deg) seam_angle={seam_angle/math.pi*180}(deg)" )
points = []
for i in range(self.fn):
# We draw the ellipse according to long_inner and short, but use seam_angle to get the right points
a = math.pi*2*i/self.fn + seam_angle
points.append((long_inner*math.cos(a) + short*math.sin(a))*self.radii[ix] + point)
points_rows.append(points)
if debug: print(f" // Row: {' , ' .join([p.render() for p in points])}" )
seam = seam_b
return Polyhedron.tube(points=points_rows, convexity=self.convexity, make_torus=self.make_torus)
def render(self) -> str:
" " " Render the object into OpenSCAD code" " "
return self.process().render()< / code > < / pre >
< / details >
< h3 > Ancestors< / h3 >
< ul class = "hlist" >
< li > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / li >
< / ul >
< h3 > Methods< / h3 >
< dl >
< dt id = "openscad_py.path_tube.PathTube.color" > < code class = "name flex" >
< span > def < span class = "ident" > color< / span > < / span > (< span > self, r, g, b, a=1.0) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.color" href = "object_.html#openscad_py.object_.Object.color" > color< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Apply a color and return a new object.
See < a href = "https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#color" > https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#color< / a > < / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.delta_offset" > < code class = "name flex" >
< span > def < span class = "ident" > delta_offset< / span > < / span > (< span > self, delta, chamfer=False)< / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.delta_offset" href = "object_.html#openscad_py.object_.Object.delta_offset" > delta_offset< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Return a new 2D interior or exterior outline from an existing outline.
See < a href = "https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#offset" > https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#offset< / a > < / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.diff" > < code class = "name flex" >
< span > def < span class = "ident" > diff< / span > < / span > (< span > self,< br > tool: list | ForwardRef('< a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > ')) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.diff" href = "object_.html#openscad_py.object_.Object.diff" > diff< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Remove from the object using a difference operator, and return a new object.
See …< / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.extrude" > < code class = "name flex" >
< span > def < span class = "ident" > extrude< / span > < / span > (< span > self, height, convexity=10, center: bool = False) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.extrude" href = "object_.html#openscad_py.object_.Object.extrude" > extrude< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Apply a linear extrusion and return a new object.
If < code > center< / code > is false, the linear extrusion Z range is from 0 to height;
if it is true, the range is …< / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.intersection" > < code class = "name flex" >
< span > def < span class = "ident" > intersection< / span > < / span > (< span > self,< br > objects: list | ForwardRef('< a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > ')) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.intersection" href = "object_.html#openscad_py.object_.Object.intersection" > intersection< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Get the intersection of self and an object of list of objects, and return a new object.
See …< / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.move" > < code class = "name flex" >
< span > def < span class = "ident" > move< / span > < / span > (< span > self,< br > v: list | < a title = "openscad_py.point.Point" href = "point.html#openscad_py.point.Point" > Point< / a > ) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.move" href = "object_.html#openscad_py.object_.Object.move" > move< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Apply a translation and return a new object. Synonym of < code > translate()< / code > < / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.process" > < code class = "name flex" >
< span > def < span class = "ident" > process< / span > < / span > (< span > self, debug: bool = False) ‑ > < a title = "openscad_py.polyhedron.Polyhedron" href = "polyhedron.html#openscad_py.polyhedron.Polyhedron" > Polyhedron< / a > < / span >
< / code > < / dt >
< dd >
< div class = "desc" > < p > Generate a Polyhedron object from the parameters< / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.radial_offset" > < code class = "name flex" >
< span > def < span class = "ident" > radial_offset< / span > < / span > (< span > self, r)< / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.radial_offset" href = "object_.html#openscad_py.object_.Object.radial_offset" > radial_offset< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Return a new 2D interior or exterior outline from an existing outline.
See < a href = "https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#offset" > https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#offset< / a > < / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.render" > < code class = "name flex" >
< span > def < span class = "ident" > render< / span > < / span > (< span > self) ‑ > str< / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.render" href = "object_.html#openscad_py.object_.Object.render" > render< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Render the object into OpenSCAD code< / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.rotate" > < code class = "name flex" >
< span > def < span class = "ident" > rotate< / span > < / span > (< span > self,< br > a,< br > v: list | < a title = "openscad_py.point.Point" href = "point.html#openscad_py.point.Point" > Point< / a > ) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.rotate" href = "object_.html#openscad_py.object_.Object.rotate" > rotate< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Apply a rotation and return a new object.
See < a href = "https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#rotate" > https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#rotate< / a > < / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.rotate_extrude" > < code class = "name flex" >
< span > def < span class = "ident" > rotate_extrude< / span > < / span > (< span > self, angle, convexity=10) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.rotate_extrude" href = "object_.html#openscad_py.object_.Object.rotate_extrude" > rotate_extrude< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Apply a rotational extrusion and return a new object. For all points x > = 0 must be true.
See …< / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.scale" > < code class = "name flex" >
< span > def < span class = "ident" > scale< / span > < / span > (< span > self,< br > v: list | < a title = "openscad_py.point.Point" href = "point.html#openscad_py.point.Point" > Point< / a > | float) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.scale" href = "object_.html#openscad_py.object_.Object.scale" > scale< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Apply scaling and return a new object. Accepts a vector (a Point object or a list of floats)
or a single float for uniform scaling.
See …< / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.translate" > < code class = "name flex" >
< span > def < span class = "ident" > translate< / span > < / span > (< span > self,< br > v: list | < a title = "openscad_py.point.Point" href = "point.html#openscad_py.point.Point" > Point< / a > ) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.translate" href = "object_.html#openscad_py.object_.Object.translate" > translate< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Apply a translation and return a new object.
See < a href = "https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#translate" > https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#translate< / a > < / p > < / div >
< / dd >
< dt id = "openscad_py.path_tube.PathTube.union" > < code class = "name flex" >
< span > def < span class = "ident" > union< / span > < / span > (< span > self,< br > objects: list | ForwardRef('< a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > ')) ‑ > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / span >
< / code > < / dt >
< dd >
< p class = "inheritance" >
< em > Inherited from:< / em >
< code > < a title = "openscad_py.object_.Object" href = "object_.html#openscad_py.object_.Object" > Object< / a > < / code > .< code > < a title = "openscad_py.object_.Object.union" href = "object_.html#openscad_py.object_.Object.union" > union< / a > < / code >
< / p >
< div class = "desc inherited" > < p > Form the union of self and an object or list of objects, and return a new object.
See …< / p > < / div >
< / dd >
< / dl >
< / dd >
< / dl >
< / section >
< / article >
< nav id = "sidebar" >
< div class = "toc" >
< ul > < / ul >
< / div >
< ul id = "index" >
< li > < h3 > Super-module< / h3 >
< ul >
< li > < code > < a title = "openscad_py" href = "index.html" > openscad_py< / a > < / code > < / li >
< / ul >
< / li >
< li > < h3 > < a href = "#header-classes" > Classes< / a > < / h3 >
< ul >
< li >
< h4 > < code > < a title = "openscad_py.path_tube.PathTube" href = "#openscad_py.path_tube.PathTube" > PathTube< / a > < / code > < / h4 >
< ul class = "two-column" >
< li > < code > < a title = "openscad_py.path_tube.PathTube.color" href = "object_.html#openscad_py.path_tube.PathTube.color" > color< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.delta_offset" href = "object_.html#openscad_py.path_tube.PathTube.delta_offset" > delta_offset< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.diff" href = "object_.html#openscad_py.path_tube.PathTube.diff" > diff< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.extrude" href = "object_.html#openscad_py.path_tube.PathTube.extrude" > extrude< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.intersection" href = "object_.html#openscad_py.path_tube.PathTube.intersection" > intersection< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.move" href = "object_.html#openscad_py.path_tube.PathTube.move" > move< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.process" href = "#openscad_py.path_tube.PathTube.process" > process< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.radial_offset" href = "object_.html#openscad_py.path_tube.PathTube.radial_offset" > radial_offset< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.render" href = "#openscad_py.path_tube.PathTube.render" > render< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.rotate" href = "object_.html#openscad_py.path_tube.PathTube.rotate" > rotate< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.rotate_extrude" href = "object_.html#openscad_py.path_tube.PathTube.rotate_extrude" > rotate_extrude< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.scale" href = "object_.html#openscad_py.path_tube.PathTube.scale" > scale< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.translate" href = "object_.html#openscad_py.path_tube.PathTube.translate" > translate< / a > < / code > < / li >
< li > < code > < a title = "openscad_py.path_tube.PathTube.union" href = "object_.html#openscad_py.path_tube.PathTube.union" > union< / a > < / code > < / li >
< / ul >
< / 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.11.3< / a > .< / p >
< / footer >
< / body >
< / html >