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?

はじめに

今回はプログラミングで3Dモデルを作れる「PythonSCAD」を使って、2D図形から3Dパーツを作る方法をまとめました。
図形を作る時、「メソッドチェーン」という書き方を使うと、処理の手順が左から右へスラスラ読めて、手順がとても分かりやすくなります。

1. プログラミングで設計するメリット(パラメトリック設計)

寸法を直接数字で書くのではなく、最初に「変数」として定義しておきましょう。
「後からサイズを変えたい!」と思った時に一箇所直すだけで済むため、バグを減らし設計変更に強いプログラムを作成することができます。これをパラメトリック設計と呼びます。単位は工業分野の標準である「ミリメートル (mm)」で考えます。

PythonSCADで図形を作るアプローチとしての2つの書き方

関数型

show(linear_extrude(circle(10), height=2))

マトリョーシカのように「外側から内側を包み込む」書き方です。計算の順序が少し独特ですが、OpenSCADという元の言語に慣れている人には馴染み深いスタイルです。

メソッドチェーン型

circle(10).linear_extrude(height=2).show()

ピリオド(.)でアクションを数珠つなぎにしていく書き方です。「円を作って」→「押し出して」→「表示する」と、左から右へ言葉通りに読めるため、直感的で非常にPythonらしい(Pythonicな)美しい書き方です。

「1行でまとめる」というスマートなアイデアと、「数値をパラメータ(変数)にしておく」という安全な設計ルールを掛け合わせるとかっこいいコードになります。

2. メソッドチェーンとは?

PythonSCADでは、図形に対して「移動する」「色を塗る」「押し出す」といった操作を .(ピリオド)でつないで書くことができます。
例えば、「半径10の円を作って、高さを2に押し出す」処理は次のように1行で書けます。

circle(10).linear_extrude(height=2)

「関数で包み込む」書き方よりも、言葉の順序通りに直感的に読めるのが特徴です。

3. 実践コード:メソッドチェーンで書く3Dモデリング

以下は、変数とメソッドチェーンを活用して、4つの図形を並べた実践的なプログラムです。

# ==========================================
# 2D図形の押し出し(メソッドチェーン記法)
# 作成日: 2026/08/03
# ==========================================

from pythonscad import *

# --- パラメータ設定 (単位: mm) ---
h1 = 2    # 1つ目の円柱の高さ
h2 = 4    # 2つ目の円柱の高さ
h3 = 6    # 3つ目の六角柱の高さ
h4 = 8    # 4つ目の円柱の高さ

# --- メイン処理(メソッドチェーン記法) ---

# 1. 基本の円柱
# 半径10の円を高さh1で押し出し
shape1 = circle(10).linear_extrude(height=h1)

# 2. 直径指定の緑色の円柱
# 直径20の円 -> X方向に25移動 -> 緑色 -> 高さh2で押し出し
shape2 = circle(d=20).translate([25, 0, 0]).color("green").linear_extrude(height=h2)

# 3. ピンク色の正六角形柱
# 半径10で頂点数(fn)を6に指定して六角形にする -> X方向50移動 -> ピンク色 -> 高さh3で押し出し
shape3 = circle(r=10, fn=6).translate([50, 0, 0]).color("pink").linear_extrude(height=h3)

# 4. 滑らかな水色の円柱
# 半径12で頂点数(fn)を100にして滑らかにする -> X方向80移動 -> 水色 -> 高さh4で押し出し
shape4 = circle(r=12, fn=100).translate([80, 0, 0]).color("dodgerblue").linear_extrude(height=h4)

# --- 結合と表示 ---
# 最後に全部のパーツを合体(+)させて、.show() メソッドで画面に出力
(shape1 + shape2 + shape3 + shape4).show()

スクリーンショット 2026-08-09 140613.png

解説ポイント 💡

  1. linear_extrude で2Dを3Dに!
    linear_extrude は2D図形をZ軸方向(高さ方向)に押し出して3Dにする強力な機能です。引数の height は短縮せずに height=... としっかり書きましょう
  2. fn(エフエヌ)で滑らかさをコントロール
    円弧の滑らかさは fn パラメータで決まります。fn=6 と書けば正六角形に、fn=100 と書けば滑らかな円になります。各図形の引数の中で指定してあげてください
  3. 左から右へ読むメソッドチェーン
    circle().translate().color().linear_extrude() のように処理をつなぐことで、「どんな図形を」「どこに動かして」「何色にして」「どう押し出すか」という手順が、まるで工場の組み立てラインのように一目で分かります
  4. 最後は + で結合
    複数のパーツは + 演算子で一つの部品にまとめてから、最後に1回だけ .show() を呼び出して画面に表示しましょう

