3Dカラープリンター

ホーム / ツール紹介 / 3Dカラープリンター

3Dプリンターでものづくり(モノクロ)では、1種類のブロックだけを積み上げましたが、今度はいろんなブロックを使ってみます。3Dプリンターのカラー対応って感じです。では早速。プログラムはあまり変わりませんが、ディクショナリを使って、数字とブロックのつながりを決めています。0は何も置かない、1なら赤色の羊毛、2ならオレンジ色の羊毛。

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)


実際に置いてみると、こんな風に虹色になります。

次は2次元ですが、スマイルマークをきれいにしてみます。

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)


中身も色が塗られて、口も赤くなりました。3色使っています。

では最後に、これはどうなるでしょうか。pig.csvというファイルをダウンロードして、.pyと同じ場所に置いて下さい。

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)


豚さんです。ちょっと巨大過ぎますね。この豚が動いたりしたらもっと楽しいですが・・・、それはまた今度。

Translate »