3Dカラープリンター
3Dプリンターでものづくり(モノクロ)では、1種類のブロックだけを積み上げましたが、今度はいろんなブロックを使ってみます。3Dプリンターのカラー対応って感じです。では早速。プログラムはあまり変わりませんが、ディクショナリを使って、数字とブロックのつながりを決めています。0は何も置かない、1なら赤色の羊毛、2ならオレンジ色の羊毛。
[python]
import mcpi.minecraft as minecraft
import mcpi.block as block
from mcpi.vec3 import Vec3
mc = minecraft.Minecraft()
def print1D(start, data, inc):
for x in range(0,len(data)):
if data[x] != 0:
mc.setBlock(start.x + x, start.y, start.z, inc[data[x]])
inc_rainbow = {
1:block.WOOL_RED,
2:block.WOOL_ORANGE,
3:block.WOOL_YELLOW,
4:block.WOOL_LIME,
5:block.WOOL_LIGHT_BLUE,
6:block.WOOL_BLUE,
7:block.WOOL_PURPLE
}
rainbow = [1, 2, 3, 4, 5, 6, 7]
print1D(mc.player.getPos() + Vec3(1,0,0), rainbow, inc_rainbow)
[/python]
実際に置いてみると、こんな風に虹色になります。
次は2次元ですが、スマイルマークをきれいにしてみます。
[python]
import mcpi.minecraft as minecraft
import mcpi.block as block
from mcpi.vec3 import Vec3
mc = minecraft.Minecraft()
def print2D(start, data, inc):
for z in range(0,len(data)):
for x in range(0,len(data[z])):
if data[z][x] != 0:
mc.setBlock(start.x + x, start.y, start.z + z, inc[data[z][x]])
inc_smile = {
1:block.WOOL_YELLOW,
2:block.WOOL_BLACK,
3:block.WOOL_RED
}
smile_fill = [
[0,0,0,1,1,1,1,1,0,0,0],
[0,0,1,1,1,1,1,1,1,0,0],
[0,1,1,1,1,1,1,1,1,1,0],
[1,1,1,2,1,1,1,2,1,1,1],
[1,1,1,2,1,1,1,2,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,1,1,1,1,1,1,1,1],
[1,1,1,3,3,3,3,3,1,1,1],
[0,1,1,1,3,3,3,1,1,1,0],
[0,0,1,1,1,1,1,1,1,0,0],
[0,0,0,1,1,1,1,1,0,0,0]
]
print2D(mc.player.getPos() + Vec3(1,0,10), smile_fill, inc_smile)
[/python]
中身も色が塗られて、口も赤くなりました。3色使っています。
では最後に、これはどうなるでしょうか。pig.csvというファイルをダウンロードして、.pyと同じ場所に置いて下さい。
[python]
import mcpi.minecraft as minecraft
import mcpi.block as block
from mcpi.vec3 import Vec3
mc = minecraft.Minecraft()
import csv
def print3D(start, data, inc):
for y in range(0,len(data)):
for z in range(0,len(data[y])):
for x in range(0,len(data[y][z])):
if data[y][z][x] != 0:
mc.setBlock(start.x + x, start.y + y, start.z + z, inc[data[y][z][x]])
inc_pig = {1:block.WOOL_PINK, 2:block.WOOL_BROWN, 3:block.WOOL_BLACK, 4:block.WOOL_WHITE, 5:block.WOOL_RED}
data =[]
with open('pig.csv', 'r') as f:
file = csv.reader(f)
plane = []
for line in file:
if len(line) == 0:
data.append(plane)
plane = []
else:
plane.append(line)
data.append(plane)
data_conved = [[[int(elm) for elm in l] for l in p] for p in data]
print3D(mc.player.getPos() + Vec3(1,0,1), data_conved, inc_pig)
[/python]
豚さんです。ちょっと巨大過ぎますね。この豚が動いたりしたらもっと楽しいですが・・・、それはまた今度。