公式ドキュメント(説明書)を読んで新しい書き方を発見する力は、将来エンジニアやデザイナーになった時にも必ず役立ちます。これからも一緒にプログラミングでものづくりを楽しんでいきましょう。

4. 「関数の中に引数として渡す」書き方

以下、「関数をつなげて書く(.linear_extrude().show() のような書き方)」メソッドチェーンを使わない書き方です。画面に表示する show() は、最後に完成品に対して1回だけ呼び出すお作法です。

「なぜこう動くのか」が分かりやすいように、パラメータ(寸法)を変数にまとめて、コメントを加えたコードに書き直しました。プレビュー画面で確認してみてください。

完成コード(PythonSCAD)

# ==========================================
# 2D図形の押し出しと色分け(PythonSCAD基礎)
# 作成日: 2026/08/03
# ==========================================

from pythonscad import *

# --- パラメータ設定 (単位: mm) ---
# プログラムの最初に寸法を変数として定義しておくと、
# 「どこを変えれば大きさが変わるか」が一目でわかって便利

# 1つ目の円 (デフォルト設定)
r1 = 10         # 半径
h1 = 2          # 押し出し高さ

# 2つ目の円 (直径指定, 緑色)
d2 = 20         # 直径
h2 = 4          # 押し出し高さ
x2 = 25         # X方向の移動距離

# 3つ目の図形 (正六角形, ピンク色)
r3 = 10         # 半径
fn3 = 6         # 頂点の数 (fn=6で六角形になる)
h3 = 6          # 押し出し高さ
x3 = 50         # X方向の移動距離

# 4つ目の図形 (高解像度の円, 水色)
r4 = 12         # 半径
fn4 = 100       # 頂点の数 (数が多いほど滑らかな円になる)
h4 = 8          # 押し出し高さ
x4 = 80         # X方向の移動距離

# --- メイン処理 ---

# 1. 基本の円柱
# circle()で作った2D(平面的)の円を、linear_extrude()でZ軸(高さ)方向に押し出して3Dにします。
shape1 = linear_extrude(circle(r=r1), height=h1)

# 2. 直径指定の緑色の円柱
# translate(動かしたい図形, [X, Y, Z]) で図形を右(X方向)へズラします。
shape2_2d = translate(circle(d=d2), [x2, 0, 0])
shape2_3d = linear_extrude(shape2_2d, height=h2)
shape2 = color(shape2_3d, "green")

# 3. ピンク色の正六角形柱
# fn=6 を指定すると、円が「正六角形」になります。プログラミングならではの面白い工夫。
shape3_2d = translate(circle(r=r3, fn=fn3), [x3, 0, 0])
shape3_3d = linear_extrude(shape3_2d, height=h3)
shape3 = color(shape3_3d, "pink")

# 4. 滑らかな水色の円柱
# fn=100 を指定して、カクカクしない綺麗な円を作ります。3Dプリンタで出力する時によく使います。
shape4_2d = translate(circle(r=r4, fn=fn4), [x4, 0, 0])
shape4_3d = linear_extrude(shape4_2d, height=h4)
shape4 = color(shape4_3d, "dodgerblue")

# --- 結合と表示 ---
# Pythonの + 演算子を使って、バラバラの4つのパーツを1つの3Dモデルに「合体」させます。
result = shape1 + shape2 + shape3 + shape4

# 最後に show() を1回だけ呼び出して、画面にドーンと表示します。
show(result)

スクリーンショット 2026-08-09 144730.png


解説ポイント 💡

  1. linear_extrude() は「押し出し機」
    2Dの図形(circlepolygon)に厚みを持たせて3Dにする魔法の関数です。必ず height=... と書いて高さを指定してあげましょう。
  2. fn(エフエヌ)は「図形のカクカク具合」
    circle(fn=6) と書くと正六角形になるのは大正解!実は3D CADの世界では「円=とても角が多い多角形」として計算されています。だから fn=100 のように大きな数字を入れると、滑らかな円になります。
  3. 関数の正しい呼び出し方
    元のコードのように .linear_extrude() とピリオドで繋ぐとエラーになってしまいます。Pythonでは linear_extrude(中に入れたい図形, height=高さ) のように、「関数の中に、処理したい図形を入れる(包み込む)」という書き方をします。translatecolor も同じルールです。
  4. 最後は + でくっつける
    パーツを一つずつ show() で表示するのではなく、全部のパーツを + 演算子でガチャンとくっつけて(足し算して)から、最後に1回だけ show(できあがったモノ) を呼ぶのがルールです。

PythonSCADコミュニティ・開発者に感謝申し上げます。ありがとうございます。

今回は、ピリオドでつなげるメソッドチェーンでした。いろいろ試して、どのようにつくるか、たくさんためしてみましょう。やったもんがちです。おもしろくなります。

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?