Archivo:Rhombic triacontahedron box.stl

Contenido de la página no disponible en otros idiomas.
De Wikipedia, la enciclopedia libre

Ver la imagen en su resolución original(5120 × 2880 píxeles; tamaño de archivo: 14 kB; tipo MIME: application/sla)

View Rhombic triacontahedron box.stl  on viewstl.com

Resumen

Descripción
English: A rhombic triacontahedron made of 6 panels around a cubic hole by CMG Lee. Zoom into the model to see the cubic hole.
Fecha
Fuente Trabajo propio
Autor Cmglee

Python source

#!/usr/bin/env python

header = 'A rhombic triacontahedron made of 6 panels around a cubic hole by CMG Lee.'
a      = 233 ## half rhombus minor diagonal
b      = 377 ## half rhombus major diagonal
c      =  55 ## half peg base width
d      =  30 ## displacement of panels

import re, struct, math
def fmt(string): ## string.format(**vars()) using tags {expression!format} by CMG Lee
 def f(tag): i_sep = tag.rfind('!'); return (re.sub('\.0+$', '', str(eval(tag[1:-1])))
  if (i_sep < 0) else ('{:%s}' % tag[i_sep + 1:-1]).format(eval(tag[1:i_sep])))
 return (re.sub(r'(?<!{){[^{}]+}', lambda m:f(m.group()), string)
         .replace('{{', '{').replace('}}', '}'))
def append(obj, string): return obj.append(fmt(string))
def tabbify(cellss, separator='|'):
 cellpadss = [list(rows) + [''] * (len(max(cellss, key=len)) - len(rows)) for rows in cellss]
 fmts = ['%%%ds' % (max([len(str(cell)) for cell in cols])) for cols in zip(*cellpadss)]
 return '\n'.join([separator.join(fmts) % tuple(rows) for rows in cellpadss])
def hex_rgb(colour): ## convert [#]RGB to #RRGGBB and [#]RRGGBB to #RRGGBB
 return '#%s' % (colour if len(colour) > 4 else ''.join([c * 2 for c in colour])).lstrip('#')
def viscam_colour(colour):
 colour_hex      = hex_rgb(colour)
 colour_top5bits = [int(colour_hex[i:i+2], 16) >> 3 for i in range(1,7,2)]
 return (1 << 15) + (colour_top5bits[0] << 10) + (colour_top5bits[1] << 5) + colour_top5bits[2]
def roundm(x, multiple=1):
 if   (isinstance(x, tuple)): return tuple(roundm(list(x), multiple))
 elif (isinstance(x, list )): return [roundm(x_i, multiple) for x_i in x]
 else: return int(math.floor(float(x) / multiple + 0.5)) * multiple
def flatten(lss): return [l for ls in lss for l in ls]
def rotate(facetss, degs): ## around x then y then z axes
 (deg_x,deg_y,deg_z) = degs
 (sin_x,cos_x) = (math.sin(math.radians(deg_x)), math.cos(math.radians(deg_x)))
 (sin_y,cos_y) = (math.sin(math.radians(deg_y)), math.cos(math.radians(deg_y)))
 (sin_z,cos_z) = (math.sin(math.radians(deg_z)), math.cos(math.radians(deg_z)))
 facet_rotatess = []
 for facets in facetss:
  facet_rotates = []
  for i_point in range(4):
   (x, y, z) = [facets[3 * i_point + i_xyz] for i_xyz in range(3)]
   if (x is None or y is None or z is None):
    facet_rotates += [x, y, z]
   else:
    (y, z) = (y * cos_x - z * sin_x,  y * sin_x + z * cos_x) ## rotate about x
    (x, z) = (x * cos_y + z * sin_y, -x * sin_y + z * cos_y) ## rotate about y
    (x, y) = (x * cos_z - y * sin_z,  x * sin_z + y * cos_z) ## rotate about z
    facet_rotates += [round(value, 9) for value in [x, y, z]]
  facet_rotatess.append(facet_rotates)
 return facet_rotatess
def translate(facetss, ds): ## ds = (dx,dy,dz)
 return [facets[:3] + [facets[3 * i_point + i_xyz] + ds[i_xyz]
                       for i_point in range(1,4) for i_xyz in range(3)]
         for facets in facetss]
def flip(facetss):
 return [facets[:3] + facets[6:9] + facets[3:6] + facets[9:] for facets in facetss]


## Add facets
facet_pegss   = [[None,0,0, b+c*2, 0,-b,    b+c,-c,0,    b+c, c,0], ## peg
                 [None,0,0, b+c*2, 0,-b,    b+c, c,0,  b+c*3, 0,0], ## peg
                 [None,0,0, b+c*2, 0,-b,  b+c*3, 0,0,    b+c,-c,0], ## peg
                 [None,0,0,     b, b, 0,    a+b, 0,0,  b+c*3, 0,0], ## bottom
                 [None,0,0,     b, b, 0,  b+c*3, 0,0,    b+c, c,0], ## bottom
                 [None,0,0,     b, b, 0,    b+c, c,0,    b+c,-c,0], ## bottom
                 [None,0,0,     b,-b, 0,  b+c*3, 0,0,    a+b, 0,0], ## bottom
                 [None,0,0,     b,-b, 0,    b+c,-c,0,  b+c*3, 0,0], ## bottom
                 [None,0,0,     b,-b, 0,      b, b,0,    b+c,-c,0]] ## bottom
