Package: gcoordinator
What is gcoordinator?gcoordinator is a library used to generate G-code for 3D printers using Python.The development started with extracting the G-code generation engine from the GUI application G-coordinator [https://github.com/tomohiron907/G-coordinator].With this library alone, you can perform 3D modeling, preview, G-code generation, and export.In the upcoming version 3 series of the GUI application, the plan is to fully migrate the internal generation engine to this library.InstallationYou can install it using the following command:pipinstallgcoordinatorSince the dependencies include features that require specific versions to function properly, it is strongly recommended to create a virtual environment.
Specifically, you will need pyqtgraph==0.13.2 and matplotlib==3.7.1.What is G-code?In essence, the G-code used in 3D printing primarily consists of a series of coordinates where the nozzle moves.It also includes parameters such as extrusion amount and movement speed, but these are automatically set and calculated within the library.Therefore, when using the library for modeling, the only consideration needed is the three-dimensional coordinate sequence along which the nozzle moves.UsageBelow is a sample code for creating the simplest cylinder using the library:importgcoordinatorasgcimportnumpyasnpfull_object=[]forheightinrange(100):arg=np.linspace(0,2*np.pi,100)x=10*np.cos(arg)y=10*np.sin(arg)z=np.full_like(x,(height+1)*0.2)wall=gc.Path(x,y,z)full_object.append(wall)gc.show(full_object)gcode=gc.GCode(full_object)gcode.start_gcode("PATH TO YOUR START G-CODE")gcode.end_gcode("PATH TO YOUR END G-CODE")gcode.save('PATH OF YOUR G-CODE FILE TO SAVE')modelingforlayerinrange(100):iterating through each layer using a for loop, ranging from layer 0 to layer 99.Next, we set the angle (arg) in a numpy array from 0 to 2π to draw a circle.Since the number of elements is set to 100, an exact regular 99-gon will be modeled.
If the radius is fixed at 10, the x coordinate is calculated as follows:radius×cos(arg)The y coordinate is calculated as follows:radius×sin(arg)z=np.full_like(x,(height+1)*0.2)As for the z coordinate in the height direction, an array with the same number of elements as arg is initialized with a value according to height.The reason for adding 1 is that even if the height starts from 0, we want the first layer to be printed at a height of 0.2.wall=Path(x,y,z)Create a Path from the x, y, and z coordinate sequences calculated above.full_object.append(wall)Add the created Path to a list called full_object.
full_object is a list that stores all the Paths to be printed in the order of printing.Note that the end point of the nth Path and the start point of the n+1th Path are automatically traveled.previewgc.show(full_object)Preview all the Paths stored in full_object.G-code generationgcode=gc.GCode(full_object)Convert all the Paths stored in full_object to G-code.gcode.start_gcode("PATH TO YOUR START G-CODE")gcode.end_gcode("PATH TO YOUR END G-CODE")Specify the G-code to be written at the beginning and end of the G-code.gcode.save('PATH OF YOUR G-CODE FILE TO SAVE')Save the G-code.gcoordinaとは？gcoordinatorは，pythonを用いて3Dプリンタ用G-codeを生成するためのライブラリです．GUIアプリのG-coordinator[https://github.com/tomohiron907/G-coordinator] のG-code生成エンジンの切り出しを発端に開発開始しました．このライブラリ一つで，3次元の造形，プレビュー，G-codeの生成，書き出しが可能です．GUIアプリのver3系列では，内部の生成エンジンを完全にこのライブラリに移行する予定です．インストール以下のコマンドでインストール可能です．pipinstallgcoordinator依存ライブラリの中に，指定のバージョンでないと動作しない機能が含まれるため，仮想環境を作成することを強くお勧めします．具体的には，pyqtgraph==0.13.2, matplotlib==3.7.1が必要です．G-codeとはそもそも，3Dプリンタで用いるG-codeとは，その大部分がノズルが移動していく座標列です．
他にも，押し出し量や移動スピードなどのパラメータも含まれますが，これらはライブラリ内で自動的に設定，計算されます．従って，ライブラリを使用して造形を行う時に，考慮する必要があるのは，ノズルの移動していく3次元の座標列のみです．使い方以下に，最もシンプルな円柱を造形するためのサンプルコードを示します．importgcoordinatorasgcimportnumpyasnpfull_object=[]forheightinrange(100):arg=np.linspace(0,2*np.pi,100)x=10*np.cos(arg)y=10*np.sin(arg)z=np.full_like(x,(height+1)*0.2)wall=gc.Path(x,y,z)full_object.append(wall)gc.show(full_object)gcode=gc.GCode(full_object)gcode.start_gcode("PATH TO YOUR START G-CODE")gcode.end_gcode("PATH TO YOUR END G-CODE")gcode.save('PATH OF YOUR G-CODE FILE TO SAVE')3次元造形forlayerinrange(100):for文で各レイヤーについて繰り返しをしています．0層目から99層目まで繰り返されるイメージです．次に，円を描くために，角度(arg)をnumpy arrayで0から2πの範囲で設定しています．要素数は100としているため，正確には，正99角形が造形されます．
半径は10で固定すると，x座標は，半径×cos(arg)y座標は，半径×sin(arg)より計算できます．z=np.full_like(x,(height+1)*0.2)高さ方向のz座標に関しては，argと同じ要素数のarrayをheightに応じて値を初期化しています．1を足しているのは，heightが0から始まっても，第一層目は高さ0.2の場所に印刷して欲しいからです．wall=Path(x,y,z)上で計算したx,y,z座標列のPathを作成しています．full_object.append(wall)作成したPathをfull_objectというリストに追加しています．
full_objectは，印刷すべき全てのPathを印刷順に格納したリストです．なお，n番目のPathの終点とn+1番目のPathの始点とは，自動でトラベルするようになっています．プレビューgc.show(full_object)full_objectに格納された全てのPathをプレビューします．G-codeの生成gcode=gc.GCode(full_object)full_objectに格納された全てのPathをG-codeに変換します．gcode.start_gcode("PATH TO YOUR START G-CODE")gcode.end_gcode("PATH TO YOUR END G-CODE")G-codeの先頭と末尾に書き込むG-codeを指定します．gcode.save('PATH OF YOUR G-CODE FILE TO SAVE')G-codeを保存します．