Ir al contenido

Archivo:Jessen icosahedron.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: 1 kB; tipo MIME: application/sla)

View Jessen icosahedron.stl  on viewstl.com

Resumen

Descripción Jessen's icosahedron, made into a colour STL by CMG Lee.
Fuente Trabajo propio
Autor Cmglee

Python source

#!/usr/bin/env python

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, colour=None): ## 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 + [facets[12] if colour is None else colour])
 return facet_rotatess
def translate(facetss, ds, colour=None): ## 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)] +
         [facets[12] if colour is None else colour] for facets in facetss]
def scale(facetss, ss, colour=None): ## ss = (sx,sy,sz)
 return [facets[:3] + [facets[3 * i_point + i_xyz] * ss[i_xyz]
                       for i_point in range(1,4) for i_xyz in range(3)] +
         [facets[12] if colour is None else colour] for facets in facetss]
def make_facetss(lotssss):
 facetss = []
 for facess in lotssss['faces']:
  vertexs        = facess['vertexs']
  vertex_facetss = [[float(xyz) for xyz in lotssss['vertexs'][i_vertex]['xyz']]
                    for i_vertex in (vertexs[::-1] if (facess['flip']) else vertexs)]
  facetss.append(flatten([(None,0,0)] + vertex_facetss + [[facess['colour']]]))
 return facetss
def finish(facetss, header):
 ## 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)


corner_lotssss  = {'vertexs': [{'xyz':(0,2,1)},
                               {'xyz':(2,1,0)},
                               {'xyz':(1,0,2)}],
                   'faces':   [{'vertexs':[0,1,2], 'flip':True , 'colour':'#fff'}]}
side_lotssss    = {'vertexs': [{'xyz':( 0,2,1)},
                               {'xyz':( 2,1,0)},
                               {'xyz':(-2,1,0)}],
                   'faces':   [{'vertexs':[0,1,2], 'flip':True , 'colour':'#66f'}]}
corner_facetss  = make_facetss(corner_lotssss)
corner_facetss += scale       (corner_facetss, (-1,1,1), '#eee')
corner_facetss += scale       (corner_facetss, (1,-1,1), '#ccc')
corner_facetss += scale       (corner_facetss, (1,1,-1), '#999')
side_facetss    = make_facetss(side_lotssss)
side_facetss   += scale       (side_facetss, (1,1,-1))
side_facetss   += rotate      (side_facetss, (0,90,90), '#f00') + \
                  rotate      (side_facetss, (90,0,90), '#0c9')
side_facetss   += scale       (side_facetss, (-1,-1,-1))
finish(corner_facetss + side_facetss, "Jessen's icosahedron, made into a colour STL by CMG Lee.")

Licencia

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.
Yo, titular de los derechos de autor de esta obra, la publico en los términos de las siguientes licencias:
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.
GNU head Se autoriza la copia, distribución y modificación de este documento bajo los términos de la licencia de documentación libre GNU, versión 1.2 o cualquier otra que posteriormente publique la Fundación para el Software Libre; sin secciones invariables, textos de portada, ni textos de contraportada. Se incluye una copia de la dicha licencia en la sección titulada Licencia de Documentación Libre GNU.
Puedes usar la licencia que prefieras.

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
actual03:40 6 feb 2022Miniatura de la versión del 03:40 6 feb 20225120 × 2880 (1 kB)CmgleeSwap Y and Z axes to make thumbnail orientation similar to File:Translucent_Jessen_icosahedron.svg
01:07 27 ene 2022Miniatura de la versión del 01:07 27 ene 20225120 × 2880 (1 kB)Cmglee{{Information |Description=Jessen's icosahedron, made into a colour STL by CMG Lee. |Source={{own}} |Date= |Author= Cmglee |Permission= |other_versions= }} Category:STL files by cmglee Category:Jessen's icosahedron

La siguiente página usa este archivo:

Uso global del archivo

Las wikis siguientes utilizan este archivo: