1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

G-coordinatorで3Dプリント(造形入門)

Last updated at Posted at 2024-06-24

単純な四角形パス

平面に単純な四角形を作ってみましょう.

G-coordinatorでは,基本的にあらゆる造形を座標を用いて行います.
ここでは最も単純に,座標を直接手入力してみましょう.
ノズルが移動する座標は順番に以下のようになります.

(x, y, z) = (0,  0,  0.2),
            (10, 0,  0.2),
            (10, 10, 0.2),
            (0,  10, 0.2),
            (0,  0,  0.2)

ノズルが移動する座表のx座標列,y座標列,z座標列が必要なので,以下のようなコードを書きます.

import gcoordinator as gc

full_object=[]

x = [0, 10, 10,  0, 0]
y = [0,  0, 10, 10, 0]
z = [0.2, 0.2, 0.2, 0.2, 0.2]
layer = gc.Path(x, y, z)

full_object.append(layer)
gc.gui_export(full_object)

x, y, z座標列を用いて,gc.Path()というクラスのインスタンスを作成します.
作成したlayerというインスタンスをfull_objectというリストに追加します.
これは,一般に印刷するパスは複数存在するので,それらを格納するリストです.(詳細は次章で述べます)
印刷するパスを格納したリストをGUIに渡すことで.プレビューに表示されます.

四角形壁の造形

ご存知の通り,3Dプリンタでは,積層をするため,パス一つでは,造形物にはなりません.先ほど作ったパスを縦に積み重ねる必要があります.

for文を用いて,それぞれのパスのz座標列をパスごとに高くすればいいです.

import gcoordinator as gc
full_object = []

for height in range(100):
    x = [0, 10.0, 10.0, 0, 0]
    y = [0, 0, 10.0, 10.0, 0]
    z = [(height+1)*0.2] * 5
    path = gc.Path(x, y, z)
    full_object.append(path)
gc.gui_export(full_object)

forループをする中でheightという変数がループごとに値が1ずつ増えていきます.
それをもちいて,z座標列では,x座標列と同じ項数で値が(height+1)*0.2となる座標列を作成しています.

heightに1を足しているのは,forループで,heightの値が0からスタートしても,z座標は,0.2から始まって欲しいからです.また,0.2は,一般的なレイヤー厚さとして例に挙げています.

円形パスの作成

次に,円を作成してみましょう.これは,先ほどの,四角の頂点を十分大きいものにすれば実現できます.頂点の数が非常に多いので,numpyを用いて,座標列を作成します.

circle_path.png

まずは,1レイヤーだけの円形パスの造形コードを以下に示します.

import numpy as np
import gcoordinator as gc

full_object=[]

arg = np.linspace(0, 2*np.pi, 100)
x = 10 * np.cos(arg)
y = 10 * np.sin(arg)
z = np.full_like(arg, 0.2)
wall = gc.Path(x, y, z)
full_object.append(wall)

gc.gui_export(full_object)

argという変数で,0から2π(単位はrad)までの項数100の角度に関する等差数列を作成しています.
この角度列のcos()がx座標列,sin()がy座標列になっています.z座標列は,argと項数が同じで,値が全て0.2で初期化しています.
これらのx, y, z座標列からPathを作成し,guiにexportしています.

このコードは正確には,円を出力するコードというより,正99角形を出力するコードです.
G-codeには,G3のように弧を印刷するコマンドも存在しますが,現在のG-coordinatorではそれらに対応していないので,このように実装します.

この分割を多くすると,より円に近づき,精密な表現になりますが,その分,G-codeのデータが重たくなります.半径10mm程度の円柱であれば,100分割ほどで十分です.

円柱壁

前節で,作成した円を縦に積み重ねることで,円柱を作成可能です.

四角柱と同様に,for分でループしながらループごとにzの値を大きくしていきます.

import numpy as np
import gcoordinator as gc

full_object=[]
for height in range(100):
    arg = np.linspace(0, 2*np.pi, 100)
    x = 10 * np.cos(arg)
    y = 10 * np.sin(arg)
    z = np.full_like(arg, (height+1) * 0.2)
    wall = gc.Path(x, y, z)
    full_object.append(wall)

gc.gui_export(full_object)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?