facet_panelss = translate([[None,0,0, a+b, 0,0,    b, b,0,    0, b,a], ## slant N
                           [None,0,0,   0, b,a,    a, 0,a,  a+b, 0,0], ## slant N
                           [None,0,0, a+b, 0,0,    a, 0,a,    0,-b,a], ## slant S
                           [None,0,0,   0,-b,a,    b,-b,0,  a+b, 0,0], ## slant S
                           # [None,0,0,   a, 0,a,    0, b,a,   -a, 0,a], ## top round
                           [None,0,0,   0,-b,a,    a, 0,a,    0, b,a], ## top thin
                           # [None,0,0,  -b, b,0,    0, b,a,    b, b,0], ## side without hole
                           # [None,0,0,   b, b,0,  a+b, 0,0,    b,-b,0], ## bottom end without peg
                           [None,0,0,  -b, b,0,    b, b,0,    b,-b,0]] + ## bottom mid
                          facet_pegss + translate(rotate(flip(facet_pegss),(0,-90,-90)),(0,b,-b)),
                          (0,0,b + d))
facet_panelss += rotate(facet_panelss, (  0,0,180))
facet_panelss += rotate(facet_panelss, (180,0,180))
facetss = facet_panelss[:] + rotate(facet_panelss, (90,90,0)) + rotate(facet_panelss, (90,0,90))

## Calculate normals
for facets in facetss:
 if (facets[0] is None or facets[1] is None or facets[2] is None):
  us      = [facets[i_xyz + 9] - facets[i_xyz + 6] for i_xyz in range(3)]
  vs      = [facets[i_xyz + 6] - facets[i_xyz + 3] for i_xyz in range(3)]
  normals = [us[1]*vs[2] - us[2]*vs[1], us[2]*vs[0] - us[0]*vs[2], us[0]*vs[1] - us[1]*vs[0]]
  normal_length = sum([component * component for component in normals]) ** 0.5
  facets[:3] = [-round(component / normal_length, 10) for component in normals]

print(tabbify([['N%s'  % (xyz   )                   for xyz in list('xyz')] +
               ['%s%d' % (xyz, n) for n in range(3) for xyz in list('XYZ')] + ['RGB']] + facetss))
## Compile STL
outss = ([[('STL\n\n%-73s\n\n' % (header[:73])).encode('utf-8'), struct.pack('<L',len(facetss))]] +
         [[struct.pack('<f',float(value)) for value in facets[:12]] +
          [struct.pack('<H',0 if (len(facets) <= 12) else
                            viscam_colour(facets[12]))] for facets in facetss])
out   = b''.join([bytes(out) for outs in outss for out in outs])
# out += ('\n\n## Python script to generate STL\n\n%s\n' % (open(__file__).read())).encode('utf-8')
print("# bytes:%d\t# facets:%d\ttitle:\"%-73s\"" % (len(out), len(facetss), header[:73]))
with open(__file__[:__file__.rfind('.')] + '.stl', 'wb') as f_out: f_out.write(out)

Licencia

Yo, el titular de los derechos de autor de esta obra, la publico en los términos de la siguiente licencia:
w:es:Creative Commons
atribución compartir igual
Este archivo está disponible bajo la licencia Creative Commons Attribution-Share Alike 4.0 International.
Eres libre:
  • de compartir – de copiar, distribuir y transmitir el trabajo
  • de remezclar – de adaptar el trabajo
Bajo las siguientes condiciones:
  • atribución – Debes otorgar el crédito correspondiente, proporcionar un enlace a la licencia e indicar si realizaste algún cambio. Puedes hacerlo de cualquier manera razonable pero no de manera que sugiera que el licenciante te respalda a ti o al uso que hagas del trabajo.
  • compartir igual – En caso de mezclar, transformar o modificar este trabajo, deberás distribuir el trabajo resultante bajo la misma licencia o una compatible como el original.
Wikimedia Foundation
La persona que subió este archivo aceptó la licencia de patente 3D de la Fundación Wikimedia: Este archivo y cualquier objeto en 3D representado en el archivo son fruto de mi propio trabajo. Por medio de la presente otorgo a cada usuario, fabricante o distribuidor del objeto representado en el archivo una licencia a nivel mundial, libre de regalías, plenamente liberada, no exclusiva, irrevocable y perpetua sin costo adicional en virtud de cualquier patente o solicitud de patente que sea de mi propiedad actualmente o en el futuro, para hacer, solicitar que se haga, usar, ofrecer en venta, vender, importar y distribuir este archivo y cualquier objeto 3D representado en el archivo que de otra manera infringiría cualquier reclamo de cualquier patente que yo tenga ahora o en el futuro.

Téngase en cuenta que en caso de diferencias de significado o interpretación entre la versión original en inglés de esta licencia y una traducción, la versión original en inglés tiene prioridad.

Leyendas

Añade una explicación corta acerca de lo que representa este archivo

Elementos representados en este archivo

representa a

Historial del archivo

Haz clic sobre una fecha y hora para ver el archivo tal como apareció en ese momento.

Fecha y horaMiniaturaDimensionesUsuarioComentario
actual18:34 4 abr 2018Miniatura de la versión del 18:34 4 abr 20185120 × 2880 (14 kB)CmgleeAdd pegs to hold 3D-printed model together.
16:08 2 abr 2018Miniatura de la versión del 16:08 2 abr 20185120 × 2880 (5 kB)CmgleeUser created page with UploadWizard

No hay páginas que enlacen a este archivo.

Uso global del archivo

Las wikis siguientes utilizan este archivo: