ファイル:Jessen icosahedron.stl

ページのコンテンツが他言語でサポートされていません。

元のファイル(5,120 × 2,880 ピクセル、ファイルサイズ: 1キロバイト、MIME タイプ: application/sla)

View Jessen icosahedron.stl  on viewstl.com

概要

解説 Jessen's icosahedron, made into a colour STL by CMG Lee.
原典 投稿者自身による著作物
作者 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.")

ライセンス

Wikimedia Foundation
このファイルをアップロードした人はウィキメディア財団 3D 特許権条項を承諾しています。 このファイルならびにファイル中に描写した対象物はいずれも私の作品です。 ファイル中に描写した対象物の使用者、製造者、配布者に対し、このファイルならびにファイル中に描写した対象物の製造、製造委託、使用、販売受託、販売、輸入ならびに配布に関して私はここに全世界で著作権料無料の後払いのない非独占で不変の永続するライセンスを、私が現在所有する特許もしくは今後の特許申請による一切の追加料金を請求することなく付与するものとし、それにより私が現在所有するもしくは今後の申請による特許権のいかなる主張に反することはありません。

万一このライセンスの英語版原文と翻訳の間で意味や解釈に相違がある場合、英語原文を優先するものとします。
この作品の著作権者である私は、この作品を以下のライセンスで提供します。
w:ja:クリエイティブ・コモンズ
表示 継承
このファイルはクリエイティブ・コモンズ 表示-継承 4.0 国際ライセンスのもとに利用を許諾されています。
あなたは以下の条件に従う場合に限り、自由に
  • 共有 – 本作品を複製、頒布、展示、実演できます。
  • 再構成 – 二次的著作物を作成できます。
あなたの従うべき条件は以下の通りです。
  • 表示 – あなたは適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示さなければなりません。これらは合理的であればどのような方法で行っても構いませんが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。
  • 継承 – もしあなたがこの作品をリミックスしたり、改変したり、加工した場合には、あなたはあなたの貢献部分を元の作品とこれと同一または互換性があるライセンスの下に頒布しなければなりません。
GNU head この文書は、フリーソフトウェア財団発行のGNUフリー文書利用許諾書 (GNU Free Documentation License) 1.2またはそれ以降のバージョンの規約に基づき、複製や再配布、改変が許可されます。不可変更部分、表紙、背表紙はありません。このライセンスの複製は、GNUフリー文書利用許諾書という章に含まれています。
あなたは上記のライセンスから、どれか一つ以上を選択できます。

キャプション

このファイルの内容を1行で記述してください

このファイルに描写されている項目

題材

ファイルの履歴

過去の版のファイルを表示するには、その版の日時をクリックしてください。

日付と時刻サムネイル寸法利用者コメント
現在の版2022年2月6日 (日) 03:402022年2月6日 (日) 03:40時点における版のサムネイル5,120 × 2,880 (1キロバイト)CmgleeSwap Y and Z axes to make thumbnail orientation similar to File:Translucent_Jessen_icosahedron.svg
2022年1月27日 (木) 01:072022年1月27日 (木) 01:07時点における版のサムネイル5,120 × 2,880 (1キロバイト)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

以下のページがこのファイルを使用しています:

グローバルなファイル使用状況

以下に挙げる他のウィキがこの画像を使っています: