Aller au contenu

Fichier:Csaszar polyhedron.stl

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Une page de Wikipédia, l'encyclopédie libre.

Fichier d’origine(5 120 × 2 880 pixels, taille du fichier : 784 octet, type MIME : application/sla)

Ce fichier et sa description proviennent de Wikimedia Commons.

View Csaszar polyhedron.stl  on viewstl.com


Description

Description
English: Császár polyhedron (one of only two diagonal-less polyhedra) by CMG Lee.
Date
Source Travail personnel
Auteur Cmglee

Python source

#!/usr/bin/env python

# header    = 'Cs\xe1sz\xe1r polyhedron (one of only two diagonal-less polyhedra) by CMG Lee.' ## non-ASCII characters hex-encoded
header    = 'Csaszar polyhedron (one of only two diagonal-less polyhedra) by CMG Lee.'
vertexsss = [ ## [i_vertex][property][x,y,z etc]
             {'xyz':(-6, 6,-6), 'colour':'#c00', 'label':'G'},
             {'xyz':(-6,-6,-5), 'colour':'#090', 'label':'C'},
             {'xyz':(-2,-3, 0), 'colour':'#069', 'label':'D'},
             {'xyz':( 2, 3, 0), 'colour':'#c60', 'label':'E'},
             {'xyz':( 6, 6,-5), 'colour':'#c0f', 'label':'F'},
             {'xyz':( 6,-6,-6), 'colour':'#00f', 'label':'B'},
             {'xyz':( 0, 0, 6), 'colour':'#000', 'label':'A'}]
facesss = [ ## [i_face][property][i_vertex etc]
           {'vertexs':[0,2,3], 'flip':True , 'colour':'#f00'}, ## face down 1
           {'vertexs':[2,3,5], 'flip':False, 'colour':'#00f'}, ## face down 2
           {'vertexs':[1,2,4], 'flip':False, 'colour':'#069'}, ## bottom inner 1
           {'vertexs':[1,3,4], 'flip':True , 'colour':'#960'}, ## bottom inner 2
           {'vertexs':[1,2,6], 'flip':True , 'colour':'#0f0'}, ## top inner 1
           {'vertexs':[3,4,6], 'flip':False, 'colour':'#f0f'}, ## top inner 2
           {'vertexs':[2,4,5], 'flip':True , 'colour':'#09f'}, ## bottom outer 2
           {'vertexs':[0,1,3], 'flip':False, 'colour':'#f90'}, ## bottom outer 2
           {'vertexs':[0,2,6], 'flip':False, 'colour':'#ff0'}, ## top outer 1
           {'vertexs':[3,5,6], 'flip':True , 'colour':'#ccc'}, ## top outer 2
           {'vertexs':[0,4,6], 'flip':True , 'colour':'#f66'}, ## outside 1
           {'vertexs':[1,5,6], 'flip':False, 'colour':'#66f'}, ## outside 2
           {'vertexs':[0,4,5], 'flip':False, 'colour':'#606'}, ## base 1
           {'vertexs':[0,1,5], 'flip':True , 'colour':'#060'}] ## base 2

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]

## Add facets
facetss = []
for facess in facesss:
 vertexs        = facess['vertexs']
 vertex_facetss = [vertexsss[i_vertex]['xyz']
                   for i_vertex in (vertexs[::-1] if (facess['flip']) else vertexs)]
 facetss.append(flatten([(None,0,0)] + vertex_facetss + [[facess['colour']]]))
# facetss = [facets[:3] + facets[6:9] + facets[3:6] + facets[9:] for facets in facetss]

## 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)

Conditions d’utilisation

Moi, en tant que détenteur des droits d’auteur sur cette œuvre, je la publie sous la licence suivante :
w:fr:Creative Commons
paternité partage à l’identique
Vous êtes libre :
  • de partager – de copier, distribuer et transmettre cette œuvre
  • d’adapter – de modifier cette œuvre
Sous les conditions suivantes :
  • paternité – Vous devez donner les informations appropriées concernant l'auteur, fournir un lien vers la licence et indiquer si des modifications ont été faites. Vous pouvez faire cela par tout moyen raisonnable, mais en aucune façon suggérant que l’auteur vous soutient ou approuve l’utilisation que vous en faites.
  • partage à l’identique – Si vous modifiez, transformez, ou vous basez sur cette œuvre, vous devez distribuer votre contribution sous la même licence ou une licence compatible avec celle de l’original.
Wikimedia Foundation
La personne ayant téléversé ce fichier a accepté de le publier sous la licence de brevet 3D de la Fondation Wikimedia : Ce fichier et tout objet 3D décrit dans le fichier sont issus de mon propre travail. Par les présentes, j’accorde à chaque utilisateur, fabricant ou distributeur de l’objet décrit dans le fichier une licence mondiale, libre de droits, intégralement acquittée, non exclusive, irrévocable et perpétuelle, sans frais supplémentaires en vertu d’un quelconque brevet ou d’une quelconque demande de brevet que je détiendrais actuellement ou à l’avenir, afin de leur permettre de fabriquer, faire fabriquer, utiliser, mettre en vente, vendre, importer et distribuer ce fichier et tout objet 3D décrit dans ce fichier sans que ceux-ci ne portent atteinte aux éventuelles revendications de brevet que je peux faire valoir actuellement ou que je pourrai faire valoir à l’avenir.

Veuillez noter qu’en présence de quelconques différences de sens ou d’interprétation entre la version originale en anglais et une version traduite, la version originale en anglais prévaudra.

Légendes

Ajoutez en une ligne la description de ce que représente ce fichier

Éléments décrits dans ce fichier

dépeint

application/sla

56ddd83cdaa62c4b90e9c8c1be46ab911a0c744a

2 880 pixel

5 120 pixel

Historique du fichier

Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.

Date et heureVignetteDimensionsUtilisateurCommentaire
actuel29 mars 2018 à 10:45Vignette pour la version du 29 mars 2018 à 10:455 120 × 2 880 (784 octet)CmgleeRotate, and reduce height to better show hole.
28 mars 2018 à 21:37Vignette pour la version du 28 mars 2018 à 21:375 120 × 2 880 (784 octet)CmgleeUser created page with UploadWizard

La page suivante utilise ce fichier :

Usage global du fichier

Les autres wikis suivants utilisent ce fichier :