G-coordinatorで3Dプリント（印刷設定，G-codeの書き出し）

# 印刷設定

印刷設定は，現段階では，以下の画像に示すパラメータを指定することができます．
![](https://gcoordinator.readthedocs.io/ja/latest/_images/print_settings.png)


これらのパラメータに関していくつかの注意点があります．

* layer_height：押し出し量を計算する時に参照する値であるので，造形ピッチと揃える必要がある

* スピード: 印刷とトラベル速度．mm/minの単位

* ファンスピードは0から255の値

* originの値は，原点からシフト量を示す

* extrusion_multiplierは，樹脂の射出係数


:::note info
一般の3Dプリンタでは，原点をベッドの左手前に設定していますが，G-coordinatorでは，造形の数式を簡単に書くために，原点をベッドの中央に設定しています． 例えば，使用する3Dプリンタのベッドが200mm×200mmの時，その中心の(100, 100) を原点と設定しています．G-coordinator上で(10,-20)の座標が，G-code上では(110, 80)に変換されて記録されます．

:::

__これらの値は，印刷する全てのパスにデフォルトで適用される基本設定です．__

しかし，3Dプリンタの条件をもっと細かく指定したい場合がよくあります．

そうした調整はエディタで行います．

例えば，前回の記事で実装した円柱のパスに関して，ファーストレイヤはベッドの定着をするために，樹脂の射出を多くしたいという状況を想定しましょう．

```diff_python
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)
+   if height == 0:
+       wall.extrusion_multiplier = 1.2
    full_object.append(wall)

gc.gui_export(full_object)
```

この二行を前回のコードに追加することで，heightの値が0の時のみ，wallというパスの射出係数が1.2倍になります．

他にも，以下のように，印刷設定のパラメータツリーで指定した値は射出係数だけに限らず，エディタをもちいて上書きすることが可能になっています．

```python
if height == 0:
    wall.extrusion_multiplier = 1.2 # 射出係数を1.2に
    wall.retraction = True # 次のパスに移動する前のリトラクションをオンに
    wall.print_speed = 3000 # 印刷スピードを3000[mm/sec]に
```

# start, end G-codeの設定

スタート，エンドG-codeの設定は，印刷設定の上のmachine_settingsのボタンを押してポップアップするウィンドウの中で行います．

![](https://gcoordinator.readthedocs.io/ja/latest/_images/machine_settings_button.png)

それぞれの欄に，普段使っているスライサなどのスタート，エンドG-codeをコピーペーストすればいいです．
例えば，Curaなどを使用の方は，以下のページを参考に，Curaのソフトの中のstart, end G-codeをそのまま持ってくるので問題ないです．

https://home3dp.net/cura-start-and-end-gcode/#google_vignette

これらの設定の変更後には，ソフトの再起動が必要です．

![](https://gcoordinator.readthedocs.io/ja/latest/_images/machine_settings.png)

# G-codeの書き出し
これまでのステップで，造形，印刷設定，スタート・エンドG-codeの設定ができました．あとは，G-codeを書き出すだけです．

G-code exportボタンを押せば，G-codeプレビュー画面が表示されます．G-codeの最初の1000行のみがプレビューされます．


![](https://gcoordinator.readthedocs.io/ja/latest/_images/G-code_preview.png)

save G-code file　のボタンを押せば，生成されたG-codeを指定の場所に保存することができます．

:::note warn
G-coordinator ver3.0.0においては，G-codeを保存する際に，拡張子.gcodeまで入力する必要があります．
:::



# gcoordinator(Pythonライブラリ)での印刷設定

:::note info
G-coordinaotr(GUI)を使用の方は読み飛ばして構いません
:::


gcoordinatorライブラリでは，全てのパスに適用される基本設定を以下のjsonで管理を行います．また，個別のパスに対する指定は，上と同じくコード上で行います．

```json
{
    "Print":{
        "nozzle": {
            "nozzle_diameter": 0.4,
            "filament_diameter": 1.75
        },
        "layer": {
            "layer_height": 0.2
        },
        "speed": {
            "print_speed": 10000,
            "travel_speed": 15000
        },
        "origin":{
            "x": 100,
            "y": 100
        },
        "fan_speed": {
            "fan_speed": 255
        },
        "temperature": {
            "nozzle_temperature": 200,
            "bed_temperature": 50
        },
        "travel_option": {
            "retraction": false,
            "retraction_distance": 2.0,
            "unretraction_distance": 2.0,
            "z_hop": false,
            "z_hop_distance": 0.4
        },
        "extrusion_option": {
            "extrusion_multiplier": 1.0,
            "absolute_extrusion": false
        }
    },
    "Hardware": {
        "kinematics": "Cartesian",
        "bed_size": {
            "bed_size_x": 200,
            "bed_size_y": 200,
            "bed_size_z": 205
        }
    },
    "Kinematics": {
        "NozzleTilt": {
            "tilt_code": "B",
            "rot_code": "A",
            "tilt_offset": 0.0,
            "rot_offset": 0
        },
        "BedTiltBC": {
            "tilt_code": "B",
            "rot_code": "C",
            "tilt_offset": 0.0,
            "rot_offset": 0,
            "div_distance": 0.5
        },
        "BedRotate": {
            "rot_code": "C",
            "rot_offset": 0.0,
            "div_distance": 0.5
        }
    }
}

```

このjsonをコピーして，どこかに保存してください．パラメータを調整したjsonファイルは，そのパスを事前に指定することで，グローバルな印刷設定として読み込まれます．

```python
import gcoordinator as gc
gc.load_settings("path/to/base_settings.json")
```


ライブラリ単体で，G-codeを生成するには，スタート，エンドG-codeをそれぞれ別のテキストファイルに保存します．その保存したテキストファイルのパスを指定して，G-codeが生成されます．

その手順は以下の通りです．


ライブラリ単体で，G-codeを生成するには，スタート，エンドG-codeをそれぞれ別のテキストファイルに保存します．その保存したテキストファイルのパスを指定して，G-codeが生成されます．

その手順は以下の通りである．

```python
import gcoordinator as gc

# Create paths and store them in full_object

gcode = gc.GCode(full_object)
gcode.start_gcode("path/to/start_gcode.txt")
gcode.end_gcode("path/to/end_gcode.txt")
```