File:Csaszar polyhedron.stl

原始文件 (5,120 × 2,880像素,文件大小:784字节,MIME类型:application/sla


View Csaszar polyhedron.stl  on viewstl.com


摘要

描述
English: Császár polyhedron (one of only two diagonal-less polyhedra) by CMG Lee.
日期
来源 自己的作品
作者 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)

许可协议

我,本作品著作权人,特此采用以下许可协议发表本作品:
w:zh:知识共享
署名 相同方式共享
本文件采用知识共享署名-相同方式共享 4.0 国际许可协议授权。
您可以自由地:
  • 共享 – 复制、发行并传播本作品
  • 修改 – 改编作品
惟须遵守下列条件:
  • 署名 – 您必须对作品进行署名,提供授权条款的链接,并说明是否对原始内容进行了更改。您可以用任何合理的方式来署名,但不得以任何方式表明许可人认可您或您的使用。
  • 相同方式共享 – 如果您再混合、转换或者基于本作品进行创作,您必须以与原先许可协议相同或相兼容的许可协议分发您贡献的作品。
Wikimedia Foundation
The uploader of this file has agreed to the Wikimedia Foundation 3D patent license: This file and any 3D objects depicted in the file are both my own work. I hereby grant to each user, maker, or distributor of the object depicted in the file a worldwide, royalty-free, fully-paid-up, nonexclusive, irrevocable and perpetual license at no additional cost under any patent or patent application I own now or in the future, to make, have made, use, offer to sell, sell, import, and distribute this file and any 3D objects depicted in the file that would otherwise infringe any claims of any patents I hold now or in the future.

Please note that in the event of any differences in meaning or interpretation between the original English version of this license and a translation, the original English version takes precedence.

说明

添加一行文字以描述该文件所表现的内容

此文件中描述的项目

描绘内容

创作作者 简体中文(已转写)

某些值没有维基数据项目

作者姓名字符串 简体中文(已转写):​Cmglee
维基媒体用户名 简体中文(已转写):​Cmglee

版权状态 简体中文(已转写)

版权所有 简体中文(已转写)

文件来源 简体中文(已转写)

上传者的原创作品 简体中文(已转写)

媒体类型 简体中文(已转写)

application/sla

校验和 简体中文(已转写)

56ddd83cdaa62c4b90e9c8c1be46ab911a0c744a

断定方法:​SHA-1 简体中文(已转写)

数据大小 简体中文(已转写)

784 字节

2,880 像素

5,120 像素

文件历史

点击某个日期/时间查看对应时刻的文件。

日期/时间缩⁠略⁠图大小用户备注
当前2018年3月29日 (四) 08:452018年3月29日 (四) 08:45版本的缩略图5,120 × 2,880(784字节)CmgleeRotate, and reduce height to better show hole.
2018年3月28日 (三) 19:372018年3月28日 (三) 19:37版本的缩略图5,120 × 2,880(784字节)CmgleeUser created page with UploadWizard

以下2个页面使用本文件:

全域文件用途

以下其他wiki使用此文件: