【pythonで動くG-codeビルダー】gcoordinatorから円筒曲面上にパンチングホールパターンを形成してみる
※ 当ページには【広告/PR】を含む場合があります。
2024/04/05
G-coordinator
gcoordinator
円筒曲面上のパンチングホールパターンの数式モデル
Z軸(鉛直)方向の構造周期性を定義する
Eq. (Z軸方向の周期性)
Eq. (1周期分の高さ)
1[rad]
Eq. (1周期分のz座標)
Eq. (z座標)
1周期上の円を定義
Eq. (円周上の座標)
Eq. (t座標の断面長さ)
Eq. (円の中心のt座標)
Eq. (t座標の断面長さ)
gcoordinatorによる数式モデリング
start_gcode.txt
end_gcode.txt
$ touch start_gcode.txt end_gcode.txt
holes_pattern.py
import gcoordinator as gc
import numpy as np
def split_circle(gap_rad, N):
start_pos = 0
end_pos = 0
routes = []
if gap_rad <= 0:
route = np.linspace(0, 2*np.pi, 50)
routes.append(route)
return routes
for gap_num in range(N):
start_pos = 2*np.pi*gap_num/N + gap_rad/2
end_pos = 2*np.pi*(gap_num + 1)/N - gap_rad/2
route = np.linspace(start_pos, end_pos, 100)
routes.append(route)
return routes
def opt_gap(C, H, N, t):
A = H/N
t = t % A
diff = t - H/(2*N)
tmp = (C + diff)*(C - diff)
if C <= np.abs(diff) or tmp <= 0:
return 0
delta = 2*np.sqrt(tmp)
return delta
def rot_holes(H, N, t):
A = H/N
t = t // A
return t
full_object = []
Z_LAYERS = 1000
Z_T = 0.2
H = Z_LAYERS * Z_T #円筒の高さ
C = 3.0 #ホールの半径
N = 12 #Z方向のホールパターン周期
R = 100 #円筒の有効径
SPLIT_N = 42 #円筒周りのホールパターン個数
TILT = np.pi/3 #Z方向に対するホールパターンの配列方向の傾き角
for height in range(Z_LAYERS):
#積層レイヤーのz座標
t = height * Z_T
#マージン(単位円上の周方向距離[mm])
margin = opt_gap(C, H, N, t)
#円筒外径から算出したmargin[rad]
margin = margin/R
routes = split_circle(margin, SPLIT_N)
for route in routes:
x = R * np.cos(route)
y = R * np.sin(route)
z = np.full_like(x, (height+1) * Z_T)
wall = gc.Path(x, y, z)
wall = gc.Transform.rotate_xy(wall, rot_holes(H, N, t) * TILT)
full_object.append(wall)
gc.show(full_object)
gcode = gc.GCode(full_object)
gcode.start_gcode("start_gcode.txt")
gcode.end_gcode("end_gcode.txt")
gcode.save('test.gcode')
$ python holes_pattern.py
まとめ
記事を書いた人
ナンデモ系エンジニア
電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。
カテゴリー